Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CFHelpersPoliciesv0
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import "@openzeppelin/contracts/metatx/ERC2771Context.sol";
interface ICofundHelperState {
struct Transaction {
address wrapper;
string func;
}
struct Transfer {
uint256 maxAmount;
address token;
address[] recipients;
}
struct User {
address addr;
string position;
bool isAdmin;
bool active;
}
function activatePolicy(
bytes32 clientId,
string memory policyId,
string memory policyType,
string memory title,
address[] memory policySigners,
uint256 policyThreshold,
Transaction memory transactionDetails,
Transfer memory transferDetails,
bool isTransaction
) external returns (bool);
function deactivatePolicy(
bytes32 clientId,
string memory policyId
) external returns (bool);
function getUserIdByAddress(
address userAddress,
bytes32 clientId
) external view returns (string memory);
function getUser(
bytes32 clientId,
string memory userId
) external view returns (User memory);
function getPolicy(
bytes32 clientId,
string memory policyId
) external view returns (
bool active,
string memory title,
string memory policyType,
address[] memory signers,
uint256 threshold,
Transaction memory transactionDetails,
Transfer memory transferDetails,
bool isTransaction
);
}
contract CFHelpersPoliciesv0 is ERC2771Context {
error InactiveUser();
error InvalidAdmin();
error InvalidThreshold();
error SignersLength();
error InvalidType();
error UnauthorizedCaller();
error InvalidTitle();
ICofundHelperState public immutable stateContract;
constructor(address _stateContract, address _trustedForwarder) ERC2771Context(_trustedForwarder) {
stateContract = ICofundHelperState(_stateContract);
}
function _enforceEOA() private view {
if (!isTrustedForwarder(msg.sender) && msg.sender != tx.origin) {
revert UnauthorizedCaller();
}
}
function activatePolicyWrapper(
bytes32 clientId,
string calldata policyId,
string calldata policyType,
string calldata title,
address[] calldata policySigners,
uint256 policyThreshold,
ICofundHelperState.Transaction calldata transactionOpt,
ICofundHelperState.Transfer calldata transferOpt,
bool isTransaction
) external returns (bool) {
// Check caller is either not through a contract or through the forwarder contract
_enforceEOA();
// Get caller address
address callerAddress = _msgSender();
// Get caller userId
string memory callerUserId = stateContract.getUserIdByAddress(callerAddress, clientId);
if (bytes(callerUserId).length == 0) revert UnauthorizedCaller(); // or InvalidUser
// Get user from state
ICofundHelperState.User memory callerUser = stateContract.getUser(clientId, callerUserId);
// TODO: Verify when caller is a CF admin (if not user)
// Check caller is active
if (!callerUser.active) revert InactiveUser();
// Check caller is an admin
if (!callerUser.isAdmin) revert InvalidAdmin();
// Check policy threshold is greater than 1
if (policyThreshold <= 1) revert InvalidThreshold();
// Check that title is not empty
if (bytes(title).length == 0) revert InvalidTitle();
// Check signers length >= threshold
if (policySigners.length < policyThreshold) revert SignersLength();
// Verify transaction OR transfer details are provided based on type
if (isTransaction) {
if (transactionOpt.wrapper == address(0)) revert InvalidType();
} else {
if (transferOpt.token == address(0)) revert InvalidType();
}
return stateContract.activatePolicy(
clientId,
policyId,
policyType,
title,
policySigners,
policyThreshold,
transactionOpt,
transferOpt,
isTransaction
);
}
function deactivatePolicyWrapper(
bytes32 clientId,
string calldata policyId
) external returns (bool) {
// Check caller is either not through a contract or through the forwarder contract
_enforceEOA();
// Get caller address
address callerAddress = _msgSender();
// Get caller userId
string memory callerUserId = stateContract.getUserIdByAddress(callerAddress, clientId);
if (bytes(callerUserId).length == 0) revert UnauthorizedCaller(); // or InvalidUser
// Get user from state
ICofundHelperState.User memory callerUser = stateContract.getUser(clientId, callerUserId);
// TODO: Verify when caller is a CF admin (if not user)
// Check caller is active
if (!callerUser.active) revert InactiveUser();
// Check caller is an admin
if (!callerUser.isAdmin) revert InvalidAdmin();
return stateContract.deactivatePolicy(clientId, policyId);
}
function _msgSender() internal view override returns (address) {
return ERC2771Context._msgSender();
}
function _msgData() internal view override returns (bytes calldata) {
return ERC2771Context._msgData();
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (metatx/ERC2771Context.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Context variant with ERC-2771 support.
*
* WARNING: Avoid using this pattern in contracts that rely in a specific calldata length as they'll
* be affected by any forwarder whose `msg.data` is suffixed with the `from` address according to the ERC-2771
* specification adding the address size in bytes (20) to the calldata size. An example of an unexpected
* behavior could be an unintended fallback (or another function) invocation while trying to invoke the `receive`
* function only accessible if `msg.data.length == 0`.
*
* WARNING: The usage of `delegatecall` in this contract is dangerous and may result in context corruption.
* Any forwarded request to this contract triggering a `delegatecall` to itself will result in an invalid {_msgSender}
* recovery.
*/
abstract contract ERC2771Context is Context {
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
address private immutable _trustedForwarder;
/**
* @dev Initializes the contract with a trusted forwarder, which will be able to
* invoke functions on this contract on behalf of other accounts.
*
* NOTE: The trusted forwarder can be replaced by overriding {trustedForwarder}.
*/
/// @custom:oz-upgrades-unsafe-allow constructor
constructor(address trustedForwarder_) {
_trustedForwarder = trustedForwarder_;
}
/**
* @dev Returns the address of the trusted forwarder.
*/
function trustedForwarder() public view virtual returns (address) {
return _trustedForwarder;
}
/**
* @dev Indicates whether any particular address is the trusted forwarder.
*/
function isTrustedForwarder(address forwarder) public view virtual returns (bool) {
return forwarder == trustedForwarder();
}
/**
* @dev Override for `msg.sender`. Defaults to the original `msg.sender` whenever
* a call is not performed by the trusted forwarder or the calldata length is less than
* 20 bytes (an address length).
*/
function _msgSender() internal view virtual override returns (address) {
uint256 calldataLength = msg.data.length;
uint256 contextSuffixLength = _contextSuffixLength();
if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) {
return address(bytes20(msg.data[calldataLength - contextSuffixLength:]));
} else {
return super._msgSender();
}
}
/**
* @dev Override for `msg.data`. Defaults to the original `msg.data` whenever
* a call is not performed by the trusted forwarder or the calldata length is less than
* 20 bytes (an address length).
*/
function _msgData() internal view virtual override returns (bytes calldata) {
uint256 calldataLength = msg.data.length;
uint256 contextSuffixLength = _contextSuffixLength();
if (isTrustedForwarder(msg.sender) && calldataLength >= contextSuffixLength) {
return msg.data[:calldataLength - contextSuffixLength];
} else {
return super._msgData();
}
}
/**
* @dev ERC-2771 specifies the context as being a single address (20 bytes).
*/
function _contextSuffixLength() internal view virtual override returns (uint256) {
return 20;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_stateContract","type":"address"},{"internalType":"address","name":"_trustedForwarder","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InactiveUser","type":"error"},{"inputs":[],"name":"InvalidAdmin","type":"error"},{"inputs":[],"name":"InvalidThreshold","type":"error"},{"inputs":[],"name":"InvalidTitle","type":"error"},{"inputs":[],"name":"InvalidType","type":"error"},{"inputs":[],"name":"SignersLength","type":"error"},{"inputs":[],"name":"UnauthorizedCaller","type":"error"},{"inputs":[{"internalType":"bytes32","name":"clientId","type":"bytes32"},{"internalType":"string","name":"policyId","type":"string"},{"internalType":"string","name":"policyType","type":"string"},{"internalType":"string","name":"title","type":"string"},{"internalType":"address[]","name":"policySigners","type":"address[]"},{"internalType":"uint256","name":"policyThreshold","type":"uint256"},{"components":[{"internalType":"address","name":"wrapper","type":"address"},{"internalType":"string","name":"func","type":"string"}],"internalType":"struct ICofundHelperState.Transaction","name":"transactionOpt","type":"tuple"},{"components":[{"internalType":"uint256","name":"maxAmount","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"}],"internalType":"struct ICofundHelperState.Transfer","name":"transferOpt","type":"tuple"},{"internalType":"bool","name":"isTransaction","type":"bool"}],"name":"activatePolicyWrapper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"clientId","type":"bytes32"},{"internalType":"string","name":"policyId","type":"string"}],"name":"deactivatePolicyWrapper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stateContract","outputs":[{"internalType":"contract ICofundHelperState","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedForwarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60c0346100b257601f610c3b38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b257610052602061004b836100cd565b92016100cd565b6080526001600160a01b031660a052604051610b5990816100e282396080518181816105ff0152818161065901528181610a740152610ab7015260a0518181816069015281816101ef015281816102560152818161047101526106f60152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100b25756fe6080604052600436101561001257600080fd5b60003560e01c806353d652211461068b578063572b6c051461062e5780637da0a877146105e9578063b5299b141461009d5763db5f30e11461005357600080fd5b34610098576000366003190112610098576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600080fd5b3461009857610120366003190112610098576024356001600160401b038111610098576100ce903690600401610808565b906044356001600160401b038111610098576100ee903690600401610808565b6064356001600160401b0381116100985761010d903690600401610808565b6001600160401b036084351161009857366023608435011215610098576001600160401b036084356004013511610098573660246084356004013560051b608435010111610098576001600160401b0360c4351161009857604060c43536036003190112610098576001600160401b0360e4351161009857606060e435360360031901126100985761010435948515158603610098576101ab610a71565b6101eb60006101b8610ab4565b6040516392b4682d60e01b81526001600160a01b0390911660048083019190915235602482015291829081906044820190565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156104f0576000916105c6575b508051156105b5576000610252916040518093819262131c4f60e01b8352600435600484016109c9565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156104f057600091610592575b5060608101511561058157604001511561057057600160a435111561055f57811561054e5760a435608435600401351061053d57851561050d576001600160a01b036102df600460c43501610a1d565b16156104fc57610360946103429461031e610330935b604051632fafc49960e11b8152600480359082015261012060248201529a6101248c01916109fc565b8981036003190160448b0152916109fc565b868103600319016064880152916109fc565b60031984820301608485015260843560040135602460843501610a31565b60a43560a48401526003198382030160c484015260018060a01b0361038960c435600401610835565b16815260c4356024810135903603602219018112156100985760c43501602460048201359101906001600160401b038111610098578036038213610098576040838160206103da96015201916109fc565b906003198383030160e484015260e43560040135825260018060a01b03610405602460e43501610835565b16602083015260e4356044810135903603602219018112156100985760e43501602460048201359101916001600160401b038211610098578160051b36038313610098576104628593849360608781604060209a01520191610a31565b901515610104830152038160007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156104f0576000906104b6575b6020906040519015158152f35b506020813d6020116104e8575b816104d060209383610849565b81010312610098576104e360209161091c565b6104a9565b3d91506104c3565b6040513d6000823e3d90fd5b63b968846160e01b60005260046000fd5b6001600160a01b0361052360e435602401610a1d565b16156104fc57610360946103429461031e610330936102f5565b6384d5375960e01b60005260046000fd5b6306232dbd60e31b60005260046000fd5b63aabd5a0960e01b60005260046000fd5b630b5eba9f60e41b60005260046000fd5b630b54881f60e01b60005260046000fd5b6105af91503d806000833e6105a78183610849565b810190610929565b8861028f565b635c427cd960e01b60005260046000fd5b6105e391503d806000833e6105db8183610849565b8101906108f7565b88610228565b34610098576000366003190112610098576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610098576020366003190112610098576004356001600160a01b03811690819003610098576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169091148152602090f35b34610098576040366003190112610098576004356024356001600160401b038111610098576106be903690600401610808565b91906106c8610a71565b6106d0610ab4565b6040516392b4682d60e01b81526001600160a01b039182166004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000090911690600081604481855afa9081156104f0576000916107ed575b508051156105b5576000610759916040518093819262131c4f60e01b835288600484016109c9565b0381855afa9081156104f0576000916107d2575b50606081015115610581576040015115610570576107b49360006020946040519687958694859363a2592d3960e01b855260048501526040602485015260448401916109fc565b03925af180156104f0576000906104b6576020906040519015158152f35b6107e791503d806000833e6105a78183610849565b8561076d565b61080291503d806000833e6105db8183610849565b85610731565b9181601f84011215610098578235916001600160401b038311610098576020838186019501011161009857565b35906001600160a01b038216820361009857565b90601f801991011681019081106001600160401b0382111761086a57604052565b634e487b7160e01b600052604160045260246000fd5b60005b8381106108935750506000910152565b8181015183820152602001610883565b81601f820112156100985780516001600160401b03811161086a57604051926108d6601f8301601f191660200185610849565b81845260208284010111610098576108f49160208085019101610880565b90565b906020828203126100985781516001600160401b038111610098576108f492016108a3565b5190811515820361009857565b602081830312610098578051906001600160401b03821161009857016080818303126100985760405191608083018381106001600160401b0382111761086a5760405281516001600160a01b03811681036100985783526020820151916001600160401b038311610098576109a56060926109c19483016108a3565b60208501526109b66040820161091c565b60408501520161091c565b606082015290565b90916060928252604060208301526109f08151809281604086015260208686019101610880565b601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b356001600160a01b03811681036100985790565b9160209082815201919060005b818110610a4b5750505090565b909192602080600192838060a01b03610a6388610835565b168152019401929101610a3e565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610aaa575b6105b557565b5032331415610aa4565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480610b18575b15610b14576013193601368111610afe573560601c90565b634e487b7160e01b600052601160045260246000fd5b3390565b506014361015610ae656fea2646970667358221220245a875bcdc6c18e05344b82da733df807b001442cd1f4d1505ea1fefca2985a64736f6c634300081c003300000000000000000000000082f6d1d8eb17199aa8be0b4a487b741ae5a57196000000000000000000000000017a2da3b0a10cdc0c9c0bb3bf55ee3f6e4cd0bc
Deployed Bytecode
0x6080604052600436101561001257600080fd5b60003560e01c806353d652211461068b578063572b6c051461062e5780637da0a877146105e9578063b5299b141461009d5763db5f30e11461005357600080fd5b34610098576000366003190112610098576040517f00000000000000000000000082f6d1d8eb17199aa8be0b4a487b741ae5a571966001600160a01b03168152602090f35b600080fd5b3461009857610120366003190112610098576024356001600160401b038111610098576100ce903690600401610808565b906044356001600160401b038111610098576100ee903690600401610808565b6064356001600160401b0381116100985761010d903690600401610808565b6001600160401b036084351161009857366023608435011215610098576001600160401b036084356004013511610098573660246084356004013560051b608435010111610098576001600160401b0360c4351161009857604060c43536036003190112610098576001600160401b0360e4351161009857606060e435360360031901126100985761010435948515158603610098576101ab610a71565b6101eb60006101b8610ab4565b6040516392b4682d60e01b81526001600160a01b0390911660048083019190915235602482015291829081906044820190565b03817f00000000000000000000000082f6d1d8eb17199aa8be0b4a487b741ae5a571966001600160a01b03165afa9081156104f0576000916105c6575b508051156105b5576000610252916040518093819262131c4f60e01b8352600435600484016109c9565b03817f00000000000000000000000082f6d1d8eb17199aa8be0b4a487b741ae5a571966001600160a01b03165afa9081156104f057600091610592575b5060608101511561058157604001511561057057600160a435111561055f57811561054e5760a435608435600401351061053d57851561050d576001600160a01b036102df600460c43501610a1d565b16156104fc57610360946103429461031e610330935b604051632fafc49960e11b8152600480359082015261012060248201529a6101248c01916109fc565b8981036003190160448b0152916109fc565b868103600319016064880152916109fc565b60031984820301608485015260843560040135602460843501610a31565b60a43560a48401526003198382030160c484015260018060a01b0361038960c435600401610835565b16815260c4356024810135903603602219018112156100985760c43501602460048201359101906001600160401b038111610098578036038213610098576040838160206103da96015201916109fc565b906003198383030160e484015260e43560040135825260018060a01b03610405602460e43501610835565b16602083015260e4356044810135903603602219018112156100985760e43501602460048201359101916001600160401b038211610098578160051b36038313610098576104628593849360608781604060209a01520191610a31565b901515610104830152038160007f00000000000000000000000082f6d1d8eb17199aa8be0b4a487b741ae5a571966001600160a01b03165af180156104f0576000906104b6575b6020906040519015158152f35b506020813d6020116104e8575b816104d060209383610849565b81010312610098576104e360209161091c565b6104a9565b3d91506104c3565b6040513d6000823e3d90fd5b63b968846160e01b60005260046000fd5b6001600160a01b0361052360e435602401610a1d565b16156104fc57610360946103429461031e610330936102f5565b6384d5375960e01b60005260046000fd5b6306232dbd60e31b60005260046000fd5b63aabd5a0960e01b60005260046000fd5b630b5eba9f60e41b60005260046000fd5b630b54881f60e01b60005260046000fd5b6105af91503d806000833e6105a78183610849565b810190610929565b8861028f565b635c427cd960e01b60005260046000fd5b6105e391503d806000833e6105db8183610849565b8101906108f7565b88610228565b34610098576000366003190112610098576040517f000000000000000000000000017a2da3b0a10cdc0c9c0bb3bf55ee3f6e4cd0bc6001600160a01b03168152602090f35b34610098576020366003190112610098576004356001600160a01b03811690819003610098576040517f000000000000000000000000017a2da3b0a10cdc0c9c0bb3bf55ee3f6e4cd0bc6001600160a01b03169091148152602090f35b34610098576040366003190112610098576004356024356001600160401b038111610098576106be903690600401610808565b91906106c8610a71565b6106d0610ab4565b6040516392b4682d60e01b81526001600160a01b039182166004820152602481018490527f00000000000000000000000082f6d1d8eb17199aa8be0b4a487b741ae5a5719690911690600081604481855afa9081156104f0576000916107ed575b508051156105b5576000610759916040518093819262131c4f60e01b835288600484016109c9565b0381855afa9081156104f0576000916107d2575b50606081015115610581576040015115610570576107b49360006020946040519687958694859363a2592d3960e01b855260048501526040602485015260448401916109fc565b03925af180156104f0576000906104b6576020906040519015158152f35b6107e791503d806000833e6105a78183610849565b8561076d565b61080291503d806000833e6105db8183610849565b85610731565b9181601f84011215610098578235916001600160401b038311610098576020838186019501011161009857565b35906001600160a01b038216820361009857565b90601f801991011681019081106001600160401b0382111761086a57604052565b634e487b7160e01b600052604160045260246000fd5b60005b8381106108935750506000910152565b8181015183820152602001610883565b81601f820112156100985780516001600160401b03811161086a57604051926108d6601f8301601f191660200185610849565b81845260208284010111610098576108f49160208085019101610880565b90565b906020828203126100985781516001600160401b038111610098576108f492016108a3565b5190811515820361009857565b602081830312610098578051906001600160401b03821161009857016080818303126100985760405191608083018381106001600160401b0382111761086a5760405281516001600160a01b03811681036100985783526020820151916001600160401b038311610098576109a56060926109c19483016108a3565b60208501526109b66040820161091c565b60408501520161091c565b606082015290565b90916060928252604060208301526109f08151809281604086015260208686019101610880565b601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b356001600160a01b03811681036100985790565b9160209082815201919060005b818110610a4b5750505090565b909192602080600192838060a01b03610a6388610835565b168152019401929101610a3e565b337f000000000000000000000000017a2da3b0a10cdc0c9c0bb3bf55ee3f6e4cd0bc6001600160a01b0316141580610aaa575b6105b557565b5032331415610aa4565b337f000000000000000000000000017a2da3b0a10cdc0c9c0bb3bf55ee3f6e4cd0bc6001600160a01b03161480610b18575b15610b14576013193601368111610afe573560601c90565b634e487b7160e01b600052601160045260246000fd5b3390565b506014361015610ae656fea2646970667358221220245a875bcdc6c18e05344b82da733df807b001442cd1f4d1505ea1fefca2985a64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000082f6d1d8eb17199aa8be0b4a487b741ae5a57196000000000000000000000000017a2da3b0a10cdc0c9c0bb3bf55ee3f6e4cd0bc
-----Decoded View---------------
Arg [0] : _stateContract (address): 0x82F6d1d8EB17199aa8be0b4A487B741AE5a57196
Arg [1] : _trustedForwarder (address): 0x017A2Da3B0A10CDc0c9C0BB3bF55EE3f6E4CD0Bc
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000082f6d1d8eb17199aa8be0b4a487b741ae5a57196
Arg [1] : 000000000000000000000000017a2da3b0a10cdc0c9c0bb3bf55ee3f6e4cd0bc
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 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.