Source Code
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ERC721Module
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "../interfaces/IERC6551Executable.sol";
import "../interfaces/IPackModule.sol";
/**
* @title ERC721Module
* @dev This contract handles the creation, opening, and revocation of ERC721 tokens in a pack.
*/
contract ERC721Module is IPackModule {
//
uint256 public constant CALL_OPERATION = 0; // Only call operations are supported for ERC6551
uint256 public constant CALL_VALUE = 0; // No value is sent with the call
/**
* @dev Struct to hold data for tokens on creation, opening, and revocation of a pack.
* @param tokenAddress The address of the ERC721 token.
* @param tokenId The ID of the token to be included in the pack.
*/
struct AdditionalData {
address tokenAddress;
uint256 tokenId;
}
// Lifecycle functions
/**
* @dev Function to handle token transfers on creation of a pack.
* @param account The address of the account creating the pack.
* @param additionalData The data for the tokens to be included in the pack.
*/
function onCreate(
uint256 /* tokenId */,
address account,
bytes calldata additionalData
) external payable override {
// unpack data
AdditionalData[] memory tokensData = abi.decode(
additionalData,
(AdditionalData[])
);
// Iterate over the array of TokenData objects
for (uint256 i = 0; i < tokensData.length; i++) {
IERC721(tokensData[i].tokenAddress).transferFrom(
msg.sender,
account,
tokensData[i].tokenId
);
}
return;
}
/**
* @dev Function to handle token transfers on opening of a pack.
* @param account The address of the account opening the pack.
* @param claimer The address of the account claiming the pack.
* @param additionalData The data for the tokens to be claimed from the pack.
*/
function onOpen(
uint256 /* tokenId */,
address account,
address claimer,
bytes calldata additionalData
) external override {
// unpack data
AdditionalData[] memory tokensData = abi.decode(
additionalData,
(AdditionalData[])
);
// Iterate over the array of TokenData objects
for (uint256 i = 0; i < tokensData.length; i++) {
IERC6551Executable(payable(account)).execute(
tokensData[i].tokenAddress,
CALL_VALUE,
abi.encodeWithSignature(
"safeTransferFrom(address,address,uint256)",
account,
claimer,
tokensData[i].tokenId
),
CALL_OPERATION
);
}
return;
}
/**
* @dev Function to handle token transfers on revocation of a pack.
* @param account The address of the account revoking the pack.
* @param additionalData The data for the tokens to be revoked from the pack.
*/
function onRevoke(
uint256 /* tokenId */,
address account,
bytes calldata additionalData
) external override {
// unpack data
AdditionalData[] memory tokensData = abi.decode(
additionalData,
(AdditionalData[])
);
// Iterate over the array of TokenData objects
for (uint256 i = 0; i < tokensData.length; i++) {
IERC6551Executable(payable(account)).execute(
tokensData[i].tokenAddress,
CALL_VALUE,
abi.encodeWithSignature(
"safeTransferFrom(address,address,uint256)",
account,
msg.sender,
tokensData[i].tokenId
),
CALL_OPERATION
);
}
return;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.20;
import {IERC165} from "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
* a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
* {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
* a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the address zero.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @dev the ERC-165 identifier for this interface is `0x74420f4c`
interface IERC6551Executable {
/**
* @dev Executes a low-level operation if the caller is a valid signer on the account
*
* Reverts and bubbles up error if operation fails
*
* @param to The target address of the operation
* @param value The Ether value to be sent to the target
* @param data The encoded operation calldata
* @param operation A value indicating the type of operation to perform
*
* Accounts implementing this interface MUST accept the following operation parameter values:
* - 0 = CALL
* - 1 = DELEGATECALL
* - 2 = CREATE
* - 3 = CREATE2
*
* Accounts implementing this interface MAY support additional operations or restrict a signer's
* ability to execute certain operations
*
* @return The result of the operation
*/
function execute(
address to,
uint256 value,
bytes calldata data,
uint256 operation
) external payable returns (bytes memory);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IPackModule {
// Lifecycle functions
function onCreate(
uint256 tokenId,
address account,
bytes calldata additionalData
) external payable;
function onOpen(
uint256 tokenId,
address account,
address claimer,
bytes calldata additionalData
) external;
function onRevoke(
uint256 tokenId,
address account,
bytes calldata additionalData
) external;
}{
"evmVersion": "paris",
"optimizer": {
"enabled": false,
"runs": 200
},
"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":[],"name":"CALL_OPERATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALL_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes","name":"additionalData","type":"bytes"}],"name":"onCreate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bytes","name":"additionalData","type":"bytes"}],"name":"onOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes","name":"additionalData","type":"bytes"}],"name":"onRevoke","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50610c21806100206000396000f3fe60806040526004361061004a5760003560e01c806315a3966f1461004f5780631d19868814610078578063c56d786e146100a3578063d3f43c78146100bf578063f37e724e146100ea575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610632565b610113565b005b34801561008457600080fd5b5061008d6102a5565b60405161009a91906106c9565b60405180910390f35b6100bd60048036038101906100b891906106e4565b6102aa565b005b3480156100cb57600080fd5b506100d461038f565b6040516100e191906106c9565b60405180910390f35b3480156100f657600080fd5b50610111600480360381019061010c91906106e4565b610394565b005b6000828281019061012491906108fc565b905060005b815181101561029c578573ffffffffffffffffffffffffffffffffffffffff166374420f4c83838151811061016157610160610945565b5b6020026020010151600001516000898987878151811061018457610183610945565b5b6020026020010151602001516040516024016101a293929190610983565b6040516020818303038152906040527f42842e0e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060006040518563ffffffff1660e01b81526004016102409493929190610a39565b6000604051808303816000875af115801561025f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102889190610b2b565b50808061029490610ba3565b915050610129565b50505050505050565b600081565b600082828101906102bb91906108fc565b905060005b8151811015610387578181815181106102dc576102db610945565b5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166323b872dd338785858151811061031857610317610945565b5b6020026020010151602001516040518463ffffffff1660e01b815260040161034293929190610983565b600060405180830381600087803b15801561035c57600080fd5b505af1158015610370573d6000803e3d6000fd5b50505050808061037f90610ba3565b9150506102c0565b505050505050565b600081565b600082828101906103a591906108fc565b905060005b815181101561051d578473ffffffffffffffffffffffffffffffffffffffff166374420f4c8383815181106103e2576103e1610945565b5b6020026020010151600001516000883387878151811061040557610404610945565b5b60200260200101516020015160405160240161042393929190610983565b6040516020818303038152906040527f42842e0e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060006040518563ffffffff1660e01b81526004016104c19493929190610a39565b6000604051808303816000875af11580156104e0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906105099190610b2b565b50808061051590610ba3565b9150506103aa565b505050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61054c81610539565b811461055757600080fd5b50565b60008135905061056981610543565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061059a8261056f565b9050919050565b6105aa8161058f565b81146105b557600080fd5b50565b6000813590506105c7816105a1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126105f2576105f16105cd565b5b8235905067ffffffffffffffff81111561060f5761060e6105d2565b5b60208301915083600182028301111561062b5761062a6105d7565b5b9250929050565b60008060008060006080868803121561064e5761064d61052f565b5b600061065c8882890161055a565b955050602061066d888289016105b8565b945050604061067e888289016105b8565b935050606086013567ffffffffffffffff81111561069f5761069e610534565b5b6106ab888289016105dc565b92509250509295509295909350565b6106c381610539565b82525050565b60006020820190506106de60008301846106ba565b92915050565b600080600080606085870312156106fe576106fd61052f565b5b600061070c8782880161055a565b945050602061071d878288016105b8565b935050604085013567ffffffffffffffff81111561073e5761073d610534565b5b61074a878288016105dc565b925092505092959194509250565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107a182610758565b810181811067ffffffffffffffff821117156107c0576107bf610769565b5b80604052505050565b60006107d3610525565b90506107df8282610798565b919050565b600067ffffffffffffffff8211156107ff576107fe610769565b5b602082029050602081019050919050565b600080fd5b60006040828403121561082b5761082a610810565b5b61083560406107c9565b90506000610845848285016105b8565b60008301525060206108598482850161055a565b60208301525092915050565b6000610878610873846107e4565b6107c9565b9050808382526020820190506040840283018581111561089b5761089a6105d7565b5b835b818110156108c457806108b08882610815565b84526020840193505060408101905061089d565b5050509392505050565b600082601f8301126108e3576108e26105cd565b5b81356108f3848260208601610865565b91505092915050565b6000602082840312156109125761091161052f565b5b600082013567ffffffffffffffff8111156109305761092f610534565b5b61093c848285016108ce565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61097d8161058f565b82525050565b60006060820190506109986000830186610974565b6109a56020830185610974565b6109b260408301846106ba565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156109f45780820151818401526020810190506109d9565b60008484015250505050565b6000610a0b826109ba565b610a1581856109c5565b9350610a258185602086016109d6565b610a2e81610758565b840191505092915050565b6000608082019050610a4e6000830187610974565b610a5b60208301866106ba565b8181036040830152610a6d8185610a00565b9050610a7c60608301846106ba565b95945050505050565b600080fd5b600067ffffffffffffffff821115610aa557610aa4610769565b5b610aae82610758565b9050602081019050919050565b6000610ace610ac984610a8a565b6107c9565b905082815260208101848484011115610aea57610ae9610a85565b5b610af58482856109d6565b509392505050565b600082601f830112610b1257610b116105cd565b5b8151610b22848260208601610abb565b91505092915050565b600060208284031215610b4157610b4061052f565b5b600082015167ffffffffffffffff811115610b5f57610b5e610534565b5b610b6b84828501610afd565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610bae82610539565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610be057610bdf610b74565b5b60018201905091905056fea2646970667358221220029aa6db8f970e2f83966c492a86a8c8ba31e2221c606dd5b78248e548d9adc364736f6c63430008140033
Deployed Bytecode
0x60806040526004361061004a5760003560e01c806315a3966f1461004f5780631d19868814610078578063c56d786e146100a3578063d3f43c78146100bf578063f37e724e146100ea575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610632565b610113565b005b34801561008457600080fd5b5061008d6102a5565b60405161009a91906106c9565b60405180910390f35b6100bd60048036038101906100b891906106e4565b6102aa565b005b3480156100cb57600080fd5b506100d461038f565b6040516100e191906106c9565b60405180910390f35b3480156100f657600080fd5b50610111600480360381019061010c91906106e4565b610394565b005b6000828281019061012491906108fc565b905060005b815181101561029c578573ffffffffffffffffffffffffffffffffffffffff166374420f4c83838151811061016157610160610945565b5b6020026020010151600001516000898987878151811061018457610183610945565b5b6020026020010151602001516040516024016101a293929190610983565b6040516020818303038152906040527f42842e0e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060006040518563ffffffff1660e01b81526004016102409493929190610a39565b6000604051808303816000875af115801561025f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102889190610b2b565b50808061029490610ba3565b915050610129565b50505050505050565b600081565b600082828101906102bb91906108fc565b905060005b8151811015610387578181815181106102dc576102db610945565b5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166323b872dd338785858151811061031857610317610945565b5b6020026020010151602001516040518463ffffffff1660e01b815260040161034293929190610983565b600060405180830381600087803b15801561035c57600080fd5b505af1158015610370573d6000803e3d6000fd5b50505050808061037f90610ba3565b9150506102c0565b505050505050565b600081565b600082828101906103a591906108fc565b905060005b815181101561051d578473ffffffffffffffffffffffffffffffffffffffff166374420f4c8383815181106103e2576103e1610945565b5b6020026020010151600001516000883387878151811061040557610404610945565b5b60200260200101516020015160405160240161042393929190610983565b6040516020818303038152906040527f42842e0e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060006040518563ffffffff1660e01b81526004016104c19493929190610a39565b6000604051808303816000875af11580156104e0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906105099190610b2b565b50808061051590610ba3565b9150506103aa565b505050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61054c81610539565b811461055757600080fd5b50565b60008135905061056981610543565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061059a8261056f565b9050919050565b6105aa8161058f565b81146105b557600080fd5b50565b6000813590506105c7816105a1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126105f2576105f16105cd565b5b8235905067ffffffffffffffff81111561060f5761060e6105d2565b5b60208301915083600182028301111561062b5761062a6105d7565b5b9250929050565b60008060008060006080868803121561064e5761064d61052f565b5b600061065c8882890161055a565b955050602061066d888289016105b8565b945050604061067e888289016105b8565b935050606086013567ffffffffffffffff81111561069f5761069e610534565b5b6106ab888289016105dc565b92509250509295509295909350565b6106c381610539565b82525050565b60006020820190506106de60008301846106ba565b92915050565b600080600080606085870312156106fe576106fd61052f565b5b600061070c8782880161055a565b945050602061071d878288016105b8565b935050604085013567ffffffffffffffff81111561073e5761073d610534565b5b61074a878288016105dc565b925092505092959194509250565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107a182610758565b810181811067ffffffffffffffff821117156107c0576107bf610769565b5b80604052505050565b60006107d3610525565b90506107df8282610798565b919050565b600067ffffffffffffffff8211156107ff576107fe610769565b5b602082029050602081019050919050565b600080fd5b60006040828403121561082b5761082a610810565b5b61083560406107c9565b90506000610845848285016105b8565b60008301525060206108598482850161055a565b60208301525092915050565b6000610878610873846107e4565b6107c9565b9050808382526020820190506040840283018581111561089b5761089a6105d7565b5b835b818110156108c457806108b08882610815565b84526020840193505060408101905061089d565b5050509392505050565b600082601f8301126108e3576108e26105cd565b5b81356108f3848260208601610865565b91505092915050565b6000602082840312156109125761091161052f565b5b600082013567ffffffffffffffff8111156109305761092f610534565b5b61093c848285016108ce565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61097d8161058f565b82525050565b60006060820190506109986000830186610974565b6109a56020830185610974565b6109b260408301846106ba565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156109f45780820151818401526020810190506109d9565b60008484015250505050565b6000610a0b826109ba565b610a1581856109c5565b9350610a258185602086016109d6565b610a2e81610758565b840191505092915050565b6000608082019050610a4e6000830187610974565b610a5b60208301866106ba565b8181036040830152610a6d8185610a00565b9050610a7c60608301846106ba565b95945050505050565b600080fd5b600067ffffffffffffffff821115610aa557610aa4610769565b5b610aae82610758565b9050602081019050919050565b6000610ace610ac984610a8a565b6107c9565b905082815260208101848484011115610aea57610ae9610a85565b5b610af58482856109d6565b509392505050565b600082601f830112610b1257610b116105cd565b5b8151610b22848260208601610abb565b91505092915050565b600060208284031215610b4157610b4061052f565b5b600082015167ffffffffffffffff811115610b5f57610b5e610534565b5b610b6b84828501610afd565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610bae82610539565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610be057610bdf610b74565b5b60018201905091905056fea2646970667358221220029aa6db8f970e2f83966c492a86a8c8ba31e2221c606dd5b78248e548d9adc364736f6c63430008140033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.