Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 18 from a total of 18 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Deposit Conf... | 14717316 | 908 days ago | IN | 0 ETH | 0.00700572 | ||||
Set Deposit Conf... | 14717310 | 908 days ago | IN | 0 ETH | 0.00647097 | ||||
Set Deposit Conf... | 14717292 | 908 days ago | IN | 0 ETH | 0.00884017 | ||||
Set Deposit Conf... | 14717290 | 908 days ago | IN | 0 ETH | 0.00797736 | ||||
Set Deposit Conf... | 14705122 | 910 days ago | IN | 0 ETH | 0.0025808 | ||||
Set Deposit Conf... | 14627606 | 922 days ago | IN | 0 ETH | 0.00124126 | ||||
Update Token Cap | 14425357 | 954 days ago | IN | 0 ETH | 0.00132201 | ||||
Update Token Cap | 14418915 | 955 days ago | IN | 0 ETH | 0.00119806 | ||||
Transfer Ownersh... | 14375091 | 962 days ago | IN | 0 ETH | 0.0015504 | ||||
Set Deposit Conf... | 14375069 | 962 days ago | IN | 0 ETH | 0.00603885 | ||||
Add Supported To... | 14375068 | 962 days ago | IN | 0 ETH | 0.0102274 | ||||
Set Deposit Conf... | 14375055 | 962 days ago | IN | 0 ETH | 0.00372015 | ||||
Add Supported To... | 14375054 | 962 days ago | IN | 0 ETH | 0.0102298 | ||||
Set Deposit Conf... | 14375043 | 962 days ago | IN | 0 ETH | 0.00603165 | ||||
Add Supported To... | 14375042 | 962 days ago | IN | 0 ETH | 0.0102256 | ||||
Set Deposit Conf... | 14375033 | 962 days ago | IN | 0 ETH | 0.00371595 | ||||
Add Supported To... | 14375032 | 962 days ago | IN | 0 ETH | 0.010225 | ||||
0x60806040 | 14375005 | 962 days ago | IN | 0 ETH | 0.0622397 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TokenManager
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// $$$$$$$$\ $$\ $$\ $$\ // \__$$ __| $$ | $$$\ $$$ | // $$ | $$$$$$\ $$ | $$\ $$$$$$\ $$$$$$$\ $$$$\ $$$$ | $$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$\ $$$$$$\ $$$$$$\ // $$ |$$ __$$\ $$ | $$ |$$ __$$\ $$ __$$\ $$\$$\$$ $$ | \____$$\ $$ __$$\ \____$$\ $$ __$$\ $$ __$$\ $$ __$$\ // $$ |$$ / $$ |$$$$$$ / $$$$$$$$ |$$ | $$ | $$ \$$$ $$ | $$$$$$$ |$$ | $$ | $$$$$$$ |$$ / $$ |$$$$$$$$ |$$ | \__| // $$ |$$ | $$ |$$ _$$< $$ ____|$$ | $$ | $$ |\$ /$$ |$$ __$$ |$$ | $$ |$$ __$$ |$$ | $$ |$$ ____|$$ | // $$ |\$$$$$$ |$$ | \$$\ \$$$$$$$\ $$ | $$ | $$ | \_/ $$ |\$$$$$$$ |$$ | $$ |\$$$$$$$ |\$$$$$$$ |\$$$$$$$\ $$ | // \__| \______/ \__| \__| \_______|\__| \__| \__| \__| \_______|\__| \__| \_______| \____$$ | \_______|\__| // $$\ $$ | // \$$$$$$ | // \______/ // SPDX-License-Identifier: MIT pragma solidity 0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "../metatx/ERC2771Context.sol"; import "../interfaces/ITokenManager.sol"; contract TokenManager is ITokenManager, ERC2771Context, Ownable, Pausable { mapping(address => TokenInfo) public override tokensInfo; event FeeChanged(address indexed tokenAddress, uint256 indexed equilibriumFee, uint256 indexed maxFee); modifier tokenChecks(address tokenAddress) { require(tokenAddress != address(0), "Token address cannot be 0"); require(tokensInfo[tokenAddress].supportedToken, "Token not supported"); _; } /** * First key is toChainId and second key is token address being deposited on current chain */ mapping(uint256 => mapping(address => TokenConfig)) public depositConfig; /** * Store min/max amount of token to transfer based on token address */ mapping(address => TokenConfig) public transferConfig; constructor(address trustedForwarder) ERC2771Context(trustedForwarder) Ownable() Pausable() { // Empty Constructor } function getEquilibriumFee(address tokenAddress) public view override returns (uint256) { return tokensInfo[tokenAddress].equilibriumFee; } function getMaxFee(address tokenAddress) public view override returns (uint256) { return tokensInfo[tokenAddress].maxFee; } function changeFee( address tokenAddress, uint256 _equilibriumFee, uint256 _maxFee ) external override onlyOwner whenNotPaused { require(_equilibriumFee != 0, "Equilibrium Fee cannot be 0"); require(_maxFee != 0, "Max Fee cannot be 0"); tokensInfo[tokenAddress].equilibriumFee = _equilibriumFee; tokensInfo[tokenAddress].maxFee = _maxFee; emit FeeChanged(tokenAddress, tokensInfo[tokenAddress].equilibriumFee, tokensInfo[tokenAddress].maxFee); } function setTokenTransferOverhead(address tokenAddress, uint256 gasOverhead) external tokenChecks(tokenAddress) onlyOwner { tokensInfo[tokenAddress].transferOverhead = gasOverhead; } /** * Set DepositConfig for the given combination of toChainId, tokenAddress. * This is used while depositing token in Liquidity Pool. Based on the destination chainid * min and max deposit amount is checked. */ function setDepositConfig( uint256[] memory toChainId, address[] memory tokenAddresses, TokenConfig[] memory tokenConfig ) external onlyOwner { require( (toChainId.length == tokenAddresses.length) && (tokenAddresses.length == tokenConfig.length), " ERR_ARRAY_LENGTH_MISMATCH" ); uint256 length = tokenConfig.length; for (uint256 index; index < length; ) { depositConfig[toChainId[index]][tokenAddresses[index]].min = tokenConfig[index].min; depositConfig[toChainId[index]][tokenAddresses[index]].max = tokenConfig[index].max; unchecked { ++index; } } } function addSupportedToken( address tokenAddress, uint256 minCapLimit, uint256 maxCapLimit, uint256 equilibriumFee, uint256 maxFee, uint256 transferOverhead ) external onlyOwner { require(tokenAddress != address(0), "Token address cannot be 0"); require(maxCapLimit > minCapLimit, "maxCapLimit > minCapLimit"); tokensInfo[tokenAddress].supportedToken = true; transferConfig[tokenAddress].min = minCapLimit; transferConfig[tokenAddress].max = maxCapLimit; tokensInfo[tokenAddress].tokenConfig = transferConfig[tokenAddress]; tokensInfo[tokenAddress].equilibriumFee = equilibriumFee; tokensInfo[tokenAddress].maxFee = maxFee; tokensInfo[tokenAddress].transferOverhead = transferOverhead; } function removeSupportedToken(address tokenAddress) external tokenChecks(tokenAddress) onlyOwner { tokensInfo[tokenAddress].supportedToken = false; } function updateTokenCap( address tokenAddress, uint256 minCapLimit, uint256 maxCapLimit ) external tokenChecks(tokenAddress) onlyOwner { require(maxCapLimit > minCapLimit, "maxCapLimit > minCapLimit"); transferConfig[tokenAddress].min = minCapLimit; transferConfig[tokenAddress].max = maxCapLimit; } function getTokensInfo(address tokenAddress) public view override returns (TokenInfo memory) { TokenInfo memory tokenInfo = TokenInfo( tokensInfo[tokenAddress].transferOverhead, tokensInfo[tokenAddress].supportedToken, tokensInfo[tokenAddress].equilibriumFee, tokensInfo[tokenAddress].maxFee, transferConfig[tokenAddress] ); return tokenInfo; } function getDepositConfig(uint256 toChainId, address tokenAddress) public view override returns (TokenConfig memory) { return depositConfig[toChainId][tokenAddress]; } function getTransferConfig(address tokenAddress) public view override returns (TokenConfig memory) { return transferConfig[tokenAddress]; } function _msgSender() internal view virtual override(Context, ERC2771Context) returns (address sender) { return ERC2771Context._msgSender(); } function _msgData() internal view virtual override(Context, ERC2771Context) returns (bytes calldata) { return ERC2771Context._msgData(); } function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.0; import "@openzeppelin/contracts/utils/Context.sol"; /** * @dev Context variant with ERC2771 support. */ abstract contract ERC2771Context is Context { address internal _trustedForwarder; constructor(address trustedForwarder) { _trustedForwarder = trustedForwarder; } function isTrustedForwarder(address forwarder) public view virtual returns (bool) { return forwarder == _trustedForwarder; } function _msgSender() internal view virtual override returns (address sender) { if (isTrustedForwarder(msg.sender)) { // The assembly code is more direct than the Solidity version using `abi.decode`. assembly { sender := shr(96, calldataload(sub(calldatasize(), 20))) } } else { return super._msgSender(); } } function _msgData() internal view virtual override returns (bytes calldata) { if (isTrustedForwarder(msg.sender)) { return msg.data[:msg.data.length - 20]; } else { return super._msgData(); } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.0; import "../structures/TokenConfig.sol"; interface ITokenManager { function getEquilibriumFee(address tokenAddress) external view returns (uint256); function getMaxFee(address tokenAddress) external view returns (uint256); function changeFee( address tokenAddress, uint256 _equilibriumFee, uint256 _maxFee ) external; function tokensInfo(address tokenAddress) external view returns ( uint256 transferOverhead, bool supportedToken, uint256 equilibriumFee, uint256 maxFee, TokenConfig memory config ); function getTokensInfo(address tokenAddress) external view returns (TokenInfo memory); function getDepositConfig(uint256 toChainId, address tokenAddress) external view returns (TokenConfig memory); function getTransferConfig(address tokenAddress) external view returns (TokenConfig memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.0; struct TokenInfo { uint256 transferOverhead; bool supportedToken; uint256 equilibriumFee; // Percentage fee Represented in basis points uint256 maxFee; // Percentage fee Represented in basis points TokenConfig tokenConfig; } struct TokenConfig { uint256 min; uint256 max; }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"trustedForwarder","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"equilibriumFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxFee","type":"uint256"}],"name":"FeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minCapLimit","type":"uint256"},{"internalType":"uint256","name":"maxCapLimit","type":"uint256"},{"internalType":"uint256","name":"equilibriumFee","type":"uint256"},{"internalType":"uint256","name":"maxFee","type":"uint256"},{"internalType":"uint256","name":"transferOverhead","type":"uint256"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"_equilibriumFee","type":"uint256"},{"internalType":"uint256","name":"_maxFee","type":"uint256"}],"name":"changeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"depositConfig","outputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"toChainId","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getDepositConfig","outputs":[{"components":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"internalType":"struct TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getEquilibriumFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getMaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getTokensInfo","outputs":[{"components":[{"internalType":"uint256","name":"transferOverhead","type":"uint256"},{"internalType":"bool","name":"supportedToken","type":"bool"},{"internalType":"uint256","name":"equilibriumFee","type":"uint256"},{"internalType":"uint256","name":"maxFee","type":"uint256"},{"components":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"internalType":"struct TokenConfig","name":"tokenConfig","type":"tuple"}],"internalType":"struct TokenInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getTransferConfig","outputs":[{"components":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"internalType":"struct TokenConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"removeSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"toChainId","type":"uint256[]"},{"internalType":"address[]","name":"tokenAddresses","type":"address[]"},{"components":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"name":"setDepositConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"gasOverhead","type":"uint256"}],"name":"setTokenTransferOverhead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensInfo","outputs":[{"internalType":"uint256","name":"transferOverhead","type":"uint256"},{"internalType":"bool","name":"supportedToken","type":"bool"},{"internalType":"uint256","name":"equilibriumFee","type":"uint256"},{"internalType":"uint256","name":"maxFee","type":"uint256"},{"components":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"internalType":"struct TokenConfig","name":"tokenConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transferConfig","outputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minCapLimit","type":"uint256"},{"internalType":"uint256","name":"maxCapLimit","type":"uint256"}],"name":"updateTokenCap","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620016193803806200161983398101604081905262000034916200013e565b600080546001600160a01b0319166001600160a01b038316179055620000636200005d62000077565b62000094565b506001805460ff60a01b191690556200016e565b60006200008e620000e660201b62000c7e1760201c565b90505b90565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620000f33362000126565b1562000109575060131936013560601c62000091565b6200011e6200013a60201b62000cac1760201c565b905062000091565b6000546001600160a01b0390811691161490565b3390565b60006020828403121562000150578081fd5b81516001600160a01b038116811462000167578182fd5b9392505050565b61149b806200017e6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638456cb59116100b8578063ab8825671161007c578063ab8825671461026f578063b5ec999914610282578063ba8dbea214610295578063c0e4d627146102b9578063f2fde38b146102cc578063fa5e2abc146102df57610137565b80638456cb591461020b57806385dc3013146102135780638b56d0b7146102265780638da5cb5b14610239578063a53a225f1461024e57610137565b8063572b6c05116100ff578063572b6c05146101a85780635c975abb146101c857806360f5dfda146101d0578063715018a6146101f057806376319190146101f857610137565b8063128161a81461013c5780632feb4d54146101655780633f4ba83a1461017a5780634fe2cf901461018257806356e3866d14610195575b600080fd5b61014f61014a366004610f62565b6102ff565b60405161015c9190611363565b60405180910390f35b610178610173366004611027565b61033e565b005b610178610541565b610178610190366004610fde565b61058a565b6101786101a3366004610fac565b61066b565b6101bb6101b6366004610f62565b61074e565b60405161015c919061114f565b6101bb610762565b6101e36101de366004610f62565b610773565b60405161015c91906113b6565b610178610791565b610178610206366004610f62565b6107da565b6101786108a0565b6101e3610221366004610f62565b6108e7565b610178610234366004610f83565b610906565b6102416109c4565b60405161015c919061113b565b61026161025c366004610f62565b6109d3565b60405161015c9291906113f3565b61026161027d366004611101565b6109ec565b610178610290366004610fac565b610a10565b6102a86102a3366004610f62565b610b07565b60405161015c9594939291906113bf565b61014f6102c7366004611101565b610b4f565b6101786102da366004610f62565b610b96565b6102f26102ed366004610f62565b610c07565b60405161015c9190611371565b610307610de3565b506001600160a01b03811660009081526004602090815260409182902082518084019093528054835260010154908201525b919050565b610346610cb0565b6001600160a01b03166103576109c4565b6001600160a01b0316146103865760405162461bcd60e51b815260040161037d90611301565b60405180910390fd5b81518351148015610398575080518251145b6103b45760405162461bcd60e51b815260040161037d90611232565b805160005b8181101561053a578281815181106103e157634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516003600087848151811061041157634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086848151811061044957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000018190555082818151811061049857634e487b7160e01b600052603260045260246000fd5b602002602001015160200151600360008784815181106104c857634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086848151811061050057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600101819055508060010190506103b9565b5050505050565b610549610cb0565b6001600160a01b031661055a6109c4565b6001600160a01b0316146105805760405162461bcd60e51b815260040161037d90611301565b610588610cbf565b565b610592610cb0565b6001600160a01b03166105a36109c4565b6001600160a01b0316146105c95760405162461bcd60e51b815260040161037d90611301565b6001600160a01b0386166105ef5760405162461bcd60e51b815260040161037d906111ce565b84841161060e5760405162461bcd60e51b815260040161037d90611269565b6001600160a01b0390951660009081526002602081815260408084206001818101805460ff191682179055600480855292909520898155909401968755908290528201959095559254600584015592820155600381019190915555565b826001600160a01b0381166106925760405162461bcd60e51b815260040161037d906111ce565b6001600160a01b03811660009081526002602052604090206001015460ff166106cd5760405162461bcd60e51b815260040161037d90611336565b6106d5610cb0565b6001600160a01b03166106e66109c4565b6001600160a01b03161461070c5760405162461bcd60e51b815260040161037d90611301565b82821161072b5760405162461bcd60e51b815260040161037d90611269565b506001600160a01b03909216600090815260046020526040902090815560010155565b6000546001600160a01b0390811691161490565b600154600160a01b900460ff165b90565b6001600160a01b031660009081526002602052604090206003015490565b610799610cb0565b6001600160a01b03166107aa6109c4565b6001600160a01b0316146107d05760405162461bcd60e51b815260040161037d90611301565b6105886000610d30565b806001600160a01b0381166108015760405162461bcd60e51b815260040161037d906111ce565b6001600160a01b03811660009081526002602052604090206001015460ff1661083c5760405162461bcd60e51b815260040161037d90611336565b610844610cb0565b6001600160a01b03166108556109c4565b6001600160a01b03161461087b5760405162461bcd60e51b815260040161037d90611301565b506001600160a01b03166000908152600260205260409020600101805460ff19169055565b6108a8610cb0565b6001600160a01b03166108b96109c4565b6001600160a01b0316146108df5760405162461bcd60e51b815260040161037d90611301565b610588610d82565b6001600160a01b03166000908152600260208190526040909120015490565b816001600160a01b03811661092d5760405162461bcd60e51b815260040161037d906111ce565b6001600160a01b03811660009081526002602052604090206001015460ff166109685760405162461bcd60e51b815260040161037d90611336565b610970610cb0565b6001600160a01b03166109816109c4565b6001600160a01b0316146109a75760405162461bcd60e51b815260040161037d90611301565b506001600160a01b03909116600090815260026020526040902055565b6001546001600160a01b031690565b6004602052600090815260409020805460019091015482565b60036020908152600092835260408084209091529082529020805460019091015482565b610a18610cb0565b6001600160a01b0316610a296109c4565b6001600160a01b031614610a4f5760405162461bcd60e51b815260040161037d90611301565b610a57610762565b15610a745760405162461bcd60e51b815260040161037d906112d7565b81610a915760405162461bcd60e51b815260040161037d906112a0565b80610aae5760405162461bcd60e51b815260040161037d90611205565b6001600160a01b03831660008181526002602081905260408083209182018690556003909101849055518392859290917ff98c81ad0a5eb3551c3561de8dc9d1512e8680fb77425ea138ebfe9a9c0065ff9190a4505050565b60026020818152600092835260409283902080546001820154938201546003830154865180880190975260048401548752600590930154938601939093529360ff9093169285565b610b57610de3565b5060008281526003602090815260408083206001600160a01b038516845282529182902082518084019093528054835260010154908201525b92915050565b610b9e610cb0565b6001600160a01b0316610baf6109c4565b6001600160a01b031614610bd55760405162461bcd60e51b815260040161037d90611301565b6001600160a01b038116610bfb5760405162461bcd60e51b815260040161037d90611188565b610c0481610d30565b50565b610c0f610dfd565b506040805160a0810182526001600160a01b03929092166000818152600260208181528483208054875260018082015460ff1615158389015292810154878701526003015460608701529282526004835290839020835180850190945280548452015490820152608082015290565b6000610c893361074e565b15610c9d575060131936013560601c610770565b610ca5610cac565b9050610770565b3390565b6000610cba610c7e565b905090565b610cc7610762565b610ce35760405162461bcd60e51b815260040161037d9061115a565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610d19610cb0565b604051610d26919061113b565b60405180910390a1565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d8a610762565b15610da75760405162461bcd60e51b815260040161037d906112d7565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d19610cb0565b604051806040016040528060008152602001600081525090565b6040518060a00160405280600081526020016000151581526020016000815260200160008152602001610e2e610de3565b905290565b80356001600160a01b038116811461033957600080fd5b600082601f830112610e5a578081fd5b81356020610e6f610e6a8361142b565b611401565b8281528181019085830183850287018401881015610e8b578586fd5b855b85811015610eb057610e9e82610e33565b84529284019290840190600101610e8d565b5090979650505050505050565b600082601f830112610ecd578081fd5b81356020610edd610e6a8361142b565b82815281810190858301604080860288018501891015610efb578687fd5b865b86811015610f545781838b031215610f13578788fd5b815182810181811067ffffffffffffffff82111715610f3457610f3461144f565b835283358152868401358782015285529385019391810191600101610efd565b509198975050505050505050565b600060208284031215610f73578081fd5b610f7c82610e33565b9392505050565b60008060408385031215610f95578081fd5b610f9e83610e33565b946020939093013593505050565b600080600060608486031215610fc0578081fd5b610fc984610e33565b95602085013595506040909401359392505050565b60008060008060008060c08789031215610ff6578182fd5b610fff87610e33565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b60008060006060848603121561103b578283fd5b833567ffffffffffffffff80821115611052578485fd5b818601915086601f830112611065578485fd5b81356020611075610e6a8361142b565b82815281810190858301838502870184018c101561109157898afd5b8996505b848710156110b3578035835260019690960195918301918301611095565b50975050870135925050808211156110c9578384fd5b6110d587838801610e4a565b935060408601359150808211156110ea578283fd5b506110f786828701610ebd565b9150509250925092565b60008060408385031215611113578182fd5b8235915061112360208401610e33565b90509250929050565b80518252602090810151910152565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b60208082526013908201527204d6178204665652063616e6e6f74206265203606c1b604082015260600190565b6020808252601a908201527f204552525f41525241595f4c454e4754485f4d49534d41544348000000000000604082015260600190565b60208082526019908201527f6d61784361704c696d6974203e206d696e4361704c696d697400000000000000604082015260600190565b6020808252601b908201527f457175696c69627269756d204665652063616e6e6f7420626520300000000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b60408101610b90828461112c565b600060c08201905082518252602083015115156020830152604083015160408301526060830151606083015260808301516113af608084018261112c565b5092915050565b90815260200190565b8581528415156020820152604081018490526060810183905260c081016113e9608083018461112c565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156114235761142361144f565b604052919050565b600067ffffffffffffffff8211156114455761144561144f565b5060209081020190565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ae39a39cd2794f49560d2a2f89e2ef44bec9af5f5e4a8c1696344e39c2f8f75164736f6c6343000800003300000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80638456cb59116100b8578063ab8825671161007c578063ab8825671461026f578063b5ec999914610282578063ba8dbea214610295578063c0e4d627146102b9578063f2fde38b146102cc578063fa5e2abc146102df57610137565b80638456cb591461020b57806385dc3013146102135780638b56d0b7146102265780638da5cb5b14610239578063a53a225f1461024e57610137565b8063572b6c05116100ff578063572b6c05146101a85780635c975abb146101c857806360f5dfda146101d0578063715018a6146101f057806376319190146101f857610137565b8063128161a81461013c5780632feb4d54146101655780633f4ba83a1461017a5780634fe2cf901461018257806356e3866d14610195575b600080fd5b61014f61014a366004610f62565b6102ff565b60405161015c9190611363565b60405180910390f35b610178610173366004611027565b61033e565b005b610178610541565b610178610190366004610fde565b61058a565b6101786101a3366004610fac565b61066b565b6101bb6101b6366004610f62565b61074e565b60405161015c919061114f565b6101bb610762565b6101e36101de366004610f62565b610773565b60405161015c91906113b6565b610178610791565b610178610206366004610f62565b6107da565b6101786108a0565b6101e3610221366004610f62565b6108e7565b610178610234366004610f83565b610906565b6102416109c4565b60405161015c919061113b565b61026161025c366004610f62565b6109d3565b60405161015c9291906113f3565b61026161027d366004611101565b6109ec565b610178610290366004610fac565b610a10565b6102a86102a3366004610f62565b610b07565b60405161015c9594939291906113bf565b61014f6102c7366004611101565b610b4f565b6101786102da366004610f62565b610b96565b6102f26102ed366004610f62565b610c07565b60405161015c9190611371565b610307610de3565b506001600160a01b03811660009081526004602090815260409182902082518084019093528054835260010154908201525b919050565b610346610cb0565b6001600160a01b03166103576109c4565b6001600160a01b0316146103865760405162461bcd60e51b815260040161037d90611301565b60405180910390fd5b81518351148015610398575080518251145b6103b45760405162461bcd60e51b815260040161037d90611232565b805160005b8181101561053a578281815181106103e157634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516003600087848151811061041157634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086848151811061044957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000018190555082818151811061049857634e487b7160e01b600052603260045260246000fd5b602002602001015160200151600360008784815181106104c857634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086848151811061050057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600101819055508060010190506103b9565b5050505050565b610549610cb0565b6001600160a01b031661055a6109c4565b6001600160a01b0316146105805760405162461bcd60e51b815260040161037d90611301565b610588610cbf565b565b610592610cb0565b6001600160a01b03166105a36109c4565b6001600160a01b0316146105c95760405162461bcd60e51b815260040161037d90611301565b6001600160a01b0386166105ef5760405162461bcd60e51b815260040161037d906111ce565b84841161060e5760405162461bcd60e51b815260040161037d90611269565b6001600160a01b0390951660009081526002602081815260408084206001818101805460ff191682179055600480855292909520898155909401968755908290528201959095559254600584015592820155600381019190915555565b826001600160a01b0381166106925760405162461bcd60e51b815260040161037d906111ce565b6001600160a01b03811660009081526002602052604090206001015460ff166106cd5760405162461bcd60e51b815260040161037d90611336565b6106d5610cb0565b6001600160a01b03166106e66109c4565b6001600160a01b03161461070c5760405162461bcd60e51b815260040161037d90611301565b82821161072b5760405162461bcd60e51b815260040161037d90611269565b506001600160a01b03909216600090815260046020526040902090815560010155565b6000546001600160a01b0390811691161490565b600154600160a01b900460ff165b90565b6001600160a01b031660009081526002602052604090206003015490565b610799610cb0565b6001600160a01b03166107aa6109c4565b6001600160a01b0316146107d05760405162461bcd60e51b815260040161037d90611301565b6105886000610d30565b806001600160a01b0381166108015760405162461bcd60e51b815260040161037d906111ce565b6001600160a01b03811660009081526002602052604090206001015460ff1661083c5760405162461bcd60e51b815260040161037d90611336565b610844610cb0565b6001600160a01b03166108556109c4565b6001600160a01b03161461087b5760405162461bcd60e51b815260040161037d90611301565b506001600160a01b03166000908152600260205260409020600101805460ff19169055565b6108a8610cb0565b6001600160a01b03166108b96109c4565b6001600160a01b0316146108df5760405162461bcd60e51b815260040161037d90611301565b610588610d82565b6001600160a01b03166000908152600260208190526040909120015490565b816001600160a01b03811661092d5760405162461bcd60e51b815260040161037d906111ce565b6001600160a01b03811660009081526002602052604090206001015460ff166109685760405162461bcd60e51b815260040161037d90611336565b610970610cb0565b6001600160a01b03166109816109c4565b6001600160a01b0316146109a75760405162461bcd60e51b815260040161037d90611301565b506001600160a01b03909116600090815260026020526040902055565b6001546001600160a01b031690565b6004602052600090815260409020805460019091015482565b60036020908152600092835260408084209091529082529020805460019091015482565b610a18610cb0565b6001600160a01b0316610a296109c4565b6001600160a01b031614610a4f5760405162461bcd60e51b815260040161037d90611301565b610a57610762565b15610a745760405162461bcd60e51b815260040161037d906112d7565b81610a915760405162461bcd60e51b815260040161037d906112a0565b80610aae5760405162461bcd60e51b815260040161037d90611205565b6001600160a01b03831660008181526002602081905260408083209182018690556003909101849055518392859290917ff98c81ad0a5eb3551c3561de8dc9d1512e8680fb77425ea138ebfe9a9c0065ff9190a4505050565b60026020818152600092835260409283902080546001820154938201546003830154865180880190975260048401548752600590930154938601939093529360ff9093169285565b610b57610de3565b5060008281526003602090815260408083206001600160a01b038516845282529182902082518084019093528054835260010154908201525b92915050565b610b9e610cb0565b6001600160a01b0316610baf6109c4565b6001600160a01b031614610bd55760405162461bcd60e51b815260040161037d90611301565b6001600160a01b038116610bfb5760405162461bcd60e51b815260040161037d90611188565b610c0481610d30565b50565b610c0f610dfd565b506040805160a0810182526001600160a01b03929092166000818152600260208181528483208054875260018082015460ff1615158389015292810154878701526003015460608701529282526004835290839020835180850190945280548452015490820152608082015290565b6000610c893361074e565b15610c9d575060131936013560601c610770565b610ca5610cac565b9050610770565b3390565b6000610cba610c7e565b905090565b610cc7610762565b610ce35760405162461bcd60e51b815260040161037d9061115a565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610d19610cb0565b604051610d26919061113b565b60405180910390a1565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d8a610762565b15610da75760405162461bcd60e51b815260040161037d906112d7565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d19610cb0565b604051806040016040528060008152602001600081525090565b6040518060a00160405280600081526020016000151581526020016000815260200160008152602001610e2e610de3565b905290565b80356001600160a01b038116811461033957600080fd5b600082601f830112610e5a578081fd5b81356020610e6f610e6a8361142b565b611401565b8281528181019085830183850287018401881015610e8b578586fd5b855b85811015610eb057610e9e82610e33565b84529284019290840190600101610e8d565b5090979650505050505050565b600082601f830112610ecd578081fd5b81356020610edd610e6a8361142b565b82815281810190858301604080860288018501891015610efb578687fd5b865b86811015610f545781838b031215610f13578788fd5b815182810181811067ffffffffffffffff82111715610f3457610f3461144f565b835283358152868401358782015285529385019391810191600101610efd565b509198975050505050505050565b600060208284031215610f73578081fd5b610f7c82610e33565b9392505050565b60008060408385031215610f95578081fd5b610f9e83610e33565b946020939093013593505050565b600080600060608486031215610fc0578081fd5b610fc984610e33565b95602085013595506040909401359392505050565b60008060008060008060c08789031215610ff6578182fd5b610fff87610e33565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b60008060006060848603121561103b578283fd5b833567ffffffffffffffff80821115611052578485fd5b818601915086601f830112611065578485fd5b81356020611075610e6a8361142b565b82815281810190858301838502870184018c101561109157898afd5b8996505b848710156110b3578035835260019690960195918301918301611095565b50975050870135925050808211156110c9578384fd5b6110d587838801610e4a565b935060408601359150808211156110ea578283fd5b506110f786828701610ebd565b9150509250925092565b60008060408385031215611113578182fd5b8235915061112360208401610e33565b90509250929050565b80518252602090810151910152565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b60208082526013908201527204d6178204665652063616e6e6f74206265203606c1b604082015260600190565b6020808252601a908201527f204552525f41525241595f4c454e4754485f4d49534d41544348000000000000604082015260600190565b60208082526019908201527f6d61784361704c696d6974203e206d696e4361704c696d697400000000000000604082015260600190565b6020808252601b908201527f457175696c69627269756d204665652063616e6e6f7420626520300000000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b60408101610b90828461112c565b600060c08201905082518252602083015115156020830152604083015160408301526060830151606083015260808301516113af608084018261112c565b5092915050565b90815260200190565b8581528415156020820152604081018490526060810183905260c081016113e9608083018461112c565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156114235761142361144f565b604052919050565b600067ffffffffffffffff8211156114455761144561144f565b5060209081020190565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ae39a39cd2794f49560d2a2f89e2ef44bec9af5f5e4a8c1696344e39c2f8f75164736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693
-----Decoded View---------------
Arg [0] : trustedForwarder (address): 0x84a0856b038eaAd1cC7E297cF34A7e72685A8693
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.