Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 6 from a total of 6 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Exec Batch With ... | 23870302 | 38 hrs ago | IN | 0 ETH | 0.00060108 | ||||
| Exec Single With... | 23870223 | 38 hrs ago | IN | 0 ETH | 0.00015879 | ||||
| Exec Single With... | 23870221 | 38 hrs ago | IN | 0 ETH | 0.00015354 | ||||
| Exec Single With... | 23870026 | 39 hrs ago | IN | 0 ETH | 0.00009471 | ||||
| Exec Single With... | 23870024 | 39 hrs ago | IN | 0 ETH | 0.00009547 | ||||
| Transfer | 23869843 | 39 hrs ago | IN | 0.0001 ETH | 0.00001803 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Deposit | 23869843 | 39 hrs ago | 0.0001 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BatchUniV2V3Router
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/// Минимальный интерфейс ERC20 (transfer + balanceOf)
interface IERC20 {
function transfer(address to, uint256 value) external returns (bool);
function balanceOf(address who) external view returns (uint256);
}
/// Uniswap V2 пара
interface IUniswapV2Pair {
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
}
/// Uniswap V3 пул (только swap)
interface IUniswapV3Pool {
function swap(
address recipient,
bool zeroForOne,
int256 amountSpecified,
uint160 sqrtPriceLimitX96,
bytes calldata data
) external returns (int256 amount0, int256 amount1);
}
/// Callback интерфейс V3
interface IUniswapV3SwapCallback {
function uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes calldata data
) external;
}
interface IWETH {
function deposit() external payable;
function withdraw(uint256) external;
function transfer(address to, uint256 value) external returns (bool);
}
/// @title BatchUniV2V3Router
/// @notice Универсальный роутер для Uniswap V2/V3 c батчами маршрутов.
///
/// Формат одного шага (step) в routeData:
///
/// [ header (1) | tokenIn (20) | tokenOut (20) | pool (20) | (опц.) recipient (20) ]
///
/// header (битовая маска):
/// 0x01 = FLAG_DEX_V3 (0 = V2, 1 = V3)
/// 0x02 = FLAG_ZERO_FOR_ONE (для V3: направление swap)
/// 0x04 = FLAG_HAS_RECIP (есть recipient; если нет — recipient = address(this))
///
/// Публичные функции:
/// - execSingleWithMin(amountIn, routeData, minOut)
/// - execBatchWithMin(amountsIn[], routesData[], minOuts[])
///
/// Всё лежит на контракте, вызывать может только owner.
contract BatchUniV2V3Router is IUniswapV3SwapCallback {
// =================== errors ===================
error NotOwner();
error ZeroOutput();
error InsufficientBalance();
error UnauthorizedPool();
error Slippage();
event Wrap(uint256 amount);
// =================== owner ====================
address public immutable WETH;
address public owner;
modifier onlyOwner() {
if (msg.sender != owner) revert NotOwner();
_;
}
constructor(address _weth, address _owner) {
WETH = _weth;
owner = _owner;
}
receive() external payable {
if (msg.value == 0) return;
if (msg.sender == WETH || msg.sender == owner) return;
IWETH(WETH).deposit{value: msg.value}();
emit Wrap(msg.value);
}
function setOwner(address newOwner) external onlyOwner {
owner = newOwner;
}
// ============ константы для V3 ============
uint160 internal constant MIN_SQRT_RATIO =
4295128739;
uint160 internal constant MAX_SQRT_RATIO =
1461446703485210103287273052203988822378723970342;
// header flags
uint8 private constant FLAG_DEX_V3 = 0x01;
uint8 private constant FLAG_ZERO_FOR_ONE = 0x02;
uint8 private constant FLAG_HAS_RECIP = 0x04;
// активный V3-pool для callback
address private _currentPool;
// ============ PUBLIC EXECUTION ============
/// @notice Один маршрут с проверкой minAmountOut.
function execSingleWithMin(
uint256 amountIn,
bytes calldata routeData,
uint256 minAmountOut
) external onlyOwner returns (uint256 amountOut) {
amountOut = _executeRoute(amountIn, routeData);
if (amountOut < minAmountOut) revert Slippage();
}
/// @notice Батч маршрутов в одной транзакции.
/// @dev minAmountsOut:
/// - длина = 0 -> без проверки slippage
/// - длина = N -> по каждому маршруту out >= minOut[i]
function execBatchWithMin(
uint256[] calldata amountsIn,
bytes[] calldata routesData,
uint256[] calldata minAmountsOut
) external onlyOwner returns (uint256[] memory amountsOut) {
uint256 len = amountsIn.length;
if (len == 0 || len != routesData.length) revert();
if (minAmountsOut.length != 0 && minAmountsOut.length != len) {
revert();
}
amountsOut = new uint256[](len);
for (uint256 i; i < len; ) {
uint256 out = _executeRoute(amountsIn[i], routesData[i]);
if (minAmountsOut.length != 0 && out < minAmountsOut[i]) {
revert Slippage();
}
amountsOut[i] = out;
unchecked { ++i; }
}
}
// ============ CORE: выполнение одного маршрута ============
/// @dev amountIn — вход для первого шага; дальше каждый шаг берёт output предыдущего.
function _executeRoute(
uint256 amountIn,
bytes calldata routeData
) internal returns (uint256 amountOutFinal) {
uint256 len = routeData.length;
// минимальный размер: header (1) + 3 адреса (3*20)
if (len < 1 + 20 * 3) revert();
uint256 offset = 0;
uint256 amount = amountIn;
bool firstStep = true;
while (offset < len) {
(
uint8 header,
address tokenIn,
address tokenOut,
address pool,
address recipient,
uint256 newOffset
) = _decodeStep(routeData, offset, len);
offset = newOffset;
if (firstStep) {
uint256 bal = IERC20(tokenIn).balanceOf(address(this));
if (bal < amountIn) revert InsufficientBalance();
firstStep = false;
}
bool isV3 = (header & FLAG_DEX_V3) != 0;
bool zeroForOne = (header & FLAG_ZERO_FOR_ONE) != 0;
if (recipient == address(0)) {
recipient = address(this);
}
if (isV3) {
amount = _swapV3ExactIn(
pool,
tokenIn,
tokenOut,
amount,
zeroForOne,
0,
recipient
);
} else {
amount = _swapV2(
pool,
tokenIn,
tokenOut,
amount,
recipient
);
}
}
amountOutFinal = amount;
}
// ============ Декодинг одного шага ============
function _decodeStep(
bytes calldata data,
uint256 offset,
uint256 totalLen
)
internal
pure
returns (
uint8 header,
address tokenIn,
address tokenOut,
address pool,
address recipient,
uint256 newOffset
)
{
// header (1 байт)
if (offset + 1 > totalLen) revert();
assembly {
header := byte(0, calldataload(add(data.offset, offset)))
}
offset += 1;
// минимум 3 адреса: tokenIn, tokenOut, pool
uint256 minNeed = 20 * 3;
bool hasRecipient = (header & FLAG_HAS_RECIP) != 0;
if (hasRecipient) {
minNeed += 20;
}
if (offset + minNeed > totalLen) revert();
tokenIn = _bytesToAddress(data, offset);
offset += 20;
tokenOut = _bytesToAddress(data, offset);
offset += 20;
pool = _bytesToAddress(data, offset);
offset += 20;
recipient = address(0);
if (hasRecipient) {
recipient = _bytesToAddress(data, offset);
offset += 20;
}
newOffset = offset;
}
function _bytesToAddress(
bytes calldata data,
uint256 start
) internal pure returns (address addr) {
assembly {
let ptr := mload(0x40)
mstore(ptr, 0)
calldatacopy(add(ptr, 12), add(data.offset, start), 20)
addr := mload(ptr)
}
}
// ============ Uniswap V2 swap ============
function _swapV2(
address pair,
address tokenIn,
address tokenOut,
uint256 amountIn,
address recipient
) internal returns (uint256 amountOut) {
IUniswapV2Pair p = IUniswapV2Pair(pair);
(uint112 reserve0, uint112 reserve1,) = p.getReserves();
address token0 = p.token0();
address token1 = p.token1();
bool zeroForOne;
uint112 reserveIn;
uint112 reserveOut;
if (tokenIn == token0 && tokenOut == token1) {
zeroForOne = true;
reserveIn = reserve0;
reserveOut = reserve1;
} else if (tokenIn == token1 && tokenOut == token0) {
zeroForOne = false;
reserveIn = reserve1;
reserveOut = reserve0;
} else {
revert ZeroOutput();
}
// формула Uniswap V2:
// out = amountInWithFee * R_out / (R_in*1000 + amountInWithFee)
uint256 amountInWithFee = amountIn * 997;
amountOut = (amountInWithFee * uint256(reserveOut))
/ (uint256(reserveIn) * 1000 + amountInWithFee);
if (amountOut == 0) revert ZeroOutput();
// платим пулу tokenIn
_safeTransfer(tokenIn, pair, amountIn);
(uint256 amount0Out, uint256 amount1Out) = zeroForOne
? (uint256(0), amountOut)
: (amountOut, uint256(0));
p.swap(amount0Out, amount1Out, recipient, new bytes(0));
}
// ============ Uniswap V3 swap (Exact Input) ============
function _swapV3ExactIn(
address pool,
address tokenIn,
address /*tokenOut*/,
uint256 amountIn,
bool zeroForOne,
uint160 sqrtPriceLimitX96,
address recipient
) internal returns (uint256 amountOut) {
uint160 limit = sqrtPriceLimitX96;
if (limit == 0) {
limit = zeroForOne
? MIN_SQRT_RATIO + 1
: MAX_SQRT_RATIO - 1;
}
_currentPool = pool;
(int256 amount0Delta, int256 amount1Delta) = IUniswapV3Pool(pool).swap(
recipient,
zeroForOne,
int256(amountIn), // exact input
limit,
abi.encode(tokenIn)
);
_currentPool = address(0);
int256 outDelta = zeroForOne ? amount1Delta : amount0Delta;
if (outDelta >= 0) revert ZeroOutput();
amountOut = uint256(-outDelta);
}
// ============ Uniswap V3 callback ============
function uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes calldata data
) external override {
if (msg.sender != _currentPool) revert UnauthorizedPool();
address tokenIn = abi.decode(data, (address));
// В exact input одна из дельт > 0 — это то, что мы должны заплатить пулу
if (amount0Delta > 0) {
_safeTransfer(tokenIn, msg.sender, uint256(amount0Delta));
} else if (amount1Delta > 0) {
_safeTransfer(tokenIn, msg.sender, uint256(amount1Delta));
}
}
// ============ Safe ERC20 transfer ============
/// @dev Безопасный ERC20 transfer для нестандартных токенов (USDT и т.п.).
/// Успех: call не ревертит И (нет данных, либо decode(data) == true).
function _safeTransfer(address token, address to, uint256 value) internal {
(bool success, bytes memory data) =
token.call(abi.encodeWithSelector(IERC20(token).transfer.selector, to, value));
if (!success || (data.length != 0 && !abi.decode(data, (bool)))) {
revert InsufficientBalance(); // можно заменить на отдельную ошибку TRANSFER_FAILED
}
}
// ============ Админ: вывод токенов ============
function withdraw(
address token,
address to,
uint256 amount
) external onlyOwner {
_safeTransfer(token, to, amount);
}
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"Slippage","type":"error"},{"inputs":[],"name":"UnauthorizedPool","type":"error"},{"inputs":[],"name":"ZeroOutput","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Wrap","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bytes[]","name":"routesData","type":"bytes[]"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"execBatchWithMin","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"bytes","name":"routeData","type":"bytes"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"execSingleWithMin","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a03461009557601f610f7638819003918201601f19168301916001600160401b0383118484101761009957808492604094855283398101031261009557610052602061004b836100ad565b92016100ad565b6080919091525f80546001600160a01b0319166001600160a01b03909216919091179055604051610eb490816100c282396080518181816102ea01526105d50152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100955756fe60806040526004361015610022575b3615610018575f80fd5b6100206105cd565b005b5f3560e01c806313af4035146100915780631ee041821461008c5780636352f122146100875780638da5cb5b14610082578063ad5c46481461007d578063d9caed12146100785763fa461e330361000e57610361565b610319565b6102d5565b6102ae565b61022f565b61016d565b346100ee5760203660031901126100ee576004356100ae816100f2565b5f546001600160a01b031633036100df575f80546001600160a01b0319166001600160a01b03909216919091179055005b6330cd747160e01b5f5260045ffd5b5f80fd5b6001600160a01b038116036100ee57565b9181601f840112156100ee5782359167ffffffffffffffff83116100ee576020808501948460051b0101116100ee57565b60206040818301928281528451809452019201905f5b8181106101575750505090565b825184526020938401939092019160010161014a565b346100ee5760603660031901126100ee5760043567ffffffffffffffff81116100ee5761019e903690600401610103565b60243567ffffffffffffffff81116100ee576101be903690600401610103565b9190926044359267ffffffffffffffff84116100ee576101fd946101e96101f1953690600401610103565b949093610403565b60405191829182610134565b0390f35b9181601f840112156100ee5782359167ffffffffffffffff83116100ee57602083818601950101116100ee57565b346100ee5760603660031901126100ee5760043560243567ffffffffffffffff81116100ee57610263903690600401610201565b5f546044359392906001600160a01b031633036100df57610283926106ab565b90811061029557604051908152602090f35b6307dd37f760e41b5f5260045ffd5b5f9103126100ee57565b346100ee575f3660031901126100ee575f546040516001600160a01b039091168152602090f35b346100ee575f3660031901126100ee576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100ee5760603660031901126100ee57600435610336816100f2565b602435610342816100f2565b5f5460443591906001600160a01b031633036100df576100209261081d565b346100ee5760603660031901126100ee5760243560043560443567ffffffffffffffff81116100ee57610398903690600401610201565b6001546001600160a01b031633036103f45781602091810103126100ee57356103c0816100f2565b6001600160a01b0316915f8213156103de575061002091339061081d565b90505f81136103e957005b61002091339061081d565b6364d89ec160e11b5f5260045ffd5b5f5491959094939290916001600160a01b031633036100df57851580156104b4575b6100ee578115159283806104aa575b6100ee5761044187610511565b965f5b81811061045657505050505050505090565b61047661046482848b610557565b3561047083868861056c565b916106ab565b908680610496575b6102955760019161048f828c6105ae565b5201610444565b506104a281878a610557565b35821061047e565b5086831415610434565b5082861415610425565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176104f457604052565b6104be565b67ffffffffffffffff81116104f45760051b60200190565b9061051b826104f9565b61052860405191826104d2565b8281528092610539601f19916104f9565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b91908110156105675760051b0190565b610543565b91908110156105675760051b81013590601e19813603018212156100ee57019081359167ffffffffffffffff83116100ee5760200182360381136100ee579190565b80518210156105675760209160051b010190565b6040513d5f823e3d90fd5b341561069a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163381148015610687575b61068457803b156100ee575f60049160405192838092630d0e30db60e41b825234905af1801561067f57610665575b506040513481527f6ab8618a8d2bed35d6da9265bec63e1c0c1606d6af521108d34c9331722eb7ff90602090a1565b806106735f610679936104d2565b806102a4565b5f610636565b6105c2565b50565b505f546001600160a01b03163314610607565b565b908160209103126100ee575190565b90603d83106100ee575f9282906001905b8086106106cc5750505050905090565b91936106dc8385978185976108e5565b94959290809492949597610739575b6001600160a01b031615610731575b600186161561071f575060026107139516151592610d45565b945b92909493916106bc565b919261072b9550610aa6565b94610715565b3094506106fa565b6040516370a0823160e01b81523060048201529099506020816024816001600160a01b0387165afa801561067f578b915f9161078c575b501061077d575f986106eb565b631e9acf1760e31b5f5260045ffd5b6107ad915060203d81116107b3575b6107a581836104d2565b81019061069c565b5f610770565b503d61079b565b67ffffffffffffffff81116104f457601f01601f191660200190565b3d15610800573d906107e7826107ba565b916107f560405193846104d2565b82523d5f602084013e565b606090565b908160209103126100ee575180151581036100ee5790565b60405163a9059cbb60e01b602082019081526001600160a01b0390931660248201526044808201949094529283525f92839290839061085d6064826104d2565b51925af16108696107d6565b901590811561087a575b5061077d57565b805180151592508261088f575b50505f610873565b6108aa9250906020806108a6938301019101610805565b1590565b5f80610887565b634e487b7160e01b5f52601160045260245ffd5b90601482018092116108d357565b6108b1565b919082018092116108d357565b90509290919260018301928381116108d3578484116100ee578101355f1a9360048516151590603c82610974575b85018086116108d357116100ee5761093461092e8584610e6a565b946108c5565b9261094261092e8585610e6a565b9261095061092e8583610e6a565b905f9361095b575090565b8161097192945061096b91610e6a565b926108c5565b90565b506050610913565b51906001600160701b03821682036100ee57565b908160609103126100ee576109a48161097c565b9160406109b36020840161097c565b92015163ffffffff811681036100ee5790565b908160209103126100ee5751610971816100f2565b906103e58202918083046103e514901517156108d357565b906103e88202918083046103e814901517156108d357565b818102929181159184041417156108d357565b8115610a28570490565b634e487b7160e01b5f52601260045260245ffd5b60405190610a4b6020836104d2565b5f808352366020840137565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b909260809261097195948352602083015260018060a01b031660408201528160608201520190610a57565b604051630240bc6b60e21b81529095946001600160a01b038716949093919291606084600481895afa90811561067f575f945f92610cb1575b50604051630dfe168160e01b81526020816004818b5afa90811561067f575f91610c92575b5060405163d21220a760e01b8152906020826004818c5afa91821561067f575f92610c61575b506001600160a01b03908116919086169081831480610c4c575b15610c0f5750505050610b8b90610b85600195915b610b806001600160701b03610b7981610b71896109db565b941684610a0b565b94166109f3565b6108d8565b90610a1e565b968715610c0057610b9b9261081d565b15610bf7575f9084925b610bad610a3c565b93813b156100ee575f8094610bd86040519788968795869463022c0d9f60e01b865260048601610a7b565b03925af1801561067f57610be95750565b806106735f61069a936104d2565b83905f92610ba5565b63730c31bf60e11b5f5260045ffd5b9396936001600160a01b0316149182610c39575b505015610c0057610b8b90610b855f9591610b59565b6001600160a01b03161490505f80610c23565b506001600160a01b0384811690821614610b44565b610c8491925060203d602011610c8b575b610c7c81836104d2565b8101906109c6565b905f610b2a565b503d610c72565b610cab915060203d602011610c8b57610c7c81836104d2565b5f610b04565b909450610cd6915060603d606011610cdf575b610cce81836104d2565b810190610990565b5090935f610adf565b503d610cc4565b91908260409103126100ee576020825192015190565b6001600160a01b039182168152911515602083015260408201929092529116606082015260a06080820181905261097192910190610a57565b600160ff1b81146108d3575f0390565b835f604094939596828214610e4657610dc6610d9c610daa6401000276a4995b600180546001600160a01b0319166001600160a01b038a1617905589516001600160a01b0390911660208201529182906040820190565b03601f1981018352826104d2565b8751630251596160e31b81529889978896879560048701610cfc565b03926001600160a01b03165af191821561067f575f915f93610e13575b50600180546001600160a01b031916905515610e0c57505b5f811215610c005761097190610d35565b9050610dfb565b909250610e38915060403d604011610e3f575b610e3081836104d2565b810190610ce6565b915f610de3565b503d610e26565b610dc6610d9c610daa73fffd8963efd1fc6a506488495d951d5263988d2599610d65565b6040515f81529160149101600c830137519056fea26469706673582212206d81857c93910cfcf6acc3451a6023d9a439781f5f6fbe15a612f79a54e0469e64736f6c634300081e0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000063971c50d58ba1c98b377e460588b3c25e8ca32b
Deployed Bytecode
0x60806040526004361015610022575b3615610018575f80fd5b6100206105cd565b005b5f3560e01c806313af4035146100915780631ee041821461008c5780636352f122146100875780638da5cb5b14610082578063ad5c46481461007d578063d9caed12146100785763fa461e330361000e57610361565b610319565b6102d5565b6102ae565b61022f565b61016d565b346100ee5760203660031901126100ee576004356100ae816100f2565b5f546001600160a01b031633036100df575f80546001600160a01b0319166001600160a01b03909216919091179055005b6330cd747160e01b5f5260045ffd5b5f80fd5b6001600160a01b038116036100ee57565b9181601f840112156100ee5782359167ffffffffffffffff83116100ee576020808501948460051b0101116100ee57565b60206040818301928281528451809452019201905f5b8181106101575750505090565b825184526020938401939092019160010161014a565b346100ee5760603660031901126100ee5760043567ffffffffffffffff81116100ee5761019e903690600401610103565b60243567ffffffffffffffff81116100ee576101be903690600401610103565b9190926044359267ffffffffffffffff84116100ee576101fd946101e96101f1953690600401610103565b949093610403565b60405191829182610134565b0390f35b9181601f840112156100ee5782359167ffffffffffffffff83116100ee57602083818601950101116100ee57565b346100ee5760603660031901126100ee5760043560243567ffffffffffffffff81116100ee57610263903690600401610201565b5f546044359392906001600160a01b031633036100df57610283926106ab565b90811061029557604051908152602090f35b6307dd37f760e41b5f5260045ffd5b5f9103126100ee57565b346100ee575f3660031901126100ee575f546040516001600160a01b039091168152602090f35b346100ee575f3660031901126100ee576040517f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168152602090f35b346100ee5760603660031901126100ee57600435610336816100f2565b602435610342816100f2565b5f5460443591906001600160a01b031633036100df576100209261081d565b346100ee5760603660031901126100ee5760243560043560443567ffffffffffffffff81116100ee57610398903690600401610201565b6001546001600160a01b031633036103f45781602091810103126100ee57356103c0816100f2565b6001600160a01b0316915f8213156103de575061002091339061081d565b90505f81136103e957005b61002091339061081d565b6364d89ec160e11b5f5260045ffd5b5f5491959094939290916001600160a01b031633036100df57851580156104b4575b6100ee578115159283806104aa575b6100ee5761044187610511565b965f5b81811061045657505050505050505090565b61047661046482848b610557565b3561047083868861056c565b916106ab565b908680610496575b6102955760019161048f828c6105ae565b5201610444565b506104a281878a610557565b35821061047e565b5086831415610434565b5082861415610425565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176104f457604052565b6104be565b67ffffffffffffffff81116104f45760051b60200190565b9061051b826104f9565b61052860405191826104d2565b8281528092610539601f19916104f9565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b91908110156105675760051b0190565b610543565b91908110156105675760051b81013590601e19813603018212156100ee57019081359167ffffffffffffffff83116100ee5760200182360381136100ee579190565b80518210156105675760209160051b010190565b6040513d5f823e3d90fd5b341561069a577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03163381148015610687575b61068457803b156100ee575f60049160405192838092630d0e30db60e41b825234905af1801561067f57610665575b506040513481527f6ab8618a8d2bed35d6da9265bec63e1c0c1606d6af521108d34c9331722eb7ff90602090a1565b806106735f610679936104d2565b806102a4565b5f610636565b6105c2565b50565b505f546001600160a01b03163314610607565b565b908160209103126100ee575190565b90603d83106100ee575f9282906001905b8086106106cc5750505050905090565b91936106dc8385978185976108e5565b94959290809492949597610739575b6001600160a01b031615610731575b600186161561071f575060026107139516151592610d45565b945b92909493916106bc565b919261072b9550610aa6565b94610715565b3094506106fa565b6040516370a0823160e01b81523060048201529099506020816024816001600160a01b0387165afa801561067f578b915f9161078c575b501061077d575f986106eb565b631e9acf1760e31b5f5260045ffd5b6107ad915060203d81116107b3575b6107a581836104d2565b81019061069c565b5f610770565b503d61079b565b67ffffffffffffffff81116104f457601f01601f191660200190565b3d15610800573d906107e7826107ba565b916107f560405193846104d2565b82523d5f602084013e565b606090565b908160209103126100ee575180151581036100ee5790565b60405163a9059cbb60e01b602082019081526001600160a01b0390931660248201526044808201949094529283525f92839290839061085d6064826104d2565b51925af16108696107d6565b901590811561087a575b5061077d57565b805180151592508261088f575b50505f610873565b6108aa9250906020806108a6938301019101610805565b1590565b5f80610887565b634e487b7160e01b5f52601160045260245ffd5b90601482018092116108d357565b6108b1565b919082018092116108d357565b90509290919260018301928381116108d3578484116100ee578101355f1a9360048516151590603c82610974575b85018086116108d357116100ee5761093461092e8584610e6a565b946108c5565b9261094261092e8585610e6a565b9261095061092e8583610e6a565b905f9361095b575090565b8161097192945061096b91610e6a565b926108c5565b90565b506050610913565b51906001600160701b03821682036100ee57565b908160609103126100ee576109a48161097c565b9160406109b36020840161097c565b92015163ffffffff811681036100ee5790565b908160209103126100ee5751610971816100f2565b906103e58202918083046103e514901517156108d357565b906103e88202918083046103e814901517156108d357565b818102929181159184041417156108d357565b8115610a28570490565b634e487b7160e01b5f52601260045260245ffd5b60405190610a4b6020836104d2565b5f808352366020840137565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b909260809261097195948352602083015260018060a01b031660408201528160608201520190610a57565b604051630240bc6b60e21b81529095946001600160a01b038716949093919291606084600481895afa90811561067f575f945f92610cb1575b50604051630dfe168160e01b81526020816004818b5afa90811561067f575f91610c92575b5060405163d21220a760e01b8152906020826004818c5afa91821561067f575f92610c61575b506001600160a01b03908116919086169081831480610c4c575b15610c0f5750505050610b8b90610b85600195915b610b806001600160701b03610b7981610b71896109db565b941684610a0b565b94166109f3565b6108d8565b90610a1e565b968715610c0057610b9b9261081d565b15610bf7575f9084925b610bad610a3c565b93813b156100ee575f8094610bd86040519788968795869463022c0d9f60e01b865260048601610a7b565b03925af1801561067f57610be95750565b806106735f61069a936104d2565b83905f92610ba5565b63730c31bf60e11b5f5260045ffd5b9396936001600160a01b0316149182610c39575b505015610c0057610b8b90610b855f9591610b59565b6001600160a01b03161490505f80610c23565b506001600160a01b0384811690821614610b44565b610c8491925060203d602011610c8b575b610c7c81836104d2565b8101906109c6565b905f610b2a565b503d610c72565b610cab915060203d602011610c8b57610c7c81836104d2565b5f610b04565b909450610cd6915060603d606011610cdf575b610cce81836104d2565b810190610990565b5090935f610adf565b503d610cc4565b91908260409103126100ee576020825192015190565b6001600160a01b039182168152911515602083015260408201929092529116606082015260a06080820181905261097192910190610a57565b600160ff1b81146108d3575f0390565b835f604094939596828214610e4657610dc6610d9c610daa6401000276a4995b600180546001600160a01b0319166001600160a01b038a1617905589516001600160a01b0390911660208201529182906040820190565b03601f1981018352826104d2565b8751630251596160e31b81529889978896879560048701610cfc565b03926001600160a01b03165af191821561067f575f915f93610e13575b50600180546001600160a01b031916905515610e0c57505b5f811215610c005761097190610d35565b9050610dfb565b909250610e38915060403d604011610e3f575b610e3081836104d2565b810190610ce6565b915f610de3565b503d610e26565b610dc6610d9c610daa73fffd8963efd1fc6a506488495d951d5263988d2599610d65565b6040515f81529160149101600c830137519056fea26469706673582212206d81857c93910cfcf6acc3451a6023d9a439781f5f6fbe15a612f79a54e0469e64736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000063971c50d58ba1c98b377e460588b3c25e8ca32b
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _owner (address): 0x63971c50D58BA1C98B377e460588b3c25E8CA32b
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 00000000000000000000000063971c50d58ba1c98b377e460588b3c25e8ca32b
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.