Source Code
Latest 25 from a total of 76 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Token | 17924521 | 163 days ago | IN | 0 ETH | 0.00000009 | ||||
| Withdraw Token | 17924517 | 163 days ago | IN | 0 ETH | 0.0000001 | ||||
| Withdraw Token | 17924514 | 163 days ago | IN | 0 ETH | 0.00000008 | ||||
| Withdraw Token | 17924511 | 163 days ago | IN | 0 ETH | 0.00000009 | ||||
| Withdraw Token | 17924508 | 163 days ago | IN | 0 ETH | 0.00000009 | ||||
| Withdraw Token | 17924505 | 163 days ago | IN | 0 ETH | 0.00000008 | ||||
| Withdraw Token | 17924502 | 163 days ago | IN | 0 ETH | 0.00000009 | ||||
| Withdraw Token | 17924341 | 163 days ago | IN | 0 ETH | 0.0000001 | ||||
| Withdraw Token | 17924337 | 163 days ago | IN | 0 ETH | 0.0000001 | ||||
| Withdraw Token | 17924334 | 163 days ago | IN | 0 ETH | 0.00000009 | ||||
| Withdraw Token | 17924330 | 163 days ago | IN | 0 ETH | 0.0000001 | ||||
| Withdraw Token | 17924326 | 163 days ago | IN | 0 ETH | 0.00000011 | ||||
| Withdraw Token | 17924322 | 163 days ago | IN | 0 ETH | 0.00000011 | ||||
| Withdraw Token | 17924319 | 163 days ago | IN | 0 ETH | 0.00000011 | ||||
| Withdraw Token | 17924316 | 163 days ago | IN | 0 ETH | 0.00000008 | ||||
| Withdraw Token | 17924313 | 163 days ago | IN | 0 ETH | 0.00000011 | ||||
| Withdraw Token | 17924310 | 163 days ago | IN | 0 ETH | 0.00000009 | ||||
| Withdraw Token | 17924306 | 163 days ago | IN | 0 ETH | 0.0000001 | ||||
| Withdraw Token | 17924303 | 163 days ago | IN | 0 ETH | 0.00000011 | ||||
| Withdraw Token | 17924298 | 163 days ago | IN | 0 ETH | 0.0000001 | ||||
| Withdraw Token | 17924294 | 163 days ago | IN | 0 ETH | 0.00000011 | ||||
| Withdraw Token | 17924291 | 163 days ago | IN | 0 ETH | 0.00000011 | ||||
| Withdraw Token | 16419531 | 197 days ago | IN | 0 ETH | 0.00000178 | ||||
| Withdraw Token | 16419477 | 197 days ago | IN | 0 ETH | 0.00000091 | ||||
| Withdraw Token | 16419391 | 197 days ago | IN | 0 ETH | 0.00000084 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
HumanRouter
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
interface IUniswapV2Factory {
function getPair(
address tokenA,
address tokenB
) external view returns (address);
}
interface IUniswapV2Pair {
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function swap(
uint amount0Out,
uint amount1Out,
address to,
bytes calldata data
) external;
}
interface IUniswapV3Pool {
function swap(
address recipient,
bool zeroForOne,
int256 amountSpecified,
uint160 sqrtPriceLimitX96,
bytes calldata data
) external returns (int256 amount0, int256 amount1);
function token0() external view returns (address);
function token1() external view returns (address);
}
interface IUniswapV3Factory {
function getPool(
address tokenA,
address tokenB,
uint24 fee
) external view returns (address);
}
interface IPermit2 {
struct TokenPermissions {
address token;
uint256 amount;
}
struct PermitTransferFrom {
TokenPermissions permitted;
uint256 nonce;
uint256 deadline;
}
struct SignatureTransferDetails {
address to;
uint256 requestedAmount;
}
function permitTransferFrom(
PermitTransferFrom calldata permit,
SignatureTransferDetails calldata transferDetails,
address owner,
bytes calldata signature
) external;
}
contract HumanRouter {
// *** Constants: Official Uniswap and World addresses on World Chain ***
address constant UNISWAP_V2_FACTORY =
0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; // Uniswap V2 factory
address constant UNISWAP_V3_FACTORY =
0x7a5028BDa40e7B173C278C5342087826455ea25a; // Uniswap V3 factory
address constant PERMIT2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3; // Uniswap Permit2
uint256 constant FEE_BPS = 100; // 1% fee (in basis points)
// Events
event SwapExecuted(
address indexed user,
address indexed tokenIn,
address indexed tokenOut,
uint256 amountIn,
uint256 amountOut,
uint256 feeAmount,
address[] path,
uint24[] fees
);
// Uniswap V3 TickMath sqrtPriceX96 limits (for no price limit on swaps):
uint160 constant MIN_SQRT_RATIO = 4295128739 + 1;
uint160 constant MAX_SQRT_RATIO =
1461446703485210103287273052203988822378723970342 - 1;
address public owner;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
// Withdraw function for owner to collect any tokens (e.g. accumulated fees) from the contract
function withdrawToken(address token, uint256 amount) external onlyOwner {
require(token != address(0), "Invalid token");
// Transfer `amount` of `token` to the owner. (Using low-level call to support any ERC-20)
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(
bytes4(keccak256("transfer(address,uint256)")),
owner,
amount
)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"Withdraw transfer failed"
);
}
/**
* @notice Swap an exact `amountIn` of `tokenIn` for `tokenOut` along a specified path, using Permit2 for input transfer.
* @param tokenIn The input ERC-20 token address.
* @param tokenOut The output ERC-20 token address.
* @param amountIn The total amount of tokenIn to pull from the user (includes the 1% fee).
* @param amountOutMin The minimum acceptable amount of tokenOut (reverts if output is lower).
* @param path An array of token addresses representing the swap path from tokenIn to tokenOut.
* @param fees An array of fees for each hop (0 for Uniswap v2, or the v3 fee tier in basis points for that hop).
* @param deadline Timestamp after which the swap will be rejected (to avoid stale routes).
* @param permitNonce The nonce used in the Permit2 signature (to prevent replay).
* @param permitDeadline Expiration time for the Permit2 signature.
* @param permitSignature The Permit2 signature from the user authorizing this contract to spend tokenIn.
*/
function swapExactInputMultiHop(
address tokenIn,
address tokenOut,
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
uint24[] calldata fees,
uint256 deadline,
uint256 permitNonce,
uint256 permitDeadline,
bytes calldata permitSignature
) external {
require(block.timestamp <= deadline, "Route expired");
// Path must start with tokenIn and end with tokenOut, with fees length = path.length-1
require(
path.length >= 2 &&
path[0] == tokenIn &&
path[path.length - 1] == tokenOut,
"Invalid path"
);
require(fees.length == path.length - 1, "Invalid fees");
// **1. Transfer tokenIn from user to this contract using Permit2 (signature-based transfer)**
IPermit2(PERMIT2).permitTransferFrom(
IPermit2.PermitTransferFrom({
permitted: IPermit2.TokenPermissions({
token: tokenIn,
amount: amountIn
}),
nonce: permitNonce,
deadline: permitDeadline
}),
IPermit2.SignatureTransferDetails({
to: address(this),
requestedAmount: amountIn
}),
msg.sender,
permitSignature
);
// At this point, `amountIn` of tokenIn has been pulled from msg.sender into this contract.
// **2. Deduct fee and determine swap amount.** (1% fee is taken on the input amount)
uint256 feeAmount = (amountIn * FEE_BPS) / 10000; // 1% of input
uint256 swapAmount = amountIn - feeAmount; // amount to actually swap
// (The `feeAmount` remains in the contract as fee; owner can withdraw it later.)
// **3. Perform the swaps along the specified route.**
uint256 outputAmount = swapAmount;
address currentToken = tokenIn;
// Loop through each hop in the path
for (uint256 i = 0; i < fees.length; ++i) {
address nextToken = path[i + 1];
uint24 fee = fees[i];
if (fee == 0) {
// *Uniswap v2 hop* (fee=0 indicates a v2 pair)
address pair = IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(
currentToken,
nextToken
);
require(pair != address(0), "No Uniswap v2 pair for hop");
// Get reserves to compute output for exact input swap formula
(uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(pair)
.getReserves();
uint256 res0 = uint256(reserve0);
uint256 res1 = uint256(reserve1);
require(res0 > 0 && res1 > 0, "Pair has no liquidity");
// Determine input/output reserve order
bool invert = currentToken < nextToken;
uint256 reserveIn = invert ? res0 : res1;
uint256 reserveOut = invert ? res1 : res0;
// Uniswap v2 formula: amountOut = (amountIn * 997 / 1000) * reserveOut / (reserveIn + (amountIn * 997 / 1000))
uint256 amountInWithFee = outputAmount * 997;
uint256 numerator = amountInWithFee * reserveOut;
uint256 denominator = reserveIn * 1000 + amountInWithFee;
uint256 out = denominator == 0 ? 0 : (numerator / denominator);
require(out > 0, "Uniswap v2 swap output is 0");
// Transfer input tokens to the pair, then call swap to send out tokens
_safeTransfer(currentToken, pair, outputAmount);
(uint256 amt0Out, uint256 amt1Out) = invert
? (uint256(0), out)
: (out, uint256(0));
IUniswapV2Pair(pair).swap(
amt0Out,
amt1Out,
(i == fees.length - 1 ? msg.sender : address(this)), // send output to user if final hop, else to this contract for next hop
bytes("") // no callback data for v2 swap
);
outputAmount = out;
} else {
// *Uniswap v3 hop* (fee > 0 indicates a v3 pool fee tier)
address pool = IUniswapV3Factory(UNISWAP_V3_FACTORY).getPool(
currentToken,
nextToken,
fee
);
require(pool != address(0), "No Uniswap v3 pool for hop");
bool zeroForOne = currentToken < nextToken; // swap token0->token1 if true, else token1->token0
// Call v3 pool.swap. The pool will callback our contract (uniswapV3SwapCallback) for the input token.
_v3CallbackPool = pool;
_inV3Swap = true;
(int256 amt0, int256 amt1) = IUniswapV3Pool(pool).swap(
(i == fees.length - 1 ? msg.sender : address(this)), // recipient: user for final hop, otherwise this contract for intermediate
zeroForOne,
int256(outputAmount),
zeroForOne ? MIN_SQRT_RATIO : MAX_SQRT_RATIO, // price limit set to allow full swap​:contentReference[oaicite:15]{index=15}
bytes("") // no custom data needed; we use storage vars to validate callback
);
_inV3Swap = false;
_v3CallbackPool = address(0);
// Calculate the output amount from swap return values:
uint256 out = zeroForOne ? uint256(-amt1) : uint256(-amt0);
outputAmount = out;
}
currentToken = nextToken;
}
// **4. Slippage check:** ensure final output is at least amountOutMin.
require(outputAmount >= amountOutMin, "Insufficient output amount");
// Note: The final output tokens have already been sent to msg.sender during the last hop (see recipient in swaps above).
// Thus, the user receives the output tokens here. The 1% fee remains in this contract.
// Emit the SwapExecuted event
emit SwapExecuted(
msg.sender,
tokenIn,
tokenOut,
amountIn,
outputAmount,
feeAmount,
path,
fees
);
}
// --- Storage variables for controlling v3 callback ---
bool private _inV3Swap;
address private _v3CallbackPool;
/**
* @dev Uniswap V3 callback function called during pool.swap().
* It transfers the required tokens to the pool. Only the legitimate pool call is honored.
*/
function uniswapV3SwapCallback(
int256 amount0Delta,
int256 amount1Delta,
bytes calldata
) external {
// Security: Ensure the caller is the expected v3 pool we called and that we are in a swap context​:contentReference[oaicite:16]{index=16}.
require(
_inV3Swap && msg.sender == _v3CallbackPool,
"Unauthorized callback"
);
if (amount0Delta > 0) {
// Pool needs `amount0Delta` of token0
address token0 = IUniswapV3Pool(msg.sender).token0();
_safeTransfer(token0, msg.sender, uint256(amount0Delta));
}
if (amount1Delta > 0) {
// Pool needs `amount1Delta` of token1
address token1 = IUniswapV3Pool(msg.sender).token1();
_safeTransfer(token1, msg.sender, uint256(amount1Delta));
}
// Any positive delta has been paid; if both are 0, nothing happens (no tokens needed).
}
// Internal safe ERC20 transfer (reverts on failure)
function _safeTransfer(address token, address to, uint256 value) private {
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0xa9059cbb, to, value) // bytes4(keccak256("transfer(address,uint256)"))
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"Token transfer failed"
);
}
}{
"remappings": [
"@uniswap/v4-core/=lib/v4-core/",
"@uniswap/v4-periphery/=lib/v4-periphery/",
"@uniswap/permit2/=lib/permit2/",
"@uniswap/universal-router/=lib/universal-router/",
"@uniswap/v3-core/=lib/v3-core/",
"@uniswap/v2-core/=lib/v2-core/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@ensdomains/=lib/v4-core/node_modules/@ensdomains/",
"ds-test/=lib/universal-router/solmate/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"hardhat/=lib/v4-core/node_modules/hardhat/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"permit2/=lib/permit2/",
"solmate/=lib/universal-router/lib/solmate/",
"universal-router/=lib/universal-router/",
"v2-core/=lib/v2-core/contracts/",
"v3-core/=lib/v3-core/",
"v4-core/=lib/v4-core/src/",
"v4-periphery/=lib/v4-periphery/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":false,"internalType":"uint24[]","name":"fees","type":"uint24[]"}],"name":"SwapExecuted","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint24[]","name":"fees","type":"uint24[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"permitNonce","type":"uint256"},{"internalType":"uint256","name":"permitDeadline","type":"uint256"},{"internalType":"bytes","name":"permitSignature","type":"bytes"}],"name":"swapExactInputMultiHop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608080604052346026575f80546001600160a01b031916331790556110af908161002b8239f35b5f80fdfe60a0806040526004361015610012575f80fd5b5f6080525f3560e01c9081638da5cb5b14610dfe575080639e281a9814610c84578063dc372a8e146101b75763fa461e331461004c575f80fd5b346101b15760603660031901126101b15760243560043560443567ffffffffffffffff81116101b157610083903690600401610e67565b505060ff6080515460a01c168061019d575b15610160576080518113610129575b5060805181136100b5575b60805180f35b60405163d21220a760e01b815290602082600481335afa801561011c576100e792608051916100ed575b503390610fb5565b5f6100af565b61010f915060203d602011610115575b6101078183610eb1565b810190610f4e565b5f6100df565b503d6100fd565b6040513d608051823e3d90fd5b604051630dfe168160e01b815290602082600481335afa801561011c5761015a92608051916100ed57503390610fb5565b5f6100a4565b60405162461bcd60e51b8152602060048201526015602482015274556e617574686f72697a65642063616c6c6261636b60581b6044820152606490fd5b506001546001600160a01b03163314610095565b60805180fd5b34610b5657610140366003190112610b56576101d1610e20565b6024356001600160a01b0381168103610b565760843567ffffffffffffffff8111610b5657610204903690600401610e36565b9160a43567ffffffffffffffff8111610b5657610225903690600401610e36565b90926101243567ffffffffffffffff8111610b5657610248903690600401610e67565b60c4354211610c4f57600287101580610c18575b80610bea575b15610bb6575f198701878111610ba2578403610b6e576040519161028583610e95565b6001600160a01b03891683526044356020840152604051926060840167ffffffffffffffff811185821017610b5a576040528352602083019260e43584526040810190610104358252604051936102db85610e95565b30855260443560208601526e22d473030f116ddee9f6b43ac78ba33b15610b565760405163187945bd60e11b8152915180516001600160a01b0316600484015260200151602483015290945f94869461012494869493849361036092909151604488015251606487015280516001600160a01b031660848701526020015160a4860152565b3360c485015261010060e485015281610104850152848401378181018301859052601f01601f19168101030181836e22d473030f116ddee9f6b43ac78ba35af18015610b4b57610b37575b5060646044350294604435860460641460443515171561077357612710860460443590810390811161077357876080515b85811061052057505060643581106104db57908092916127106040519860a08a01926044358b5260208b015204604089015260a060608901525260c086019091608051905b8082106104b0575050602091508581036080870152828152019290608051905b808210610489575050506001600160a01b0390811693169133917fb01442c50bcf92030343f6aa7c7674e942c21d8060dad4744b6a2f077c05b045919081900390a460805180f35b90919384359062ffffff82168092036101b157602081600193829352019501920190610441565b909183356001600160a01b03811691908290036101b157908152602093840193019160010190610421565b60405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606490fd5b9091600182018083116107735761053b610540918688610f2a565b610f3a565b9261054c83888b610f2a565b3562ffffff81168091036101b157806108f8575060405163e6a4390560e01b81526001600160a01b0380831660048301819052908616602483018190529192602084604481735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f5afa93841561011c57608051946108d8575b506001600160a01b0384161561089357604051630240bc6b60e21b81526060816004816001600160a01b0389165afa90811561011c576080519060805192610835575b506001600160701b0380911691168115158061082c575b156107ef57848410156107e857815b858510156107e157505b866103e58102046103e5148715171561077357608051506103e581880202906103e588028204146103e5880215171561077357816103e88102046103e81482151715610773576103e8919091026103e5870281019190821061077357816107da575050608051945b851561079557846106a392610fb5565b101561078b576080519082915b5f19890189811161077357850361076c5733915b604051926106d3602085610eb1565b60805184526001600160a01b0382163b156101b15760405194859363022c0d9f60e01b85526004850152602484015260018060a01b03166044830152608060648301528180610729608051956084830190610f6d565b608051919003926001600160a01b03165af1801561011c57610753575b50600190925b91016103dc565b60805161075f91610eb1565b6080516101b1578a610746565b30916106c4565b634e487b7160e01b6080515260116004526024608051fd5b60805190826106b0565b60405162461bcd60e51b815260206004820152601b60248201527f556e69737761702076322073776170206f7574707574206973203000000000006044820152606490fd5b0494610693565b905061062b565b8091610621565b60405162461bcd60e51b81526020600482015260156024820152745061697220686173206e6f206c697175696469747960581b6044820152606490fd5b50801515610612565b9150506060813d821161088b575b8161085060609383610eb1565b810103126101b15761086181610fa1565b604061086f60208401610fa1565b92015163ffffffff8116036101b1576001600160701b036105fb565b3d9150610843565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20556e6973776170207632207061697220666f7220686f700000000000006044820152606490fd5b6108f191945060203d8111610115576101078183610eb1565b928e6105b8565b604051630b4c774160e11b81526001600160a01b0392831660048201819052928616602482018190526044820192909252602081606481737a5028bda40e7b173c278c5342087826455ea25a5afa90811561011c5760805191610b19575b506001600160a01b0316918215610ad457600180546001600160a01b03191684179055608051805460ff60a01b1916600160a01b17905510905f198801888111610773578403610acb57604033915b8315610ab0576401000276a4905b6020958351946109c38887610eb1565b6080518652610a14855196879586948594630251596160e31b865260018060a01b031660048601528a6024860152604485015260018060a01b0316606484015260a0608484015260a4830190610f6d565b0391608051905af191821561011c576080519160805193610a75575b50608051805460ff60a01b19169055600180546001600160a01b0319168155935015610a665750610a6090610f91565b9261074c565b610a709150610f91565b610a60565b915091506040813d8211610aa8575b81610a9160409383610eb1565b810103126101b1576001928151910151918d610a30565b3d9150610a84565b73fffd8963efd1fc6a506488495d951d5263988d25906109b3565b604030916109a5565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20556e697377617020763320706f6f6c20666f7220686f700000000000006044820152606490fd5b610b31915060203d8111610115576101078183610eb1565b8d610956565b5f610b4191610eb1565b5f608052866103ab565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206665657360a01b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606490fd5b505f198701878111610ba2576001600160a01b0386811691610c119061053b908b88610f2a565b1614610262565b508615610c3b57610c2883610f3a565b6001600160a01b0389811691161461025c565b634e487b7160e01b5f52603260045260245ffd5b60405162461bcd60e51b815260206004820152600d60248201526c149bdd5d1948195e1c1a5c9959609a1b6044820152606490fd5b34610b56576040366003190112610b5657610c9d610e20565b5f546001600160a01b031633819003610dcd576001600160a01b03821615610d985760405163a9059cbb60e01b602082019081526001600160a01b039092166024808301919091523560448201525f92839290918390610d0a81606481015b03601f198101835282610eb1565b51925af1610d16610ed3565b81610d69575b5015610d2457005b60405162461bcd60e51b815260206004820152601860248201527f5769746864726177207472616e73666572206661696c656400000000000000006044820152606490fd5b8051801592508215610d7e575b505081610d1c565b610d919250602080918301019101610f12565b8180610d76565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b60405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606490fd5b34610b56575f366003190112610b56575f546001600160a01b03168152602090f35b600435906001600160a01b0382168203610b5657565b9181601f84011215610b565782359167ffffffffffffffff8311610b56576020808501948460051b010111610b5657565b9181601f84011215610b565782359167ffffffffffffffff8311610b565760208381860195010111610b5657565b6040810190811067ffffffffffffffff821117610b5a57604052565b90601f8019910116810190811067ffffffffffffffff821117610b5a57604052565b3d15610f0d573d9067ffffffffffffffff8211610b5a5760405191610f02601f8201601f191660200184610eb1565b82523d5f602084013e565b606090565b90816020910312610b5657518015158103610b565790565b9190811015610c3b5760051b0190565b356001600160a01b0381168103610b565790565b90816020910312610b5657516001600160a01b0381168103610b565790565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600160ff1b8114610ba2575f0390565b51906001600160701b0382168203610b5657565b60405163a9059cbb60e01b602082019081526001600160a01b03909316602482015260448101939093525f928392908390610ff38160648101610cfc565b51925af1610fff610ed3565b8161104a575b501561100d57565b60405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b805180159250821561105f575b50505f611005565b6110729250602080918301019101610f12565b5f8061105756fea26469706673582212209189ee1bfc32afda7950fb6e7d6156a80f5bc51ab6910feaa274584db4a6eb9b64736f6c634300081c0033
Deployed Bytecode
0x60a0806040526004361015610012575f80fd5b5f6080525f3560e01c9081638da5cb5b14610dfe575080639e281a9814610c84578063dc372a8e146101b75763fa461e331461004c575f80fd5b346101b15760603660031901126101b15760243560043560443567ffffffffffffffff81116101b157610083903690600401610e67565b505060ff6080515460a01c168061019d575b15610160576080518113610129575b5060805181136100b5575b60805180f35b60405163d21220a760e01b815290602082600481335afa801561011c576100e792608051916100ed575b503390610fb5565b5f6100af565b61010f915060203d602011610115575b6101078183610eb1565b810190610f4e565b5f6100df565b503d6100fd565b6040513d608051823e3d90fd5b604051630dfe168160e01b815290602082600481335afa801561011c5761015a92608051916100ed57503390610fb5565b5f6100a4565b60405162461bcd60e51b8152602060048201526015602482015274556e617574686f72697a65642063616c6c6261636b60581b6044820152606490fd5b506001546001600160a01b03163314610095565b60805180fd5b34610b5657610140366003190112610b56576101d1610e20565b6024356001600160a01b0381168103610b565760843567ffffffffffffffff8111610b5657610204903690600401610e36565b9160a43567ffffffffffffffff8111610b5657610225903690600401610e36565b90926101243567ffffffffffffffff8111610b5657610248903690600401610e67565b60c4354211610c4f57600287101580610c18575b80610bea575b15610bb6575f198701878111610ba2578403610b6e576040519161028583610e95565b6001600160a01b03891683526044356020840152604051926060840167ffffffffffffffff811185821017610b5a576040528352602083019260e43584526040810190610104358252604051936102db85610e95565b30855260443560208601526e22d473030f116ddee9f6b43ac78ba33b15610b565760405163187945bd60e11b8152915180516001600160a01b0316600484015260200151602483015290945f94869461012494869493849361036092909151604488015251606487015280516001600160a01b031660848701526020015160a4860152565b3360c485015261010060e485015281610104850152848401378181018301859052601f01601f19168101030181836e22d473030f116ddee9f6b43ac78ba35af18015610b4b57610b37575b5060646044350294604435860460641460443515171561077357612710860460443590810390811161077357876080515b85811061052057505060643581106104db57908092916127106040519860a08a01926044358b5260208b015204604089015260a060608901525260c086019091608051905b8082106104b0575050602091508581036080870152828152019290608051905b808210610489575050506001600160a01b0390811693169133917fb01442c50bcf92030343f6aa7c7674e942c21d8060dad4744b6a2f077c05b045919081900390a460805180f35b90919384359062ffffff82168092036101b157602081600193829352019501920190610441565b909183356001600160a01b03811691908290036101b157908152602093840193019160010190610421565b60405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206f757470757420616d6f756e740000000000006044820152606490fd5b9091600182018083116107735761053b610540918688610f2a565b610f3a565b9261054c83888b610f2a565b3562ffffff81168091036101b157806108f8575060405163e6a4390560e01b81526001600160a01b0380831660048301819052908616602483018190529192602084604481735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f5afa93841561011c57608051946108d8575b506001600160a01b0384161561089357604051630240bc6b60e21b81526060816004816001600160a01b0389165afa90811561011c576080519060805192610835575b506001600160701b0380911691168115158061082c575b156107ef57848410156107e857815b858510156107e157505b866103e58102046103e5148715171561077357608051506103e581880202906103e588028204146103e5880215171561077357816103e88102046103e81482151715610773576103e8919091026103e5870281019190821061077357816107da575050608051945b851561079557846106a392610fb5565b101561078b576080519082915b5f19890189811161077357850361076c5733915b604051926106d3602085610eb1565b60805184526001600160a01b0382163b156101b15760405194859363022c0d9f60e01b85526004850152602484015260018060a01b03166044830152608060648301528180610729608051956084830190610f6d565b608051919003926001600160a01b03165af1801561011c57610753575b50600190925b91016103dc565b60805161075f91610eb1565b6080516101b1578a610746565b30916106c4565b634e487b7160e01b6080515260116004526024608051fd5b60805190826106b0565b60405162461bcd60e51b815260206004820152601b60248201527f556e69737761702076322073776170206f7574707574206973203000000000006044820152606490fd5b0494610693565b905061062b565b8091610621565b60405162461bcd60e51b81526020600482015260156024820152745061697220686173206e6f206c697175696469747960581b6044820152606490fd5b50801515610612565b9150506060813d821161088b575b8161085060609383610eb1565b810103126101b15761086181610fa1565b604061086f60208401610fa1565b92015163ffffffff8116036101b1576001600160701b036105fb565b3d9150610843565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20556e6973776170207632207061697220666f7220686f700000000000006044820152606490fd5b6108f191945060203d8111610115576101078183610eb1565b928e6105b8565b604051630b4c774160e11b81526001600160a01b0392831660048201819052928616602482018190526044820192909252602081606481737a5028bda40e7b173c278c5342087826455ea25a5afa90811561011c5760805191610b19575b506001600160a01b0316918215610ad457600180546001600160a01b03191684179055608051805460ff60a01b1916600160a01b17905510905f198801888111610773578403610acb57604033915b8315610ab0576401000276a4905b6020958351946109c38887610eb1565b6080518652610a14855196879586948594630251596160e31b865260018060a01b031660048601528a6024860152604485015260018060a01b0316606484015260a0608484015260a4830190610f6d565b0391608051905af191821561011c576080519160805193610a75575b50608051805460ff60a01b19169055600180546001600160a01b0319168155935015610a665750610a6090610f91565b9261074c565b610a709150610f91565b610a60565b915091506040813d8211610aa8575b81610a9160409383610eb1565b810103126101b1576001928151910151918d610a30565b3d9150610a84565b73fffd8963efd1fc6a506488495d951d5263988d25906109b3565b604030916109a5565b60405162461bcd60e51b815260206004820152601a60248201527f4e6f20556e697377617020763320706f6f6c20666f7220686f700000000000006044820152606490fd5b610b31915060203d8111610115576101078183610eb1565b8d610956565b5f610b4191610eb1565b5f608052866103ab565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206665657360a01b6044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606490fd5b505f198701878111610ba2576001600160a01b0386811691610c119061053b908b88610f2a565b1614610262565b508615610c3b57610c2883610f3a565b6001600160a01b0389811691161461025c565b634e487b7160e01b5f52603260045260245ffd5b60405162461bcd60e51b815260206004820152600d60248201526c149bdd5d1948195e1c1a5c9959609a1b6044820152606490fd5b34610b56576040366003190112610b5657610c9d610e20565b5f546001600160a01b031633819003610dcd576001600160a01b03821615610d985760405163a9059cbb60e01b602082019081526001600160a01b039092166024808301919091523560448201525f92839290918390610d0a81606481015b03601f198101835282610eb1565b51925af1610d16610ed3565b81610d69575b5015610d2457005b60405162461bcd60e51b815260206004820152601860248201527f5769746864726177207472616e73666572206661696c656400000000000000006044820152606490fd5b8051801592508215610d7e575b505081610d1c565b610d919250602080918301019101610f12565b8180610d76565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b60405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606490fd5b34610b56575f366003190112610b56575f546001600160a01b03168152602090f35b600435906001600160a01b0382168203610b5657565b9181601f84011215610b565782359167ffffffffffffffff8311610b56576020808501948460051b010111610b5657565b9181601f84011215610b565782359167ffffffffffffffff8311610b565760208381860195010111610b5657565b6040810190811067ffffffffffffffff821117610b5a57604052565b90601f8019910116810190811067ffffffffffffffff821117610b5a57604052565b3d15610f0d573d9067ffffffffffffffff8211610b5a5760405191610f02601f8201601f191660200184610eb1565b82523d5f602084013e565b606090565b90816020910312610b5657518015158103610b565790565b9190811015610c3b5760051b0190565b356001600160a01b0381168103610b565790565b90816020910312610b5657516001600160a01b0381168103610b565790565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600160ff1b8114610ba2575f0390565b51906001600160701b0382168203610b5657565b60405163a9059cbb60e01b602082019081526001600160a01b03909316602482015260448101939093525f928392908390610ff38160648101610cfc565b51925af1610fff610ed3565b8161104a575b501561100d57565b60405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606490fd5b805180159250821561105f575b50505f611005565b6110729250602080918301019101610f12565b5f8061105756fea26469706673582212209189ee1bfc32afda7950fb6e7d6156a80f5bc51ab6910feaa274584db4a6eb9b64736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$196.68
Net Worth in ETH
0.066454
Token Allocations
USDC
66.38%
WLD
30.42%
WBTC
2.11%
Others
1.09%
Multichain Portfolio | 35 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.