Overview
ETH Balance
40 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 20 from a total of 20 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Dissolve Validat... | 545524 | 190 days ago | IN | 0 ETH | 0.00018386 | ||||
| Dissolve Validat... | 545524 | 190 days ago | IN | 0 ETH | 0.00073211 | ||||
| Dissolve Validat... | 545523 | 190 days ago | IN | 0 ETH | 0.00017908 | ||||
| Dissolve Validat... | 545523 | 190 days ago | IN | 0 ETH | 0.00078869 | ||||
| Dissolve Validat... | 545522 | 190 days ago | IN | 0 ETH | 0.00018493 | ||||
| Dissolve Validat... | 545522 | 190 days ago | IN | 0 ETH | 0.00081445 | ||||
| Dissolve Validat... | 545521 | 190 days ago | IN | 0 ETH | 0.00018003 | ||||
| Dissolve Validat... | 545521 | 190 days ago | IN | 0 ETH | 0.00082613 | ||||
| Dissolve Validat... | 545520 | 190 days ago | IN | 0 ETH | 0.00018601 | ||||
| Dissolve Validat... | 545520 | 190 days ago | IN | 0 ETH | 0.00085358 | ||||
| Dissolve Validat... | 545519 | 190 days ago | IN | 0 ETH | 0.00018357 | ||||
| Dissolve Validat... | 545519 | 190 days ago | IN | 0 ETH | 0.0008424 | ||||
| Dissolve Validat... | 545518 | 190 days ago | IN | 0 ETH | 0.00017882 | ||||
| Dissolve Validat... | 545518 | 190 days ago | IN | 0 ETH | 0.00082057 | ||||
| Dissolve Validat... | 545517 | 190 days ago | IN | 0 ETH | 0.00018463 | ||||
| Dissolve Validat... | 545517 | 190 days ago | IN | 0 ETH | 0.00084723 | ||||
| Dissolve Validat... | 545516 | 190 days ago | IN | 0 ETH | 0.00018098 | ||||
| Dissolve Validat... | 545516 | 190 days ago | IN | 0 ETH | 0.00083048 | ||||
| Dissolve Validat... | 545515 | 190 days ago | IN | 0 ETH | 0.00017755 | ||||
| Dissolve Validat... | 545515 | 190 days ago | IN | 0 ETH | 0.00088108 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
To
|
Amount
|
||
|---|---|---|---|---|---|---|---|
| Dissolve Validat... | 545524 | 190 days ago | 0 ETH | ||||
| Get Expiration B... | 545524 | 190 days ago | 0 ETH | ||||
| Dissolve Validat... | 545524 | 190 days ago | 0 ETH | ||||
| Recycle Dissolve... | 545524 | 190 days ago | 27 ETH | ||||
| Get Address | 545524 | 190 days ago | 0 ETH | ||||
| Get Bond Require... | 545524 | 190 days ago | 0 ETH | ||||
| Get Address | 545524 | 190 days ago | 0 ETH | ||||
| Get Time Before ... | 545524 | 190 days ago | 0 ETH | ||||
| Get Address | 545524 | 190 days ago | 0 ETH | ||||
| Dissolve Validat... | 545524 | 190 days ago | 0 ETH | ||||
| Get Expiration B... | 545524 | 190 days ago | 0 ETH | ||||
| Dissolve Validat... | 545524 | 190 days ago | 0 ETH | ||||
| Dissolve Validat... | 545523 | 190 days ago | 0 ETH | ||||
| Get Expiration B... | 545523 | 190 days ago | 0 ETH | ||||
| Dissolve Validat... | 545523 | 190 days ago | 0 ETH | ||||
| Recycle Dissolve... | 545523 | 190 days ago | 27 ETH | ||||
| Get Address | 545523 | 190 days ago | 0 ETH | ||||
| Get Bond Require... | 545523 | 190 days ago | 0 ETH | ||||
| Get Address | 545523 | 190 days ago | 0 ETH | ||||
| Get Time Before ... | 545523 | 190 days ago | 0 ETH | ||||
| Get Address | 545523 | 190 days ago | 0 ETH | ||||
| Dissolve Validat... | 545523 | 190 days ago | 0 ETH | ||||
| Get Expiration B... | 545523 | 190 days ago | 0 ETH | ||||
| Dissolve Validat... | 545523 | 190 days ago | 0 ETH | ||||
| Dissolve Validat... | 545522 | 190 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Minimal Proxy Contract for 0xf24a625e51d2394fc6678f7286b3076c1cead9ed
Contract Name:
RocketMegapoolProxy
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity Standard Json-Input format)
/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity 0.8.18;
import {RocketStorageInterface} from "../../interface/RocketStorageInterface.sol";
import {RocketMegapoolDelegateBaseInterface} from "../../interface/megapool/RocketMegapoolDelegateBaseInterface.sol";
import {RocketMegapoolProxyInterface} from "../../interface/megapool/RocketMegapoolProxyInterface.sol";
import {RocketMegapoolStorageLayout} from "./RocketMegapoolStorageLayout.sol";
/// @notice Contains the initialisation and delegate upgrade logic for megapools.
/// All other calls are delegated to the node operator's current delegate or optionally the latest.
contract RocketMegapoolProxy is RocketMegapoolProxyInterface, RocketMegapoolStorageLayout {
// Events
event EtherReceived(address indexed from, uint256 amount, uint256 time);
event DelegateUpgraded(address oldDelegate, address newDelegate, uint256 time);
event UseLatestUpdated(bool state, uint256 time);
// Immutables
address immutable private self;
RocketStorageInterface immutable private rocketStorage;
// Construct
constructor (RocketStorageInterface _rocketStorage) {
self = address(this);
rocketStorage = _rocketStorage;
}
/// @dev Prevent direct calls to this contract
modifier notSelf() {
require(address(this) != self);
_;
}
/// @dev Only allow access from the owning node address
modifier onlyMegapoolOwner() {
// Only the node operator can upgrade
address withdrawalAddress = rocketStorage.getNodeWithdrawalAddress(nodeAddress);
require(msg.sender == nodeAddress || msg.sender == withdrawalAddress, "Only the node operator can access this method");
_;
}
/// @notice Sets up the initial delegate
/// @param _nodeAddress The owner of this megapool
function initialise(address _nodeAddress) external override notSelf {
// Check input
require(_nodeAddress != address(0), "Invalid node address");
require(!storageState, "Already initialised");
// Flag storage state as initialised and record node address
storageState = true;
nodeAddress = _nodeAddress;
// Set the current delegate (checking it exists)
address delegateAddress = getContractAddress("rocketMegapoolDelegate");
require(contractExists(delegateAddress), "Delegate contract does not exist");
rocketMegapoolDelegate = delegateAddress;
}
/// @notice Receive an ETH deposit
receive() external payable notSelf {
// Emit ether received event
emit EtherReceived(msg.sender, msg.value, block.timestamp);
}
/// @notice Delegates all other calls to megapool delegate contract (or latest if flag is set)
fallback(bytes calldata _input) external payable notSelf returns (bytes memory) {
address delegateContract;
// If useLatestDelegate is set, use the latest delegate contract otherwise use stored and check expiry
if (useLatestDelegate) {
delegateContract = getContractAddress("rocketMegapoolDelegate");
} else {
require(!getDelegateExpired(), "Delegate has expired");
delegateContract = rocketMegapoolDelegate;
}
// Check for contract existence
require(contractExists(delegateContract), "Delegate contract does not exist");
// Execute delegatecall on the delegate contract
(bool success, bytes memory data) = delegateContract.delegatecall(_input);
if (!success) {
revert(getRevertMessage(data));
}
return data;
}
/// @notice Upgrade this megapool to the latest network delegate contract
function delegateUpgrade() public override notSelf {
// Only owner can upgrade if delegate hasn't expired
if (!getDelegateExpired()) {
address withdrawalAddress = rocketStorage.getNodeWithdrawalAddress(nodeAddress);
require(msg.sender == nodeAddress || msg.sender == withdrawalAddress, "Only the node operator can access this method");
}
// Store old address for event
address oldDelegate = rocketMegapoolDelegate;
// Set new delegate
rocketMegapoolDelegate = getContractAddress("rocketMegapoolDelegate");
require(oldDelegate != rocketMegapoolDelegate, "Already using latest");
// Log event
emit DelegateUpgraded(oldDelegate, rocketMegapoolDelegate, block.timestamp);
}
/// @notice Sets the flag to automatically use the latest delegate contract or not
/// @param _state If true, will always use the latest delegate contract
function setUseLatestDelegate(bool _state) external override onlyMegapoolOwner notSelf {
useLatestDelegate = _state;
emit UseLatestUpdated(_state, block.timestamp);
if (!_state) {
// Upon disabling use latest, set their current delegate to the latest
address newDelegate = getContractAddress("rocketMegapoolDelegate");
if (newDelegate != rocketMegapoolDelegate) {
delegateUpgrade();
}
}
}
/// @notice Returns true if this megapool always uses the latest delegate contract
function getUseLatestDelegate() external override view returns (bool) {
return useLatestDelegate;
}
/// @notice Returns the address of the megapool's stored delegate
function getDelegate() external override view returns (address) {
return rocketMegapoolDelegate;
}
/// @notice Returns the delegate which will be used when calling this megapool taking into account useLatestDelegate setting
function getEffectiveDelegate() external override view returns (address) {
return useLatestDelegate ? getContractAddress("rocketMegapoolDelegate") : rocketMegapoolDelegate;
}
/// @notice Returns true if the megapools current delegate has expired
function getDelegateExpired() public view returns (bool) {
RocketMegapoolDelegateBaseInterface megapoolDelegate = RocketMegapoolDelegateBaseInterface(rocketMegapoolDelegate);
uint256 expiry = megapoolDelegate.getExpirationBlock();
return expiry != 0 && block.number > expiry;
}
/// @dev Get the address of a Rocket Pool network contract
function getContractAddress(string memory _contractName) private view returns (address) {
address contractAddress = rocketStorage.getAddress(keccak256(abi.encodePacked("contract.address", _contractName)));
require(contractAddress != address(0x0), "Contract not found");
return contractAddress;
}
/// @dev Get a revert message from delegatecall return data
function getRevertMessage(bytes memory _returnData) private pure returns (string memory) {
if (_returnData.length < 68) {
return "Transaction reverted silently";
}
assembly {
_returnData := add(_returnData, 0x04)
}
return abi.decode(_returnData, (string));
}
/// @dev Returns true if contract exists at _contractAddress (if called during that contract's construction it will return a false negative)
function contractExists(address _contractAddress) private view returns (bool) {
uint32 codeSize;
assembly {
codeSize := extcodesize(_contractAddress)
}
return codeSize > 0;
}
}/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity >0.5.0 <0.9.0;
interface RocketStorageInterface {
// Deploy status
function getDeployedStatus() external view returns (bool);
// Guardian
function getGuardian() external view returns(address);
function setGuardian(address _newAddress) external;
function confirmGuardian() external;
// Getters
function getAddress(bytes32 _key) external view returns (address);
function getUint(bytes32 _key) external view returns (uint);
function getString(bytes32 _key) external view returns (string memory);
function getBytes(bytes32 _key) external view returns (bytes memory);
function getBool(bytes32 _key) external view returns (bool);
function getInt(bytes32 _key) external view returns (int);
function getBytes32(bytes32 _key) external view returns (bytes32);
// Setters
function setAddress(bytes32 _key, address _value) external;
function setUint(bytes32 _key, uint _value) external;
function setString(bytes32 _key, string calldata _value) external;
function setBytes(bytes32 _key, bytes calldata _value) external;
function setBool(bytes32 _key, bool _value) external;
function setInt(bytes32 _key, int _value) external;
function setBytes32(bytes32 _key, bytes32 _value) external;
// Deleters
function deleteAddress(bytes32 _key) external;
function deleteUint(bytes32 _key) external;
function deleteString(bytes32 _key) external;
function deleteBytes(bytes32 _key) external;
function deleteBool(bytes32 _key) external;
function deleteInt(bytes32 _key) external;
function deleteBytes32(bytes32 _key) external;
// Arithmetic
function addUint(bytes32 _key, uint256 _amount) external;
function subUint(bytes32 _key, uint256 _amount) external;
// Protected storage
function getNodeWithdrawalAddress(address _nodeAddress) external view returns (address);
function getNodePendingWithdrawalAddress(address _nodeAddress) external view returns (address);
function setWithdrawalAddress(address _nodeAddress, address _newWithdrawalAddress, bool _confirm) external;
function confirmWithdrawalAddress(address _nodeAddress) external;
}/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity >0.5.0 <0.9.0;
import "../../interface/RocketStorageInterface.sol";
interface RocketMegapoolDelegateBaseInterface {
function deprecate() external;
function getExpirationBlock() external view returns (uint256);
}/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity >0.5.0 <0.9.0;
import "../../interface/RocketStorageInterface.sol";
interface RocketMegapoolProxyInterface {
function initialise(address _nodeAddress) external;
function delegateUpgrade() external;
function setUseLatestDelegate(bool _state) external;
function getUseLatestDelegate() external view returns (bool);
function getDelegate() external view returns (address);
function getEffectiveDelegate() external view returns (address);
}/**
* .
* / \
* |.'.|
* |'.'|
* ,'| |'.
* |,-'-|-'-.|
* __|_| | _ _ _____ _
* | ___ \| | | | | | ___ \ | |
* | |_/ /|__ ___| | _____| |_ | |_/ /__ ___ | |
* | // _ \ / __| |/ / _ \ __| | __/ _ \ / _ \| |
* | |\ \ (_) | (__| < __/ |_ | | | (_) | (_) | |
* \_| \_\___/ \___|_|\_\___|\__| \_| \___/ \___/|_|
* +---------------------------------------------------+
* | DECENTRALISED STAKING PROTOCOL FOR ETHEREUM |
* +---------------------------------------------------+
*
* Rocket Pool is a first-of-its-kind Ethereum staking pool protocol, designed to
* be community-owned, decentralised, permissionless, & trustless.
*
* For more information about Rocket Pool, visit https://rocketpool.net
*
* Authored by the Rocket Pool Core Team
* Contributors: https://github.com/rocket-pool/rocketpool/graphs/contributors
* A special thanks to the Rocket Pool community for all their contributions.
*
*/
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity 0.8.18;
import "../../interface/RocketStorageInterface.sol";
// ******************************************************
// Note: This contract MUST only be appended to. All
// deployed megapool contracts must maintain a
// consistent storage layout with RocketMegapoolDelegate.
// ******************************************************
/// @dev The RocketMegapool contract storage layout, shared by RocketMegapoolDelegate and RocketMegapoolBase
abstract contract RocketMegapoolStorageLayout {
// Status of individual validators
enum Status {
InQueue,
PreStaked,
Staking,
Exited,
Dissolved
}
// Information about individual validators
struct ValidatorInfo {
bytes pubKey; // Pubkey of this validator
uint32 lastAssignmentTime; // Timestamp of when the last fund assignment took place
uint32 lastRequestedValue; // Value in milliether last requested
uint32 lastRequestedBond; // Value in milliether of the bond supplied for last request for funds
uint32 depositValue; // Total amount deposited to beaconchain in gwei
bool staked; // Whether the validator has staked the minimum required to begin validating (32 ETH)
bool exited; // Whether the validator has exited the beacon chain
bool inQueue; // Whether the validator is currently awaiting funds from the deposit pool
bool inPrestake; // Whether the validator is currently awaiting the stake operation
bool expressUsed; // Whether the last request for funds consumed an express ticket
bool dissolved; // Whether the validator failed to prestake their initial deposit in time
bool exiting; // Whether the validator is queued to exit on the beaconchain
uint64 validatorIndex; // Index of the validator on the beaconchain
uint64 exitBalance; // Final balance of the validator at withdrawable_epoch in gwei (amount returned to EL)
uint64 withdrawableEpoch; // The epoch this validator is withdrawable
}
// Extra data temporarily stored for prestake operation
struct PrestakeData {
bytes _signature;
}
//
// Delegate state
//
bool internal storageState; // Used to prevent direct calls to the delegate contract
uint256 internal expirationBlock; // Used to store the expiry block of this delegate (0 meaning not expiring)
//
// Proxy state
//
address internal rocketMegapoolDelegate; // The current delegate contract address
bool internal useLatestDelegate; // Whether this proxy always uses the latest delegate
//
// Megapool state
//
address internal nodeAddress; // Megapool owner
uint32 internal numValidators; // Number of individual validators handled by this megapool
uint32 internal numInactiveValidators; // Number of validators that are no longer contributing to bond requirement
uint256 internal assignedValue; // ETH assigned from DP pending prestake/stake
uint256 internal refundValue; // ETH refunded to the owner after a dissolution
uint256 internal nodeRewards; // Unclaimed ETH rewards for the owner
uint256 internal nodeBond; // Total value of bond supplied by node operator
uint256 internal userCapital; // Value of capital on the beacon chain supplied by the DP
uint256 internal debt; // Amount the owner owes the DP
uint256 internal lastDistributionBlock; // The block of the last time a distribution of rewards was executed
mapping(uint32 => ValidatorInfo) internal validators;
mapping(uint32 => PrestakeData) internal prestakeData;
uint32 internal numExitingValidators; // Number of validators currently exiting
uint64 internal soonestWithdrawableEpoch; // The soonest epoch which a validator will become withdrawable
mapping(uint256 => uint256) internal penalties;
uint256 internal __version1Boundary; // Unused full slot width boundary
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 15000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract ABI
API[{"inputs":[{"internalType":"contract RocketStorageInterface","name":"_rocketStorage","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldDelegate","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"DelegateUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"EtherReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UseLatestUpdated","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"delegateUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDelegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDelegateExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEffectiveDelegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUseLatestDelegate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_nodeAddress","type":"address"}],"name":"initialise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setUseLatestDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Loading...
Loading
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.