More Info
Private Name Tags
ContractCreator
Multichain Info
Latest 25 from a total of 6,082 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 21391358 | 92 days ago | IN | 0.01397044 ETH | 0.00024826 | ||||
Transfer | 21391083 | 92 days ago | IN | 0.05912217 ETH | 0.00025107 | ||||
Transfer | 21390860 | 92 days ago | IN | 0.04907631 ETH | 0.00026592 | ||||
Transfer | 21390784 | 92 days ago | IN | 0.02496016 ETH | 0.00025954 | ||||
Transfer | 21390345 | 92 days ago | IN | 0.04003439 ETH | 0.00023615 | ||||
Transfer | 21390048 | 92 days ago | IN | 0.05449749 ETH | 0.00028202 | ||||
Transfer | 21389979 | 92 days ago | IN | 0.01976912 ETH | 0.0003288 | ||||
Transfer | 21389608 | 92 days ago | IN | 0.10188027 ETH | 0.00028591 | ||||
Transfer | 21389427 | 92 days ago | IN | 0.03280613 ETH | 0.00038325 | ||||
Transfer | 21389361 | 92 days ago | IN | 0.13518428 ETH | 0.00045621 | ||||
Transfer | 21389171 | 92 days ago | IN | 0.02169594 ETH | 0.0004509 | ||||
Transfer | 21389063 | 92 days ago | IN | 0.04628497 ETH | 0.00049295 | ||||
Transfer | 21389014 | 92 days ago | IN | 0.03587784 ETH | 0.00049988 | ||||
Transfer | 21388673 | 92 days ago | IN | 0.0515182 ETH | 0.00065894 | ||||
Transfer | 21388421 | 92 days ago | IN | 0.05358655 ETH | 0.00054337 | ||||
Transfer | 21388384 | 92 days ago | IN | 0.0247831 ETH | 0.00056977 | ||||
Transfer | 21388372 | 92 days ago | IN | 0.02957979 ETH | 0.00056258 | ||||
Transfer | 21388228 | 92 days ago | IN | 0.05252589 ETH | 0.00056789 | ||||
Transfer | 21388151 | 92 days ago | IN | 0.04010171 ETH | 0.00064988 | ||||
Transfer | 21387834 | 92 days ago | IN | 0.09339126 ETH | 0.0006428 | ||||
Transfer | 21387821 | 92 days ago | IN | 0.0290314 ETH | 0.00058873 | ||||
Transfer | 21387732 | 92 days ago | IN | 0.05129085 ETH | 0.0007215 | ||||
Transfer | 21387531 | 92 days ago | IN | 0.04865688 ETH | 0.00087151 | ||||
Transfer | 21387503 | 92 days ago | IN | 0.08154994 ETH | 0.00093121 | ||||
Transfer | 21387070 | 92 days ago | IN | 0.0259637 ETH | 0.00062852 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 21719084 | 46 days ago | 120.02556528 ETH | ||||
Transfer | 21206315 | 117 days ago | 0.00020364 ETH | ||||
Transfer | 21206315 | 117 days ago | 0.01865347 ETH | ||||
Transfer | 21050900 | 139 days ago | 137.69386435 ETH | ||||
Transfer | 20950314 | 153 days ago | 0.033 ETH | ||||
Transfer | 20930665 | 156 days ago | 0.00107942 ETH | ||||
Transfer | 20930665 | 156 days ago | 0.0011 ETH | ||||
Transfer | 20930665 | 156 days ago | 0.068 ETH | ||||
Transfer | 20893858 | 161 days ago | 0.11374916 ETH | ||||
Transfer | 20826471 | 170 days ago | 0.00179107 ETH | ||||
Transfer | 20826471 | 170 days ago | 0.001 ETH | ||||
Transfer | 20797627 | 174 days ago | 0.0005 ETH | ||||
Transfer | 20482748 | 218 days ago | 30.61365928 ETH | ||||
Transfer | 20379603 | 233 days ago | 113.38809295 ETH | ||||
Transfer | 20341570 | 238 days ago | 0.12 ETH | ||||
Transfer | 20221336 | 255 days ago | 0.0005781 ETH | ||||
Transfer | 19779015 | 317 days ago | 46.29015529 ETH | ||||
Transfer | 19735355 | 323 days ago | 0.01260349 ETH | ||||
Transfer | 19727804 | 324 days ago | 0.00577062 ETH | ||||
Transfer | 19724797 | 324 days ago | 0.001 ETH | ||||
Transfer | 19545720 | 349 days ago | 0.00075712 ETH | ||||
Transfer | 19545720 | 349 days ago | 0.00283729 ETH | ||||
Transfer | 19489417 | 357 days ago | 0.01373044 ETH | ||||
Transfer | 19489417 | 357 days ago | 0.01839695 ETH | ||||
Transfer | 19473892 | 360 days ago | 0.09582472 ETH |
Minimal Proxy Contract for 0xd94c0ce4f8eefa4ebf44bf6665688edeef213b33
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.4; import {ISplitMain} from './interfaces/ISplitMain.sol'; import {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol'; import {SafeTransferLib} from '@rari-capital/solmate/src/utils/SafeTransferLib.sol'; /** * ERRORS */ /// @notice Unauthorized sender error Unauthorized(); /** * @title SplitWallet * @author 0xSplits <[email protected]> * @notice The implementation logic for `SplitProxy`. * @dev `SplitProxy` handles `receive()` itself to avoid the gas cost with `DELEGATECALL`. */ contract SplitWallet { using SafeTransferLib for address; using SafeTransferLib for ERC20; /** * EVENTS */ /** @notice emitted after each successful ETH transfer to proxy * @param split Address of the split that received ETH * @param amount Amount of ETH received */ event ReceiveETH(address indexed split, uint256 amount); /** * STORAGE */ /** * STORAGE - CONSTANTS & IMMUTABLES */ /// @notice address of SplitMain for split distributions & EOA/SC withdrawals ISplitMain public immutable splitMain; /** * MODIFIERS */ /// @notice Reverts if the sender isn't SplitMain modifier onlySplitMain() { if (msg.sender != address(splitMain)) revert Unauthorized(); _; } /** * CONSTRUCTOR */ constructor() { splitMain = ISplitMain(msg.sender); } /** * FUNCTIONS - PUBLIC & EXTERNAL */ /** @notice Sends amount `amount` of ETH in proxy to SplitMain * @dev payable reduces gas cost; no vulnerability to accidentally lock * ETH introduced since fn call is restricted to SplitMain * @param amount Amount to send */ function sendETHToMain(uint256 amount) external payable onlySplitMain() { address(splitMain).safeTransferETH(amount); } /** @notice Sends amount `amount` of ERC20 `token` in proxy to SplitMain * @dev payable reduces gas cost; no vulnerability to accidentally lock * ETH introduced since fn call is restricted to SplitMain * @param token Token to send * @param amount Amount to send */ function sendERC20ToMain(ERC20 token, uint256 amount) external payable onlySplitMain() { token.safeTransfer(address(splitMain), amount); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.4; import {ERC20} from '@rari-capital/solmate/src/tokens/ERC20.sol'; /** * @title ISplitMain * @author 0xSplits <[email protected]> */ interface ISplitMain { /** * FUNCTIONS */ function walletImplementation() external returns (address); function createSplit( address[] calldata accounts, uint32[] calldata percentAllocations, uint32 distributorFee, address controller ) external returns (address); function predictImmutableSplitAddress( address[] calldata accounts, uint32[] calldata percentAllocations, uint32 distributorFee ) external view returns (address); function updateSplit( address split, address[] calldata accounts, uint32[] calldata percentAllocations, uint32 distributorFee ) external; function transferControl(address split, address newController) external; function cancelControlTransfer(address split) external; function acceptControl(address split) external; function makeSplitImmutable(address split) external; function distributeETH( address split, address[] calldata accounts, uint32[] calldata percentAllocations, uint32 distributorFee, address distributorAddress ) external; function updateAndDistributeETH( address split, address[] calldata accounts, uint32[] calldata percentAllocations, uint32 distributorFee, address distributorAddress ) external; function distributeERC20( address split, ERC20 token, address[] calldata accounts, uint32[] calldata percentAllocations, uint32 distributorFee, address distributorAddress ) external; function updateAndDistributeERC20( address split, ERC20 token, address[] calldata accounts, uint32[] calldata percentAllocations, uint32 distributorFee, address distributorAddress ) external; function withdraw( address account, uint256 withdrawETH, ERC20[] calldata tokens ) external; /** * EVENTS */ /** @notice emitted after each successful split creation * @param split Address of the created split */ event CreateSplit(address indexed split); /** @notice emitted after each successful split update * @param split Address of the updated split */ event UpdateSplit(address indexed split); /** @notice emitted after each initiated split control transfer * @param split Address of the split control transfer was initiated for * @param newPotentialController Address of the split's new potential controller */ event InitiateControlTransfer( address indexed split, address indexed newPotentialController ); /** @notice emitted after each canceled split control transfer * @param split Address of the split control transfer was canceled for */ event CancelControlTransfer(address indexed split); /** @notice emitted after each successful split control transfer * @param split Address of the split control was transferred for * @param previousController Address of the split's previous controller * @param newController Address of the split's new controller */ event ControlTransfer( address indexed split, address indexed previousController, address indexed newController ); /** @notice emitted after each successful ETH balance split * @param split Address of the split that distributed its balance * @param amount Amount of ETH distributed * @param distributorAddress Address to credit distributor fee to */ event DistributeETH( address indexed split, uint256 amount, address indexed distributorAddress ); /** @notice emitted after each successful ERC20 balance split * @param split Address of the split that distributed its balance * @param token Address of ERC20 distributed * @param amount Amount of ERC20 distributed * @param distributorAddress Address to credit distributor fee to */ event DistributeERC20( address indexed split, ERC20 indexed token, uint256 amount, address indexed distributorAddress ); /** @notice emitted after each successful withdrawal * @param account Address that funds were withdrawn to * @param ethAmount Amount of ETH withdrawn * @param tokens Addresses of ERC20s withdrawn * @param tokenAmounts Amounts of corresponding ERC20s withdrawn */ event Withdrawal( address indexed account, uint256 ethAmount, ERC20[] tokens, uint256[] tokenAmounts ); }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*/////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*/////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; import {ERC20} from "../tokens/ERC20.sol"; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @author Modified from Gnosis (https://github.com/gnosis/gp-v2-contracts/blob/main/src/contracts/libraries/GPv2SafeERC20.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. library SafeTransferLib { /*/////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool callStatus; assembly { // Transfer the ETH and store if it succeeded or not. callStatus := call(gas(), to, amount, 0, 0, 0, 0) } require(callStatus, "ETH_TRANSFER_FAILED"); } /*/////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 100 because the calldata length is 4 + 32 * 3. callStatus := call(gas(), token, 0, freeMemoryPointer, 100, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool callStatus; assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata to memory piece by piece: mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) // Begin with the function selector. mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Mask and append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Finally append the "amount" argument. No mask as it's a full 32 byte value. // Call the token and store if it succeeded or not. // We use 68 because the calldata length is 4 + 32 * 2. callStatus := call(gas(), token, 0, freeMemoryPointer, 68, 0, 0) } require(didLastOptionalReturnCallSucceed(callStatus), "APPROVE_FAILED"); } /*/////////////////////////////////////////////////////////////// INTERNAL HELPER LOGIC //////////////////////////////////////////////////////////////*/ function didLastOptionalReturnCallSucceed(bool callStatus) private pure returns (bool success) { assembly { // Get how many bytes the call returned. let returnDataSize := returndatasize() // If the call reverted: if iszero(callStatus) { // Copy the revert message into memory. returndatacopy(0, 0, returnDataSize) // Revert with the same message. revert(0, returnDataSize) } switch returnDataSize case 32 { // Copy the return data into memory. returndatacopy(0, 0, returnDataSize) // Set success to whether it returned true. success := iszero(iszero(mload(0))) } case 0 { // There was no return data. success := 1 } default { // It returned some malformed input. success := 0 } } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"split","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReceiveETH","type":"event"},{"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendERC20ToMain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendETHToMain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"splitMain","outputs":[{"internalType":"contract ISplitMain","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Latest 25 blocks (From a total of 181 blocks with 3.73 Ether produced)
Block | Transaction | Difficulty | Gas Used | Reward | |
---|---|---|---|---|---|
21386791 | 92 days ago | 142 | 0.00 TH | 8,658,380 (28.86%) | 0.017979567991061968 ETH |
21364196 | 95 days ago | 156 | 0.00 TH | 10,291,642 (34.31%) | 0.007929771299719541 ETH |
21351792 | 97 days ago | 89 | 0.00 TH | 5,274,744 (17.58%) | 0.008101301106014075 ETH |
21258727 | 110 days ago | 133 | 0.00 TH | 8,752,683 (29.18%) | 0.007822232792833381 ETH |
21206315 | 117 days ago | 184 | 0.00 TH | 17,891,823 (59.64%) | 0.061202307106396311 ETH |
21179676 | 121 days ago | 114 | 0.00 TH | 6,798,778 (22.66%) | 0.017989852659092991 ETH |
21153006 | 125 days ago | 92 | 0.00 TH | 4,972,937 (16.58%) | 0.006244991728213234 ETH |
21115771 | 130 days ago | 88 | 0.00 TH | 7,108,383 (23.69%) | 0.008407137573357025 ETH |
21111684 | 131 days ago | 73 | 0.00 TH | 4,272,534 (14.24%) | 0.002837190312426005 ETH |
21106634 | 131 days ago | 77 | 0.00 TH | 6,014,976 (20.05%) | 0.009328213518242406 ETH |
21105871 | 131 days ago | 52 | 0.00 TH | 4,480,269 (14.93%) | 0.004885917638495889 ETH |
21096336 | 133 days ago | 109 | 0.00 TH | 7,439,817 (24.80%) | 0.007748138165321735 ETH |
21095557 | 133 days ago | 223 | 0.00 TH | 12,248,084 (40.83%) | 0.008559567269049759 ETH |
21094186 | 133 days ago | 91 | 0.00 TH | 6,633,366 (22.11%) | 0.011584635267810095 ETH |
21092769 | 133 days ago | 96 | 0.00 TH | 7,194,427 (23.98%) | 0.005874223990345129 ETH |
21078815 | 135 days ago | 106 | 0.00 TH | 5,956,696 (19.86%) | 0.01705699221433834 ETH |
21076850 | 135 days ago | 80 | 0.00 TH | 5,224,488 (17.41%) | 0.008135204747738262 ETH |
21065606 | 137 days ago | 62 | 0.00 TH | 3,334,209 (11.11%) | 0.008219646021616073 ETH |
21065571 | 137 days ago | 68 | 0.00 TH | 4,886,428 (16.29%) | 0.015081312182913291 ETH |
21037759 | 141 days ago | 78 | 0.00 TH | 6,550,719 (21.84%) | 0.007231626020733296 ETH |
21022638 | 143 days ago | 79 | 0.00 TH | 4,420,561 (14.74%) | 0.027139276551015749 ETH |
21021188 | 143 days ago | 88 | 0.00 TH | 6,277,513 (20.93%) | 0.006849167579707426 ETH |
20956180 | 152 days ago | 80 | 0.00 TH | 4,837,215 (16.12%) | 0.020824963950822778 ETH |
20950314 | 153 days ago | 107 | 0.00 TH | 14,502,236 (48.34%) | 0.078062385294837998 ETH |
20949074 | 153 days ago | 165 | 0.00 TH | 7,301,929 (24.34%) | 0.005272300217740893 ETH |
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.