ETH Price: $2,711.90 (+2.52%)

Contract

0x14e14193c68052EFA5d8eCb645a133CB9076ea6a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deploy Proxy For...208128362024-09-23 10:59:11140 days ago1727089151IN
0x14e14193...B9076ea6a
0 ETH0.0124126721.54102693
Deploy Proxy For...207871512024-09-19 20:52:35144 days ago1726779155IN
0x14e14193...B9076ea6a
0 ETH0.003039548.27842167
Deploy Proxy For...207719712024-09-17 17:59:23146 days ago1726595963IN
0x14e14193...B9076ea6a
0 ETH0.0068257316.28735353
Deploy Proxy For...207630202024-09-16 11:56:35147 days ago1726487795IN
0x14e14193...B9076ea6a
0 ETH0.002356266.41704622
Deploy Proxy For...207221152024-09-10 18:51:47153 days ago1725994307IN
0x14e14193...B9076ea6a
0 ETH0.000610295.80170288
Deploy Proxy For...206685622024-09-03 7:29:35161 days ago1725348575IN
0x14e14193...B9076ea6a
0 ETH0.000546991.25402802
Deploy Proxy For...206416752024-08-30 13:25:23164 days ago1725024323IN
0x14e14193...B9076ea6a
0 ETH0.00062681.98343577
Deploy Proxy For...206409332024-08-30 10:55:59164 days ago1725015359IN
0x14e14193...B9076ea6a
0 ETH0.000602651.64157963
Deploy Proxy For...206366202024-08-29 20:26:59165 days ago1724963219IN
0x14e14193...B9076ea6a
0 ETH0.001110133.02273892

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
208128362024-09-23 10:59:11140 days ago1727089151
0x14e14193...B9076ea6a
0 ETH
208128362024-09-23 10:59:11140 days ago1727089151
0x14e14193...B9076ea6a
0 ETH
208128362024-09-23 10:59:11140 days ago1727089151
0x14e14193...B9076ea6a
 Contract Creation0 ETH
208128362024-09-23 10:59:11140 days ago1727089151
0x14e14193...B9076ea6a
0 ETH
207871512024-09-19 20:52:35144 days ago1726779155
0x14e14193...B9076ea6a
0 ETH
207871512024-09-19 20:52:35144 days ago1726779155
0x14e14193...B9076ea6a
0 ETH
207871512024-09-19 20:52:35144 days ago1726779155
0x14e14193...B9076ea6a
 Contract Creation0 ETH
207871512024-09-19 20:52:35144 days ago1726779155
0x14e14193...B9076ea6a
0 ETH
207719712024-09-17 17:59:23146 days ago1726595963
0x14e14193...B9076ea6a
0 ETH
207719712024-09-17 17:59:23146 days ago1726595963
0x14e14193...B9076ea6a
0 ETH
207719712024-09-17 17:59:23146 days ago1726595963
0x14e14193...B9076ea6a
 Contract Creation0 ETH
207719712024-09-17 17:59:23146 days ago1726595963
0x14e14193...B9076ea6a
0 ETH
207630202024-09-16 11:56:35147 days ago1726487795
0x14e14193...B9076ea6a
0 ETH
207630202024-09-16 11:56:35147 days ago1726487795
0x14e14193...B9076ea6a
0 ETH
207630202024-09-16 11:56:35147 days ago1726487795
0x14e14193...B9076ea6a
 Contract Creation0 ETH
207630202024-09-16 11:56:35147 days ago1726487795
0x14e14193...B9076ea6a
0 ETH
207221152024-09-10 18:51:47153 days ago1725994307
0x14e14193...B9076ea6a
0 ETH
207221152024-09-10 18:51:47153 days ago1725994307
0x14e14193...B9076ea6a
 Contract Creation0 ETH
