Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18677052 | 434 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AllowList
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 9999999 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "./interfaces/IAllowList.sol"; import "./libraries/UncheckedMath.sol"; /// @author Matter Labs /// @custom:security-contact [email protected] /// @notice The smart contract that stores the permissions to call the function on different contracts. /// @dev The contract is fully controlled by the owner, that can grant and revoke any permissions at any time. /// @dev The permission list has three different modes: /// - Closed. The contract cannot be called by anyone. /// - SpecialAccessOnly. Only some contract functions can be called by specifically granted addresses. /// - Public. Access list to call any function from the target contract by any caller contract AllowList is IAllowList, Ownable2Step { using UncheckedMath for uint256; /// @notice The Access mode by which it is decided whether the caller has access mapping(address => AccessMode) public getAccessMode; /// @notice The mapping that stores permissions to call the function on the target address by the caller /// @dev caller => target => function signature => permission to call target function for the given caller address mapping(address => mapping(address => mapping(bytes4 => bool))) public hasSpecialAccessToCall; /// @dev The mapping L1 token address => struct Deposit mapping(address => Deposit) public tokenDeposit; constructor(address _initialOwner) { _transferOwnership(_initialOwner); } /// @return Whether the caller can call the specific function on the target contract /// @param _caller The caller address, who is granted access /// @param _target The address of the smart contract which is called /// @param _functionSig The function signature (selector), access to which need to check function canCall(address _caller, address _target, bytes4 _functionSig) external view returns (bool) { AccessMode accessMode = getAccessMode[_target]; return accessMode == AccessMode.Public || (accessMode == AccessMode.SpecialAccessOnly && hasSpecialAccessToCall[_caller][_target][_functionSig]); } /// @notice Set the permission mode to call the target contract /// @param _target The address of the smart contract, of which access to the call is to be changed /// @param _accessMode Whether no one, any or only some addresses can call the target contract function setAccessMode(address _target, AccessMode _accessMode) external onlyOwner { _setAccessMode(_target, _accessMode); } /// @notice Set many permission modes to call the target contracts /// @dev Analogous to function `setAccessMode` but performs a batch of changes /// @param _targets The array of smart contract addresses, of which access to the call is to be changed /// @param _accessModes The array of new permission modes, whether no one, any or only some addresses can call the /// target contract function setBatchAccessMode(address[] calldata _targets, AccessMode[] calldata _accessModes) external onlyOwner { uint256 targetsLength = _targets.length; require(targetsLength == _accessModes.length, "yg"); // The size of arrays should be equal for (uint256 i = 0; i < targetsLength; i = i.uncheckedInc()) { _setAccessMode(_targets[i], _accessModes[i]); } } /// @dev Changes access mode and emit the event if the access was changed function _setAccessMode(address _target, AccessMode _accessMode) internal { AccessMode accessMode = getAccessMode[_target]; if (accessMode != _accessMode) { getAccessMode[_target] = _accessMode; emit UpdateAccessMode(_target, accessMode, _accessMode); } } /// @notice Set many permissions to call the function on the contract to the specified caller address /// @param _callers The array of caller addresses, who are granted access /// @param _targets The array of smart contract addresses, of which access to the call are to be changed /// @param _functionSigs The array of function signatures (selectors), access to which need to be changed /// @param _enables The array of boolean flags, whether enable or disable the function access to the corresponding /// target address function setBatchPermissionToCall( address[] calldata _callers, address[] calldata _targets, bytes4[] calldata _functionSigs, bool[] calldata _enables ) external onlyOwner { uint256 callersLength = _callers.length; // The size of arrays should be equal require(callersLength == _targets.length, "yw"); require(callersLength == _functionSigs.length, "yx"); require(callersLength == _enables.length, "yy"); for (uint256 i = 0; i < callersLength; i = i.uncheckedInc()) { _setPermissionToCall(_callers[i], _targets[i], _functionSigs[i], _enables[i]); } } /// @notice Set the permission to call the function on the contract to the specified caller address /// @param _caller The caller address, who is granted access /// @param _target The address of the smart contract, of which access to the call is to be changed /// @param _functionSig The function signature (selector), access to which need to be changed /// @param _enable Whether enable or disable the permission function setPermissionToCall( address _caller, address _target, bytes4 _functionSig, bool _enable ) external onlyOwner { _setPermissionToCall(_caller, _target, _functionSig, _enable); } /// @dev Changes permission to call and emits the event if the permission was changed function _setPermissionToCall(address _caller, address _target, bytes4 _functionSig, bool _enable) internal { bool currentPermission = hasSpecialAccessToCall[_caller][_target][_functionSig]; if (currentPermission != _enable) { hasSpecialAccessToCall[_caller][_target][_functionSig] = _enable; emit UpdateCallPermission(_caller, _target, _functionSig, _enable); } } /// @dev Set deposit limit data for a token /// @param _l1Token The address of L1 token /// @param _depositLimitation deposit limitation is active or not /// @param _depositCap The maximum amount that can be deposited. function setDepositLimit(address _l1Token, bool _depositLimitation, uint256 _depositCap) external onlyOwner { tokenDeposit[_l1Token].depositLimitation = _depositLimitation; tokenDeposit[_l1Token].depositCap = _depositCap; emit UpdateDepositLimit(_l1Token, _depositLimitation, _depositCap); } /// @dev Get deposit limit data of a token /// @param _l1Token The address of L1 token function getTokenDepositLimitData(address _l1Token) external view returns (Deposit memory) { return tokenDeposit[_l1Token]; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./Ownable.sol"; /** * @dev Contract module which provides 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} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() external { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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; } }
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT interface IAllowList { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ /// @notice Access mode of target contract is changed event UpdateAccessMode(address indexed target, AccessMode previousMode, AccessMode newMode); /// @notice Permission to call is changed event UpdateCallPermission(address indexed caller, address indexed target, bytes4 indexed functionSig, bool status); /// @notice Deposit limit of a token is changed event UpdateDepositLimit(address indexed l1Token, bool depositLimitation, uint256 depositCap); /// @notice Type of access to a specific contract includes three different modes /// @param Closed No one has access to the contract /// @param SpecialAccessOnly Any address with granted special access can interact with a contract (see `hasSpecialAccessToCall`) /// @param Public Everyone can interact with a contract enum AccessMode { Closed, SpecialAccessOnly, Public } /// @dev A struct that contains deposit limit data of a token /// @param depositLimitation Whether any deposit limitation is placed or not /// @param depositCap The maximum amount that can be deposited. struct Deposit { bool depositLimitation; uint256 depositCap; } /*////////////////////////////////////////////////////////////// GETTERS //////////////////////////////////////////////////////////////*/ function getAccessMode(address _target) external view returns (AccessMode); function hasSpecialAccessToCall(address _caller, address _target, bytes4 _functionSig) external view returns (bool); function canCall(address _caller, address _target, bytes4 _functionSig) external view returns (bool); function getTokenDepositLimitData(address _l1Token) external view returns (Deposit memory); /*////////////////////////////////////////////////////////////// ALLOW LIST LOGIC //////////////////////////////////////////////////////////////*/ function setBatchAccessMode(address[] calldata _targets, AccessMode[] calldata _accessMode) external; function setAccessMode(address _target, AccessMode _accessMode) external; function setBatchPermissionToCall( address[] calldata _callers, address[] calldata _targets, bytes4[] calldata _functionSigs, bool[] calldata _enables ) external; function setPermissionToCall(address _caller, address _target, bytes4 _functionSig, bool _enable) external; /*////////////////////////////////////////////////////////////// DEPOSIT LIMIT LOGIC //////////////////////////////////////////////////////////////*/ function setDepositLimit(address _l1Token, bool _depositLimitation, uint256 _depositCap) external; }
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT /** * @author Matter Labs * @custom:security-contact [email protected] * @notice The library for unchecked math. */ library UncheckedMath { function uncheckedInc(uint256 _number) internal pure returns (uint256) { unchecked { return _number + 1; } } function uncheckedAdd(uint256 _lhs, uint256 _rhs) internal pure returns (uint256) { unchecked { return _lhs + _rhs; } } }
{ "optimizer": { "enabled": true, "runs": 9999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"enum IAllowList.AccessMode","name":"previousMode","type":"uint8"},{"indexed":false,"internalType":"enum IAllowList.AccessMode","name":"newMode","type":"uint8"}],"name":"UpdateAccessMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateCallPermission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":false,"internalType":"bool","name":"depositLimitation","type":"bool"},{"indexed":false,"internalType":"uint256","name":"depositCap","type":"uint256"}],"name":"UpdateDepositLimit","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes4","name":"_functionSig","type":"bytes4"}],"name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getAccessMode","outputs":[{"internalType":"enum IAllowList.AccessMode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"}],"name":"getTokenDepositLimitData","outputs":[{"components":[{"internalType":"bool","name":"depositLimitation","type":"bool"},{"internalType":"uint256","name":"depositCap","type":"uint256"}],"internalType":"struct IAllowList.Deposit","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"hasSpecialAccessToCall","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":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"enum IAllowList.AccessMode","name":"_accessMode","type":"uint8"}],"name":"setAccessMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"enum IAllowList.AccessMode[]","name":"_accessModes","type":"uint8[]"}],"name":"setBatchAccessMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_callers","type":"address[]"},{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"bytes4[]","name":"_functionSigs","type":"bytes4[]"},{"internalType":"bool[]","name":"_enables","type":"bool[]"}],"name":"setBatchPermissionToCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"bool","name":"_depositLimitation","type":"bool"},{"internalType":"uint256","name":"_depositCap","type":"uint256"}],"name":"setDepositLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes4","name":"_functionSig","type":"bytes4"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setPermissionToCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenDeposit","outputs":[{"internalType":"bool","name":"depositLimitation","type":"bool"},{"internalType":"uint256","name":"depositCap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516111f83803806111f883398101604081905261002f916100b3565b61003833610047565b61004181610047565b506100e3565b600180546001600160a01b031916905561006081610063565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100c557600080fd5b81516001600160a01b03811681146100dc57600080fd5b9392505050565b611106806100f26000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637cf1470111610097578063e30c397811610066578063e30c3978146102dc578063ec5f109a146102fa578063f2fde38b1461030d578063ffc7d0b41461032057600080fd5b80637cf14701146101f35780638da5cb5b14610277578063b7009613146102b6578063dff05449146102c957600080fd5b8063715018a6116100d3578063715018a61461018c57806373053f701461019457806373df5d8d146101d857806379ba5097146101eb57600080fd5b8063285712c8146100fa578063507d1bed146101335780635965cf8c14610148575b600080fd5b61011d610108366004610ccb565b60026020526000908152604090205460ff1681565b60405161012a9190610d50565b60405180910390f35b610146610141366004610db0565b610333565b005b61017c610156366004610ea4565b600360209081526000938452604080852082529284528284209052825290205460ff1681565b604051901515815260200161012a565b61014661053f565b6101c16101a2366004610ccb565b6004602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161012a565b6101466101e6366004610ef7565b610553565b61014661056d565b61025a610201366004610ccb565b60408051808201909152600080825260208201525073ffffffffffffffffffffffffffffffffffffffff166000908152600460209081526040918290208251808401909352805460ff1615158352600101549082015290565b60408051825115158152602092830151928101929092520161012a565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012a565b61017c6102c4366004610ea4565b610622565b6101466102d7366004610f4b565b6106ef565b60015473ffffffffffffffffffffffffffffffffffffffff16610291565b610146610308366004610f87565b610790565b61014661031b366004610ccb565b610873565b61014661032e366004611002565b610923565b61033b610939565b868581146103aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f797700000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b808414610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f797800000000000000000000000000000000000000000000000000000000000060448201526064016103a1565b80821461047c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f797900000000000000000000000000000000000000000000000000000000000060448201526064016103a1565b60005b818110156105335761052b8a8a8381811061049c5761049c611035565b90506020020160208101906104b19190610ccb565b8989848181106104c3576104c3611035565b90506020020160208101906104d89190610ccb565b8888858181106104ea576104ea611035565b90506020020160208101906104ff9190611064565b87878681811061051157610511611035565b9050602002016020810190610526919061107f565b6109ba565b60010161047f565b50505050505050505050565b610547610939565b6105516000610af0565b565b61055b610939565b610567848484846109ba565b50505050565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016103a1565b61061f81610af0565b50565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020819052604082205460ff169081600281111561066057610660610ce6565b14806106e45750600181600281111561067b5761067b610ce6565b1480156106e4575073ffffffffffffffffffffffffffffffffffffffff808616600090815260036020908152604080832093881683529281528282207fffffffff00000000000000000000000000000000000000000000000000000000871683529052205460ff165b9150505b9392505050565b6106f7610939565b73ffffffffffffffffffffffffffffffffffffffff831660008181526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168615159081178255600190910185905582519081529081018490527fcc9039b660daec0665c0dfaf9977370c18cbf6dc9743f39e2326a90315bc478b91015b60405180910390a2505050565b610798610939565b82818114610802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f796700000000000000000000000000000000000000000000000000000000000060448201526064016103a1565b60005b8181101561086b5761086386868381811061082257610822611035565b90506020020160208101906108379190610ccb565b85858481811061084957610849611035565b905060200201602081019061085e919061109a565b610b21565b600101610805565b505050505050565b61087b610939565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556108de60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61092b610939565b6109358282610b21565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a1565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260036020908152604080832093871683529281528282207fffffffff00000000000000000000000000000000000000000000000000000000861683529052205460ff1680151582151514610ae95773ffffffffffffffffffffffffffffffffffffffff85811660008181526003602090815260408083209489168084529482528083207fffffffff0000000000000000000000000000000000000000000000000000000089168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168815159081179091559051908152919392917f3336e7aa4c86fcb95fa993c8022c30690f1f696f67f138c845d81dc5484c9a32910160405180910390a45b5050505050565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561061f81610c2d565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602081905260409091205460ff16908290811115610b5f57610b5f610ce6565b816002811115610b7157610b71610ce6565b14610c285773ffffffffffffffffffffffffffffffffffffffff83166000908152600260208190526040909120805484927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116906001908490811115610bdb57610bdb610ce6565b02179055508273ffffffffffffffffffffffffffffffffffffffff167f3b3c3f982e4b12b1870d2ff77adfdb97d3838faab0fd8a6b255160e52e79a82f82846040516107839291906110b5565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cc657600080fd5b919050565b600060208284031215610cdd57600080fd5b6106e882610ca2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110610d4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208101610d5e8284610d15565b92915050565b60008083601f840112610d7657600080fd5b50813567ffffffffffffffff811115610d8e57600080fd5b6020830191508360208260051b8501011115610da957600080fd5b9250929050565b6000806000806000806000806080898b031215610dcc57600080fd5b883567ffffffffffffffff80821115610de457600080fd5b610df08c838d01610d64565b909a50985060208b0135915080821115610e0957600080fd5b610e158c838d01610d64565b909850965060408b0135915080821115610e2e57600080fd5b610e3a8c838d01610d64565b909650945060608b0135915080821115610e5357600080fd5b50610e608b828c01610d64565b999c989b5096995094979396929594505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114610cc657600080fd5b600080600060608486031215610eb957600080fd5b610ec284610ca2565b9250610ed060208501610ca2565b9150610ede60408501610e74565b90509250925092565b80358015158114610cc657600080fd5b60008060008060808587031215610f0d57600080fd5b610f1685610ca2565b9350610f2460208601610ca2565b9250610f3260408601610e74565b9150610f4060608601610ee7565b905092959194509250565b600080600060608486031215610f6057600080fd5b610f6984610ca2565b9250610f7760208501610ee7565b9150604084013590509250925092565b60008060008060408587031215610f9d57600080fd5b843567ffffffffffffffff80821115610fb557600080fd5b610fc188838901610d64565b90965094506020870135915080821115610fda57600080fd5b50610fe787828801610d64565b95989497509550505050565b803560038110610cc657600080fd5b6000806040838503121561101557600080fd5b61101e83610ca2565b915061102c60208401610ff3565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561107657600080fd5b6106e882610e74565b60006020828403121561109157600080fd5b6106e882610ee7565b6000602082840312156110ac57600080fd5b6106e882610ff3565b604081016110c38285610d15565b6106e86020830184610d1556fea26469706673582212203be12fcc75032bfdcac48ddc48c4c81792dfb506268aca2cbb64ac03f7e4c8e964736f6c63430008140033000000000000000000000000043da37f21c4c83b97b546724c75600c2d0c9e16
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80637cf1470111610097578063e30c397811610066578063e30c3978146102dc578063ec5f109a146102fa578063f2fde38b1461030d578063ffc7d0b41461032057600080fd5b80637cf14701146101f35780638da5cb5b14610277578063b7009613146102b6578063dff05449146102c957600080fd5b8063715018a6116100d3578063715018a61461018c57806373053f701461019457806373df5d8d146101d857806379ba5097146101eb57600080fd5b8063285712c8146100fa578063507d1bed146101335780635965cf8c14610148575b600080fd5b61011d610108366004610ccb565b60026020526000908152604090205460ff1681565b60405161012a9190610d50565b60405180910390f35b610146610141366004610db0565b610333565b005b61017c610156366004610ea4565b600360209081526000938452604080852082529284528284209052825290205460ff1681565b604051901515815260200161012a565b61014661053f565b6101c16101a2366004610ccb565b6004602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161012a565b6101466101e6366004610ef7565b610553565b61014661056d565b61025a610201366004610ccb565b60408051808201909152600080825260208201525073ffffffffffffffffffffffffffffffffffffffff166000908152600460209081526040918290208251808401909352805460ff1615158352600101549082015290565b60408051825115158152602092830151928101929092520161012a565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012a565b61017c6102c4366004610ea4565b610622565b6101466102d7366004610f4b565b6106ef565b60015473ffffffffffffffffffffffffffffffffffffffff16610291565b610146610308366004610f87565b610790565b61014661031b366004610ccb565b610873565b61014661032e366004611002565b610923565b61033b610939565b868581146103aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f797700000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b808414610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f797800000000000000000000000000000000000000000000000000000000000060448201526064016103a1565b80821461047c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f797900000000000000000000000000000000000000000000000000000000000060448201526064016103a1565b60005b818110156105335761052b8a8a8381811061049c5761049c611035565b90506020020160208101906104b19190610ccb565b8989848181106104c3576104c3611035565b90506020020160208101906104d89190610ccb565b8888858181106104ea576104ea611035565b90506020020160208101906104ff9190611064565b87878681811061051157610511611035565b9050602002016020810190610526919061107f565b6109ba565b60010161047f565b50505050505050505050565b610547610939565b6105516000610af0565b565b61055b610939565b610567848484846109ba565b50505050565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016103a1565b61061f81610af0565b50565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020819052604082205460ff169081600281111561066057610660610ce6565b14806106e45750600181600281111561067b5761067b610ce6565b1480156106e4575073ffffffffffffffffffffffffffffffffffffffff808616600090815260036020908152604080832093881683529281528282207fffffffff00000000000000000000000000000000000000000000000000000000871683529052205460ff165b9150505b9392505050565b6106f7610939565b73ffffffffffffffffffffffffffffffffffffffff831660008181526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168615159081178255600190910185905582519081529081018490527fcc9039b660daec0665c0dfaf9977370c18cbf6dc9743f39e2326a90315bc478b91015b60405180910390a2505050565b610798610939565b82818114610802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f796700000000000000000000000000000000000000000000000000000000000060448201526064016103a1565b60005b8181101561086b5761086386868381811061082257610822611035565b90506020020160208101906108379190610ccb565b85858481811061084957610849611035565b905060200201602081019061085e919061109a565b610b21565b600101610805565b505050505050565b61087b610939565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556108de60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61092b610939565b6109358282610b21565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a1565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260036020908152604080832093871683529281528282207fffffffff00000000000000000000000000000000000000000000000000000000861683529052205460ff1680151582151514610ae95773ffffffffffffffffffffffffffffffffffffffff85811660008181526003602090815260408083209489168084529482528083207fffffffff0000000000000000000000000000000000000000000000000000000089168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168815159081179091559051908152919392917f3336e7aa4c86fcb95fa993c8022c30690f1f696f67f138c845d81dc5484c9a32910160405180910390a45b5050505050565b600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561061f81610c2d565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602081905260409091205460ff16908290811115610b5f57610b5f610ce6565b816002811115610b7157610b71610ce6565b14610c285773ffffffffffffffffffffffffffffffffffffffff83166000908152600260208190526040909120805484927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116906001908490811115610bdb57610bdb610ce6565b02179055508273ffffffffffffffffffffffffffffffffffffffff167f3b3c3f982e4b12b1870d2ff77adfdb97d3838faab0fd8a6b255160e52e79a82f82846040516107839291906110b5565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cc657600080fd5b919050565b600060208284031215610cdd57600080fd5b6106e882610ca2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110610d4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208101610d5e8284610d15565b92915050565b60008083601f840112610d7657600080fd5b50813567ffffffffffffffff811115610d8e57600080fd5b6020830191508360208260051b8501011115610da957600080fd5b9250929050565b6000806000806000806000806080898b031215610dcc57600080fd5b883567ffffffffffffffff80821115610de457600080fd5b610df08c838d01610d64565b909a50985060208b0135915080821115610e0957600080fd5b610e158c838d01610d64565b909850965060408b0135915080821115610e2e57600080fd5b610e3a8c838d01610d64565b909650945060608b0135915080821115610e5357600080fd5b50610e608b828c01610d64565b999c989b5096995094979396929594505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114610cc657600080fd5b600080600060608486031215610eb957600080fd5b610ec284610ca2565b9250610ed060208501610ca2565b9150610ede60408501610e74565b90509250925092565b80358015158114610cc657600080fd5b60008060008060808587031215610f0d57600080fd5b610f1685610ca2565b9350610f2460208601610ca2565b9250610f3260408601610e74565b9150610f4060608601610ee7565b905092959194509250565b600080600060608486031215610f6057600080fd5b610f6984610ca2565b9250610f7760208501610ee7565b9150604084013590509250925092565b60008060008060408587031215610f9d57600080fd5b843567ffffffffffffffff80821115610fb557600080fd5b610fc188838901610d64565b90965094506020870135915080821115610fda57600080fd5b50610fe787828801610d64565b95989497509550505050565b803560038110610cc657600080fd5b6000806040838503121561101557600080fd5b61101e83610ca2565b915061102c60208401610ff3565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561107657600080fd5b6106e882610e74565b60006020828403121561109157600080fd5b6106e882610ee7565b6000602082840312156110ac57600080fd5b6106e882610ff3565b604081016110c38285610d15565b6106e86020830184610d1556fea26469706673582212203be12fcc75032bfdcac48ddc48c4c81792dfb506268aca2cbb64ac03f7e4c8e964736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000043da37f21c4c83b97b546724c75600c2d0c9e16
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0x043DA37F21c4C83b97b546724c75600c2D0C9E16
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000043da37f21c4c83b97b546724c75600c2d0c9e16
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ZKSYNC | 100.00% | $2,781 | 0.0002 | $0.5562 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.