Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Saver Flash ... | 10154133 | 1674 days ago | IN | 0 ETH | 0.00130038 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
10324812 | 1647 days ago | 0.0045 ETH | ||||
10324812 | 1647 days ago | 0.0045 ETH | ||||
10324812 | 1647 days ago | 0.0045 ETH | ||||
10324812 | 1647 days ago | 0.0045 ETH | ||||
10324180 | 1647 days ago | 0.00465 ETH | ||||
10324180 | 1647 days ago | 0.00465 ETH | ||||
10324180 | 1647 days ago | 0.00465 ETH | ||||
10324180 | 1647 days ago | 0.00465 ETH | ||||
10323628 | 1647 days ago | 0.0075 ETH | ||||
10323628 | 1647 days ago | 0.0075 ETH | ||||
10323628 | 1647 days ago | 0.0075 ETH | ||||
10323628 | 1647 days ago | 0.0075 ETH | ||||
10322716 | 1648 days ago | 0.0069 ETH | ||||
10322716 | 1648 days ago | 0.0069 ETH | ||||
10322716 | 1648 days ago | 0.0069 ETH | ||||
10322716 | 1648 days ago | 0.0069 ETH | ||||
10313283 | 1649 days ago | 0.00435 ETH | ||||
10313283 | 1649 days ago | 0.00435 ETH | ||||
10313283 | 1649 days ago | 0.00435 ETH | ||||
10313283 | 1649 days ago | 0.00435 ETH | ||||
10313267 | 1649 days ago | 0.0042 ETH | ||||
10313267 | 1649 days ago | 0.0042 ETH | ||||
10313205 | 1649 days ago | 0.00405 ETH | ||||
10313205 | 1649 days ago | 0.00405 ETH | ||||
10313194 | 1649 days ago | 0.00405 ETH |
Loading...
Loading
Contract Name:
CompoundSaverFlashLoan
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-05-28 */ pragma solidity ^0.6.0; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IFlashLoanReceiver { function executeOperation(address _reserve, uint256 _amount, uint256 _fee, bytes calldata _params) external; } abstract contract ILendingPoolAddressesProvider { function getLendingPool() public view virtual returns (address); function setLendingPoolImpl(address _pool) public virtual; function getLendingPoolCore() public virtual view returns (address payable); function setLendingPoolCoreImpl(address _lendingPoolCore) public virtual; function getLendingPoolConfigurator() public virtual view returns (address); function setLendingPoolConfiguratorImpl(address _configurator) public virtual; function getLendingPoolDataProvider() public virtual view returns (address); function setLendingPoolDataProviderImpl(address _provider) public virtual; function getLendingPoolParametersProvider() public virtual view returns (address); function setLendingPoolParametersProviderImpl(address _parametersProvider) public virtual; function getTokenDistributor() public virtual view returns (address); function setTokenDistributor(address _tokenDistributor) public virtual; function getFeeProvider() public virtual view returns (address); function setFeeProviderImpl(address _feeProvider) public virtual; function getLendingPoolLiquidationManager() public virtual view returns (address); function setLendingPoolLiquidationManager(address _manager) public virtual; function getLendingPoolManager() public virtual view returns (address); function setLendingPoolManager(address _lendingPoolManager) public virtual; function getPriceOracle() public virtual view returns (address); function setPriceOracle(address _priceOracle) public virtual; function getLendingRateOracle() public view virtual returns (address); function setLendingRateOracle(address _lendingRateOracle) public virtual; } library EthAddressLib { function ethAddress() internal pure returns(address) { return 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; } } abstract contract FlashLoanReceiverBase is IFlashLoanReceiver { using SafeERC20 for IERC20; using SafeMath for uint256; ILendingPoolAddressesProvider public addressesProvider; constructor(ILendingPoolAddressesProvider _provider) public { addressesProvider = _provider; } receive () external virtual payable {} function transferFundsBackToPoolInternal(address _reserve, uint256 _amount) internal { address payable core = addressesProvider.getLendingPoolCore(); transferInternal(core,_reserve, _amount); } function transferInternal(address payable _destination, address _reserve, uint256 _amount) internal { if(_reserve == EthAddressLib.ethAddress()) { //solium-disable-next-line _destination.call{value: _amount}(""); return; } IERC20(_reserve).safeTransfer(_destination, _amount); } function getBalanceInternal(address _target, address _reserve) internal view returns(uint256) { if(_reserve == EthAddressLib.ethAddress()) { return _target.balance; } return IERC20(_reserve).balanceOf(_target); } } abstract contract DSProxyInterface { /// Truffle wont compile if this isn't commented // function execute(bytes memory _code, bytes memory _data) // public virtual // payable // returns (address, bytes32); function execute(address _target, bytes memory _data) public virtual payable returns (bytes32); function setCache(address _cacheAddr) public virtual payable returns (bool); function owner() public virtual returns (address); } interface ERC20 { function totalSupply() external view returns (uint256 supply); function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function decimals() external view returns (uint256 digits); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /// @title Contract that receives the FL from Aave for Repays/Boost contract CompoundSaverFlashLoan is FlashLoanReceiverBase { ILendingPoolAddressesProvider public LENDING_POOL_ADDRESS_PROVIDER = ILendingPoolAddressesProvider(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8); address payable public COMPOUND_SAVER_FLASH_PROXY; address public constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public owner; constructor() FlashLoanReceiverBase(LENDING_POOL_ADDRESS_PROVIDER) public { owner = msg.sender; } /// @notice Called by Aave when sending back the FL amount /// @param _reserve The address of the borrowed token /// @param _amount Amount of FL tokens received /// @param _fee FL Aave fee /// @param _params The params that are sent from the original FL caller contract function executeOperation( address _reserve, uint256 _amount, uint256 _fee, bytes calldata _params) external override { // Format the call data for DSProxy (bytes memory proxyData, address payable proxyAddr) = packFunctionCall(_amount, _fee, _params); // Send Flash loan amount to DSProxy sendLoanToProxy(proxyAddr, _reserve, _amount); // Execute the DSProxy call DSProxyInterface(proxyAddr).execute(COMPOUND_SAVER_FLASH_PROXY, proxyData); // Repay the loan with the money DSProxy sent back transferFundsBackToPoolInternal(_reserve, _amount.add(_fee)); // if there is some eth left (0x fee), return it to user if (address(this).balance > 0) { tx.origin.transfer(address(this).balance); } } /// @notice Formats function data call so we can call it through DSProxy /// @param _amount Amount of FL /// @param _fee Fee of the FL /// @param _params Saver proxy params /// @return proxyData Formated function call data function packFunctionCall(uint _amount, uint _fee, bytes memory _params) internal returns (bytes memory proxyData, address payable) { ( uint[5] memory data, // amount, minPrice, exchangeType, gasCost, 0xPrice address[3] memory addrData, // cCollAddress, cBorrowAddress, exchangeAddress bytes memory callData, bool isRepay, address payable proxyAddr ) = abi.decode(_params, (uint256[5],address[3],bytes,bool,address)); uint[2] memory flashLoanData = [_amount, _fee]; if (isRepay) { proxyData = abi.encodeWithSignature("flashRepay(uint256[5],address[3],bytes,uint256[2])", data, addrData, callData, flashLoanData); } else { proxyData = abi.encodeWithSignature("flashBoost(uint256[5],address[3],bytes,uint256[2])", data, addrData, callData, flashLoanData); } return (proxyData, proxyAddr); } /// @notice Send the FL funds received to DSProxy /// @param _proxy DSProxy address /// @param _reserve Token address /// @param _amount Amount of tokens function sendLoanToProxy(address payable _proxy, address _reserve, uint _amount) internal { if (_reserve != ETH_ADDRESS) { ERC20(_reserve).transfer(_proxy, _amount); } _proxy.transfer(address(this).balance); } /// @notice Sets the Saver flash proxy address /// @dev Only callable once by the owner /// @param _saverFlashProxy The flash proxy address function setSaverFlashProxy(address payable _saverFlashProxy) public { require(msg.sender == owner); COMPOUND_SAVER_FLASH_PROXY = _saverFlashProxy; } receive() external override payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"COMPOUND_SAVER_FLASH_PROXY","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LENDING_POOL_ADDRESS_PROVIDER","outputs":[{"internalType":"contract ILendingPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressesProvider","outputs":[{"internalType":"contract ILendingPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_reserve","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"bytes","name":"_params","type":"bytes"}],"name":"executeOperation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_saverFlashProxy","type":"address"}],"name":"setSaverFlashProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600180546001600160a01b0319167324a42fd28c976a61df5d00d0599c34c4f90748c817905534801561003657600080fd5b50600154600080546001600160a01b03199081166001600160a01b039093169290921790556003805490911633179055610cf2806100756000396000f3fe6080604052600436106100745760003560e01c80639b3c8e161161004e5780639b3c8e16146100fb578063a734f06e14610110578063c72c4d1014610125578063ee8725581461013a5761007b565b806380990c8a146100805780638da5cb5b146100b557806398ab3d49146100e65761007b565b3661007b57005b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101d3565b005b3480156100c157600080fd5b506100ca61020c565b604080516001600160a01b039092168252519081900360200190f35b3480156100f257600080fd5b506100ca61021b565b34801561010757600080fd5b506100ca61022a565b34801561011c57600080fd5b506100ca610239565b34801561013157600080fd5b506100ca610251565b34801561014657600080fd5b506100b36004803603608081101561015d57600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561019457600080fd5b8201836020820111156101a657600080fd5b803590602001918460018302840111640100000000831117156101c857600080fd5b509092509050610260565b6003546001600160a01b031633146101ea57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6001546001600160a01b031681565b6002546001600160a01b031681565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000546001600160a01b031681565b606060006102a5868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103ef92505050565b915091506102b4818888610774565b60025460408051631cff79cd60e01b81526001600160a01b03928316600482018181526024830193845286516044840152865194861694631cff79cd949293889391606490910190602085019080838360005b8381101561031f578181015183820152602001610307565b50505050905090810190601f16801561034c5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561036c57600080fd5b505af1158015610380573d6000803e3d6000fd5b505050506040513d602081101561039657600080fd5b506103b29050876103ad888863ffffffff61086016565b6108c1565b47156103e65760405132904780156108fc02916000818181858888f193505050501580156103e4573d6000803e3d6000fd5b505b50505050505050565b606060006103fb610c38565b610403610c56565b60606000808780602001905161016081101561041e57600080fd5b6101008201805160405160a08501939092908501918591908464010000000082111561044957600080fd5b90830190602082018581111561045e57600080fd5b825164010000000081118282018810171561047857600080fd5b82525081516020918201929091019080838360005b838110156104a557818101518382015260200161048d565b50505050905090810190601f1680156104d25780820380516001836020036101000a031916815260200191505b5060409081526020820151910151959a509398509196509194509192506104fb9150610c749050565b60405180604001604052808c81526020018b8152509050821561064157858585836040516024018085600560200280838360005b8381101561054757818101518382015260200161052f565b5050505090500184600360200280838360005b8381101561057257818101518382015260200161055a565b50505092019150506020810183604080838360005b8381101561059f578181015183820152602001610587565b50505050905001828103825284818151815260200191508051906020019080838360005b838110156105db5781810151838201526020016105c3565b50505050905090810190601f1680156106085780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0316631b69fd9160e31b1790529d5061076595505050505050565b858585836040516024018085600560200280838360005b83811015610670578181015183820152602001610658565b5050505090500184600360200280838360005b8381101561069b578181015183820152602001610683565b50505092019150506020810183604080838360005b838110156106c85781810151838201526020016106b0565b50505050905001828103825284818151815260200191508051906020019080838360005b838110156107045781810151838201526020016106ec565b50505050905090810190601f1680156107315780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166326f31a6760e21b1790529d505050505050505b50945050505050935093915050565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461082557816001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156107f857600080fd5b505af115801561080c573d6000803e3d6000fd5b505050506040513d602081101561082257600080fd5b50505b6040516001600160a01b038416904780156108fc02916000818181858888f1935050505015801561085a573d6000803e3d6000fd5b50505050565b6000828201838110156108ba576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561091057600080fd5b505afa158015610924573d6000803e3d6000fd5b505050506040513d602081101561093a57600080fd5b5051905061094981848461094e565b505050565b6109566109df565b6001600160a01b0316826001600160a01b031614156109c5576040516001600160a01b038416908290600081818185875af1925050503d80600081146109b8576040519150601f19603f3d011682016040523d82523d6000602084013e6109bd565b606091505b505050610949565b6109496001600160a01b038316848363ffffffff6109f716565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610949908490610a56826001600160a01b0316610bfc565b610aa7576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310610ae55780518252601f199092019160209182019101610ac6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610b47576040519150601f19603f3d011682016040523d82523d6000602084013e610b4c565b606091505b509150915081610ba3576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561085a57808060200190516020811015610bbf57600080fd5b505161085a5760405162461bcd60e51b815260040180806020018281038252602a815260200180610c93602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610c3057508115155b949350505050565b6040518060a001604052806005906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d5c098dc8dcaa15852ac8ad232fdeda8f362e9c272f1fdc449e46f81257da0ad64736f6c63430006060033
Deployed Bytecode
0x6080604052600436106100745760003560e01c80639b3c8e161161004e5780639b3c8e16146100fb578063a734f06e14610110578063c72c4d1014610125578063ee8725581461013a5761007b565b806380990c8a146100805780638da5cb5b146100b557806398ab3d49146100e65761007b565b3661007b57005b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b03166101d3565b005b3480156100c157600080fd5b506100ca61020c565b604080516001600160a01b039092168252519081900360200190f35b3480156100f257600080fd5b506100ca61021b565b34801561010757600080fd5b506100ca61022a565b34801561011c57600080fd5b506100ca610239565b34801561013157600080fd5b506100ca610251565b34801561014657600080fd5b506100b36004803603608081101561015d57600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561019457600080fd5b8201836020820111156101a657600080fd5b803590602001918460018302840111640100000000831117156101c857600080fd5b509092509050610260565b6003546001600160a01b031633146101ea57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6001546001600160a01b031681565b6002546001600160a01b031681565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000546001600160a01b031681565b606060006102a5868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103ef92505050565b915091506102b4818888610774565b60025460408051631cff79cd60e01b81526001600160a01b03928316600482018181526024830193845286516044840152865194861694631cff79cd949293889391606490910190602085019080838360005b8381101561031f578181015183820152602001610307565b50505050905090810190601f16801561034c5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561036c57600080fd5b505af1158015610380573d6000803e3d6000fd5b505050506040513d602081101561039657600080fd5b506103b29050876103ad888863ffffffff61086016565b6108c1565b47156103e65760405132904780156108fc02916000818181858888f193505050501580156103e4573d6000803e3d6000fd5b505b50505050505050565b606060006103fb610c38565b610403610c56565b60606000808780602001905161016081101561041e57600080fd5b6101008201805160405160a08501939092908501918591908464010000000082111561044957600080fd5b90830190602082018581111561045e57600080fd5b825164010000000081118282018810171561047857600080fd5b82525081516020918201929091019080838360005b838110156104a557818101518382015260200161048d565b50505050905090810190601f1680156104d25780820380516001836020036101000a031916815260200191505b5060409081526020820151910151959a509398509196509194509192506104fb9150610c749050565b60405180604001604052808c81526020018b8152509050821561064157858585836040516024018085600560200280838360005b8381101561054757818101518382015260200161052f565b5050505090500184600360200280838360005b8381101561057257818101518382015260200161055a565b50505092019150506020810183604080838360005b8381101561059f578181015183820152602001610587565b50505050905001828103825284818151815260200191508051906020019080838360005b838110156105db5781810151838201526020016105c3565b50505050905090810190601f1680156106085780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0316631b69fd9160e31b1790529d5061076595505050505050565b858585836040516024018085600560200280838360005b83811015610670578181015183820152602001610658565b5050505090500184600360200280838360005b8381101561069b578181015183820152602001610683565b50505092019150506020810183604080838360005b838110156106c85781810151838201526020016106b0565b50505050905001828103825284818151815260200191508051906020019080838360005b838110156107045781810151838201526020016106ec565b50505050905090810190601f1680156107315780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03166326f31a6760e21b1790529d505050505050505b50945050505050935093915050565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461082557816001600160a01b031663a9059cbb84836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156107f857600080fd5b505af115801561080c573d6000803e3d6000fd5b505050506040513d602081101561082257600080fd5b50505b6040516001600160a01b038416904780156108fc02916000818181858888f1935050505015801561085a573d6000803e3d6000fd5b50505050565b6000828201838110156108ba576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561091057600080fd5b505afa158015610924573d6000803e3d6000fd5b505050506040513d602081101561093a57600080fd5b5051905061094981848461094e565b505050565b6109566109df565b6001600160a01b0316826001600160a01b031614156109c5576040516001600160a01b038416908290600081818185875af1925050503d80600081146109b8576040519150601f19603f3d011682016040523d82523d6000602084013e6109bd565b606091505b505050610949565b6109496001600160a01b038316848363ffffffff6109f716565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610949908490610a56826001600160a01b0316610bfc565b610aa7576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310610ae55780518252601f199092019160209182019101610ac6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610b47576040519150601f19603f3d011682016040523d82523d6000602084013e610b4c565b606091505b509150915081610ba3576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561085a57808060200190516020811015610bbf57600080fd5b505161085a5760405162461bcd60e51b815260040180806020018281038252602a815260200180610c93602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610c3057508115155b949350505050565b6040518060a001604052806005906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220d5c098dc8dcaa15852ac8ad232fdeda8f362e9c272f1fdc449e46f81257da0ad64736f6c63430006060033
Deployed Bytecode Sourcemap
17851:3721:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;21349:174:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21349:174:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21349:174:0;-1:-1:-1;;;;;21349:174:0;;:::i;:::-;;18211:20;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18211:20:0;;;:::i;:::-;;;;-1:-1:-1;;;;;18211:20:0;;;;;;;;;;;;;;17915:142;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17915:142:0;;;:::i;18066:49::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18066:49:0;;;:::i;18122:80::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18122:80:0;;;:::i;15472:54::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15472:54:0;;;:::i;18675:855::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18675:855:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;18675:855:0;;;;;;;;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;18675:855:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18675:855:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;18675:855:0;;-1:-1:-1;18675:855:0;-1:-1:-1;18675:855:0;:::i;21349:174::-;21451:5;;-1:-1:-1;;;;;21451:5:0;21437:10;:19;21429:28;;12:1:-1;9;2:12;21429:28:0;21470:26;:45;;-1:-1:-1;;;;;;21470:45:0;-1:-1:-1;;;;;21470:45:0;;;;;;;;;;21349:174::o;18211:20::-;;;-1:-1:-1;;;;;18211:20:0;;:::o;17915:142::-;;;-1:-1:-1;;;;;17915:142:0;;:::o;18066:49::-;;;-1:-1:-1;;;;;18066:49:0;;:::o;18122:80::-;18160:42;18122:80;:::o;15472:54::-;;;-1:-1:-1;;;;;15472:54:0;;:::o;18675:855::-;18891:22;18915:25;18944:40;18961:7;18970:4;18976:7;;18944:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18944:16:0;;-1:-1:-1;;;18944:40:0:i;:::-;18890:94;;;;19043:45;19059:9;19070:8;19080:7;19043:15;:45::i;:::-;19174:26;;19138:74;;;-1:-1:-1;;;19138:74:0;;-1:-1:-1;;;;;19174:26:0;;;19138:74;;;;;;;;;;;;;;;;;;;;:35;;;;;;19174:26;;19202:9;;19138:74;;;;;;;;;;;;;19174:26;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19138:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19138:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19138:74:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19285:60:0;;-1:-1:-1;19317:8:0;19327:17;:7;19339:4;19327:17;:11;:17;:::i;:::-;19285:31;:60::i;:::-;19428:21;:25;19424:99;;19470:41;;:9;;19489:21;19470:41;;;;;;;;;19489:21;19470:9;:41;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19470:41:0;19424:99;18675:855;;;;;;;:::o;19786:962::-;19877:22;19901:15;19944:19;;:::i;:::-;20030:26;;:::i;:::-;20120:21;20156:12;20183:25;20242:7;20231:63;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20231:63:0;;;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;20231:63:0;;420:4:-1;411:14;;;;20231:63:0;;;;;411:14:-1;20231:63:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20231:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20231:63:0;;;;;;;;;;;19929:365;;-1:-1:-1;19929:365:0;;-1:-1:-1;19929:365:0;;-1:-1:-1;20231:63:0;;-1:-1:-1;20231:63:0;;-1:-1:-1;20307:28:0;;-1:-1:-1;20307:28:0;;-1:-1:-1;20307:28:0:i;:::-;:46;;;;;;;;20339:7;20307:46;;;;20348:4;20307:46;;;;;20370:7;20366:333;;;20484:4;20490:8;20500;20510:13;20406:118;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20406:118:0;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;20406:118:0;;;-1:-1:-1;;20406:118:0;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20406:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20406:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20406:118:0;;;-1:-1:-1;;26:21;;;22:32;6:49;;20406:118:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20406:118:0;-1:-1:-1;20366:333:0;;-1:-1:-1;;;;;;20366:333:0;;20647:4;20653:8;20663;20673:13;20569:118;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20569:118:0;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;20569:118:0;;;-1:-1:-1;;20569:118:0;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20569:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20569:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20569:118:0;;;-1:-1:-1;;26:21;;;22:32;6:49;;20569:118:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20569:118:0;-1:-1:-1;;;;;;;20366:333:0;-1:-1:-1;20730:9:0;-1:-1:-1;;;;;19786:962:0;;;;;;:::o;20930:256::-;-1:-1:-1;;;;;21035:23:0;;18160:42;21035:23;21031:97;;21081:8;-1:-1:-1;;;;;21075:24:0;;21100:6;21108:7;21075:41;;;;;;;;;;;;;-1:-1:-1;;;;;21075:41:0;-1:-1:-1;;;;;21075:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21075:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21075:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;21031:97:0;21140:38;;-1:-1:-1;;;;;21140:15:0;;;21156:21;21140:38;;;;;;;;;21156:21;21140:15;:38;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21140:38:0;20930:256;;;:::o;5452:181::-;5510:7;5542:5;;;5566:6;;;;5558:46;;;;;-1:-1:-1;;;5558:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5624:1;5452:181;-1:-1:-1;;;5452:181:0:o;15697:220::-;15795:20;15818:17;;;;;;;;;-1:-1:-1;;;;;15818:17:0;-1:-1:-1;;;;;15818:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15818:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15818:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15818:38:0;;-1:-1:-1;15869:40:0;15818:38;15891:8;15901:7;15869:16;:40::i;:::-;15697:220;;;:::o;15925:356::-;16052:26;:24;:26::i;:::-;-1:-1:-1;;;;;16040:38:0;:8;-1:-1:-1;;;;;16040:38:0;;16037:168;;;16135:37;;-1:-1:-1;;;;;16135:17:0;;;16160:7;;16135:37;;;;16160:7;16135:17;:37;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;16135:37:0;;16187:7;;16037:168;16217:52;-1:-1:-1;;;;;16217:29:0;;16247:12;16261:7;16217:52;:29;:52;:::i;15205:121::-;15276:42;15205:121;:::o;10060:176::-;10169:58;;;-1:-1:-1;;;;;10169:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10169:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10143:85:0;;10162:5;;12703:27;12711:5;-1:-1:-1;;;;;12703:25:0;;:27::i;:::-;12695:71;;;;;-1:-1:-1;;;12695:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12840:12;12854:23;12889:5;-1:-1:-1;;;;;12881:19:0;12901:4;12881:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12881:25:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;12839:67:0;;;;12925:7;12917:52;;;;;-1:-1:-1;;;12917:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12986:17;;:21;12982:224;;13128:10;13117:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13117:30:0;13109:85;;;;-1:-1:-1;;;13109:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;634:619;694:4;1162:20;;1005:66;1202:23;;;;;;:42;;-1:-1:-1;1229:15:0;;;1202:42;1194:51;634:619;-1:-1:-1;;;;634:619:0:o;17851:3721::-;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;-1:-1;17851:3721:0;;;-1:-1:-1;;17851:3721:0:o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;-1:-1;17851:3721:0;;;-1:-1:-1;;17851:3721:0:o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;-1:-1;17851:3721:0;;;-1:-1:-1;;17851:3721:0:o
Swarm Source
ipfs://d5c098dc8dcaa15852ac8ad232fdeda8f362e9c272f1fdc449e46f81257da0ad
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.