207221152024-09-10 18:51:47153 days ago1725994307
0x14e14193...B9076ea6a
0 ETH
206685622024-09-03 7:29:35161 days ago1725348575
0x14e14193...B9076ea6a
0 ETH
206685622024-09-03 7:29:35161 days ago1725348575
0x14e14193...B9076ea6a
0 ETH
206685622024-09-03 7:29:35161 days ago1725348575
0x14e14193...B9076ea6a
 Contract Creation0 ETH
206685622024-09-03 7:29:35161 days ago1725348575
0x14e14193...B9076ea6a
0 ETH
206416752024-08-30 13:25:23164 days ago1725024323
0x14e14193...B9076ea6a
0 ETH
206416752024-08-30 13:25:23164 days ago1725024323
0x14e14193...B9076ea6a
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeTrustMultisigFactory

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 5 : DeTrustMultisigFactory.sol
// SPDX-License-Identifier: MIT
// UBD Network

pragma solidity 0.8.26;

import "@openzeppelin/contracts/proxy/Clones.sol";
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import "./interfaces/IDeTrustModelRegistry.sol";
import "./interfaces/IUsersDeTrustRegistry.sol";

/**
 * @dev This is a factory contract for UBD DeTrustMultisig creation. DeTrusts will
 * creating as minimal proxy (EIP 1167) for available model implementation.  
 */
contract DeTrustMultisigFactory {

    struct FeeParams {
        address feeToken;
        uint256 feeAmount;
        address feeBeneficiary;
        uint64 prePaiedPeriod;
    }

    uint8 constant public MAX_NAME_LENGTH_BYTES = 52;
    IDeTrustModelRegistry public modelRegistry;
    IUsersDeTrustRegistry public trustRegistry;
    
    
    event NewTrust(
        address indexed Creator, 
        address indexed Model, 
        address indexed Trust, 
        bytes32 PromoHash,
        string Name
    );
    
    /**
     * @dev Pass Model's and User's Registry contract addresses.  Zero addresses
     * are possible as well but in that case proxy for **ANY** implementation 
     * would be able to create.
     */
    constructor(address _modelReg, address _trustReg){
        modelRegistry = IDeTrustModelRegistry(_modelReg);
        trustRegistry = IUsersDeTrustRegistry(_trustReg);
    }

    

    /**
     * @dev Deploy proxy for given implementation.
     * @param _implAddress  addreess  of approved and valid implemtation
     * @param _threshold number of sign that enough for execute tx
     * @param _inheritors addresses array. First address is  DeTrust owner.  So in theory possible to
     *   create detrust for somebody. But only `msg.sender` address will checked
     * in model creation rules.
     * @param _periodOrDateArray array periods in seconds after wich inheritor will get acces to.
     * @param _name simple string name for trust. 
     * @param _promoHash - hashed promocode value
     */
    function deployProxyForTrust(
        address _implAddress, 
        uint8 _threshold,
        address[] memory _inheritors,
        uint64[] memory _periodOrDateArray,
        string memory _name,
        bytes32  _promoHash
    ) public payable returns(address proxy) 
    {
        FeeParams memory feep;
        require(bytes(_name).length <= MAX_NAME_LENGTH_BYTES, "Too long name");
        if (address(modelRegistry) != address(0)){
            bytes1 _rules = modelRegistry.isModelEnable(_implAddress, msg.sender);
            // check _implAddress(=model) white list
            require(_rules & 0x01 == 0x01, "Model not approved");
            
            // check model rules
            if (_rules & 0x02 == 0x02) {
                modelRegistry.checkRules(_implAddress, msg.sender, _promoHash);
            }

            // charge FEE if enabled
            if (_rules & 0x04 == 0x04) {
                (feep.feeToken, feep.feeAmount, feep.feeBeneficiary, feep.prePaiedPeriod) 
                    =  modelRegistry.chargeFee{value: msg.value}(
                        _implAddress, msg.sender, _promoHash
                    );
            }
        }

        proxy = Clones.clone(_implAddress);

        // INIT
        bytes memory initCallData = abi.encodeWithSignature(
            "initialize(uint8,address[],uint64[],address,uint256,address,uint64)",
            _threshold, _inheritors, _periodOrDateArray
            ,feep.feeToken, feep.feeAmount, feep.feeBeneficiary, feep.prePaiedPeriod
        );
        // Address.functionCallWithValue(proxy, initCallData, msg.value);
        Address.functionCallWithValue(proxy, initCallData, 0);


        // Register trust in Trust registry
        if (address(trustRegistry) != address(0)){
            trustRegistry.registerTrust(proxy, _inheritors, _name);
        }
        emit NewTrust(msg.sender, _implAddress, proxy, _promoHash, _name);
    }

    function getMinHoldInfo() external view returns (uint256, address) {
        if (address(modelRegistry) != address(0)){
            return modelRegistry.getMinHoldInfo();
        } else {
            return (0, address(0));
        }
    }

    
}

