Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 993,046 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set L1Base Fee A... | 11685836 | 8 secs ago | IN | 0 ETH | 0.00001041 | ||||
Set L1Base Fee A... | 11685827 | 38 secs ago | IN | 0 ETH | 0.00001 | ||||
Set L1Base Fee A... | 11685820 | 1 mins ago | IN | 0 ETH | 0.00001083 | ||||
Set L1Base Fee A... | 11685815 | 1 min ago | IN | 0 ETH | 0.00000988 | ||||
Set L1Base Fee A... | 11685812 | 1 min ago | IN | 0 ETH | 0.00000976 | ||||
Set L1Base Fee A... | 11685809 | 1 min ago | IN | 0 ETH | 0.00000998 | ||||
Set L1Base Fee A... | 11685806 | 1 min ago | IN | 0 ETH | 0.00001073 | ||||
Set L1Base Fee A... | 11685801 | 2 mins ago | IN | 0 ETH | 0.00001024 | ||||
Set L1Base Fee A... | 11685798 | 2 mins ago | IN | 0 ETH | 0.00001 | ||||
Set L1Base Fee A... | 11685795 | 2 mins ago | IN | 0 ETH | 0.0000101 | ||||
Set L1Base Fee A... | 11685791 | 2 mins ago | IN | 0 ETH | 0.00000982 | ||||
Set L1Base Fee A... | 11685787 | 2 mins ago | IN | 0 ETH | 0.00001023 | ||||
Set L1Base Fee A... | 11685783 | 3 mins ago | IN | 0 ETH | 0.00000966 | ||||
Set L1Base Fee A... | 11685780 | 3 mins ago | IN | 0 ETH | 0.00000905 | ||||
Set L1Base Fee A... | 11685777 | 3 mins ago | IN | 0 ETH | 0.00001006 | ||||
Set L1Base Fee A... | 11685773 | 3 mins ago | IN | 0 ETH | 0.00000988 | ||||
Set L1Base Fee A... | 11685767 | 3 mins ago | IN | 0 ETH | 0.00001008 | ||||
Set L1Base Fee A... | 11685764 | 4 mins ago | IN | 0 ETH | 0.00001053 | ||||
Set L1Base Fee A... | 11685761 | 4 mins ago | IN | 0 ETH | 0.00001033 | ||||
Set L1Base Fee A... | 11685758 | 4 mins ago | IN | 0 ETH | 0.00001038 | ||||
Set L1Base Fee A... | 11685754 | 4 mins ago | IN | 0 ETH | 0.00001033 | ||||
Set L1Base Fee A... | 11685748 | 4 mins ago | IN | 0 ETH | 0.0000099 | ||||
Set L1Base Fee A... | 11685744 | 5 mins ago | IN | 0 ETH | 0.00001036 | ||||
Set L1Base Fee A... | 11685741 | 5 mins ago | IN | 0 ETH | 0.00001025 | ||||
Set L1Base Fee A... | 11685737 | 5 mins ago | IN | 0 ETH | 0.00000935 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
274 | 422 days ago | 0 ETH | ||||
273 | 422 days ago | 0 ETH | ||||
272 | 422 days ago | 0 ETH | ||||
271 | 422 days ago | 0 ETH | ||||
270 | 422 days ago | 0 ETH | ||||
269 | 422 days ago | 0 ETH | ||||
268 | 422 days ago | 0 ETH | ||||
267 | 422 days ago | 0 ETH | ||||
266 | 422 days ago | 0 ETH | ||||
264 | 422 days ago | 0 ETH | ||||
263 | 422 days ago | 0 ETH | ||||
262 | 422 days ago | 0 ETH | ||||
261 | 422 days ago | 0 ETH | ||||
260 | 422 days ago | 0 ETH | ||||
259 | 422 days ago | 0 ETH | ||||
258 | 422 days ago | 0 ETH | ||||
257 | 422 days ago | 0 ETH | ||||
256 | 422 days ago | 0 ETH | ||||
255 | 422 days ago | 0 ETH | ||||
254 | 422 days ago | 0 ETH | ||||
253 | 422 days ago | 0 ETH | ||||
252 | 422 days ago | 0 ETH | ||||
251 | 422 days ago | 0 ETH | ||||
250 | 422 days ago | 0 ETH | ||||
249 | 422 days ago | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Genesis Bytecode Match Only)
Contract Name:
L1GasPriceOracle
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity =0.8.24; import {OwnableBase} from "../../libraries/common/OwnableBase.sol"; import {IWhitelist} from "../../libraries/common/IWhitelist.sol"; import {IL1GasPriceOracle} from "./IL1GasPriceOracle.sol"; contract L1GasPriceOracle is OwnableBase, IL1GasPriceOracle { /********** * Events * **********/ /// @notice Emitted when owner updates whitelist contract. /// @param _oldWhitelist The address of old whitelist contract. /// @param _newWhitelist The address of new whitelist contract. event UpdateWhitelist(address _oldWhitelist, address _newWhitelist); /********** * Errors * **********/ /// @dev Thrown when the blob fee scalar exceed `MAX_BLOB_SCALAR`. error ErrExceedMaxBlobScalar(); /// @dev Thrown when the commit fee scalar exceed `MAX_COMMIT_SCALAR`. error ErrExceedMaxCommitScalar(); /// @dev Thrown when the l1 fee overhead exceed `MAX_OVERHEAD`. error ErrExceedMaxOverhead(); /// @dev Thrown when the l1 fee scalar exceed `MAX_SCALAR`. error ErrExceedMaxScalar(); /// @dev Thrown when the caller is not whitelisted. error ErrCallerNotWhitelisted(); /// @dev Thrown when we enable Curie fork after Curie fork. error ErrAlreadyInCurieFork(); /************* * Constants * *************/ /// @dev The precision used in the scalar. uint256 private constant PRECISION = 1e9; /// @dev The maximum possible l1 fee overhead. /// Computed based on current l1 block gas limit. uint256 private constant MAX_OVERHEAD = 30000000 / 16; /// @dev The maximum possible l1 fee scale before Curie. /// x1000 should be enough. uint256 private constant MAX_SCALAR = 1000 * PRECISION; /// @dev The maximum possible l1 commit fee scalar after Curie. /// We derive the commit scalar by /// ``` /// commit_scalar = commit_gas_per_tx * fluctuation_multiplier * 1e9 /// ``` /// So, the value should not exceed 10^9 * 1e9 normally. uint256 private constant MAX_COMMIT_SCALAR = 10 ** 9 * PRECISION; /// @dev The maximum possible l1 blob fee scalar after Curie. /// We derive the blob scalar by /// ``` /// blob_scalar = fluctuation_multiplier / compression_ratio / blob_util_ratio * 1e9 /// ``` /// So, the value should not exceed 10^9 * 1e9 normally. uint256 private constant MAX_BLOB_SCALAR = 10 ** 9 * PRECISION; /************* * Variables * *************/ /// @inheritdoc IL1GasPriceOracle uint256 public l1BaseFee; /// @inheritdoc IL1GasPriceOracle uint256 public override overhead; /// @inheritdoc IL1GasPriceOracle uint256 public override scalar; /// @notice The address of whitelist contract. IWhitelist public whitelist; /// @inheritdoc IL1GasPriceOracle uint256 public override l1BlobBaseFee; /// @inheritdoc IL1GasPriceOracle uint256 public override commitScalar; /// @inheritdoc IL1GasPriceOracle uint256 public override blobScalar; /// @notice Indicates whether the network has gone through the Curie upgrade. bool public isCurie; /************* * Modifiers * *************/ modifier onlyWhitelistedSender() { if (!whitelist.isSenderAllowed(msg.sender)) revert ErrCallerNotWhitelisted(); _; } /*************** * Constructor * ***************/ constructor(address _owner) { _transferOwnership(_owner); } /************************* * Public View Functions * *************************/ /// @inheritdoc IL1GasPriceOracle function getL1Fee(bytes memory _data) external view override returns (uint256) { if (isCurie) { return _getL1FeeCurie(_data); } else { return _getL1FeeBeforeCurie(_data); } } /// @inheritdoc IL1GasPriceOracle function getL1GasUsed(bytes memory _data) public view override returns (uint256) { if (isCurie) { // It is near zero since we put all transactions to blob. return 0; } else { return _getL1GasUsedBeforeCurie(_data); } } /***************************** * Public Mutating Functions * *****************************/ /// @inheritdoc IL1GasPriceOracle function setL1BaseFee(uint256 _l1BaseFee) external override onlyWhitelistedSender { l1BaseFee = _l1BaseFee; emit L1BaseFeeUpdated(_l1BaseFee); } /// @inheritdoc IL1GasPriceOracle function setL1BaseFeeAndBlobBaseFee( uint256 _l1BaseFee, uint256 _l1BlobBaseFee ) external override onlyWhitelistedSender { l1BaseFee = _l1BaseFee; l1BlobBaseFee = _l1BlobBaseFee; emit L1BaseFeeUpdated(_l1BaseFee); emit L1BlobBaseFeeUpdated(_l1BlobBaseFee); } /************************ * Restricted Functions * ************************/ /// @notice Allows the owner to modify the overhead. /// @param _overhead New overhead function setOverhead(uint256 _overhead) external onlyOwner { if (_overhead > MAX_OVERHEAD) revert ErrExceedMaxOverhead(); overhead = _overhead; emit OverheadUpdated(_overhead); } /// Allows the owner to modify the scalar. /// @param _scalar New scalar function setScalar(uint256 _scalar) external onlyOwner { if (_scalar > MAX_SCALAR) revert ErrExceedMaxScalar(); scalar = _scalar; emit ScalarUpdated(_scalar); } /// Allows the owner to modify the commit scalar. /// @param _scalar New scalar function setCommitScalar(uint256 _scalar) external onlyOwner { if (_scalar > MAX_COMMIT_SCALAR) revert ErrExceedMaxCommitScalar(); commitScalar = _scalar; emit CommitScalarUpdated(_scalar); } /// Allows the owner to modify the blob scalar. /// @param _scalar New scalar function setBlobScalar(uint256 _scalar) external onlyOwner { if (_scalar > MAX_BLOB_SCALAR) revert ErrExceedMaxBlobScalar(); blobScalar = _scalar; emit BlobScalarUpdated(_scalar); } /// @notice Update whitelist contract. /// @dev This function can only called by contract owner. /// @param _newWhitelist The address of new whitelist contract. function updateWhitelist(address _newWhitelist) external onlyOwner { address _oldWhitelist = address(whitelist); whitelist = IWhitelist(_newWhitelist); emit UpdateWhitelist(_oldWhitelist, _newWhitelist); } /// @notice Enable the Curie fork (callable by contract owner). /// /// @dev Since this is a predeploy contract, we will directly set the slot while hard fork /// to avoid external owner operations. /// The reason that we keep this function is for easy unit testing. function enableCurie() external onlyOwner { if (isCurie) revert ErrAlreadyInCurieFork(); isCurie = true; } /********************** * Internal Functions * **********************/ /// @dev Internal function to computes the amount of L1 gas used for a transaction before Curie fork. /// The `_data` is the RLP-encoded transaction with signature. And we also reserve additional /// 4 bytes in the non-zero bytes to store the number of bytes in the RLP-encoded transaction. /// @param _data Signed fully RLP-encoded transaction to get the L1 gas for. /// @return Amount of L1 gas used to publish the transaction. function _getL1GasUsedBeforeCurie(bytes memory _data) private view returns (uint256) { uint256 _total = 0; uint256 _length = _data.length; unchecked { for (uint256 i = 0; i < _length; i++) { if (_data[i] == 0) { _total += 4; } else { _total += 16; } } return _total + overhead + (4 * 16); } } /// @dev Internal function to compute the L1 portion of the fee based on the size of the rlp encoded input /// transaction, the current L1 base fee, and the various dynamic parameters, before Curie fork. /// @param _data Signed fully RLP-encoded transaction to get the L1 fee for. /// @return L1 fee that should be paid for the tx function _getL1FeeBeforeCurie(bytes memory _data) private view returns (uint256) { uint256 _l1GasUsed = _getL1GasUsedBeforeCurie(_data); uint256 _l1Fee = _l1GasUsed * l1BaseFee; return (_l1Fee * scalar) / PRECISION; } /// @dev Internal function to compute the L1 portion of the fee based on the size of the rlp encoded input /// transaction, the current L1 base fee, and the various dynamic parameters, after Curie fork. /// @param _data Signed fully RLP-encoded transaction to get the L1 fee for. /// @return L1 fee that should be paid for the tx function _getL1FeeCurie(bytes memory _data) private view returns (uint256) { // We have bounded the value of `commitScalar` and `blobScalar`, the whole expression won't overflow. return (commitScalar * l1BaseFee + blobScalar * _data.length * l1BlobBaseFee) / PRECISION; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; abstract contract OwnableBase { /********** * Events * **********/ /// @notice Emitted when owner is changed by current owner. /// @param _oldOwner The address of previous owner. /// @param _newOwner The address of new owner. event OwnershipTransferred(address indexed _oldOwner, address indexed _newOwner); /************* * Variables * *************/ /// @notice The address of the current owner. address public owner; /********************** * Function Modifiers * **********************/ /// @dev Throws if called by any account other than the owner. modifier onlyOwner() { require(owner == msg.sender, "caller is not the owner"); _; } /************************ * Restricted Functions * ************************/ /// @notice Leaves the contract without owner. It will not be possible to call /// `onlyOwner` functions anymore. Can only be called by the current owner. /// /// @dev Renouncing ownership will leave the contract without an owner, /// thereby removing any functionality that is only available to the owner. function renounceOwnership() public onlyOwner { _transferOwnership(address(0)); } /// @notice Transfers ownership of the contract to a new account (`newOwner`). /// Can only be called by the current owner. function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0), "new owner is the zero address"); _transferOwnership(_newOwner); } /********************** * Internal Functions * **********************/ /// @dev Transfers ownership of the contract to a new account (`newOwner`). /// Internal function without access restriction. function _transferOwnership(address _newOwner) internal { address _oldOwner = owner; owner = _newOwner; emit OwnershipTransferred(_oldOwner, _newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; interface IWhitelist { /// @notice Check whether the sender is allowed to do something. /// @param _sender The address of sender. function isSenderAllowed(address _sender) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; interface IL1GasPriceOracle { /********** * Events * **********/ /// @notice Emitted when current fee overhead is updated. /// @param overhead The current fee overhead updated. event OverheadUpdated(uint256 overhead); /// @notice Emitted when current fee scalar is updated. /// @param scalar The current fee scalar updated. event ScalarUpdated(uint256 scalar); /// @notice Emitted when current commit fee scalar is updated. /// @param scalar The current commit fee scalar updated. event CommitScalarUpdated(uint256 scalar); /// @notice Emitted when current blob fee scalar is updated. /// @param scalar The current blob fee scalar updated. event BlobScalarUpdated(uint256 scalar); /// @notice Emitted when current l1 base fee is updated. /// @param l1BaseFee The current l1 base fee updated. event L1BaseFeeUpdated(uint256 l1BaseFee); /// @notice Emitted when current l1 blob base fee is updated. /// @param l1BlobBaseFee The current l1 blob base fee updated. event L1BlobBaseFeeUpdated(uint256 l1BlobBaseFee); /************************* * Public View Functions * *************************/ /// @notice Return the current l1 fee overhead. function overhead() external view returns (uint256); /// @notice Return the current l1 fee scalar before Curie fork. function scalar() external view returns (uint256); /// @notice Return the current l1 commit fee scalar. function commitScalar() external view returns (uint256); /// @notice Return the current l1 blob fee scalar. function blobScalar() external view returns (uint256); /// @notice Return the latest known l1 base fee. function l1BaseFee() external view returns (uint256); /// @notice Return the latest known l1 blob base fee. function l1BlobBaseFee() external view returns (uint256); /// @notice Computes the L1 portion of the fee based on the size of the rlp encoded input /// transaction, the current L1 base fee, and the various dynamic parameters. /// @param data Signed fully RLP-encoded transaction to get the L1 fee for. /// @return L1 fee that should be paid for the tx function getL1Fee(bytes memory data) external view returns (uint256); /// @notice Computes the amount of L1 gas used for a transaction. Adds the overhead which /// represents the per-transaction gas overhead of posting the transaction and state /// roots to L1. Adds 74 bytes of padding to account for the fact that the input does /// not have a signature. /// @param data Signed fully RLP-encoded transaction to get the L1 gas for. /// @return Amount of L1 gas used to publish the transaction. function getL1GasUsed(bytes memory data) external view returns (uint256); /***************************** * Public Mutating Functions * *****************************/ /// @notice Allows whitelisted caller to modify the l1 base fee. /// @param _l1BaseFee New l1 base fee. function setL1BaseFee(uint256 _l1BaseFee) external; /// @notice Allows whitelisted caller to modify the l1 base fee. /// @param _l1BaseFee New l1 base fee. /// @param _l1BlobBaseFee New l1 blob base fee. function setL1BaseFeeAndBlobBaseFee(uint256 _l1BaseFee, uint256 _l1BlobBaseFee) external; }
{ "remappings": [ "hardhat/=node_modules/hardhat/", "forge-std/=lib/forge-std/src/", "ds-test/=lib/ds-test/src/", "solmate/=lib/solmate/src/", "@openzeppelin/=node_modules/@openzeppelin/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "": [ "ast" ], "*": [ "abi", "evm.bytecode", "evm.deployedBytecode", "evm.methodIdentifiers", "metadata" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"type": "constructor","inputs": [{"name": "_owner","type": "address","internalType": "address"}],"stateMutability": "nonpayable"},{"type": "function","name": "blobScalar","inputs": [],"outputs": [{"name": "","type": "uint256","internalType": "uint256"}],"stateMutability": "view"},{"type": "function","name": "commitScalar","inputs": [],"outputs": [{"name": "","type": "uint256","internalType": "uint256"}],"stateMutability": "view"},{"type": "function","name": "enableCurie","inputs": [],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "getL1Fee","inputs": [{"name": "_data","type": "bytes","internalType": "bytes"}],"outputs": [{"name": "","type": "uint256","internalType": "uint256"}],"stateMutability": "view"},{"type": "function","name": "getL1GasUsed","inputs": [{"name": "_data","type": "bytes","internalType": "bytes"}],"outputs": [{"name": "","type": "uint256","internalType": "uint256"}],"stateMutability": "view"},{"type": "function","name": "isCurie","inputs": [],"outputs": [{"name": "","type": "bool","internalType": "bool"}],"stateMutability": "view"},{"type": "function","name": "l1BaseFee","inputs": [],"outputs": [{"name": "","type": "uint256","internalType": "uint256"}],"stateMutability": "view"},{"type": "function","name": "l1BlobBaseFee","inputs": [],"outputs": [{"name": "","type": "uint256","internalType": "uint256"}],"stateMutability": "view"},{"type": "function","name": "overhead","inputs": [],"outputs": [{"name": "","type": "uint256","internalType": "uint256"}],"stateMutability": "view"},{"type": "function","name": "owner","inputs": [],"outputs": [{"name": "","type": "address","internalType": "address"}],"stateMutability": "view"},{"type": "function","name": "renounceOwnership","inputs": [],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "scalar","inputs": [],"outputs": [{"name": "","type": "uint256","internalType": "uint256"}],"stateMutability": "view"},{"type": "function","name": "setBlobScalar","inputs": [{"name": "_scalar","type": "uint256","internalType": "uint256"}],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "setCommitScalar","inputs": [{"name": "_scalar","type": "uint256","internalType": "uint256"}],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "setL1BaseFee","inputs": [{"name": "_l1BaseFee","type": "uint256","internalType": "uint256"}],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "setL1BaseFeeAndBlobBaseFee","inputs": [{"name": "_l1BaseFee","type": "uint256","internalType": "uint256"},{"name": "_l1BlobBaseFee","type": "uint256","internalType": "uint256"}],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "setOverhead","inputs": [{"name": "_overhead","type": "uint256","internalType": "uint256"}],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "setScalar","inputs": [{"name": "_scalar","type": "uint256","internalType": "uint256"}],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "transferOwnership","inputs": [{"name": "_newOwner","type": "address","internalType": "address"}],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "updateWhitelist","inputs": [{"name": "_newWhitelist","type": "address","internalType": "address"}],"outputs": [],"stateMutability": "nonpayable"},{"type": "function","name": "whitelist","inputs": [],"outputs": [{"name": "","type": "address","internalType": "contract IWhitelist"}],"stateMutability": "view"},{"type": "event","name": "BlobScalarUpdated","inputs": [{"name": "scalar","type": "uint256","indexed": false,"internalType": "uint256"}],"anonymous": false},{"type": "event","name": "CommitScalarUpdated","inputs": [{"name": "scalar","type": "uint256","indexed": false,"internalType": "uint256"}],"anonymous": false},{"type": "event","name": "L1BaseFeeUpdated","inputs": [{"name": "l1BaseFee","type": "uint256","indexed": false,"internalType": "uint256"}],"anonymous": false},{"type": "event","name": "L1BlobBaseFeeUpdated","inputs": [{"name": "l1BlobBaseFee","type": "uint256","indexed": false,"internalType": "uint256"}],"anonymous": false},{"type": "event","name": "OverheadUpdated","inputs": [{"name": "overhead","type": "uint256","indexed": false,"internalType": "uint256"}],"anonymous": false},{"type": "event","name": "OwnershipTransferred","inputs": [{"name": "_oldOwner","type": "address","indexed": true,"internalType": "address"},{"name": "_newOwner","type": "address","indexed": true,"internalType": "address"}],"anonymous": false},{"type": "event","name": "ScalarUpdated","inputs": [{"name": "scalar","type": "uint256","indexed": false,"internalType": "uint256"}],"anonymous": false},{"type": "event","name": "UpdateWhitelist","inputs": [{"name": "_oldWhitelist","type": "address","indexed": false,"internalType": "address"},{"name": "_newWhitelist","type": "address","indexed": false,"internalType": "address"}],"anonymous": false},{"type": "error","name": "ErrAlreadyInCurieFork","inputs": []},{"type": "error","name": "ErrCallerNotWhitelisted","inputs": []},{"type": "error","name": "ErrExceedMaxBlobScalar","inputs": []},{"type": "error","name": "ErrExceedMaxCommitScalar","inputs": []},{"type": "error","name": "ErrExceedMaxOverhead","inputs": []},{"type": "error","name": "ErrExceedMaxScalar","inputs": []}]
Contract Creation Code
0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063715018a6116100b4578063a911d77f11610079578063a911d77f1461024c578063bede39b514610254578063de26c4a114610267578063e88a60ad1461027a578063f2fde38b1461028d578063f45e65d8146102a0575f80fd5b8063715018a6146101eb57806384189161146101f35780638da5cb5b146101fc57806393e59dc114610226578063944b247f14610239575f80fd5b80633d0f963e116100fa5780633d0f963e146101a057806349948e0e146101b3578063519b4bd3146101c65780636a5e67e5146101cf57806370465597146101d8575f80fd5b80630c18c1621461013657806313dad5be1461015257806323e524ac1461016f5780633577afc51461017857806339455d3a1461018d575b5f80fd5b61013f60025481565b6040519081526020015b60405180910390f35b60085461015f9060ff1681565b6040519015158152602001610149565b61013f60065481565b61018b6101863660046109b3565b6102a9565b005b61018b61019b3660046109ca565b61033b565b61018b6101ae3660046109ea565b610438565b61013f6101c1366004610a2b565b6104bb565b61013f60015481565b61013f60075481565b61018b6101e63660046109b3565b6104e0565b61018b61056e565b61013f60055481565b5f5461020e906001600160a01b031681565b6040516001600160a01b039091168152602001610149565b60045461020e906001600160a01b031681565b61018b6102473660046109b3565b6105a2565b61018b61062e565b61018b6102623660046109b3565b61068a565b61013f610275366004610a2b565b610747565b61018b6102883660046109b3565b610764565b61018b61029b3660046109ea565b6107f0565b61013f60035481565b5f546001600160a01b031633146102db5760405162461bcd60e51b81526004016102d290610ad6565b60405180910390fd5b621c9c388111156102ff57604051635742c80560e11b815260040160405180910390fd5b60028190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa158015610382573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a69190610b0d565b6103c3576040516326b3506d60e11b815260040160405180910390fd5b600182905560058190556040518281527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c449060200160405180910390a16040518181527f9a14bfb5d18c4c3cf14cae19c23d7cf1bcede357ea40ca1f75cd49542c71c214906020015b60405180910390a15050565b5f546001600160a01b031633146104615760405162461bcd60e51b81526004016102d290610ad6565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f22d1c35fe072d2e42c3c8f9bd4a0d34aa84a0101d020a62517b33fdb3174e5f7910161042c565b6008545f9060ff16156104d7576104d18261087b565b92915050565b6104d1826108c1565b5f546001600160a01b031633146105095760405162461bcd60e51b81526004016102d290610ad6565b610519633b9aca006103e8610b40565b81111561053957604051631e44fdeb60e11b815260040160405180910390fd5b60038190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a90602001610330565b5f546001600160a01b031633146105975760405162461bcd60e51b81526004016102d290610ad6565b6105a05f610904565b565b5f546001600160a01b031633146105cb5760405162461bcd60e51b81526004016102d290610ad6565b6105d9633b9aca0080610b40565b8111156105f95760405163874f603160e01b815260040160405180910390fd5b60068190556040518181527f2ab3f5a4ebbcbf3c24f62f5454f52f10e1a8c9dcc5acac8f19199ce881a6a10890602001610330565b5f546001600160a01b031633146106575760405162461bcd60e51b81526004016102d290610ad6565b60085460ff161561067b576040516379f9c57560e01b815260040160405180910390fd5b6008805460ff19166001179055565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa1580156106d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f59190610b0d565b610712576040516326b3506d60e11b815260040160405180910390fd5b60018190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c4490602001610330565b6008545f9060ff161561075b57505f919050565b6104d182610953565b5f546001600160a01b0316331461078d5760405162461bcd60e51b81526004016102d290610ad6565b61079b633b9aca0080610b40565b8111156107bb5760405163f37ec21560e01b815260040160405180910390fd5b60078190556040518181527f6b332a036d8c3ead57dcb06c87243bd7a2aed015ddf2d0528c2501dae56331aa90602001610330565b5f546001600160a01b031633146108195760405162461bcd60e51b81526004016102d290610ad6565b6001600160a01b03811661086f5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016102d2565b61087881610904565b50565b5f633b9aca0060055483516007546108939190610b40565b61089d9190610b40565b6001546006546108ad9190610b40565b6108b79190610b57565b6104d19190610b6a565b5f806108cc83610953565b90505f600154826108dd9190610b40565b9050633b9aca00600354826108f29190610b40565b6108fc9190610b6a565b949350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80515f908190815b818110156109a45784818151811061097557610975610b89565b01602001516001600160f81b0319165f036109955760048301925061099c565b6010830192505b60010161095b565b50506002540160400192915050565b5f602082840312156109c3575f80fd5b5035919050565b5f80604083850312156109db575f80fd5b50508035926020909101359150565b5f602082840312156109fa575f80fd5b81356001600160a01b0381168114610a10575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610a3b575f80fd5b813567ffffffffffffffff80821115610a52575f80fd5b818401915084601f830112610a65575f80fd5b813581811115610a7757610a77610a17565b604051601f8201601f19908116603f01168101908382118183101715610a9f57610a9f610a17565b81604052828152876020848701011115610ab7575f80fd5b826020860160208301375f928101602001929092525095945050505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b5f60208284031215610b1d575f80fd5b81518015158114610a10575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104d1576104d1610b2c565b808201808211156104d1576104d1610b2c565b5f82610b8457634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212204cf1046063ea2cab268e6b0d7a82540533ced2cbd9c5db08aa2c322755ec545764736f6c63430008180033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063715018a6116100b4578063a911d77f11610079578063a911d77f1461024c578063bede39b514610254578063de26c4a114610267578063e88a60ad1461027a578063f2fde38b1461028d578063f45e65d8146102a0575f80fd5b8063715018a6146101eb57806384189161146101f35780638da5cb5b146101fc57806393e59dc114610226578063944b247f14610239575f80fd5b80633d0f963e116100fa5780633d0f963e146101a057806349948e0e146101b3578063519b4bd3146101c65780636a5e67e5146101cf57806370465597146101d8575f80fd5b80630c18c1621461013657806313dad5be1461015257806323e524ac1461016f5780633577afc51461017857806339455d3a1461018d575b5f80fd5b61013f60025481565b6040519081526020015b60405180910390f35b60085461015f9060ff1681565b6040519015158152602001610149565b61013f60065481565b61018b6101863660046109b3565b6102a9565b005b61018b61019b3660046109ca565b61033b565b61018b6101ae3660046109ea565b610438565b61013f6101c1366004610a2b565b6104bb565b61013f60015481565b61013f60075481565b61018b6101e63660046109b3565b6104e0565b61018b61056e565b61013f60055481565b5f5461020e906001600160a01b031681565b6040516001600160a01b039091168152602001610149565b60045461020e906001600160a01b031681565b61018b6102473660046109b3565b6105a2565b61018b61062e565b61018b6102623660046109b3565b61068a565b61013f610275366004610a2b565b610747565b61018b6102883660046109b3565b610764565b61018b61029b3660046109ea565b6107f0565b61013f60035481565b5f546001600160a01b031633146102db5760405162461bcd60e51b81526004016102d290610ad6565b60405180910390fd5b621c9c388111156102ff57604051635742c80560e11b815260040160405180910390fd5b60028190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa158015610382573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a69190610b0d565b6103c3576040516326b3506d60e11b815260040160405180910390fd5b600182905560058190556040518281527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c449060200160405180910390a16040518181527f9a14bfb5d18c4c3cf14cae19c23d7cf1bcede357ea40ca1f75cd49542c71c214906020015b60405180910390a15050565b5f546001600160a01b031633146104615760405162461bcd60e51b81526004016102d290610ad6565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f22d1c35fe072d2e42c3c8f9bd4a0d34aa84a0101d020a62517b33fdb3174e5f7910161042c565b6008545f9060ff16156104d7576104d18261087b565b92915050565b6104d1826108c1565b5f546001600160a01b031633146105095760405162461bcd60e51b81526004016102d290610ad6565b610519633b9aca006103e8610b40565b81111561053957604051631e44fdeb60e11b815260040160405180910390fd5b60038190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a90602001610330565b5f546001600160a01b031633146105975760405162461bcd60e51b81526004016102d290610ad6565b6105a05f610904565b565b5f546001600160a01b031633146105cb5760405162461bcd60e51b81526004016102d290610ad6565b6105d9633b9aca0080610b40565b8111156105f95760405163874f603160e01b815260040160405180910390fd5b60068190556040518181527f2ab3f5a4ebbcbf3c24f62f5454f52f10e1a8c9dcc5acac8f19199ce881a6a10890602001610330565b5f546001600160a01b031633146106575760405162461bcd60e51b81526004016102d290610ad6565b60085460ff161561067b576040516379f9c57560e01b815260040160405180910390fd5b6008805460ff19166001179055565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa1580156106d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f59190610b0d565b610712576040516326b3506d60e11b815260040160405180910390fd5b60018190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c4490602001610330565b6008545f9060ff161561075b57505f919050565b6104d182610953565b5f546001600160a01b0316331461078d5760405162461bcd60e51b81526004016102d290610ad6565b61079b633b9aca0080610b40565b8111156107bb5760405163f37ec21560e01b815260040160405180910390fd5b60078190556040518181527f6b332a036d8c3ead57dcb06c87243bd7a2aed015ddf2d0528c2501dae56331aa90602001610330565b5f546001600160a01b031633146108195760405162461bcd60e51b81526004016102d290610ad6565b6001600160a01b03811661086f5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016102d2565b61087881610904565b50565b5f633b9aca0060055483516007546108939190610b40565b61089d9190610b40565b6001546006546108ad9190610b40565b6108b79190610b57565b6104d19190610b6a565b5f806108cc83610953565b90505f600154826108dd9190610b40565b9050633b9aca00600354826108f29190610b40565b6108fc9190610b6a565b949350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80515f908190815b818110156109a45784818151811061097557610975610b89565b01602001516001600160f81b0319165f036109955760048301925061099c565b6010830192505b60010161095b565b50506002540160400192915050565b5f602082840312156109c3575f80fd5b5035919050565b5f80604083850312156109db575f80fd5b50508035926020909101359150565b5f602082840312156109fa575f80fd5b81356001600160a01b0381168114610a10575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610a3b575f80fd5b813567ffffffffffffffff80821115610a52575f80fd5b818401915084601f830112610a65575f80fd5b813581811115610a7757610a77610a17565b604051601f8201601f19908116603f01168101908382118183101715610a9f57610a9f610a17565b81604052828152876020848701011115610ab7575f80fd5b826020860160208301375f928101602001929092525095945050505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b5f60208284031215610b1d575f80fd5b81518015158114610a10575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104d1576104d1610b2c565b808201808211156104d1576104d1610b2c565b5f82610b8457634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212200c2ac583f18be4f94ab169ae6f2ea3a708a7c0d4424746b120b177adb39e626064736f6c63430008180033
Loading...
Loading
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.