Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
Multicall3
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-01-09 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; /// @title Multicall3 /// @notice Aggregate results from multiple function calls /// @dev Multicall & Multicall2 backwards-compatible /// @dev Aggregate methods are marked `payable` to save 24 gas per call /// @author Michael Elliot <[email protected]> /// @author Joshua Levine <[email protected]> /// @author Nick Johnson <[email protected]> /// @author Andreas Bigger <[email protected]> /// @author Matt Solomon <[email protected]> /// @author Isaac Ekhaguere <[email protected]> contract Multicall3 { struct Call { address target; bytes callData; } struct Call3 { address target; bool allowFailure; bytes callData; } struct Call3Value { address target; bool allowFailure; uint256 value; bytes callData; } struct Result { bool success; bytes returnData; } /// @notice Backwards-compatible call aggregation with Multicall /// @param calls An array of Call structs /// @return blockNumber The block number where the calls were executed /// @return returnData An array of bytes containing the responses function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData) { blockNumber = block.number; uint256 length = calls.length; returnData = new bytes[](length); Call calldata call; for (uint256 i = 0; i < length;) { bool success; call = calls[i]; (success, returnData[i]) = call.target.call(call.callData); require(success, "Multicall3: call failed"); unchecked { ++i; } } } /// @notice Backwards-compatible with Multicall2 /// @notice Aggregate calls without requiring success /// @param requireSuccess If true, require all calls to succeed /// @param calls An array of Call structs /// @return returnData An array of Result structs function tryAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (Result[] memory returnData) { uint256 length = calls.length; returnData = new Result[](length); Call calldata call; for (uint256 i = 0; i < length;) { Result memory result = returnData[i]; call = calls[i]; (result.success, result.returnData) = call.target.call(call.callData); if (requireSuccess) require(result.success, "Multicall3: call failed"); unchecked { ++i; } } } /// @notice Backwards-compatible with Multicall2 /// @notice Aggregate calls and allow failures using tryAggregate /// @param calls An array of Call structs /// @return blockNumber The block number where the calls were executed /// @return blockHash The hash of the block where the calls were executed /// @return returnData An array of Result structs function tryBlockAndAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) { blockNumber = block.number; blockHash = blockhash(block.number); returnData = tryAggregate(requireSuccess, calls); } /// @notice Backwards-compatible with Multicall2 /// @notice Aggregate calls and allow failures using tryAggregate /// @param calls An array of Call structs /// @return blockNumber The block number where the calls were executed /// @return blockHash The hash of the block where the calls were executed /// @return returnData An array of Result structs function blockAndAggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) { (blockNumber, blockHash, returnData) = tryBlockAndAggregate(true, calls); } /// @notice Aggregate calls, ensuring each returns success if required /// @param calls An array of Call3 structs /// @return returnData An array of Result structs function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData) { uint256 length = calls.length; returnData = new Result[](length); Call3 calldata calli; for (uint256 i = 0; i < length;) { Result memory result = returnData[i]; calli = calls[i]; (result.success, result.returnData) = calli.target.call(calli.callData); assembly { // Revert if the call fails and failure is not allowed // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000) // set data offset mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020) // set length of revert string mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017) // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000) revert(0x00, 0x64) } } unchecked { ++i; } } } /// @notice Aggregate calls with a msg value /// @notice Reverts if msg.value is less than the sum of the call values /// @param calls An array of Call3Value structs /// @return returnData An array of Result structs function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData) { uint256 valAccumulator; uint256 length = calls.length; returnData = new Result[](length); Call3Value calldata calli; for (uint256 i = 0; i < length;) { Result memory result = returnData[i]; calli = calls[i]; uint256 val = calli.value; // Humanity will be a Type V Kardashev Civilization before this overflows - andreas // ~ 10^25 Wei in existence << ~ 10^76 size uint fits in a uint256 unchecked { valAccumulator += val; } (result.success, result.returnData) = calli.target.call{value: val}(calli.callData); assembly { // Revert if the call fails and failure is not allowed // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000) // set data offset mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020) // set length of revert string mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017) // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000) revert(0x00, 0x84) } } unchecked { ++i; } } // Finally, make sure the msg.value = SUM(call[0...i].value) require(msg.value == valAccumulator, "Multicall3: value mismatch"); } /// @notice Returns the block hash for the given block number /// @param blockNumber The block number function getBlockHash(uint256 blockNumber) public view returns (bytes32 blockHash) { blockHash = blockhash(blockNumber); } /// @notice Returns the block number function getBlockNumber() public view returns (uint256 blockNumber) { blockNumber = block.number; } /// @notice Returns the block coinbase function getCurrentBlockCoinbase() public view returns (address coinbase) { coinbase = block.coinbase; } // /// @notice Returns the block difficulty // function getCurrentBlockDifficulty() public view returns (uint256 difficulty) { // difficulty = block.difficulty; // } /// @notice Returns the block gas limit function getCurrentBlockGasLimit() public view returns (uint256 gaslimit) { gaslimit = block.gaslimit; } /// @notice Returns the block timestamp function getCurrentBlockTimestamp() public view returns (uint256 timestamp) { timestamp = block.timestamp; } /// @notice Returns the (ETH) balance of a given address function getEthBalance(address addr) public view returns (uint256 balance) { balance = addr.balance; } /// @notice Returns the block hash of the last block function getLastBlockHash() public view returns (bytes32 blockHash) { unchecked { blockHash = blockhash(block.number - 1); } } /// @notice Gets the base fee of the given block /// @notice Can revert if the BASEFEE opcode is not implemented by the given chain function getBasefee() public view returns (uint256 basefee) { basefee = block.basefee; } /// @notice Returns the chain id function getChainId() public view returns (uint256 chainid) { chainid = block.chainid; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call[]","name":"calls","type":"tuple[]"}],"name":"aggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes[]","name":"returnData","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call3[]","name":"calls","type":"tuple[]"}],"name":"aggregate3","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call3Value[]","name":"calls","type":"tuple[]"}],"name":"aggregate3Value","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call[]","name":"calls","type":"tuple[]"}],"name":"blockAndAggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getBasefee","outputs":[{"internalType":"uint256","name":"basefee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getBlockHash","outputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"chainid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlockCoinbase","outputs":[{"internalType":"address","name":"coinbase","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlockGasLimit","outputs":[{"internalType":"uint256","name":"gaslimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBlockTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getEthBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastBlockHash","outputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"requireSuccess","type":"bool"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call[]","name":"calls","type":"tuple[]"}],"name":"tryAggregate","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"requireSuccess","type":"bool"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct Multicall3.Call[]","name":"calls","type":"tuple[]"}],"name":"tryBlockAndAggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct Multicall3.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610ebb806100206000396000f3fe6080604052600436106100e85760003560e01c806342cbb15c1161008a578063a8b0574e11610059578063a8b0574e1461023c578063bce38bd714610257578063c3077fa91461026a578063ee82ac5e1461027d57600080fd5b806342cbb15c146101ce5780634d2301cc146101e157806382ad56cb1461021657806386d516e81461022957600080fd5b806327e86d6e116100c657806327e86d6e146101505780633408e47014610186578063399542e9146101995780633e64a696146101bb57600080fd5b80630f28c97d146100ed578063174dea711461010f578063252dba421461012f575b600080fd5b3480156100f957600080fd5b50425b6040519081526020015b60405180910390f35b61012261011d366004610a67565b61029c565b6040516101069190610b99565b61014261013d366004610a67565b6104d1565b604051610106929190610bb3565b34801561015c57600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01406100fc565b34801561019257600080fd5b50466100fc565b6101ac6101a7366004610c3b565b610672565b60405161010693929190610c95565b3480156101c757600080fd5b50486100fc565b3480156101da57600080fd5b50436100fc565b3480156101ed57600080fd5b506100fc6101fc366004610cbd565b73ffffffffffffffffffffffffffffffffffffffff163190565b610122610224366004610a67565b61068d565b34801561023557600080fd5b50456100fc565b34801561024857600080fd5b50604051418152602001610106565b610122610265366004610c3b565b61083c565b6101ac610278366004610a67565b6109fc565b34801561028957600080fd5b506100fc610298366004610cf3565b4090565b60606000828067ffffffffffffffff8111156102ba576102ba610d0c565b60405190808252806020026020018201604052801561030057816020015b6040805180820190915260008152606060208201528152602001906001900390816102d85790505b5092503660005b8281101561045957600085828151811061032357610323610d3b565b6020026020010151905087878381811061033f5761033f610d3b565b90506020028101906103519190610d6a565b60408101359586019590935061036a6020850185610cbd565b73ffffffffffffffffffffffffffffffffffffffff168161038e6060870187610da8565b60405161039c929190610e0d565b60006040518083038185875af1925050503d80600081146103d9576040519150601f19603f3d011682016040523d82523d6000602084013e6103de565b606091505b50602080850191909152901515808452908501351761044f577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610307565b508234146104c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff8111156104ee576104ee610d0c565b60405190808252806020026020018201604052801561052157816020015b606081526020019060019003908161050c5790505b5091503660005b8281101561066857600087878381811061054457610544610d3b565b90506020028101906105569190610e1d565b92506105656020840184610cbd565b73ffffffffffffffffffffffffffffffffffffffff166105886020850185610da8565b604051610596929190610e0d565b6000604051808303816000865af19150503d80600081146105d3576040519150601f19603f3d011682016040523d82523d6000602084013e6105d8565b606091505b508684815181106105eb576105eb610d3b565b602090810291909101015290508061065f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104bf565b50600101610528565b5050509250929050565b438040606061068286868661083c565b905093509350939050565b6060818067ffffffffffffffff8111156106a9576106a9610d0c565b6040519080825280602002602001820160405280156106ef57816020015b6040805180820190915260008152606060208201528152602001906001900390816106c75790505b5091503660005b828110156104c857600084828151811061071257610712610d3b565b6020026020010151905086868381811061072e5761072e610d3b565b90506020028101906107409190610e51565b925061074f6020840184610cbd565b73ffffffffffffffffffffffffffffffffffffffff166107726040850185610da8565b604051610780929190610e0d565b6000604051808303816000865af19150503d80600081146107bd576040519150601f19603f3d011682016040523d82523d6000602084013e6107c2565b606091505b506020808401919091529015158083529084013517610833577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b506001016106f6565b6060818067ffffffffffffffff81111561085857610858610d0c565b60405190808252806020026020018201604052801561089e57816020015b6040805180820190915260008152606060208201528152602001906001900390816108765790505b5091503660005b828110156109f25760008482815181106108c1576108c1610d3b565b602002602001015190508686838181106108dd576108dd610d3b565b90506020028101906108ef9190610e1d565b92506108fe6020840184610cbd565b73ffffffffffffffffffffffffffffffffffffffff166109216020850185610da8565b60405161092f929190610e0d565b6000604051808303816000865af19150503d806000811461096c576040519150601f19603f3d011682016040523d82523d6000602084013e610971565b606091505b5060208301521515815287156109e95780516109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104bf565b506001016108a5565b5050509392505050565b6000806060610a0d60018686610672565b919790965090945092505050565b60008083601f840112610a2d57600080fd5b50813567ffffffffffffffff811115610a4557600080fd5b6020830191508360208260051b8501011115610a6057600080fd5b9250929050565b60008060208385031215610a7a57600080fd5b823567ffffffffffffffff811115610a9157600080fd5b610a9d85828601610a1b565b90969095509350505050565b6000815180845260005b81811015610acf57602081850181015186830182015201610ab3565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600082825180855260208086019550808260051b84010181860160005b84811015610b8c578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b7881860183610aa9565b9a86019a9450505090830190600101610b2a565b5090979650505050505050565b602081526000610bac6020830184610b0d565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c2d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c1b868351610aa9565b95509284019290840190600101610be1565b509398975050505050505050565b600080600060408486031215610c5057600080fd5b83358015158114610c6057600080fd5b9250602084013567ffffffffffffffff811115610c7c57600080fd5b610c8886828701610a1b565b9497909650939450505050565b838152826020820152606060408201526000610cb46060830184610b0d565b95945050505050565b600060208284031215610ccf57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bac57600080fd5b600060208284031215610d0557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610d9e57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ddd57600080fd5b83018035915067ffffffffffffffff821115610df857600080fd5b602001915036819003821315610a6057600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610d9e57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610d9e57600080fdfea264697066735822122015204ae92b1f39481fefe0c443a677062c32027cd13c71a535acf3763dc22c0264736f6c63430008130033
Deployed Bytecode
0x6080604052600436106100e85760003560e01c806342cbb15c1161008a578063a8b0574e11610059578063a8b0574e1461023c578063bce38bd714610257578063c3077fa91461026a578063ee82ac5e1461027d57600080fd5b806342cbb15c146101ce5780634d2301cc146101e157806382ad56cb1461021657806386d516e81461022957600080fd5b806327e86d6e116100c657806327e86d6e146101505780633408e47014610186578063399542e9146101995780633e64a696146101bb57600080fd5b80630f28c97d146100ed578063174dea711461010f578063252dba421461012f575b600080fd5b3480156100f957600080fd5b50425b6040519081526020015b60405180910390f35b61012261011d366004610a67565b61029c565b6040516101069190610b99565b61014261013d366004610a67565b6104d1565b604051610106929190610bb3565b34801561015c57600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01406100fc565b34801561019257600080fd5b50466100fc565b6101ac6101a7366004610c3b565b610672565b60405161010693929190610c95565b3480156101c757600080fd5b50486100fc565b3480156101da57600080fd5b50436100fc565b3480156101ed57600080fd5b506100fc6101fc366004610cbd565b73ffffffffffffffffffffffffffffffffffffffff163190565b610122610224366004610a67565b61068d565b34801561023557600080fd5b50456100fc565b34801561024857600080fd5b50604051418152602001610106565b610122610265366004610c3b565b61083c565b6101ac610278366004610a67565b6109fc565b34801561028957600080fd5b506100fc610298366004610cf3565b4090565b60606000828067ffffffffffffffff8111156102ba576102ba610d0c565b60405190808252806020026020018201604052801561030057816020015b6040805180820190915260008152606060208201528152602001906001900390816102d85790505b5092503660005b8281101561045957600085828151811061032357610323610d3b565b6020026020010151905087878381811061033f5761033f610d3b565b90506020028101906103519190610d6a565b60408101359586019590935061036a6020850185610cbd565b73ffffffffffffffffffffffffffffffffffffffff168161038e6060870187610da8565b60405161039c929190610e0d565b60006040518083038185875af1925050503d80600081146103d9576040519150601f19603f3d011682016040523d82523d6000602084013e6103de565b606091505b50602080850191909152901515808452908501351761044f577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610307565b508234146104c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff8111156104ee576104ee610d0c565b60405190808252806020026020018201604052801561052157816020015b606081526020019060019003908161050c5790505b5091503660005b8281101561066857600087878381811061054457610544610d3b565b90506020028101906105569190610e1d565b92506105656020840184610cbd565b73ffffffffffffffffffffffffffffffffffffffff166105886020850185610da8565b604051610596929190610e0d565b6000604051808303816000865af19150503d80600081146105d3576040519150601f19603f3d011682016040523d82523d6000602084013e6105d8565b606091505b508684815181106105eb576105eb610d3b565b602090810291909101015290508061065f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104bf565b50600101610528565b5050509250929050565b438040606061068286868661083c565b905093509350939050565b6060818067ffffffffffffffff8111156106a9576106a9610d0c565b6040519080825280602002602001820160405280156106ef57816020015b6040805180820190915260008152606060208201528152602001906001900390816106c75790505b5091503660005b828110156104c857600084828151811061071257610712610d3b565b6020026020010151905086868381811061072e5761072e610d3b565b90506020028101906107409190610e51565b925061074f6020840184610cbd565b73ffffffffffffffffffffffffffffffffffffffff166107726040850185610da8565b604051610780929190610e0d565b6000604051808303816000865af19150503d80600081146107bd576040519150601f19603f3d011682016040523d82523d6000602084013e6107c2565b606091505b506020808401919091529015158083529084013517610833577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b506001016106f6565b6060818067ffffffffffffffff81111561085857610858610d0c565b60405190808252806020026020018201604052801561089e57816020015b6040805180820190915260008152606060208201528152602001906001900390816108765790505b5091503660005b828110156109f25760008482815181106108c1576108c1610d3b565b602002602001015190508686838181106108dd576108dd610d3b565b90506020028101906108ef9190610e1d565b92506108fe6020840184610cbd565b73ffffffffffffffffffffffffffffffffffffffff166109216020850185610da8565b60405161092f929190610e0d565b6000604051808303816000865af19150503d806000811461096c576040519150601f19603f3d011682016040523d82523d6000602084013e610971565b606091505b5060208301521515815287156109e95780516109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104bf565b506001016108a5565b5050509392505050565b6000806060610a0d60018686610672565b919790965090945092505050565b60008083601f840112610a2d57600080fd5b50813567ffffffffffffffff811115610a4557600080fd5b6020830191508360208260051b8501011115610a6057600080fd5b9250929050565b60008060208385031215610a7a57600080fd5b823567ffffffffffffffff811115610a9157600080fd5b610a9d85828601610a1b565b90969095509350505050565b6000815180845260005b81811015610acf57602081850181015186830182015201610ab3565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600082825180855260208086019550808260051b84010181860160005b84811015610b8c578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b7881860183610aa9565b9a86019a9450505090830190600101610b2a565b5090979650505050505050565b602081526000610bac6020830184610b0d565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c2d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c1b868351610aa9565b95509284019290840190600101610be1565b509398975050505050505050565b600080600060408486031215610c5057600080fd5b83358015158114610c6057600080fd5b9250602084013567ffffffffffffffff811115610c7c57600080fd5b610c8886828701610a1b565b9497909650939450505050565b838152826020820152606060408201526000610cb46060830184610b0d565b95945050505050565b600060208284031215610ccf57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bac57600080fd5b600060208284031215610d0557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610d9e57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ddd57600080fd5b83018035915067ffffffffffffffff821115610df857600080fd5b602001915036819003821315610a6057600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610d9e57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610d9e57600080fdfea264697066735822122015204ae92b1f39481fefe0c443a677062c32027cd13c71a535acf3763dc22c0264736f6c63430008130033
Deployed Bytecode Sourcemap
563:9322:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8946:122;;;;;;;;;;-1:-1:-1;9045:15:0;8946:122;;;160:25:1;;;148:2;133:18;8946:122:0;;;;;;;;5948:1993;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1255:546::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;9320:162::-;;;;;;;;;;-1:-1:-1;9446:12:0;:16;;9436:27;9320:162;;9780:102;;;;;;;;;;-1:-1:-1;9861:13:0;9780:102;;3059:316;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;9632:102::-;;;;;;;;;;-1:-1:-1;9713:13:0;9632:102;;8247:113;;;;;;;;;;-1:-1:-1;8340:12:0;8247:113;;9138:116;;;;;;;;;;-1:-1:-1;9138:116:0;;;;;:::i;:::-;9234:12;;;;9138:116;4185:1519;;;;;;:::i;:::-;;:::i;8775:118::-;;;;;;;;;;-1:-1:-1;8871:14:0;8775:118;;8412;;;;;;;;;;-1:-1:-1;8412:118:0;;8508:14;6396:74:1;;6384:2;6369:18;8412:118:0;6250:226:1;2093:576:0;;;;;;:::i;:::-;;:::i;3765:233::-;;;;;;:::i;:::-;;:::i;8061:136::-;;;;;;;;;;-1:-1:-1;8061:136:0;;;;;:::i;:::-;8167:22;;8061:136;5948:1993;6026:26;6065:22;6115:5;;6151:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;6151:20:0;;;;;;;;;;;;;;;;6138:33;;6182:25;6223:9;6218:1569;6242:6;6238:1;:10;6218:1569;;;6266:20;6289:10;6300:1;6289:13;;;;;;;;:::i;:::-;;;;;;;6266:36;;6325:5;;6331:1;6325:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6362:11;;;;6577:21;;;;6317:16;;-1:-1:-1;6653:12:0;;;;6317:16;6653:12;:::i;:::-;:17;;6678:3;6683:14;;;;:5;:14;:::i;:::-;6653:45;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6632:17:0;;;;6615:83;;;;;;;;;;6939:16;;;6926:30;6923:49;6913:816;;7109:66;7103:4;7096:80;7251:66;7245:4;7238:80;7405:66;7399:4;7392:80;7603:66;7597:4;7590:80;7705:4;7699;7692:18;6913:816;-1:-1:-1;;7770:3:0;;6218:1569;;;;7888:14;7875:9;:27;7867:66;;;;;;;8496:2:1;7867:66:0;;;8478:21:1;8535:2;8515:18;;;8508:30;8574:28;8554:18;;;8547:56;8620:18;;7867:66:0;;;;;;;;;6054:1887;;;5948:1993;;;;:::o;1255:546::-;1394:12;1342:25;1434:5;;1470:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1457:32;;1500:18;1534:9;1529:265;1553:6;1549:1;:10;1529:265;;;1577:12;1611:5;;1617:1;1611:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1604:15;-1:-1:-1;1661:11:0;;;;1604:15;1661:11;:::i;:::-;:16;;1678:13;;;;:4;:13;:::i;:::-;1661:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1644:10;1655:1;1644:13;;;;;;;;:::i;:::-;;;;;;;;;;1634:58;;-1:-1:-1;1634:58:0;1707:43;;;;;;;9233:2:1;1707:43:0;;;9215:21:1;9272:2;9252:18;;;9245:30;9311:25;9291:18;;;9284:53;9354:18;;1707:43:0;9031:347:1;1707:43:0;-1:-1:-1;1777:3:0;;1529:265;;;;1369:432;;1255:546;;;;;:::o;3059:316::-;3250:12;3285:23;;3197:26;3332:35;3345:14;3361:5;;3332:12;:35::i;:::-;3319:48;;3059:316;;;;;;;:::o;4185:1519::-;4253:26;4309:5;;4345:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;4345:20:0;;;;;;;;;;;;;;;;4332:33;;4376:20;4412:9;4407:1290;4431:6;4427:1;:10;4407:1290;;;4455:20;4478:10;4489:1;4478:13;;;;;;;;:::i;:::-;;;;;;;4455:36;;4514:5;;4520:1;4514:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4506:16;-1:-1:-1;4575:12:0;;;;4506:16;4575:12;:::i;:::-;:17;;4593:14;;;;:5;:14;:::i;:::-;4575:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4554:17:0;;;;4537:71;;;;;;;;;;4849:16;;;4836:30;4833:49;4823:816;;5019:66;5013:4;5006:80;5161:66;5155:4;5148:80;5315:66;5309:4;5302:80;5513:66;5507:4;5500:80;5615:4;5609;5602:18;4823:816;-1:-1:-1;5680:3:0;;4407:1290;;2093:576;2183:26;2239:5;;2275:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2275:20:0;;;;;;;;;;;;;;;;2262:33;;2306:18;2340:9;2335:327;2359:6;2355:1;:10;2335:327;;;2383:20;2406:10;2417:1;2406:13;;;;;;;;:::i;:::-;;;;;;;2383:36;;2441:5;;2447:1;2441:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2434:15;-1:-1:-1;2502:11:0;;;;2434:15;2502:11;:::i;:::-;:16;;2519:13;;;;:4;:13;:::i;:::-;2502:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2481:17:0;;;2464:69;;;;;2548:70;;;;2576:14;;2568:50;;;;;;;9233:2:1;2568:50:0;;;9215:21:1;9272:2;9252:18;;;9245:30;9311:25;9291:18;;;9284:53;9354:18;;2568:50:0;9031:347:1;2568:50:0;-1:-1:-1;2645:3:0;;2335:327;;;;2211:458;;2093:576;;;;;:::o;3765:233::-;3839:19;3860:17;3879:26;3957:33;3978:4;3984:5;;3957:20;:33::i;:::-;3918:72;;;;-1:-1:-1;3918:72:0;;-1:-1:-1;3765:233:0;-1:-1:-1;;;3765:233:0:o;196:386:1:-;278:8;288:6;342:3;335:4;327:6;323:17;319:27;309:55;;360:1;357;350:12;309:55;-1:-1:-1;383:20:1;;426:18;415:30;;412:50;;;458:1;455;448:12;412:50;495:4;487:6;483:17;471:29;;555:3;548:4;538:6;535:1;531:14;523:6;519:27;515:38;512:47;509:67;;;572:1;569;562:12;509:67;196:386;;;;;:::o;587:484::-;701:6;709;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;818:9;805:23;851:18;843:6;840:30;837:50;;;883:1;880;873:12;837:50;922:89;1003:7;994:6;983:9;979:22;922:89;:::i;:::-;1030:8;;896:115;;-1:-1:-1;587:484:1;-1:-1:-1;;;;587:484:1:o;1076:481::-;1117:3;1155:5;1149:12;1182:6;1177:3;1170:19;1207:1;1217:162;1231:6;1228:1;1225:13;1217:162;;;1293:4;1349:13;;;1345:22;;1339:29;1321:11;;;1317:20;;1310:59;1246:12;1217:162;;;1221:3;1424:1;1417:4;1408:6;1403:3;1399:16;1395:27;1388:38;1546:4;1476:66;1471:2;1463:6;1459:15;1455:88;1450:3;1446:98;1442:109;1435:116;;;1076:481;;;;:::o;1562:869::-;1621:3;1652;1684:5;1678:12;1711:6;1706:3;1699:19;1737:4;1766:2;1761:3;1757:12;1750:19;;1822:2;1812:6;1809:1;1805:14;1798:5;1794:26;1790:35;1859:2;1852:5;1848:14;1880:1;1890:515;1904:6;1901:1;1898:13;1890:515;;;1969:16;;;1987:66;1965:89;1953:102;;2078:13;;2158:9;;2151:17;2144:25;2131:39;;2209:11;;2203:18;2114:4;2241:13;;;2234:25;;;2280:45;2311:13;;;2203:18;2280:45;:::i;:::-;2383:12;;;;2272:53;-1:-1:-1;;;2348:15:1;;;;1926:1;1919:9;1890:515;;;-1:-1:-1;2421:4:1;;1562:869;-1:-1:-1;;;;;;;1562:869:1:o;2436:311::-;2659:2;2648:9;2641:21;2622:4;2679:62;2737:2;2726:9;2722:18;2714:6;2679:62;:::i;:::-;2671:70;2436:311;-1:-1:-1;;;2436:311:1:o;3234:930::-;3422:4;3470:2;3459:9;3455:18;3500:6;3489:9;3482:25;3526:2;3564;3559;3548:9;3544:18;3537:30;3587:6;3622;3616:13;3653:6;3645;3638:22;3691:2;3680:9;3676:18;3669:25;;3753:2;3743:6;3740:1;3736:14;3725:9;3721:30;3717:39;3703:53;;3791:2;3783:6;3779:15;3812:1;3822:313;3836:6;3833:1;3830:13;3822:313;;;3925:66;3913:9;3905:6;3901:22;3897:95;3892:3;3885:108;4016:39;4048:6;4039;4033:13;4016:39;:::i;:::-;4006:49;-1:-1:-1;4113:12:1;;;;4078:15;;;;3858:1;3851:9;3822:313;;;-1:-1:-1;4152:6:1;;3234:930;-1:-1:-1;;;;;;;;3234:930:1:o;4351:638::-;4464:6;4472;4480;4533:2;4521:9;4512:7;4508:23;4504:32;4501:52;;;4549:1;4546;4539:12;4501:52;4588:9;4575:23;4641:5;4634:13;4627:21;4620:5;4617:32;4607:60;;4663:1;4660;4653:12;4607:60;4686:5;-1:-1:-1;4742:2:1;4727:18;;4714:32;4769:18;4758:30;;4755:50;;;4801:1;4798;4791:12;4755:50;4840:89;4921:7;4912:6;4901:9;4897:22;4840:89;:::i;:::-;4351:638;;4948:8;;-1:-1:-1;4814:115:1;;-1:-1:-1;;;;4351:638:1:o;4994:453::-;5273:6;5262:9;5255:25;5316:6;5311:2;5300:9;5296:18;5289:34;5359:2;5354;5343:9;5339:18;5332:30;5236:4;5379:62;5437:2;5426:9;5422:18;5414:6;5379:62;:::i;:::-;5371:70;4994:453;-1:-1:-1;;;;;4994:453:1:o;5452:309::-;5511:6;5564:2;5552:9;5543:7;5539:23;5535:32;5532:52;;;5580:1;5577;5570:12;5532:52;5619:9;5606:23;5669:42;5662:5;5658:54;5651:5;5648:65;5638:93;;5727:1;5724;5717:12;6481:180;6540:6;6593:2;6581:9;6572:7;6568:23;6564:32;6561:52;;;6609:1;6606;6599:12;6561:52;-1:-1:-1;6632:23:1;;6481:180;-1:-1:-1;6481:180:1:o;6666:184::-;6718:77;6715:1;6708:88;6815:4;6812:1;6805:15;6839:4;6836:1;6829:15;6855:184;6907:77;6904:1;6897:88;7004:4;7001:1;6994:15;7028:4;7025:1;7018:15;7044:384;7138:4;7196:11;7183:25;7286:66;7275:8;7259:14;7255:29;7251:102;7231:18;7227:127;7217:155;;7368:1;7365;7358:12;7217:155;7389:33;;;;;7044:384;-1:-1:-1;;7044:384:1:o;7433:580::-;7510:4;7516:6;7576:11;7563:25;7666:66;7655:8;7639:14;7635:29;7631:102;7611:18;7607:127;7597:155;;7748:1;7745;7738:12;7597:155;7775:33;;7827:20;;;-1:-1:-1;7870:18:1;7859:30;;7856:50;;;7902:1;7899;7892:12;7856:50;7935:4;7923:17;;-1:-1:-1;7966:14:1;7962:27;;;7952:38;;7949:58;;;8003:1;8000;7993:12;8018:271;8201:6;8193;8188:3;8175:33;8157:3;8227:16;;8252:13;;;8227:16;8018:271;-1:-1:-1;8018:271:1:o;8649:377::-;8736:4;8794:11;8781:25;8884:66;8873:8;8857:14;8853:29;8849:102;8829:18;8825:127;8815:155;;8966:1;8963;8956:12;9383:379;9472:4;9530:11;9517:25;9620:66;9609:8;9593:14;9589:29;9585:102;9565:18;9561:127;9551:155;;9702:1;9699;9692:12
Swarm Source
ipfs://15204ae92b1f39481fefe0c443a677062c32027cd13c71a535acf3763dc22c02
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.