File 2 of 5 : Clones.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Clones.sol)

pragma solidity ^0.8.20;

/**
 * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
 * deploying minimal proxy contracts, also known as "clones".
 *
 * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
 * > a minimal bytecode implementation that delegates all calls to a known, fixed address.
 *
 * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
 * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
 * deterministic method.
 */
library Clones {
    /**
     * @dev A clone instance deployment failed.
     */
    error ERC1167FailedCreateClone();

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     */
    function clone(address implementation) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create(0, 0x09, 0x37)
        }
        if (instance == address(0)) {
            revert ERC1167FailedCreateClone();
        }
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple time will revert, since
     * the clones cannot be deployed twice at the same address.
     */
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create2(0, 0x09, 0x37, salt)
        }
        if (instance == address(0)) {
            revert ERC1167FailedCreateClone();
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(add(ptr, 0x38), deployer)
            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
            mstore(add(ptr, 0x14), implementation)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
            mstore(add(ptr, 0x58), salt)
            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
            predicted := keccak256(add(ptr, 0x43), 0x55)
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt
    ) internal view returns (address predicted) {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

File 3 of 5 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error AddressInsufficientBalance(address account);

    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedInnerCall();

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        if (address(this).balance < amount) {
            revert AddressInsufficientBalance(address(this));
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert FailedInnerCall();
        }
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason or custom error, it is bubbled
     * up by this function (like regular Solidity function calls). However, if
     * the call reverted with no returned reason, this function reverts with a
     * {FailedInnerCall} error.
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
     * unsuccessful call.
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            // only check if target is a contract if the call was successful and the return data is empty
            // otherwise we already know that it was a contract
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
     * revert reason or with a default {FailedInnerCall} error.
     */
    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    /**
     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
     */
    function _revert(bytes memory returndata) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert FailedInnerCall();
        }
    }
}

File 4 of 5 : IDeTrustModelRegistry.sol
// SPDX-License-Identifier: MIT
// UBD Network

pragma solidity 0.8.26;

/**
 * @dev Interface of the DeTrustMultisigModelRegistry.
 */
interface IDeTrustModelRegistry {


    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns one byte array:
     *  7    6    5    4    3    2   1   0  <= Bit number(dec)
     *  ------------------------------------------------------
     *  1    1    1    1    1    1   1   1   
     *  |    |    |    |    |    |   |   |   
     *  |    |    |    |    |    |   |   +-Is_Enabled
     *  |    |    |    |    |    |   +-Need_Balance 
     *  |    |    |    |    |    +-Need_FeeCharge
     *  |    |    |    |    +-reserved_core
     *  |    |    |    +-reserved_core
     *  |    |    +-reserved_core
     *  |    +-reserved_core  
     *  +-reserved_core
     */
    function isModelEnable(address _impl, address _creator) 
        external 
        view 
        returns (bytes1 _rules);

    /**
     * @dev Returns `true` or revert with reason.
     */
    function checkRules(address _impl, address _creator, bytes32 _promoHash)
        external
        view
        returns (bool _ok);

