Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60808060 | 15303574 | 1250 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
UpgradeBeacon
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
Yes with 19066 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import { TwoStepOwnable } from "../access/TwoStepOwnable.sol";
// prettier-ignore
import {
UpgradeBeaconInterface
} from "../interfaces/UpgradeBeaconInterface.sol";
/**
* @title UpgradeBeacon
* @author OpenSea Protocol Team
* @notice UpgradeBeacon is a ownable contract that is used as a beacon for a
* proxy, to retreive it's implementation.
*
*/
contract UpgradeBeacon is TwoStepOwnable, UpgradeBeaconInterface {
address private _implementation;
/**
* @notice Sets the owner of the beacon as the msg.sender. Requires
* the caller to be an approved deployer.
*
*/
constructor() {
// Ensure the origin is an approved deployer.
require(
(tx.origin == address(0x939C8d89EBC11fA45e576215E2353673AD0bA18A) ||
tx.origin ==
address(0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA) ||
tx.origin ==
address(0x86D26897267711ea4b173C8C124a0A73612001da) ||
tx.origin ==
address(0x3B52ad533687Ce908bA0485ac177C5fb42972962)),
"Deployment must originate from an approved deployer."
);
}
/**
* @notice Upgrades the beacon to a new implementation. Requires
* the caller must be the owner, and the new implementation
* must be a contract.
*
* @param newImplementationAddress The address to be set as the new
* implementation contract.
*/
function upgradeTo(address newImplementationAddress)
external
override
onlyOwner
{
_setImplementation(newImplementationAddress);
emit Upgraded(newImplementationAddress);
}
function initialize(address owner_, address implementation_) external {
// Ensure the origin is an approved deployer.
require(
(tx.origin == address(0x939C8d89EBC11fA45e576215E2353673AD0bA18A) ||
tx.origin ==
address(0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA) ||
tx.origin ==
address(0x86D26897267711ea4b173C8C124a0A73612001da) ||
tx.origin ==
address(0x3B52ad533687Ce908bA0485ac177C5fb42972962)) &&
_implementation == address(0),
"Initialize must originate from an approved deployer, and the implementation must not be set."
);
// Call initialize.
_initialize(owner_, implementation_);
}
function _initialize(address owner_, address implementation_) internal {
// Set the Initial Owner
_setInitialOwner(owner_);
// Set the Implementation
_setImplementation(implementation_);
// Emit the Event
emit Upgraded(implementation_);
}
/**
* @notice This function returns the address to the implentation contract.
*/
function implementation() external view override returns (address) {
return _implementation;
}
/**
* @notice Sets the implementation contract address for this beacon.
* Requires the address to be a contract.
*
* @param newImplementationAddress The address to be set as the new
* implementation contract.
*/
function _setImplementation(address newImplementationAddress) internal {
if (address(newImplementationAddress).code.length == 0) {
revert InvalidImplementation(newImplementationAddress);
}
_implementation = newImplementationAddress;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "../interfaces/TwoStepOwnableInterface.sol";
/**
* @title TwoStepOwnable
* @author OpenSea Protocol Team
* @notice TwoStepOwnable is a module which provides access control
* where the ownership of a contract can be exchanged via a
* two step process. A potential owner is set by the current
* owner using transferOwnership, then accepted by the new
* potential owner using acceptOwnership.
*/
contract TwoStepOwnable is TwoStepOwnableInterface {
// The address of the owner.
address private _owner;
// The address of the new potential owner.
address private _potentialOwner;
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
// Ensure the caller is the owner.
if (msg.sender != _owner) {
revert CallerIsNotOwner();
}
// Continue with function execution.
_;
}
/**
* @notice Initiate ownership transfer by assigning a new potential owner
* to this contract. Once set, the new potential owner may call
* `acceptOwnership` to claim ownership. Only the owner may call
* this function.
*
* @param newPotentialOwner The address for which to initiate ownership
* transfer to.
*/
function transferOwnership(address newPotentialOwner)
external
override
onlyOwner
{
// Ensure the new potential owner is not an invalid address.
if (newPotentialOwner == address(0)) {
revert NewPotentialOwnerIsNullAddress();
}
// Emit an event indicating that the potential owner has been updated.
emit PotentialOwnerUpdated(newPotentialOwner);
// Set the new potential owner as the potential owner.
_potentialOwner = newPotentialOwner;
}
/**
* @notice Clear the currently set potential owner, if any.
* Only the owner of this contract may call this function.
*/
function cancelOwnershipTransfer() external override onlyOwner {
// Emit an event indicating that the potential owner has been cleared.
emit PotentialOwnerUpdated(address(0));
// Clear the current new potential owner.
delete _potentialOwner;
}
/**
* @notice Accept ownership of this contract. Only the account that the
* current owner has set as the new potential owner may call this
* function.
*/
function acceptOwnership() external override {
// Ensure the caller is the potential owner.
if (msg.sender != _potentialOwner) {
// Revert, indicating that caller is not current potential owner.
revert CallerIsNotNewPotentialOwner();
}
// Emit an event indicating that the potential owner has been cleared.
emit PotentialOwnerUpdated(address(0));
// Clear the current new potential owner.
delete _potentialOwner;
// Emit an event indicating ownership has been transferred.
emit OwnershipTransferred(_owner, msg.sender);
// Set the caller as the owner of this contract.
_owner = msg.sender;
}
/**
* @notice An external view function that returns the potential owner.
*
* @return The address of the potential owner.
*/
function potentialOwner() external view override returns (address) {
return _potentialOwner;
}
/**
* @notice A public view function that returns the owner.
*
* @return The address of the owner.
*/
function owner() public view override returns (address) {
return _owner;
}
/**
* @notice Internal function that sets the inital owner of the
* base contract. The initial owner must not be set
* previously.
*
* @param initialOwner The address to set for initial ownership.
*/
function _setInitialOwner(address initialOwner) internal {
// Ensure the initial owner is not an invalid address.
if (initialOwner == address(0)) {
revert InitialOwnerIsNullAddress();
}
// Ensure the owner has not already been set.
if (_owner != address(0)) {
revert OwnerAlreadySet(_owner);
}
// Emit an event indicating ownership has been set.
emit OwnershipTransferred(address(0), initialOwner);
// Set the initial owner.
_owner = initialOwner;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
/**
* @title UpgradeBeaconInterface
* @notice UpgradeBeaconInterface contains all external function
* interfaces, events and errors related to the payable proxy.
*/
interface UpgradeBeaconInterface {
/**
* @dev Emit an event whenever the implementation has been upgraded.
*
* @param implementation The new implementation address.
*/
event Upgraded(address indexed implementation);
/**
* @dev Revert with an error when attempting to call an operation
* while the caller is not the owner of the proxy.
*/
error InvalidOwner();
/**
* @dev Revert with an error when attempting to set an non-contract
* address as the implementation.
*/
error InvalidImplementation(address newImplementationAddress);
/**
* @notice Upgrades the beacon to a new implementation. Requires
* the caller must be the owner, and the new implementation
* must be a contract.
*
* @param newImplementationAddress The address to be set as the new
* implementation contract.
*/
function upgradeTo(address newImplementationAddress) external;
/**
* @notice An external view function that returns the implementation.
*
* @return The address of the implementation.
*/
function implementation() external view returns (address);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
/**
* @title TwoStepOwnableInterface
* @author OpenSea Protocol Team
* @notice TwoStepOwnableInterface contains all external function interfaces,
* events and errors for the two step ownable access control module.
*/
interface TwoStepOwnableInterface {
/**
* @dev Emit an event whenever the contract owner registers a
* new potential owner.
*
* @param newPotentialOwner The new potential owner of the contract.
*/
event PotentialOwnerUpdated(address newPotentialOwner);
/**
* @dev Emit an event whenever contract ownership is transferred.
*
* @param previousOwner The previous owner of the contract.
* @param newOwner The new owner of the contract.
*/
event OwnershipTransferred(address previousOwner, address newOwner);
/**
* @dev Revert with an error when attempting to set an owner
* that is already set.
*/
error OwnerAlreadySet(address currentOwner);
/**
* @dev Revert with an error when attempting to set the initial
* owner and supplying the null address.
*/
error InitialOwnerIsNullAddress();
/**
* @dev Revert with an error when attempting to call an operation
* while the caller is not the owner.
*/
error CallerIsNotOwner();
/**
* @dev Revert with an error when attempting to register a new potential
* owner and supplying the null address.
*/
error NewPotentialOwnerIsNullAddress();
/**
* @dev Revert with an error when attempting to claim ownership of the
* contract with a caller that is not the current potential owner.
*/
error CallerIsNotNewPotentialOwner();
/**
* @notice Initiate ownership transfer by assigning a new potential owner
* to this contract. Once set, the new potential owner may call
* `acceptOwnership` to claim ownership. Only the owner may call
* this function.
*
* @param newPotentialOwner The address for which to initiate ownership
* transfer to.
*/
function transferOwnership(address newPotentialOwner) external;
/**
* @notice Clear the currently set potential owner, if any.
* Only the owner of this contract may call this function.
*/
function cancelOwnershipTransfer() external;
/**
* @notice Accept ownership of this contract. Only the account that the
* current owner has set as the new potential owner may call this
* function.
*/
function acceptOwnership() external;
/**
* @notice An external view function that returns the potential owner.
*
* @return The address of the potential owner.
*/
function potentialOwner() external view returns (address);
/**
* @notice An external view function that returns the owner.
*
* @return The address of the owner.
*/
function owner() external view returns (address);
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 19066
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CallerIsNotNewPotentialOwner","type":"error"},{"inputs":[],"name":"CallerIsNotOwner","type":"error"},{"inputs":[],"name":"InitialOwnerIsNullAddress","type":"error"},{"inputs":[{"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"InvalidImplementation","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"NewPotentialOwnerIsNullAddress","type":"error"},{"inputs":[{"internalType":"address","name":"currentOwner","type":"address"}],"name":"OwnerAlreadySet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"PotentialOwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"implementation_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"potentialOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608080604052346101095773939c8d89ebc11fa45e576215e2353673ad0ba18a321480156100ec575b80156100cf575b80156100b2575b1561004a5760405161090e908161010f8239f35b62461bcd60e51b815260206004820152603460248201527f4465706c6f796d656e74206d757374206f726967696e6174652066726f6d206160448201527f6e20617070726f766564206465706c6f7965722e0000000000000000000000006064820152608490fd5b50733b52ad533687ce908ba0485ac177c5fb429729623214610036565b507386d26897267711ea4b173c8c124a0a73612001da321461002f565b5073e80a65eb7a3018deda407e621ef5fb5b416678ca3214610028565b600080fdfe608080604052600436101561001357600080fd5b6000803560e01c91826323452b9c146100b857505080633659cfe6146100af578063485cc955146100a65780635c60da1b1461009d5780637762df251461009457806379ba50971461008b5780638da5cb5b146100825763f2fde38b1461007a575b600080fd5b610075610655565b50610075610602565b506100756104d1565b5061007561047e565b5061007561042b565b50610075610288565b506100756101ce565b3461018457817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101845773ffffffffffffffffffffffffffffffffffffffff825416330361015c57507f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6020604051838152a17fffffffffffffffffffffffff000000000000000000000000000000000000000060015416600155604051f35b807f6db2465f0000000000000000000000000000000000000000000000000000000060049252fd5b5080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361007557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361007557565b50346100755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007557610206610188565b73ffffffffffffffffffffffffffffffffffffffff908160005416330361025e5760009161023382610849565b60405191167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8383a2f35b60046040517f6db2465f000000000000000000000000000000000000000000000000000000008152fd5b50346100755760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610075576102c0610188565b6102c86101ab565b73939c8d89ebc11fa45e576215e2353673ad0ba18a3214801561040e575b80156103f1575b80156103d4575b806103b4575b1561030a5761030891610739565b005b60a46040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605c60248201527f496e697469616c697a65206d757374206f726967696e6174652066726f6d206160448201527f6e20617070726f766564206465706c6f7965722c20616e642074686520696d7060648201527f6c656d656e746174696f6e206d757374206e6f74206265207365742e000000006084820152fd5b5073ffffffffffffffffffffffffffffffffffffffff60025416156102fa565b50733b52ad533687ce908ba0485ac177c5fb4297296232146102f4565b507386d26897267711ea4b173c8c124a0a73612001da32146102ed565b5073e80a65eb7a3018deda407e621ef5fb5b416678ca32146102e6565b50346100755760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007557602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b50346100755760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b5034610075576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105ff5760015473ffffffffffffffffffffffffffffffffffffffff9081811633036105d5577f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0917fffffffffffffffffffffffff00000000000000000000000000000000000000006040927f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da60208551888152a1166001558354168151908152336020820152a1600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055604051f35b60046040517f356e0057000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346100755760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007557602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b50346100755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100755761068d610188565b73ffffffffffffffffffffffffffffffffffffffff908160005416330361025e5716801561070f577f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6020604051838152a17fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001556000604051f35b60046040517f7621b061000000000000000000000000000000000000000000000000000000008152fd5b9073ffffffffffffffffffffffffffffffffffffffff809216801561081f57600054838116806107ee57507fffffffffffffffffffffffff0000000000000000000000000000000000000000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06040805160008152856020820152a116176000556107c481610849565b167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6000604051a2565b602490604051907f62c926120000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f3bb4b2ba000000000000000000000000000000000000000000000000000000008152fd5b803b156108915773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255565b60249073ffffffffffffffffffffffffffffffffffffffff604051917f0c760937000000000000000000000000000000000000000000000000000000008352166004820152fdfea26469706673582212201d794bb43deac39ba026a3a9e1f6fd6f030e2b492fd7a0713ed6482aa6d1dd5064736f6c634300080e0033
Deployed Bytecode
0x608080604052600436101561001357600080fd5b6000803560e01c91826323452b9c146100b857505080633659cfe6146100af578063485cc955146100a65780635c60da1b1461009d5780637762df251461009457806379ba50971461008b5780638da5cb5b146100825763f2fde38b1461007a575b600080fd5b610075610655565b50610075610602565b506100756104d1565b5061007561047e565b5061007561042b565b50610075610288565b506100756101ce565b3461018457817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101845773ffffffffffffffffffffffffffffffffffffffff825416330361015c57507f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6020604051838152a17fffffffffffffffffffffffff000000000000000000000000000000000000000060015416600155604051f35b807f6db2465f0000000000000000000000000000000000000000000000000000000060049252fd5b5080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361007557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361007557565b50346100755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007557610206610188565b73ffffffffffffffffffffffffffffffffffffffff908160005416330361025e5760009161023382610849565b60405191167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8383a2f35b60046040517f6db2465f000000000000000000000000000000000000000000000000000000008152fd5b50346100755760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610075576102c0610188565b6102c86101ab565b73939c8d89ebc11fa45e576215e2353673ad0ba18a3214801561040e575b80156103f1575b80156103d4575b806103b4575b1561030a5761030891610739565b005b60a46040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605c60248201527f496e697469616c697a65206d757374206f726967696e6174652066726f6d206160448201527f6e20617070726f766564206465706c6f7965722c20616e642074686520696d7060648201527f6c656d656e746174696f6e206d757374206e6f74206265207365742e000000006084820152fd5b5073ffffffffffffffffffffffffffffffffffffffff60025416156102fa565b50733b52ad533687ce908ba0485ac177c5fb4297296232146102f4565b507386d26897267711ea4b173c8c124a0a73612001da32146102ed565b5073e80a65eb7a3018deda407e621ef5fb5b416678ca32146102e6565b50346100755760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007557602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b50346100755760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b5034610075576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105ff5760015473ffffffffffffffffffffffffffffffffffffffff9081811633036105d5577f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0917fffffffffffffffffffffffff00000000000000000000000000000000000000006040927f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da60208551888152a1166001558354168151908152336020820152a1600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055604051f35b60046040517f356e0057000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346100755760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007557602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b50346100755760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100755761068d610188565b73ffffffffffffffffffffffffffffffffffffffff908160005416330361025e5716801561070f577f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6020604051838152a17fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001556000604051f35b60046040517f7621b061000000000000000000000000000000000000000000000000000000008152fd5b9073ffffffffffffffffffffffffffffffffffffffff809216801561081f57600054838116806107ee57507fffffffffffffffffffffffff0000000000000000000000000000000000000000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06040805160008152856020820152a116176000556107c481610849565b167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b6000604051a2565b602490604051907f62c926120000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517f3bb4b2ba000000000000000000000000000000000000000000000000000000008152fd5b803b156108915773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255565b60249073ffffffffffffffffffffffffffffffffffffffff604051917f0c760937000000000000000000000000000000000000000000000000000000008352166004820152fdfea26469706673582212201d794bb43deac39ba026a3a9e1f6fd6f030e2b492fd7a0713ed6482aa6d1dd5064736f6c634300080e0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.