ETH Price: $2,048.09 (-4.13%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CFHelpersPoliciesv0

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
// 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;
    }
}

Settings
{
  "viaIR": true,
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

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"}]

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


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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.