    /**
     * @dev Returns `true` if Fee charged
     */
    function chargeFee(address _impl, address _creator, bytes32 _promoHash)
        external
        payable
        returns (
            address feeToken_, 
            uint256 feeAmount_, 
            address feeBeneficiary_,
            uint64 prePaiedPeriod_);

    function getMinHoldInfo() 
        external 
        view 
        returns (uint256 holdAmount, address holdToken);

   
}

File 5 of 5 : IUsersDeTrustRegistry.sol
// SPDX-License-Identifier: MIT
// UBD Network

pragma solidity 0.8.26;

/**
 * @dev Interface of the DeTrustMultisigModelRegistry.
 */
interface IUsersDeTrustRegistry {

    /**
     * @dev Returns `true` if after trust registered or revert with reason
     */
    function registerTrust(
        address _trust, 
        address[] memory _inheritors, 
        string memory _name
    )
        external
        returns (bool _ok);
}

Settings
{
  "remappings": [
    "@Uopenzeppelin/=lib/openzeppelin-contracts-upgradeable.git/",
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@uniswap/=lib/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable.git/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "ds-test/=lib/openzeppelin-contracts-upgradeable.git/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable.git/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts-upgradeable.git/=lib/openzeppelin-contracts-upgradeable.git/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_modelReg","type":"address"},{"internalType":"address","name":"_trustReg","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ERC1167FailedCreateClone","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"Creator","type":"address"},{"indexed":true,"internalType":"address","name":"Model","type":"address"},{"indexed":true,"internalType":"address","name":"Trust","type":"address"},{"indexed":false,"internalType":"bytes32","name":"PromoHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"Name","type":"string"}],"name":"NewTrust","type":"event"},{"inputs":[],"name":"MAX_NAME_LENGTH_BYTES","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_implAddress","type":"address"},{"internalType":"uint8","name":"_threshold","type":"uint8"},{"internalType":"address[]","name":"_inheritors","type":"address[]"},{"internalType":"uint64[]","name":"_periodOrDateArray","type":"uint64[]"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"bytes32","name":"_promoHash","type":"bytes32"}],"name":"deployProxyForTrust","outputs":[{"internalType":"address","name":"proxy","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getMinHoldInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modelRegistry","outputs":[{"internalType":"contract IDeTrustModelRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustRegistry","outputs":[{"internalType":"contract IUsersDeTrustRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052348015600f57600080fd5b50604051610d4a380380610d4a833981016040819052602c916077565b600080546001600160a01b039384166001600160a01b0319918216179091556001805492909316911617905560a5565b80516001600160a01b0381168114607257600080fd5b919050565b60008060408385031215608957600080fd5b609083605c565b9150609c60208401605c565b90509250929050565b610c96806100b46000396000f3fe60806040526004361061004a5760003560e01c80632ba36f781461004f578063413d2bc41461008c57806347dedccc1461009f578063573d6fa2146100d15780639b835427146100f8575b600080fd5b34801561005b57600080fd5b5060005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a366004610905565b610118565b3480156100ab57600080fd5b506100b46104f9565b604080519283526001600160a01b03909116602083015201610083565b3480156100dd57600080fd5b506100e6603481565b60405160ff9091168152602001610083565b34801561010457600080fd5b5060015461006f906001600160a01b031681565b60408051608081018252600080825260208201819052918101829052606081018290528351603410156101825760405162461bcd60e51b815260206004820152600d60248201526c546f6f206c6f6e67206e616d6560981b60448201526064015b60405180910390fd5b6000546001600160a01b031615610399576000805460405163367b6ab160e01b81526001600160a01b038b811660048301523360248301529091169063367b6ab190604401602060405180830381865afa1580156101e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020891906109cf565b9050600160f81b808216146102545760405162461bcd60e51b8152602060048201526012602482015271135bd9195b081b9bdd08185c1c1c9bdd995960721b6044820152606401610179565b600160f91b80821690036102df57600054604051632e0d0d3560e21b81526001600160a01b038b81166004830152336024830152604482018790529091169063b83434d490606401602060405180830381865afa1580156102b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dd91906109f9565b505b600160fa1b80821690036103975760005460405163bd9dd1d160e01b81526001600160a01b038b81166004830152336024830152604482018790529091169063bd9dd1d190349060640160806040518083038185885af1158015610347573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061036c9190610a1b565b67ffffffffffffffff1660608601526001600160a01b03908116604086015260208501919091521682525b505b6103a288610589565b9150600087878784600001518560200151866040015187606001516040516024016103d39796959493929190610ab5565b60408051601f198184030181529190526020810180516001600160e01b0316630cb175af60e11b179052905061040b838260006105fb565b506001546001600160a01b0316156104965760015460405163e32f212360e01b81526001600160a01b039091169063e32f2123906104519086908b908a90600401610bb2565b6020604051808303816000875af1158015610470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049491906109f9565b505b826001600160a01b0316896001600160a01b0316336001600160a01b03167fb1378a18924414bfdd2cb2665cb35caf32473d0d890d0b3acca0658a2d46f52787896040516104e5929190610bf2565b60405180910390a450509695505050505050565b6000805481906001600160a01b03161561058057600054604080516311f7b73360e21b815281516001600160a01b03909316926347dedccc926004808401939192918290030181865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190610c13565b915091509091565b50600091829150565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166105f6576040516330be1a3d60e21b815260040160405180910390fd5b919050565b6060814710156106205760405163cd78605960e01b8152306004820152602401610179565b600080856001600160a01b0316848660405161063c9190610c44565b60006040518083038185875af1925050503d8060008114610679576040519150601f19603f3d011682016040523d82523d6000602084013e61067e565b606091505b509150915061068e86838361069a565b925050505b9392505050565b6060826106af576106aa826106f6565b610693565b81511580156106c657506001600160a01b0384163b155b156106ef57604051639996b31560e01b81526001600160a01b0385166004820152602401610179565b5080610693565b8051156107065780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b038116811461071f57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561077657610776610737565b604052919050565b600067ffffffffffffffff82111561079857610798610737565b5060051b60200190565b600082601f8301126107b357600080fd5b81356107c66107c18261077e565b61074d565b8082825260208201915060208360051b8601019250858311156107e857600080fd5b602085015b8381101561080e57803561080081610722565b8352602092830192016107ed565b5095945050505050565b67ffffffffffffffff8116811461071f57600080fd5b600082601f83011261083f57600080fd5b813561084d6107c18261077e565b8082825260208201915060208360051b86010192508583111561086f57600080fd5b602085015b8381101561080e57803561088781610818565b835260209283019201610874565b600082601f8301126108a657600080fd5b813567ffffffffffffffff8111156108c0576108c0610737565b6108d3601f8201601f191660200161074d565b8181528460208386010111156108e857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561091e57600080fd5b863561092981610722565b9550602087013560ff8116811461093f57600080fd5b9450604087013567ffffffffffffffff81111561095b57600080fd5b61096789828a016107a2565b945050606087013567ffffffffffffffff81111561098457600080fd5b61099089828a0161082e565b935050608087013567ffffffffffffffff8111156109ad57600080fd5b6109b989828a01610895565b9699959850939692959460a09093013593505050565b6000602082840312156109e157600080fd5b81516001600160f81b03198116811461069357600080fd5b600060208284031215610a0b57600080fd5b8151801515811461069357600080fd5b60008060008060808587031215610a3157600080fd5b8451610a3c81610722565b602086015160408701519195509350610a5481610722565b6060860151909250610a6581610818565b939692955090935050565b600081518084526020840193506020830160005b82811015610aab5781516001600160a01b0316865260209586019590910190600101610a84565b5093949350505050565b60ff8816815260e060208201526000610ad160e0830189610a70565b828103604084015287518082526020808a0192019060005b81811015610b1157835167ffffffffffffffff16835260209384019390920191600101610ae9565b50506001600160a01b03881660608501529150610b2b9050565b846080830152610b4660a08301856001600160a01b03169052565b67ffffffffffffffff831660c083015298975050505050505050565b60005b83811015610b7d578181015183820152602001610b65565b50506000910152565b60008151808452610b9e816020860160208601610b62565b601f01601f19169290920160200192915050565b6001600160a01b0384168152606060208201819052600090610bd690830185610a70565b8281036040840152610be88185610b86565b9695505050505050565b828152604060208201526000610c0b6040830184610b86565b949350505050565b60008060408385031215610c2657600080fd5b82516020840151909250610c3981610722565b809150509250929050565b60008251610c56818460208701610b62565b919091019291505056fea2646970667358221220f6c3a3140877ea3a3734df7121421b8a796dd160668640680c8fb532663ccc5764736f6c634300081a00330000000000000000000000003371e6ca3d0424d375c3723cdf1ed8f4359bd8a9000000000000000000000000778a9f417809b896ef1e2dd3ae377690704f3fa3

Deployed Bytecode

0x60806040526004361061004a5760003560e01c80632ba36f781461004f578063413d2bc41461008c57806347dedccc1461009f578063573d6fa2146100d15780639b835427146100f8575b600080fd5b34801561005b57600080fd5b5060005461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61006f61009a366004610905565b610118565b3480156100ab57600080fd5b506100b46104f9565b604080519283526001600160a01b03909116602083015201610083565b3480156100dd57600080fd5b506100e6603481565b60405160ff9091168152602001610083565b34801561010457600080fd5b5060015461006f906001600160a01b031681565b60408051608081018252600080825260208201819052918101829052606081018290528351603410156101825760405162461bcd60e51b815260206004820152600d60248201526c546f6f206c6f6e67206e616d6560981b60448201526064015b60405180910390fd5b6000546001600160a01b031615610399576000805460405163367b6ab160e01b81526001600160a01b038b811660048301523360248301529091169063367b6ab190604401602060405180830381865afa1580156101e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020891906109cf565b9050600160f81b808216146102545760405162461bcd60e51b8152602060048201526012602482015271135bd9195b081b9bdd08185c1c1c9bdd995960721b6044820152606401610179565b600160f91b80821690036102df57600054604051632e0d0d3560e21b81526001600160a01b038b81166004830152336024830152604482018790529091169063b83434d490606401602060405180830381865afa1580156102b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102dd91906109f9565b505b600160fa1b80821690036103975760005460405163bd9dd1d160e01b81526001600160a01b038b81166004830152336024830152604482018790529091169063bd9dd1d190349060640160806040518083038185885af1158015610347573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061036c9190610a1b565b67ffffffffffffffff1660608601526001600160a01b03908116604086015260208501919091521682525b505b6103a288610589565b9150600087878784600001518560200151866040015187606001516040516024016103d39796959493929190610ab5565b60408051601f198184030181529190526020810180516001600160e01b0316630cb175af60e11b179052905061040b838260006105fb565b506001546001600160a01b0316156104965760015460405163e32f212360e01b81526001600160a01b039091169063e32f2123906104519086908b908a90600401610bb2565b6020604051808303816000875af1158015610470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049491906109f9565b505b826001600160a01b0316896001600160a01b0316336001600160a01b03167fb1378a18924414bfdd2cb2665cb35caf32473d0d890d0b3acca0658a2d46f52787896040516104e5929190610bf2565b60405180910390a450509695505050505050565b6000805481906001600160a01b03161561058057600054604080516311f7b73360e21b815281516001600160a01b03909316926347dedccc926004808401939192918290030181865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190610c13565b915091509091565b50600091829150565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166105f6576040516330be1a3d60e21b815260040160405180910390fd5b919050565b6060814710156106205760405163cd78605960e01b8152306004820152602401610179565b600080856001600160a01b0316848660405161063c9190610c44565b60006040518083038185875af1925050503d8060008114610679576040519150601f19603f3d011682016040523d82523d6000602084013e61067e565b606091505b509150915061068e86838361069a565b925050505b9392505050565b6060826106af576106aa826106f6565b610693565b81511580156106c657506001600160a01b0384163b155b156106ef57604051639996b31560e01b81526001600160a01b0385166004820152602401610179565b5080610693565b8051156107065780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b038116811461071f57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561077657610776610737565b604052919050565b600067ffffffffffffffff82111561079857610798610737565b5060051b60200190565b600082601f8301126107b357600080fd5b81356107c66107c18261077e565b61074d565b8082825260208201915060208360051b8601019250858311156107e857600080fd5b602085015b8381101561080e57803561080081610722565b8352602092830192016107ed565b5095945050505050565b67ffffffffffffffff8116811461071f57600080fd5b600082601f83011261083f57600080fd5b813561084d6107c18261077e565b8082825260208201915060208360051b86010192508583111561086f57600080fd5b602085015b8381101561080e57803561088781610818565b835260209283019201610874565b600082601f8301126108a657600080fd5b813567ffffffffffffffff8111156108c0576108c0610737565b6108d3601f8201601f191660200161074d565b8181528460208386010111156108e857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561091e57600080fd5b863561092981610722565b9550602087013560ff8116811461093f57600080fd5b9450604087013567ffffffffffffffff81111561095b57600080fd5b61096789828a016107a2565b945050606087013567ffffffffffffffff81111561098457600080fd5b61099089828a0161082e565b935050608087013567ffffffffffffffff8111156109ad57600080fd5b6109b989828a01610895565b9699959850939692959460a09093013593505050565b6000602082840312156109e157600080fd5b81516001600160f81b03198116811461069357600080fd5b600060208284031215610a0b57600080fd5b8151801515811461069357600080fd5b60008060008060808587031215610a3157600080fd5b8451610a3c81610722565b602086015160408701519195509350610a5481610722565b6060860151909250610a6581610818565b939692955090935050565b600081518084526020840193506020830160005b82811015610aab5781516001600160a01b0316865260209586019590910190600101610a84565b5093949350505050565b60ff8816815260e060208201526000610ad160e0830189610a70565b828103604084015287518082526020808a0192019060005b81811015610b1157835167ffffffffffffffff16835260209384019390920191600101610ae9565b50506001600160a01b03881660608501529150610b2b9050565b846080830152610b4660a08301856001600160a01b03169052565b67ffffffffffffffff831660c083015298975050505050505050565b60005b83811015610b7d578181015183820152602001610b65565b50506000910152565b60008151808452610b9e816020860160208601610b62565b601f01601f19169290920160200192915050565b6001600160a01b0384168152606060208201819052600090610bd690830185610a70565b8281036040840152610be88185610b86565b9695505050505050565b828152604060208201526000610c0b6040830184610b86565b949350505050565b60008060408385031215610c2657600080fd5b82516020840151909250610c3981610722565b809150509250929050565b60008251610c56818460208701610b62565b919091019291505056fea2646970667358221220f6c3a3140877ea3a3734df7121421b8a796dd160668640680c8fb532663ccc5764736f6c634300081a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000003371e6ca3d0424d375c3723cdf1ed8f4359bd8a9000000000000000000000000778a9f417809b896ef1e2dd3ae377690704f3fa3

-----Decoded View---------------
Arg [0] : _modelReg (address): 0x3371e6Ca3d0424d375c3723CdF1ed8f4359bD8A9
Arg [1] : _trustReg (address): 0x778a9F417809b896ef1E2Dd3Ae377690704f3Fa3

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003371e6ca3d0424d375c3723cdf1ed8f4359bd8a9
Arg [1] : 000000000000000000000000778a9f417809b896ef1e2dd3ae377690704f3fa3


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.