Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
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-upgradeable/access/OwnableUpgradeable.sol"; import "../../security/Pausable.sol"; import "../metatx/ERC2771ContextUpgradeable.sol"; import "../interfaces/ITokenManager.sol"; contract TokenManager is ITokenManager, ERC2771ContextUpgradeable, OwnableUpgradeable, Pausable { mapping(address => TokenInfo) public override tokensInfo; // Excess State Transfer Fee Percentage mapping(address => uint256) public override excessStateTransferFeePerc; event FeeChanged(address indexed tokenAddress, uint256 indexed equilibriumFee, uint256 indexed maxFee); event ExcessStateTransferFeePercChanged(address indexed tokenAddress, uint256 indexed fee); 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; function initialize(address trustedForwarder, address pauser) external initializer { __ERC2771Context_init(trustedForwarder); __Ownable_init(); __Pausable_init(pauser); } 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"); require(_equilibriumFee <= _maxFee && _maxFee <= 10000000000, "Max Fee cannot be greater than 100%"); tokensInfo[tokenAddress].equilibriumFee = _equilibriumFee; tokensInfo[tokenAddress].maxFee = _maxFee; emit FeeChanged(tokenAddress, tokensInfo[tokenAddress].equilibriumFee, tokensInfo[tokenAddress].maxFee); } function changeExcessStateFee(address _tokenAddress, uint256 _excessStateFeePer) external override onlyOwner whenNotPaused { require(_tokenAddress != address(0), "Token address cannot be 0"); require(_excessStateFeePer != 0, "Excess State Fee Percentage cannot be 0"); excessStateTransferFeePerc[_tokenAddress] = _excessStateFeePer; emit ExcessStateTransferFeePercChanged(_tokenAddress, _excessStateFeePer); } 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(ContextUpgradeable, ERC2771ContextUpgradeable) returns (address sender) { return ERC2771ContextUpgradeable._msgSender(); } function _msgData() internal view virtual override(ContextUpgradeable, ERC2771ContextUpgradeable) returns (bytes calldata) { return ERC2771ContextUpgradeable._msgData(); } function setTrustedForwarder(address _tf) external onlyOwner { _setTrustedForwarder(_tf); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/ContextUpgradeable.sol"; import "../proxy/utils/Initializable.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 OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { _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); } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.0; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.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 Initializable, PausableUpgradeable { address private _pauser; event PauserChanged(address indexed previousPauser, address indexed newPauser); /** * @dev The pausable constructor sets the original `pauser` of the contract to the sender * account & Initializes the contract in unpaused state.. */ function __Pausable_init(address pauser) internal initializer { require(pauser != address(0), "Pauser Address cannot be 0"); __Pausable_init(); _pauser = pauser; } /** * @return true if `msg.sender` is the owner of the contract. */ function isPauser(address pauser) public view returns (bool) { return pauser == _pauser; } /** * @dev Throws if called by any account other than the pauser. */ modifier onlyPauser() { require(isPauser(msg.sender), "Only pauser is allowed to perform this operation"); _; } /** * @dev Allows the current pauser to transfer control of the contract to a newPauser. * @param newPauser The address to transfer pauserShip to. */ function changePauser(address newPauser) public onlyPauser whenNotPaused { _changePauser(newPauser); } /** * @dev Transfers control of the contract to a newPauser. * @param newPauser The address to transfer ownership to. */ function _changePauser(address newPauser) internal { require(newPauser != address(0)); emit PauserChanged(_pauser, newPauser); _pauser = newPauser; } function renouncePauser() external virtual onlyPauser whenNotPaused { emit PauserChanged(_pauser, address(0)); _pauser = address(0); } function pause() public onlyPauser { _pause(); } function unpause() public onlyPauser { _unpause(); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.0; import "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; /** * @dev Context variant with ERC2771 support. * Here _trustedForwarder is made internal instead of private * so it can be changed via Child contracts with a setter method. */ abstract contract ERC2771ContextUpgradeable is Initializable, ContextUpgradeable { event TrustedForwarderChanged(address indexed _tf); address internal _trustedForwarder; function __ERC2771Context_init(address trustedForwarder) internal initializer { __Context_init_unchained(); __ERC2771Context_init_unchained(trustedForwarder); } function __ERC2771Context_init_unchained(address trustedForwarder) internal initializer { _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(); } } function _setTrustedForwarder(address _tf) internal virtual { require(_tf != address(0), "TrustedForwarder can't be 0"); _trustedForwarder = _tf; emit TrustedForwarderChanged(_tf); } uint256[49] private __gap; }
// 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 excessStateTransferFeePerc(address tokenAddress) external view returns (uint256); 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); function changeExcessStateFee(address _tokenAddress, uint256 _excessStateFeePer) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../proxy/utils/Initializable.sol"; /** * @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 ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/ContextUpgradeable.sol"; import "../proxy/utils/Initializable.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 PausableUpgradeable is Initializable, ContextUpgradeable { /** * @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. */ function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _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()); } uint256[49] private __gap; }
// 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
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"ExcessStateTransferFeePercChanged","type":"event"},{"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":true,"internalType":"address","name":"previousPauser","type":"address"},{"indexed":true,"internalType":"address","name":"newPauser","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_tf","type":"address"}],"name":"TrustedForwarderChanged","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":"_excessStateFeePer","type":"uint256"}],"name":"changeExcessStateFee","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":"address","name":"newPauser","type":"address"}],"name":"changePauser","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":"address","name":"","type":"address"}],"name":"excessStateTransferFeePerc","outputs":[{"internalType":"uint256","name":"","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":"trustedForwarder","type":"address"},{"internalType":"address","name":"pauser","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pauser","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"renouncePauser","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":"_tf","type":"address"}],"name":"setTrustedForwarder","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
608060405234801561001057600080fd5b50611f2a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063ab88256711610097578063c0e4d62711610071578063c0e4d627146103ad578063da742228146103c0578063f2fde38b146103d3578063fa5e2abc146103e6576101c4565b8063ab88256714610363578063b5ec999914610376578063ba8dbea214610389576101c4565b806385dc3013116100d357806385dc3013146103075780638b56d0b71461031a5780638da5cb5b1461032d578063a53a225f14610342576101c4565b8063715018a6146102e457806376319190146102ec5780638456cb59146102ff576101c4565b80634fe2cf901161016657806357be34681161014057806357be3468146102a15780635c975abb146102c157806360f5dfda146102c95780636ef8d66d146102dc576101c4565b80634fe2cf901461026857806356e3866d1461027b578063572b6c051461028e576101c4565b80632feb4d54116101a25780632feb4d541461021a5780633f4ba83a1461022d57806346fbf68e14610235578063485cc95514610255576101c4565b8063128161a8146101c957806320b6d047146101f25780632cd271e714610207575b600080fd5b6101dc6101d7366004611832565b610406565b6040516101e99190611df2565b60405180910390f35b610205610200366004611885565b610445565b005b610205610215366004611832565b61053c565b610205610228366004611929565b610592565b61020561078c565b610248610243366004611832565b6107bb565b6040516101e99190611a48565b610205610263366004611853565b6107cf565b6102056102763660046118e0565b610860565b6102056102893660046118ae565b61093b565b61024861029c366004611832565b610a1e565b6102b46102af366004611832565b610a32565b6040516101e99190611e45565b610248610a44565b6102b46102d7366004611832565b610a4e565b610205610a6c565b610205610b00565b6102056102fa366004611832565b610b49565b610205610c0f565b6102b4610315366004611832565b610c3c565b610205610328366004611885565b610c5a565b610335610d18565b6040516101e99190611a34565b610355610350366004611832565b610d27565b6040516101e9929190611e82565b610355610371366004611a03565b610d40565b6102056103843660046118ae565b610d64565b61039c610397366004611832565b610e89565b6040516101e9959493929190611e4e565b6101dc6103bb366004611a03565b610ed5565b6102056103ce366004611832565b610f1c565b6102056103e1366004611832565b610f64565b6103f96103f4366004611832565b610fd2565b6040516101e99190611e00565b61040e6116b3565b506001600160a01b038116600090815260cd602090815260409182902082518084019093528054835260010154908201525b919050565b61044d61104e565b6001600160a01b031661045e610d18565b6001600160a01b03161461048d5760405162461bcd60e51b815260040161048490611d09565b60405180910390fd5b610495610a44565b156104b25760405162461bcd60e51b815260040161048490611c4e565b6001600160a01b0382166104d85760405162461bcd60e51b815260040161048490611b0e565b806104f55760405162461bcd60e51b815260040161048490611ac7565b6001600160a01b038216600081815260cb6020526040808220849055518392917f54c6d53cb907f770de602de9044582409b81724f06f763820017fb8ead31706291a35050565b610545336107bb565b6105615760405162461bcd60e51b815260040161048490611da2565b610569610a44565b156105865760405162461bcd60e51b815260040161048490611c4e565b61058f8161105d565b50565b61059a61104e565b6001600160a01b03166105ab610d18565b6001600160a01b0316146105d15760405162461bcd60e51b815260040161048490611d09565b815183511480156105e3575080518251145b6105ff5760405162461bcd60e51b815260040161048490611ba9565b805160005b818110156107855782818151811061062c57634e487b7160e01b600052603260045260246000fd5b60200260200101516000015160cc600087848151811061065c57634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086848151811061069457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600001819055508281815181106106e357634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160cc600087848151811061071357634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086848151811061074b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060010181905550806001019050610604565b5050505050565b610795336107bb565b6107b15760405162461bcd60e51b815260040161048490611da2565b6107b96110cc565b565b60c9546001600160a01b0390811691161490565b600054610100900460ff16806107e8575060005460ff16155b6108045760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff1615801561082f576000805460ff1961ff0019909116610100171660011790555b6108388361113a565b6108406111c1565b61084982611245565b801561085b576000805461ff00191690555b505050565b61086861104e565b6001600160a01b0316610879610d18565b6001600160a01b03161461089f5760405162461bcd60e51b815260040161048490611d09565b6001600160a01b0386166108c55760405162461bcd60e51b815260040161048490611b0e565b8484116108e45760405162461bcd60e51b815260040161048490611be0565b6001600160a01b03909516600090815260ca602081815260408084206001818101805460ff19168217905560cd84529190942088815501958655526004810194909455915460058401556002830155600382015555565b826001600160a01b0381166109625760405162461bcd60e51b815260040161048490611b0e565b6001600160a01b038116600090815260ca602052604090206001015460ff1661099d5760405162461bcd60e51b815260040161048490611d75565b6109a561104e565b6001600160a01b03166109b6610d18565b6001600160a01b0316146109dc5760405162461bcd60e51b815260040161048490611d09565b8282116109fb5760405162461bcd60e51b815260040161048490611be0565b506001600160a01b03909216600090815260cd6020526040902090815560010155565b6033546001600160a01b0390811691161490565b60cb6020526000908152604090205481565b60975460ff165b90565b6001600160a01b0316600090815260ca602052604090206003015490565b610a75336107bb565b610a915760405162461bcd60e51b815260040161048490611da2565b610a99610a44565b15610ab65760405162461bcd60e51b815260040161048490611c4e565b60c9546040516000916001600160a01b0316907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a811908390a360c980546001600160a01b0319169055565b610b0861104e565b6001600160a01b0316610b19610d18565b6001600160a01b031614610b3f5760405162461bcd60e51b815260040161048490611d09565b6107b96000611303565b806001600160a01b038116610b705760405162461bcd60e51b815260040161048490611b0e565b6001600160a01b038116600090815260ca602052604090206001015460ff16610bab5760405162461bcd60e51b815260040161048490611d75565b610bb361104e565b6001600160a01b0316610bc4610d18565b6001600160a01b031614610bea5760405162461bcd60e51b815260040161048490611d09565b506001600160a01b0316600090815260ca60205260409020600101805460ff19169055565b610c18336107bb565b610c345760405162461bcd60e51b815260040161048490611da2565b6107b9611355565b6001600160a01b0316600090815260ca602052604090206002015490565b816001600160a01b038116610c815760405162461bcd60e51b815260040161048490611b0e565b6001600160a01b038116600090815260ca602052604090206001015460ff16610cbc5760405162461bcd60e51b815260040161048490611d75565b610cc461104e565b6001600160a01b0316610cd5610d18565b6001600160a01b031614610cfb5760405162461bcd60e51b815260040161048490611d09565b506001600160a01b03909116600090815260ca6020526040902055565b6065546001600160a01b031690565b60cd602052600090815260409020805460019091015482565b60cc6020908152600092835260408084209091529082529020805460019091015482565b610d6c61104e565b6001600160a01b0316610d7d610d18565b6001600160a01b031614610da35760405162461bcd60e51b815260040161048490611d09565b610dab610a44565b15610dc85760405162461bcd60e51b815260040161048490611c4e565b81610de55760405162461bcd60e51b815260040161048490611c17565b80610e025760405162461bcd60e51b815260040161048490611b45565b808211158015610e1757506402540be4008111155b610e335760405162461bcd60e51b815260040161048490611cc6565b6001600160a01b038316600081815260ca602052604080822060028101869055600301849055518392859290917ff98c81ad0a5eb3551c3561de8dc9d1512e8680fb77425ea138ebfe9a9c0065ff9190a4505050565b60ca60209081526000918252604091829020805460018201546002830154600384015486518088019097526004850154875260059094015494860194909452909360ff90911692919085565b610edd6116b3565b50600082815260cc602090815260408083206001600160a01b038516845282529182902082518084019093528054835260010154908201525b92915050565b610f2461104e565b6001600160a01b0316610f35610d18565b6001600160a01b031614610f5b5760405162461bcd60e51b815260040161048490611d09565b61058f816113b0565b610f6c61104e565b6001600160a01b0316610f7d610d18565b6001600160a01b031614610fa35760405162461bcd60e51b815260040161048490611d09565b6001600160a01b038116610fc95760405162461bcd60e51b815260040161048490611a81565b61058f81611303565b610fda6116cd565b506040805160a0810182526001600160a01b0392909216600081815260ca60209081528382208054865260018082015460ff16151583880152600282015487870152600390910154606087015292825260cd8152908390208351808501909452805484529091015490820152608082015290565b6000611058611420565b905090565b6001600160a01b03811661107057600080fd5b60c9546040516001600160a01b038084169216907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a81190600090a360c980546001600160a01b0319166001600160a01b0392909216919091179055565b6110d4610a44565b6110f05760405162461bcd60e51b815260040161048490611a53565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61112361104e565b6040516111309190611a34565b60405180910390a1565b600054610100900460ff1680611153575060005460ff16155b61116f5760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff1615801561119a576000805460ff1961ff0019909116610100171660011790555b6111a261144e565b6111ab826114c1565b80156111bd576000805461ff00191690555b5050565b600054610100900460ff16806111da575060005460ff16155b6111f65760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611221576000805460ff1961ff0019909116610100171660011790555b61122961144e565b611231611551565b801561058f576000805461ff001916905550565b600054610100900460ff168061125e575060005460ff16155b61127a5760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff161580156112a5576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382166112cb5760405162461bcd60e51b815260040161048490611d3e565b6112d36115c1565b60c980546001600160a01b0319166001600160a01b03841617905580156111bd576000805461ff00191690555050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61135d610a44565b1561137a5760405162461bcd60e51b815260040161048490611c4e565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861112361104e565b6001600160a01b0381166113d65760405162461bcd60e51b815260040161048490611b72565b603380546001600160a01b0319166001600160a01b0383169081179091556040517f871264f4293af7d2865ae7eae628b228f4991c57cb45b39c99f0b774ebe2901890600090a250565b600061142b33610a1e565b1561143f575060131936013560601c610a4b565b611447611631565b9050610a4b565b600054610100900460ff1680611467575060005460ff16155b6114835760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611231576000805460ff1961ff001990911661010017166001179055801561058f576000805461ff001916905550565b600054610100900460ff16806114da575060005460ff16155b6114f65760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611521576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b03841617905580156111bd576000805461ff00191690555050565b600054610100900460ff168061156a575060005460ff16155b6115865760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff161580156115b1576000805460ff1961ff0019909116610100171660011790555b6112316115bc61104e565b611303565b600054610100900460ff16806115da575060005460ff16155b6115f65760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611621576000805460ff1961ff0019909116610100171660011790555b61162961144e565b611231611635565b3390565b600054610100900460ff168061164e575060005460ff16155b61166a5760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611695576000805460ff1961ff0019909116610100171660011790555b6097805460ff19169055801561058f576000805461ff001916905550565b604051806040016040528060008152602001600081525090565b6040518060a001604052806000815260200160001515815260200160008152602001600081526020016116fe6116b3565b905290565b80356001600160a01b038116811461044057600080fd5b600082601f83011261172a578081fd5b8135602061173f61173a83611eba565b611e90565b828152818101908583018385028701840188101561175b578586fd5b855b858110156117805761176e82611703565b8452928401929084019060010161175d565b5090979650505050505050565b600082601f83011261179d578081fd5b813560206117ad61173a83611eba565b828152818101908583016040808602880185018910156117cb578687fd5b865b868110156118245781838b0312156117e3578788fd5b815182810181811067ffffffffffffffff8211171561180457611804611ede565b8352833581528684013587820152855293850193918101916001016117cd565b509198975050505050505050565b600060208284031215611843578081fd5b61184c82611703565b9392505050565b60008060408385031215611865578081fd5b61186e83611703565b915061187c60208401611703565b90509250929050565b60008060408385031215611897578182fd5b6118a083611703565b946020939093013593505050565b6000806000606084860312156118c2578081fd5b6118cb84611703565b95602085013595506040909401359392505050565b60008060008060008060c087890312156118f8578182fd5b61190187611703565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b60008060006060848603121561193d578283fd5b833567ffffffffffffffff80821115611954578485fd5b818601915086601f830112611967578485fd5b8135602061197761173a83611eba565b82815281810190858301838502870184018c101561199357898afd5b8996505b848710156119b5578035835260019690960195918301918301611997565b50975050870135925050808211156119cb578384fd5b6119d78783880161171a565b935060408601359150808211156119ec578283fd5b506119f98682870161178d565b9150509250925092565b60008060408385031215611a15578182fd5b8235915061187c60208401611703565b80518252602090810151910152565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526027908201527f457863657373205374617465204665652050657263656e746167652063616e6e60408201526606f7420626520360cc1b606082015260800190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b60208082526013908201527204d6178204665652063616e6e6f74206265203606c1b604082015260600190565b6020808252601b908201527f54727573746564466f727761726465722063616e277420626520300000000000604082015260600190565b6020808252601a908201527f204552525f41525241595f4c454e4754485f4d49534d41544348000000000000604082015260600190565b60208082526019908201527f6d61784361704c696d6974203e206d696e4361704c696d697400000000000000604082015260600190565b6020808252601b908201527f457175696c69627269756d204665652063616e6e6f7420626520300000000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526023908201527f4d6178204665652063616e6e6f742062652067726561746572207468616e203160408201526230302560e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f50617573657220416464726573732063616e6e6f742062652030000000000000604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b60208082526030908201527f4f6e6c792070617573657220697320616c6c6f77656420746f20706572666f7260408201526f36903a3434b99037b832b930ba34b7b760811b606082015260800190565b60408101610f168284611a25565b600060c0820190508251825260208301511515602083015260408301516040830152606083015160608301526080830151611e3e6080840182611a25565b5092915050565b90815260200190565b8581528415156020820152604081018490526060810183905260c08101611e786080830184611a25565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611eb257611eb2611ede565b604052919050565b600067ffffffffffffffff821115611ed457611ed4611ede565b5060209081020190565b634e487b7160e01b600052604160045260246000fdfea26469706673582212206cb443a35c66d7c54232fb2fb64a197943f2c4f624972d7bee510a89621ab6ff64736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063ab88256711610097578063c0e4d62711610071578063c0e4d627146103ad578063da742228146103c0578063f2fde38b146103d3578063fa5e2abc146103e6576101c4565b8063ab88256714610363578063b5ec999914610376578063ba8dbea214610389576101c4565b806385dc3013116100d357806385dc3013146103075780638b56d0b71461031a5780638da5cb5b1461032d578063a53a225f14610342576101c4565b8063715018a6146102e457806376319190146102ec5780638456cb59146102ff576101c4565b80634fe2cf901161016657806357be34681161014057806357be3468146102a15780635c975abb146102c157806360f5dfda146102c95780636ef8d66d146102dc576101c4565b80634fe2cf901461026857806356e3866d1461027b578063572b6c051461028e576101c4565b80632feb4d54116101a25780632feb4d541461021a5780633f4ba83a1461022d57806346fbf68e14610235578063485cc95514610255576101c4565b8063128161a8146101c957806320b6d047146101f25780632cd271e714610207575b600080fd5b6101dc6101d7366004611832565b610406565b6040516101e99190611df2565b60405180910390f35b610205610200366004611885565b610445565b005b610205610215366004611832565b61053c565b610205610228366004611929565b610592565b61020561078c565b610248610243366004611832565b6107bb565b6040516101e99190611a48565b610205610263366004611853565b6107cf565b6102056102763660046118e0565b610860565b6102056102893660046118ae565b61093b565b61024861029c366004611832565b610a1e565b6102b46102af366004611832565b610a32565b6040516101e99190611e45565b610248610a44565b6102b46102d7366004611832565b610a4e565b610205610a6c565b610205610b00565b6102056102fa366004611832565b610b49565b610205610c0f565b6102b4610315366004611832565b610c3c565b610205610328366004611885565b610c5a565b610335610d18565b6040516101e99190611a34565b610355610350366004611832565b610d27565b6040516101e9929190611e82565b610355610371366004611a03565b610d40565b6102056103843660046118ae565b610d64565b61039c610397366004611832565b610e89565b6040516101e9959493929190611e4e565b6101dc6103bb366004611a03565b610ed5565b6102056103ce366004611832565b610f1c565b6102056103e1366004611832565b610f64565b6103f96103f4366004611832565b610fd2565b6040516101e99190611e00565b61040e6116b3565b506001600160a01b038116600090815260cd602090815260409182902082518084019093528054835260010154908201525b919050565b61044d61104e565b6001600160a01b031661045e610d18565b6001600160a01b03161461048d5760405162461bcd60e51b815260040161048490611d09565b60405180910390fd5b610495610a44565b156104b25760405162461bcd60e51b815260040161048490611c4e565b6001600160a01b0382166104d85760405162461bcd60e51b815260040161048490611b0e565b806104f55760405162461bcd60e51b815260040161048490611ac7565b6001600160a01b038216600081815260cb6020526040808220849055518392917f54c6d53cb907f770de602de9044582409b81724f06f763820017fb8ead31706291a35050565b610545336107bb565b6105615760405162461bcd60e51b815260040161048490611da2565b610569610a44565b156105865760405162461bcd60e51b815260040161048490611c4e565b61058f8161105d565b50565b61059a61104e565b6001600160a01b03166105ab610d18565b6001600160a01b0316146105d15760405162461bcd60e51b815260040161048490611d09565b815183511480156105e3575080518251145b6105ff5760405162461bcd60e51b815260040161048490611ba9565b805160005b818110156107855782818151811061062c57634e487b7160e01b600052603260045260246000fd5b60200260200101516000015160cc600087848151811061065c57634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086848151811061069457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600001819055508281815181106106e357634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160cc600087848151811061071357634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086848151811061074b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060010181905550806001019050610604565b5050505050565b610795336107bb565b6107b15760405162461bcd60e51b815260040161048490611da2565b6107b96110cc565b565b60c9546001600160a01b0390811691161490565b600054610100900460ff16806107e8575060005460ff16155b6108045760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff1615801561082f576000805460ff1961ff0019909116610100171660011790555b6108388361113a565b6108406111c1565b61084982611245565b801561085b576000805461ff00191690555b505050565b61086861104e565b6001600160a01b0316610879610d18565b6001600160a01b03161461089f5760405162461bcd60e51b815260040161048490611d09565b6001600160a01b0386166108c55760405162461bcd60e51b815260040161048490611b0e565b8484116108e45760405162461bcd60e51b815260040161048490611be0565b6001600160a01b03909516600090815260ca602081815260408084206001818101805460ff19168217905560cd84529190942088815501958655526004810194909455915460058401556002830155600382015555565b826001600160a01b0381166109625760405162461bcd60e51b815260040161048490611b0e565b6001600160a01b038116600090815260ca602052604090206001015460ff1661099d5760405162461bcd60e51b815260040161048490611d75565b6109a561104e565b6001600160a01b03166109b6610d18565b6001600160a01b0316146109dc5760405162461bcd60e51b815260040161048490611d09565b8282116109fb5760405162461bcd60e51b815260040161048490611be0565b506001600160a01b03909216600090815260cd6020526040902090815560010155565b6033546001600160a01b0390811691161490565b60cb6020526000908152604090205481565b60975460ff165b90565b6001600160a01b0316600090815260ca602052604090206003015490565b610a75336107bb565b610a915760405162461bcd60e51b815260040161048490611da2565b610a99610a44565b15610ab65760405162461bcd60e51b815260040161048490611c4e565b60c9546040516000916001600160a01b0316907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a811908390a360c980546001600160a01b0319169055565b610b0861104e565b6001600160a01b0316610b19610d18565b6001600160a01b031614610b3f5760405162461bcd60e51b815260040161048490611d09565b6107b96000611303565b806001600160a01b038116610b705760405162461bcd60e51b815260040161048490611b0e565b6001600160a01b038116600090815260ca602052604090206001015460ff16610bab5760405162461bcd60e51b815260040161048490611d75565b610bb361104e565b6001600160a01b0316610bc4610d18565b6001600160a01b031614610bea5760405162461bcd60e51b815260040161048490611d09565b506001600160a01b0316600090815260ca60205260409020600101805460ff19169055565b610c18336107bb565b610c345760405162461bcd60e51b815260040161048490611da2565b6107b9611355565b6001600160a01b0316600090815260ca602052604090206002015490565b816001600160a01b038116610c815760405162461bcd60e51b815260040161048490611b0e565b6001600160a01b038116600090815260ca602052604090206001015460ff16610cbc5760405162461bcd60e51b815260040161048490611d75565b610cc461104e565b6001600160a01b0316610cd5610d18565b6001600160a01b031614610cfb5760405162461bcd60e51b815260040161048490611d09565b506001600160a01b03909116600090815260ca6020526040902055565b6065546001600160a01b031690565b60cd602052600090815260409020805460019091015482565b60cc6020908152600092835260408084209091529082529020805460019091015482565b610d6c61104e565b6001600160a01b0316610d7d610d18565b6001600160a01b031614610da35760405162461bcd60e51b815260040161048490611d09565b610dab610a44565b15610dc85760405162461bcd60e51b815260040161048490611c4e565b81610de55760405162461bcd60e51b815260040161048490611c17565b80610e025760405162461bcd60e51b815260040161048490611b45565b808211158015610e1757506402540be4008111155b610e335760405162461bcd60e51b815260040161048490611cc6565b6001600160a01b038316600081815260ca602052604080822060028101869055600301849055518392859290917ff98c81ad0a5eb3551c3561de8dc9d1512e8680fb77425ea138ebfe9a9c0065ff9190a4505050565b60ca60209081526000918252604091829020805460018201546002830154600384015486518088019097526004850154875260059094015494860194909452909360ff90911692919085565b610edd6116b3565b50600082815260cc602090815260408083206001600160a01b038516845282529182902082518084019093528054835260010154908201525b92915050565b610f2461104e565b6001600160a01b0316610f35610d18565b6001600160a01b031614610f5b5760405162461bcd60e51b815260040161048490611d09565b61058f816113b0565b610f6c61104e565b6001600160a01b0316610f7d610d18565b6001600160a01b031614610fa35760405162461bcd60e51b815260040161048490611d09565b6001600160a01b038116610fc95760405162461bcd60e51b815260040161048490611a81565b61058f81611303565b610fda6116cd565b506040805160a0810182526001600160a01b0392909216600081815260ca60209081528382208054865260018082015460ff16151583880152600282015487870152600390910154606087015292825260cd8152908390208351808501909452805484529091015490820152608082015290565b6000611058611420565b905090565b6001600160a01b03811661107057600080fd5b60c9546040516001600160a01b038084169216907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a81190600090a360c980546001600160a01b0319166001600160a01b0392909216919091179055565b6110d4610a44565b6110f05760405162461bcd60e51b815260040161048490611a53565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61112361104e565b6040516111309190611a34565b60405180910390a1565b600054610100900460ff1680611153575060005460ff16155b61116f5760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff1615801561119a576000805460ff1961ff0019909116610100171660011790555b6111a261144e565b6111ab826114c1565b80156111bd576000805461ff00191690555b5050565b600054610100900460ff16806111da575060005460ff16155b6111f65760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611221576000805460ff1961ff0019909116610100171660011790555b61122961144e565b611231611551565b801561058f576000805461ff001916905550565b600054610100900460ff168061125e575060005460ff16155b61127a5760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff161580156112a5576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0382166112cb5760405162461bcd60e51b815260040161048490611d3e565b6112d36115c1565b60c980546001600160a01b0319166001600160a01b03841617905580156111bd576000805461ff00191690555050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61135d610a44565b1561137a5760405162461bcd60e51b815260040161048490611c4e565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861112361104e565b6001600160a01b0381166113d65760405162461bcd60e51b815260040161048490611b72565b603380546001600160a01b0319166001600160a01b0383169081179091556040517f871264f4293af7d2865ae7eae628b228f4991c57cb45b39c99f0b774ebe2901890600090a250565b600061142b33610a1e565b1561143f575060131936013560601c610a4b565b611447611631565b9050610a4b565b600054610100900460ff1680611467575060005460ff16155b6114835760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611231576000805460ff1961ff001990911661010017166001179055801561058f576000805461ff001916905550565b600054610100900460ff16806114da575060005460ff16155b6114f65760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611521576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b0319166001600160a01b03841617905580156111bd576000805461ff00191690555050565b600054610100900460ff168061156a575060005460ff16155b6115865760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff161580156115b1576000805460ff1961ff0019909116610100171660011790555b6112316115bc61104e565b611303565b600054610100900460ff16806115da575060005460ff16155b6115f65760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611621576000805460ff1961ff0019909116610100171660011790555b61162961144e565b611231611635565b3390565b600054610100900460ff168061164e575060005460ff16155b61166a5760405162461bcd60e51b815260040161048490611c78565b600054610100900460ff16158015611695576000805460ff1961ff0019909116610100171660011790555b6097805460ff19169055801561058f576000805461ff001916905550565b604051806040016040528060008152602001600081525090565b6040518060a001604052806000815260200160001515815260200160008152602001600081526020016116fe6116b3565b905290565b80356001600160a01b038116811461044057600080fd5b600082601f83011261172a578081fd5b8135602061173f61173a83611eba565b611e90565b828152818101908583018385028701840188101561175b578586fd5b855b858110156117805761176e82611703565b8452928401929084019060010161175d565b5090979650505050505050565b600082601f83011261179d578081fd5b813560206117ad61173a83611eba565b828152818101908583016040808602880185018910156117cb578687fd5b865b868110156118245781838b0312156117e3578788fd5b815182810181811067ffffffffffffffff8211171561180457611804611ede565b8352833581528684013587820152855293850193918101916001016117cd565b509198975050505050505050565b600060208284031215611843578081fd5b61184c82611703565b9392505050565b60008060408385031215611865578081fd5b61186e83611703565b915061187c60208401611703565b90509250929050565b60008060408385031215611897578182fd5b6118a083611703565b946020939093013593505050565b6000806000606084860312156118c2578081fd5b6118cb84611703565b95602085013595506040909401359392505050565b60008060008060008060c087890312156118f8578182fd5b61190187611703565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b60008060006060848603121561193d578283fd5b833567ffffffffffffffff80821115611954578485fd5b818601915086601f830112611967578485fd5b8135602061197761173a83611eba565b82815281810190858301838502870184018c101561199357898afd5b8996505b848710156119b5578035835260019690960195918301918301611997565b50975050870135925050808211156119cb578384fd5b6119d78783880161171a565b935060408601359150808211156119ec578283fd5b506119f98682870161178d565b9150509250925092565b60008060408385031215611a15578182fd5b8235915061187c60208401611703565b80518252602090810151910152565b6001600160a01b0391909116815260200190565b901515815260200190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526027908201527f457863657373205374617465204665652050657263656e746167652063616e6e60408201526606f7420626520360cc1b606082015260800190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b60208082526013908201527204d6178204665652063616e6e6f74206265203606c1b604082015260600190565b6020808252601b908201527f54727573746564466f727761726465722063616e277420626520300000000000604082015260600190565b6020808252601a908201527f204552525f41525241595f4c454e4754485f4d49534d41544348000000000000604082015260600190565b60208082526019908201527f6d61784361704c696d6974203e206d696e4361704c696d697400000000000000604082015260600190565b6020808252601b908201527f457175696c69627269756d204665652063616e6e6f7420626520300000000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526023908201527f4d6178204665652063616e6e6f742062652067726561746572207468616e203160408201526230302560e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f50617573657220416464726573732063616e6e6f742062652030000000000000604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b60208082526030908201527f4f6e6c792070617573657220697320616c6c6f77656420746f20706572666f7260408201526f36903a3434b99037b832b930ba34b7b760811b606082015260800190565b60408101610f168284611a25565b600060c0820190508251825260208301511515602083015260408301516040830152606083015160608301526080830151611e3e6080840182611a25565b5092915050565b90815260200190565b8581528415156020820152604081018490526060810183905260c08101611e786080830184611a25565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611eb257611eb2611ede565b604052919050565b600067ffffffffffffffff821115611ed457611ed4611ede565b5060209081020190565b634e487b7160e01b600052604160045260246000fdfea26469706673582212206cb443a35c66d7c54232fb2fb64a197943f2c4f624972d7bee510a89621ab6ff64736f6c63430008000033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.