Source Code
Overview
ETH Balance
120.991211791957541967 ETH
Token Holdings
More Info
ContractCreator
GENESIS at txn GENESIS_5300000000000000000000000000000000000005
Multichain Info
N/A
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 6739197 | 10 days ago | IN | 0 ETH | 0.00082245 | ||||
Withdraw | 6121808 | 50 days ago | IN | 0 ETH | 0.00004134 | ||||
Withdraw | 3029286 | 227 days ago | IN | 0 ETH | 0.00169912 | ||||
Withdraw | 2675734 | 284 days ago | IN | 0 ETH | 0.00039288 | ||||
Withdraw | 2675722 | 284 days ago | IN | 0 ETH | 0.00033221 | ||||
Withdraw | 1528183 | 359 days ago | IN | 0 ETH | 0.00265641 | ||||
Withdraw | 1453726 | 362 days ago | IN | 0 ETH | 0.00006742 | ||||
Transfer Ownersh... | 968092 | 379 days ago | IN | 0 ETH | 0.00000003 | ||||
Withdraw | 339665 | 402 days ago | IN | 0 ETH | 0.00930109 | ||||
Withdraw | 183307 | 408 days ago | IN | 0 ETH | 0.00123746 | ||||
Withdraw | 119812 | 410 days ago | IN | 0 ETH | 0.00002534 | ||||
Update Messenger | 5 | 425 days ago | IN | 0 ETH | 0.00000002 | ||||
GENESIS_5300000000000000000000000000000000000005 | 0x60806040 | 0 | - | GENESIS | IN | 0 ETH | 0 |
Latest 10 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
6739197 | 10 days ago | 375.10143485 ETH | ||||
6121808 | 50 days ago | 1,636.50768883 ETH | ||||
3029286 | 227 days ago | 1,389.37957157 ETH | ||||
2675734 | 284 days ago | 3,613.34630952 ETH | ||||
2675722 | 284 days ago | 3,613.3411489 ETH | ||||
1528183 | 359 days ago | 2,004.45775979 ETH | ||||
1453726 | 362 days ago | 1,931.22245949 ETH | ||||
339665 | 402 days ago | 4,078.68096394 ETH | ||||
183307 | 408 days ago | 2,219.94440686 ETH | ||||
119812 | 410 days ago | 144.10663951 ETH |
Loading...
Loading
Contract Name:
L2TxFeeVault
Compiler Version
v0.8.16+commit.07a7930e
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.16; import {FeeVault} from "../../libraries/FeeVault.sol"; /// @title L2TxFeeVault /// @notice The `L2TxFeeVault` contract collects all L2 transaction fees and allows withdrawing these fees to a predefined L1 address. /// The minimum withdrawal amount is 10 ether. contract L2TxFeeVault is FeeVault { /// @param _owner The owner of the contract. /// @param _recipient The fee recipient address on L1. constructor(address _owner, address _recipient) FeeVault(_owner, _recipient, 10 ether) {} }
// SPDX-License-Identifier: MIT // MIT License // Copyright (c) 2022 Optimism // Copyright (c) 2022 Scroll // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. pragma solidity ^0.8.16; import {IL2ScrollMessenger} from "../L2/IL2ScrollMessenger.sol"; import {OwnableBase} from "./common/OwnableBase.sol"; // solhint-disable no-empty-blocks // solhint-disable reason-string /// @title FeeVault /// @notice The FeeVault contract contains the basic logic for the various different vault contracts /// used to hold fee revenue generated by the L2 system. abstract contract FeeVault is OwnableBase { /********** * Events * **********/ /// @notice Emits each time that a withdrawal occurs. /// /// @param value Amount that was withdrawn (in wei). /// @param to Address that the funds were sent to. /// @param from Address that triggered the withdrawal. event Withdrawal(uint256 value, address to, address from); /// @notice Emits each time the owner updates the address of `messenger`. /// @param oldMessenger The address of old messenger. /// @param newMessenger The address of new messenger. event UpdateMessenger(address indexed oldMessenger, address indexed newMessenger); /// @notice Emits each time the owner updates the address of `recipient`. /// @param oldRecipient The address of old recipient. /// @param newRecipient The address of new recipient. event UpdateRecipient(address indexed oldRecipient, address indexed newRecipient); /// @notice Emits each time the owner updates the value of `minWithdrawAmount`. /// @param oldMinWithdrawAmount The value of old `minWithdrawAmount`. /// @param newMinWithdrawAmount The value of new `minWithdrawAmount`. event UpdateMinWithdrawAmount(uint256 oldMinWithdrawAmount, uint256 newMinWithdrawAmount); /************* * Variables * *************/ /// @notice Minimum balance before a withdrawal can be triggered. uint256 public minWithdrawAmount; /// @notice Scroll L2 messenger address. address public messenger; /// @notice Wallet that will receive the fees on L1. address public recipient; /// @notice Total amount of wei processed by the contract. uint256 public totalProcessed; /*************** * Constructor * ***************/ /// @param _owner The owner of the contract. /// @param _recipient Wallet that will receive the fees on L1. /// @param _minWithdrawalAmount Minimum balance before a withdrawal can be triggered. constructor( address _owner, address _recipient, uint256 _minWithdrawalAmount ) { _transferOwnership(_owner); minWithdrawAmount = _minWithdrawalAmount; recipient = _recipient; } /***************************** * Public Mutating Functions * *****************************/ /// @notice Allow the contract to receive ETH. receive() external payable {} /// @notice Triggers a withdrawal of funds to the L1 fee wallet. function withdraw() external { uint256 value = address(this).balance; require( value >= minWithdrawAmount, "FeeVault: withdrawal amount must be greater than minimum withdrawal amount" ); unchecked { totalProcessed += value; } emit Withdrawal(value, recipient, msg.sender); // no fee provided IL2ScrollMessenger(messenger).sendMessage{value: value}( recipient, value, bytes(""), // no message (simple eth transfer) 0 // _gasLimit can be zero for fee vault. ); } /************************ * Restricted Functions * ************************/ /// @notice Update the address of messenger. /// @param _newMessenger The address of messenger to update. function updateMessenger(address _newMessenger) external onlyOwner { address _oldMessenger = messenger; messenger = _newMessenger; emit UpdateMessenger(_oldMessenger, _newMessenger); } /// @notice Update the address of recipient. /// @param _newRecipient The address of recipient to update. function updateRecipient(address _newRecipient) external onlyOwner { address _oldRecipient = recipient; recipient = _newRecipient; emit UpdateRecipient(_oldRecipient, _newRecipient); } /// @notice Update the minimum withdraw amount. /// @param _newMinWithdrawAmount The minimum withdraw amount to update. function updateMinWithdrawAmount(uint256 _newMinWithdrawAmount) external onlyOwner { uint256 _oldMinWithdrawAmount = minWithdrawAmount; minWithdrawAmount = _newMinWithdrawAmount; emit UpdateMinWithdrawAmount(_oldMinWithdrawAmount, _newMinWithdrawAmount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.16; import {IScrollMessenger} from "../libraries/IScrollMessenger.sol"; interface IL2ScrollMessenger is IScrollMessenger { /********** * Events * **********/ /// @notice Emitted when the maximum number of times each message can fail in L2 is updated. /// @param oldMaxFailedExecutionTimes The old maximum number of times each message can fail in L2. /// @param newMaxFailedExecutionTimes The new maximum number of times each message can fail in L2. event UpdateMaxFailedExecutionTimes(uint256 oldMaxFailedExecutionTimes, uint256 newMaxFailedExecutionTimes); /***************************** * Public Mutating Functions * *****************************/ /// @notice execute L1 => L2 message /// @dev Make sure this is only called by privileged accounts. /// @param from The address of the sender of the message. /// @param to The address of the recipient of the message. /// @param value The msg.value passed to the message call. /// @param nonce The nonce of the message to avoid replay attack. /// @param message The content of the message. function relayMessage( address from, address to, uint256 value, uint256 nonce, bytes calldata message ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.16; 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.16; interface IScrollMessenger { /********** * Events * **********/ /// @notice Emitted when a cross domain message is sent. /// @param sender The address of the sender who initiates the message. /// @param target The address of target contract to call. /// @param value The amount of value passed to the target contract. /// @param messageNonce The nonce of the message. /// @param gasLimit The optional gas limit passed to L1 or L2. /// @param message The calldata passed to the target contract. event SentMessage( address indexed sender, address indexed target, uint256 value, uint256 messageNonce, uint256 gasLimit, bytes message ); /// @notice Emitted when a cross domain message is relayed successfully. /// @param messageHash The hash of the message. event RelayedMessage(bytes32 indexed messageHash); /// @notice Emitted when a cross domain message is failed to relay. /// @param messageHash The hash of the message. event FailedRelayedMessage(bytes32 indexed messageHash); /************************* * Public View Functions * *************************/ /// @notice Return the sender of a cross domain message. function xDomainMessageSender() external view returns (address); /***************************** * Public Mutating Functions * *****************************/ /// @notice Send cross chain message from L1 to L2 or L2 to L1. /// @param target The address of account who receive the message. /// @param value The amount of ether passed when call target contract. /// @param message The content of the message. /// @param gasLimit Gas limit required to complete the message relay on corresponding chain. function sendMessage( address target, uint256 value, bytes calldata message, uint256 gasLimit ) external payable; /// @notice Send cross chain message from L1 to L2 or L2 to L1. /// @param target The address of account who receive the message. /// @param value The amount of ether passed when call target contract. /// @param message The content of the message. /// @param gasLimit Gas limit required to complete the message relay on corresponding chain. /// @param refundAddress The address of account who will receive the refunded fee. function sendMessage( address target, uint256 value, bytes calldata message, uint256 gasLimit, address refundAddress ) external payable; }
{ "remappings": [ "@openzeppelin/=node_modules/@openzeppelin/", "ds-test/=lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "hardhat/=node_modules/hardhat/", "solmate/=lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "": [ "ast" ], "*": [ "abi", "evm.bytecode", "evm.deployedBytecode", "evm.methodIdentifiers", "metadata" ] } }, "evmVersion": "london", "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMessenger","type":"address"},{"indexed":true,"internalType":"address","name":"newMessenger","type":"address"}],"name":"UpdateMessenger","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinWithdrawAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinWithdrawAmount","type":"uint256"}],"name":"UpdateMinWithdrawAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRecipient","type":"address"},{"indexed":true,"internalType":"address","name":"newRecipient","type":"address"}],"name":"UpdateRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"messenger","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minWithdrawAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalProcessed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMessenger","type":"address"}],"name":"updateMessenger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMinWithdrawAmount","type":"uint256"}],"name":"updateMinWithdrawAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRecipient","type":"address"}],"name":"updateRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600436106100a05760003560e01c806384411d651161006457806384411d65146101595780638da5cb5b1461016f5780639e7adc791461018f578063f2fde38b146101af578063feec756c146101cf578063ff4f3546146101ef57600080fd5b80633cb747bf146100ac5780633ccfd60b146100e9578063457e1a491461010057806366d003ac14610124578063715018a61461014457600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f557600080fd5b506100fe61020f565b005b34801561010c57600080fd5b5061011660015481565b6040519081526020016100e0565b34801561013057600080fd5b506003546100cc906001600160a01b031681565b34801561015057600080fd5b506100fe610371565b34801561016557600080fd5b5061011660045481565b34801561017b57600080fd5b506000546100cc906001600160a01b031681565b34801561019b57600080fd5b506100fe6101aa3660046105ea565b6103a7565b3480156101bb57600080fd5b506100fe6101ca3660046105ea565b610423565b3480156101db57600080fd5b506100fe6101ea3660046105ea565b6104af565b3480156101fb57600080fd5b506100fe61020a36600461061a565b61052b565b60015447908110156102a15760405162461bcd60e51b815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d20776974686472616064820152691dd85b08185b5bdd5b9d60b21b608482015260a4015b60405180910390fd5b6004805482019055600354604080518381526001600160a01b0390921660208301523382820152517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1600254600354604080516020810182526000808252915163b2267a7b60e01b81526001600160a01b039485169463b2267a7b94879461033c949190921692859290600401610633565b6000604051808303818588803b15801561035557600080fd5b505af1158015610369573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461039b5760405162461bcd60e51b81526004016102989061069f565b6103a5600061059a565b565b6000546001600160a01b031633146103d15760405162461bcd60e51b81526004016102989061069f565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1c928c417a10a21c3cddad148c5dba5d710e4b1442d6d8a36de345935ad8461290600090a35050565b6000546001600160a01b0316331461044d5760405162461bcd60e51b81526004016102989061069f565b6001600160a01b0381166104a35760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610298565b6104ac8161059a565b50565b6000546001600160a01b031633146104d95760405162461bcd60e51b81526004016102989061069f565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7e1e96961a397c8aa26162fe259cc837afc95e33aad4945ddc61c18dabb7a6ad90600090a35050565b6000546001600160a01b031633146105555760405162461bcd60e51b81526004016102989061069f565b600180549082905560408051828152602081018490527f0d3c80219fe57713b9f9c83d1e51426792d0c14d8e330e65b102571816140965910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156105fc57600080fd5b81356001600160a01b038116811461061357600080fd5b9392505050565b60006020828403121561062c57600080fd5b5035919050565b60018060a01b038516815260006020858184015260806040840152845180608085015260005b818110156106755786810183015185820160a001528201610659565b50600060a0828601015260a0601f19601f8301168501019250505082606083015295945050505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e657200000000000000000060408201526060019056fea26469706673582212200c5bec0af207d4c7845829d5330f295a5f16702ab8bde670ae90be68974af0a764736f6c63430008100033
Deployed Bytecode
0x6080604052600436106100a05760003560e01c806384411d651161006457806384411d65146101595780638da5cb5b1461016f5780639e7adc791461018f578063f2fde38b146101af578063feec756c146101cf578063ff4f3546146101ef57600080fd5b80633cb747bf146100ac5780633ccfd60b146100e9578063457e1a491461010057806366d003ac14610124578063715018a61461014457600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f557600080fd5b506100fe61020f565b005b34801561010c57600080fd5b5061011660015481565b6040519081526020016100e0565b34801561013057600080fd5b506003546100cc906001600160a01b031681565b34801561015057600080fd5b506100fe610371565b34801561016557600080fd5b5061011660045481565b34801561017b57600080fd5b506000546100cc906001600160a01b031681565b34801561019b57600080fd5b506100fe6101aa3660046105ea565b6103a7565b3480156101bb57600080fd5b506100fe6101ca3660046105ea565b610423565b3480156101db57600080fd5b506100fe6101ea3660046105ea565b6104af565b3480156101fb57600080fd5b506100fe61020a36600461061a565b61052b565b60015447908110156102a15760405162461bcd60e51b815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d20776974686472616064820152691dd85b08185b5bdd5b9d60b21b608482015260a4015b60405180910390fd5b6004805482019055600354604080518381526001600160a01b0390921660208301523382820152517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1600254600354604080516020810182526000808252915163b2267a7b60e01b81526001600160a01b039485169463b2267a7b94879461033c949190921692859290600401610633565b6000604051808303818588803b15801561035557600080fd5b505af1158015610369573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461039b5760405162461bcd60e51b81526004016102989061069f565b6103a5600061059a565b565b6000546001600160a01b031633146103d15760405162461bcd60e51b81526004016102989061069f565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1c928c417a10a21c3cddad148c5dba5d710e4b1442d6d8a36de345935ad8461290600090a35050565b6000546001600160a01b0316331461044d5760405162461bcd60e51b81526004016102989061069f565b6001600160a01b0381166104a35760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610298565b6104ac8161059a565b50565b6000546001600160a01b031633146104d95760405162461bcd60e51b81526004016102989061069f565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7e1e96961a397c8aa26162fe259cc837afc95e33aad4945ddc61c18dabb7a6ad90600090a35050565b6000546001600160a01b031633146105555760405162461bcd60e51b81526004016102989061069f565b600180549082905560408051828152602081018490527f0d3c80219fe57713b9f9c83d1e51426792d0c14d8e330e65b102571816140965910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156105fc57600080fd5b81356001600160a01b038116811461061357600080fd5b9392505050565b60006020828403121561062c57600080fd5b5035919050565b60018060a01b038516815260006020858184015260806040840152845180608085015260005b818110156106755786810183015185820160a001528201610659565b50600060a0828601015260a0601f19601f8301168501019250505082606083015295945050505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e657200000000000000000060408201526060019056fea26469706673582212200c5bec0af207d4c7845829d5330f295a5f16702ab8bde670ae90be68974af0a764736f6c63430008100033
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.