Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Initialize | 14575138 | 1084 days ago | IN | 0 ETH | 0.00192718 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 15969949 | 868 days ago | 0.01179517 ETH | ||||
Transfer | 15969949 | 868 days ago | 0.19 ETH | ||||
Transfer | 15969949 | 868 days ago | 0.20179517 ETH | ||||
Deposit | 15369929 | 956 days ago | 0.3 ETH | ||||
Uni V3Swap | 15369929 | 956 days ago | 0.3 ETH | ||||
Transfer | 15267845 | 972 days ago | 0.00385411 ETH | ||||
Transfer | 15267845 | 972 days ago | 0.21339009 ETH | ||||
Transfer | 15267845 | 972 days ago | 0.2172442 ETH | ||||
Transfer | 15236739 | 976 days ago | 0.00538607 ETH | ||||
Transfer | 15236739 | 976 days ago | 0.89691352 ETH | ||||
Transfer | 15236739 | 976 days ago | 0.90229959 ETH | ||||
Deposit | 15225033 | 978 days ago | 0.2 ETH | ||||
Uni V3Swap | 15225033 | 978 days ago | 0.2 ETH | ||||
Deposit | 15169846 | 987 days ago | 0.2 ETH | ||||
Uni V3Swap | 15169846 | 987 days ago | 0.2 ETH | ||||
- | 14942865 | 1025 days ago | 0.00971447 ETH | ||||
- | 14942865 | 1025 days ago | 0.1278456 ETH | ||||
- | 14942865 | 1025 days ago | 0.13756008 ETH | ||||
- | 14931884 | 1027 days ago | 0.2 ETH | ||||
- | 14931884 | 1027 days ago | 0.2 ETH | ||||
- | 14763700 | 1054 days ago | 0.1 ETH | ||||
- | 14763700 | 1054 days ago | 0.1 ETH | ||||
- | 14751958 | 1056 days ago | 0.1 ETH | ||||
- | 14751958 | 1056 days ago | 0.1 ETH | ||||
- | 14727471 | 1060 days ago | 0.01030719 ETH |
Loading...
Loading
Contract Name:
UniV3Adapter02
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 800 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity =0.8.10; pragma abicoder v1; import '../token/IERC20.sol'; import '../token/IWETH.sol'; /// @title Brink UniV3Adapter02 /// @notice Deployed once and used by Brink executors to fulfill swaps. Uses V3SwapRouter from Uniswap. contract UniV3Adapter02 { IWETH public weth; bool public initialized; /// @dev Contract Address of the Uniswap V3SwapRouter address constant V3_SWAP_ROUTER_ADDRESS = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45; /// @dev Max uint uint256 MAX_INT = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; /// @dev Adapter Owner address payable ADAPTER_OWNER = payable(0x71795b2d53Ffbe5b1805FE725538E4f8fBD29e26); /// @dev Ethereum address representations IERC20 private constant _ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); IERC20 private constant _ZERO_ADDRESS = IERC20(0x0000000000000000000000000000000000000000); error NotEnoughETH(); error NotEnoughTokenIn(uint amount); error NotEnoughTokenOut(uint amount); /// @dev initialize the contract with WETH address /// @param _weth Address of weth function initialize (IWETH _weth) external { require(!initialized, 'INITIALIZED'); initialized = true; weth = _weth; } /// @dev Makes a call to the Uniswap V3SwapRouter with swap byte data /// @dev returns the requested tokenOutAmount to Account and keeps the rest /// @param data swap byte data for Uniswap V3SwapRouter /// @param tokenIn Address of the token to be swapped /// @param tokenOut Address of the token to be returned from the swap /// @param tokenOutAmount Amount of tokenOut to transfer to account /// @param account Address of the account to receive the tokenOut /// @param minTokenInArb Minimum amount of tokenIn arbitrage revenue remaining for ADAPTER_OWNER /// @param minTokenOutArb Minimum amount of tokenOut arbitrage revenue remaining for ADAPTER_OWNER function uniV3Swap(bytes memory data, IERC20 tokenIn, IERC20 tokenOut, uint tokenOutAmount, address payable account, uint minTokenInArb, uint minTokenOutArb) external payable { if (isETH(tokenIn)) { tokenIn = IERC20(address(weth)); weth.deposit{ value: address(this).balance }(); } _routerApproveMax(tokenIn); assembly { let result := call(gas(), V3_SWAP_ROUTER_ADDRESS, 0, add(data, 0x20), mload(data), 0, 0) if eq(result, 0) { returndatacopy(0, 0, returndatasize()) revert(0, returndatasize()) } } if (isETH(tokenOut)) { uint wethBal = weth.balanceOf(address(this)); weth.withdraw(wethBal); if (wethBal < tokenOutAmount) { revert NotEnoughETH(); } account.transfer(tokenOutAmount); uint ethBalRemaining = address(this).balance; if (ethBalRemaining < minTokenOutArb) { revert NotEnoughTokenOut(ethBalRemaining); } ADAPTER_OWNER.transfer(ethBalRemaining); } else { tokenOut.transfer(account, tokenOutAmount); uint tokenOutBalRemaining = tokenOut.balanceOf(address(this)); if (tokenOutBalRemaining < minTokenOutArb) { revert NotEnoughTokenOut(tokenOutBalRemaining); } tokenOut.transfer(ADAPTER_OWNER, tokenOutBalRemaining); } uint tokenInBalRemaining = tokenIn.balanceOf(address(this)); if (tokenInBalRemaining < minTokenInArb) { revert NotEnoughTokenIn(tokenInBalRemaining); } else if (tokenInBalRemaining > 0) { tokenIn.transfer(ADAPTER_OWNER, tokenInBalRemaining); } } function _routerApproveMax(IERC20 token) internal { if (token.allowance(address(this), V3_SWAP_ROUTER_ADDRESS) < MAX_INT) { token.approve(V3_SWAP_ROUTER_ADDRESS, MAX_INT); } } /// @dev Checks if IERC20 token address is an ETH representation /// @param token address of a token function isETH(IERC20 token) internal pure returns (bool) { return (token == _ZERO_ADDRESS || token == _ETH_ADDRESS); } receive() external payable { } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity =0.8.10; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity =0.8.10; interface IWETH { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function balanceOf(address) external view returns (uint); function allowance(address, address) external view returns (uint); receive() external payable; function deposit() external payable; function withdraw(uint wad) external; function totalSupply() external view returns (uint); function approve(address guy, uint wad) external returns (bool); function transfer(address dst, uint wad) external returns (bool); function transferFrom(address src, address dst, uint wad) external returns (bool); }
{ "optimizer": { "enabled": true, "runs": 800 }, "metadata": { "bytecodeHash": "none" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"NotEnoughETH","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NotEnoughTokenIn","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NotEnoughTokenOut","type":"error"},{"inputs":[{"internalType":"contract IWETH","name":"_weth","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"tokenOutAmount","type":"uint256"},{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"minTokenInArb","type":"uint256"},{"internalType":"uint256","name":"minTokenOutArb","type":"uint256"}],"name":"uniV3Swap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600019600155600280546001600160a01b0319167371795b2d53ffbe5b1805fe725538e4f8fbd29e2617905534801561003c57600080fd5b5061089d8061004c6000396000f3fe6080604052600436106100435760003560e01c8063158ef93e1461004f5780633fc8cef31461008457806392be7035146100c0578063c4d66de81461019457600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5060005461007090600160a01b900460ff1681565b604080519115158252519081900360200190f35b34801561009057600080fd5b506000546100a4906001600160a01b031681565b604080516001600160a01b039092168252519081900360200190f35b610192600480360360e08110156100d657600080fd5b8101906020810181356401000000008111156100f157600080fd5b82018360208201111561010357600080fd5b8035906020019184600183028401116401000000008311171561012557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135811693604081013593506060810135909116915060808101359060a001356101c7565b005b3480156101a057600080fd5b50610192600480360360208110156101b757600080fd5b50356001600160a01b03166106a9565b6101d086610749565b15610237576000805460408051630d0e30db60e41b815290516001600160a01b039092169850889263d0e30db0924792600480820193929182900301818588803b15801561021d57600080fd5b505af1158015610231573d6000803e3d6000fd5b50505050505b61024086610783565b600080885160208a0160007368b3465833fb72a70ecdf485e0e4c7bd8665fc455af180610271573d6000803e3d6000fd5b5061027b85610749565b156104135760008054604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a08231916024808201926020929091908290030181865afa1580156102d1573d6000803e3d6000fd5b505050506040513d60208110156102e757600080fd5b50516000805460408051632e1a7d4d60e01b81526004810185905290519394506001600160a01b0390911692632e1a7d4d9260248084019391929182900301818387803b15801561033757600080fd5b505af115801561034b573d6000803e3d6000fd5b505050508481101561037057604051632c1d501360e11b815260040160405180910390fd5b6040516001600160a01b0385169086156108fc029087906000818181858888f193505050501580156103a6573d6000803e3d6000fd5b5047828110156103d1576040805163a1e01af560e01b81526004810183905290519081900360240190fd5b6002546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561040b573d6000803e3d6000fd5b50505061058e565b846001600160a01b031663a9059cbb84866040518363ffffffff1660e01b815260040180836001600160a01b03168152602001828152602001925050506020604051808303816000875af115801561046f573d6000803e3d6000fd5b505050506040513d602081101561048557600080fd5b5050604080516370a0823160e01b815230600482015290516000916001600160a01b038816916370a08231916024808201926020929091908290030181865afa1580156104d6573d6000803e3d6000fd5b505050506040513d60208110156104ec57600080fd5b5051905081811015610519576040805163a1e01af560e01b81526004810183905290519081900360240190fd5b6002546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519188169163a9059cbb9160448082019260209290919082900301816000875af1158015610574573d6000803e3d6000fd5b505050506040513d602081101561058a57600080fd5b5050505b6000866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381865afa1580156105e2573d6000803e3d6000fd5b505050506040513d60208110156105f857600080fd5b50519050828110156106255760408051632574f1c160e11b81526004810183905290519081900360240190fd5b801561069f576002546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519189169163a9059cbb9160448082019260209290919082900301816000875af1158015610686573d6000803e3d6000fd5b505050506040513d602081101561069c57600080fd5b50505b5050505050505050565b600054600160a01b900460ff1615610708576040805162461bcd60e51b815260206004820152600b60248201527f494e495449414c495a4544000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080546001600160a01b039092167fffffffffffffffffffffff00000000000000000000000000000000000000000090921691909117600160a01b179055565b60006001600160a01b038216158061077d57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b92915050565b60015460408051636eb1769f60e11b81523060048201527368b3465833fb72a70ecdf485e0e4c7bd8665fc45602482015290516001600160a01b0384169163dd62ed3e9160448083019260209291908290030181865afa1580156107eb573d6000803e3d6000fd5b505050506040513d602081101561080157600080fd5b5051101561088d576001546040805163095ea7b360e01b81527368b3465833fb72a70ecdf485e0e4c7bd8665fc4560048201526024810192909252516001600160a01b0383169163095ea7b391604480830192602092919082900301816000875af1158015610874573d6000803e3d6000fd5b505050506040513d602081101561088a57600080fd5b50505b5056fea164736f6c634300080a000a
Deployed Bytecode
0x6080604052600436106100435760003560e01c8063158ef93e1461004f5780633fc8cef31461008457806392be7035146100c0578063c4d66de81461019457600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5060005461007090600160a01b900460ff1681565b604080519115158252519081900360200190f35b34801561009057600080fd5b506000546100a4906001600160a01b031681565b604080516001600160a01b039092168252519081900360200190f35b610192600480360360e08110156100d657600080fd5b8101906020810181356401000000008111156100f157600080fd5b82018360208201111561010357600080fd5b8035906020019184600183028401116401000000008311171561012557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550506001600160a01b038335811694506020840135811693604081013593506060810135909116915060808101359060a001356101c7565b005b3480156101a057600080fd5b50610192600480360360208110156101b757600080fd5b50356001600160a01b03166106a9565b6101d086610749565b15610237576000805460408051630d0e30db60e41b815290516001600160a01b039092169850889263d0e30db0924792600480820193929182900301818588803b15801561021d57600080fd5b505af1158015610231573d6000803e3d6000fd5b50505050505b61024086610783565b600080885160208a0160007368b3465833fb72a70ecdf485e0e4c7bd8665fc455af180610271573d6000803e3d6000fd5b5061027b85610749565b156104135760008054604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a08231916024808201926020929091908290030181865afa1580156102d1573d6000803e3d6000fd5b505050506040513d60208110156102e757600080fd5b50516000805460408051632e1a7d4d60e01b81526004810185905290519394506001600160a01b0390911692632e1a7d4d9260248084019391929182900301818387803b15801561033757600080fd5b505af115801561034b573d6000803e3d6000fd5b505050508481101561037057604051632c1d501360e11b815260040160405180910390fd5b6040516001600160a01b0385169086156108fc029087906000818181858888f193505050501580156103a6573d6000803e3d6000fd5b5047828110156103d1576040805163a1e01af560e01b81526004810183905290519081900360240190fd5b6002546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561040b573d6000803e3d6000fd5b50505061058e565b846001600160a01b031663a9059cbb84866040518363ffffffff1660e01b815260040180836001600160a01b03168152602001828152602001925050506020604051808303816000875af115801561046f573d6000803e3d6000fd5b505050506040513d602081101561048557600080fd5b5050604080516370a0823160e01b815230600482015290516000916001600160a01b038816916370a08231916024808201926020929091908290030181865afa1580156104d6573d6000803e3d6000fd5b505050506040513d60208110156104ec57600080fd5b5051905081811015610519576040805163a1e01af560e01b81526004810183905290519081900360240190fd5b6002546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519188169163a9059cbb9160448082019260209290919082900301816000875af1158015610574573d6000803e3d6000fd5b505050506040513d602081101561058a57600080fd5b5050505b6000866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381865afa1580156105e2573d6000803e3d6000fd5b505050506040513d60208110156105f857600080fd5b50519050828110156106255760408051632574f1c160e11b81526004810183905290519081900360240190fd5b801561069f576002546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519189169163a9059cbb9160448082019260209290919082900301816000875af1158015610686573d6000803e3d6000fd5b505050506040513d602081101561069c57600080fd5b50505b5050505050505050565b600054600160a01b900460ff1615610708576040805162461bcd60e51b815260206004820152600b60248201527f494e495449414c495a4544000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080546001600160a01b039092167fffffffffffffffffffffff00000000000000000000000000000000000000000090921691909117600160a01b179055565b60006001600160a01b038216158061077d57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b92915050565b60015460408051636eb1769f60e11b81523060048201527368b3465833fb72a70ecdf485e0e4c7bd8665fc45602482015290516001600160a01b0384169163dd62ed3e9160448083019260209291908290030181865afa1580156107eb573d6000803e3d6000fd5b505050506040513d602081101561080157600080fd5b5051101561088d576001546040805163095ea7b360e01b81527368b3465833fb72a70ecdf485e0e4c7bd8665fc4560048201526024810192909252516001600160a01b0383169163095ea7b391604480830192602092919082900301816000875af1158015610874573d6000803e3d6000fd5b505050506040513d602081101561088a57600080fd5b50505b5056fea164736f6c634300080a000a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.