Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
HeklaTierRouter
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import "../tiers/TierProviderBase.sol"; import "../tiers/ITierRouter.sol"; /// @title HeklaTierRouter /// @dev Any changes to the configuration in this file must be announced and documented on our site. /// Ensure all modifications are reviewed by the devrel team. /// @custom:security-contact [email protected] contract HeklaTierRouter is TierProviderBase, ITierRouter { address public immutable DAO_FALLBACK_PROPOSER; constructor(address _daoFallbackProposer) { // 0xD3f681bD6B49887A48cC9C9953720903967E9DC0 DAO_FALLBACK_PROPOSER = _daoFallbackProposer; } /// @inheritdoc ITierRouter function getProvider(uint256) external view returns (address) { return address(this); } /// @inheritdoc ITierProvider function getTierIds() external pure returns (uint16[] memory tiers_) { tiers_ = new uint16[](6); tiers_[0] = LibTiers.TIER_OPTIMISTIC; tiers_[1] = LibTiers.TIER_SGX; tiers_[2] = LibTiers.TIER_ZKVM_RISC0; tiers_[3] = LibTiers.TIER_ZKVM_SP1; tiers_[4] = LibTiers.TIER_GUARDIAN_MINORITY; tiers_[5] = LibTiers.TIER_GUARDIAN; } /// @inheritdoc ITierProvider function getMinTier(address _proposer, uint256 _rand) public view override returns (uint16) { if (_proposer == DAO_FALLBACK_PROPOSER) { if (_rand % 100 == 0) return LibTiers.TIER_ZKVM_RISC0; else if (_rand % 1000 == 1) return LibTiers.TIER_ZKVM_SP1; else return LibTiers.TIER_SGX; } return _rand % 2 == 0 ? LibTiers.TIER_SGX : LibTiers.TIER_OPTIMISTIC; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import "src/shared/common/LibStrings.sol"; import "./ITierProvider.sol"; import "./LibTiers.sol"; /// @title TierProviderBase /// @dev Any changes to the configuration in this file must be announced and documented on our site. /// Ensure all modifications are reviewed by the devrel team. /// @custom:security-contact [email protected] abstract contract TierProviderBase is ITierProvider { uint96 public constant BOND_UNIT = 50 ether; // TAIKO tokens /// @inheritdoc ITierProvider /// @notice Each tier, except the top tier, has a validity bond that is 75 TAIKO higher than the /// previous tier. Additionally, each tier's contest bond is 6.5625 times its validity bond. function getTier(uint16 _tierId) public pure virtual returns (ITierProvider.Tier memory) { if (_tierId == LibTiers.TIER_OPTIMISTIC) { return _buildTier(LibStrings.B_TIER_OPTIMISTIC, 1, 1440, 60); } // TEE Tiers if (_tierId == LibTiers.TIER_SGX) { // cooldownWindow is 240 minutes and provingWindow is 60 minutes return _buildTier(LibStrings.B_TIER_SGX, 2, 240, 60); } if (_tierId == LibTiers.TIER_TDX) { // cooldownWindow is 240 minutes and provingWindow is 60 minutes return _buildTier(LibStrings.B_TIER_TDX, 2, 240, 60); } if (_tierId == LibTiers.TIER_TEE_ANY) { // cooldownWindow is 240 minutes and provingWindow is 60 minutes return _buildTier(LibStrings.B_TIER_TEE_ANY, 2, 240, 60); } // ZKVM Tiers: Allowing 120 minutes for proof aggregation. if (_tierId == LibTiers.TIER_ZKVM_RISC0) { // cooldownWindow is 240 minutes and provingWindow is 120 minutes return _buildTier(LibStrings.B_TIER_ZKVM_RISC0, 3, 240, 120); } if (_tierId == LibTiers.TIER_ZKVM_SP1) { // cooldownWindow is 240 minutes and provingWindow is 120 minutes return _buildTier(LibStrings.B_TIER_ZKVM_SP1, 3, 240, 120); } if (_tierId == LibTiers.TIER_ZKVM_ANY) { // cooldownWindow is 240 minutes and provingWindow is 90 minutes return _buildTier(LibStrings.B_TIER_ZKVM_ANY, 3, 240, 120); } if (_tierId == LibTiers.TIER_ZKVM_AND_TEE) { // cooldownWindow is 240 minutes and provingWindow is 90 minutes return _buildTier(LibStrings.B_TIER_ZKVM_AND_TEE, 3, 240, 120); } // Guardian Minority Tiers if (_tierId == LibTiers.TIER_GUARDIAN_MINORITY) { // cooldownWindow is 60 minutes and provingWindow is 120 minutes return _buildTier(LibStrings.B_TIER_GUARDIAN_MINORITY, 4, 240, 120); } // Guardian Major Tiers if (_tierId == LibTiers.TIER_GUARDIAN) { // cooldownWindow is 480 minutes return _buildTier(LibStrings.B_TIER_GUARDIAN, 0, 480, 0); } revert TIER_NOT_FOUND(); } /// @dev Builds a generic tier with specified parameters. /// @param _verifierName The name of the verifier. /// @param _validityBondUnits The units of validity bonds. /// @param _cooldownWindow The cooldown window duration in minutes. /// @param _provingWindow The proving window duration in minutes. /// @return A Tier struct with the provided parameters. function _buildTier( bytes32 _verifierName, uint8 _validityBondUnits, uint16 _cooldownWindow, uint16 _provingWindow ) private pure returns (ITierProvider.Tier memory) { uint96 validityBond = BOND_UNIT * _validityBondUnits; return ITierProvider.Tier({ verifierName: _verifierName, validityBond: validityBond, contestBond: validityBond / 10_000 * 65_625, cooldownWindow: _cooldownWindow, provingWindow: _provingWindow, maxBlocksToVerifyPerProof: 0 }); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /// @title ITierRouter /// @notice Defines interface to return an ITierProvider /// @custom:security-contact [email protected] interface ITierRouter { /// @dev Returns the address of the TierProvider for a given block. /// @param blockId ID of the block. /// @return The address of the corresponding TierProvider. function getProvider(uint256 blockId) external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /// @title LibStrings /// @custom:security-contact [email protected] library LibStrings { bytes32 internal constant B_AUTOMATA_DCAP_ATTESTATION = bytes32("automata_dcap_attestation"); bytes32 internal constant B_BOND_TOKEN = bytes32("bond_token"); bytes32 internal constant B_BRIDGE = bytes32("bridge"); bytes32 internal constant B_BRIDGE_WATCHDOG = bytes32("bridge_watchdog"); bytes32 internal constant B_BRIDGED_ERC1155 = bytes32("bridged_erc1155"); bytes32 internal constant B_BRIDGED_ERC20 = bytes32("bridged_erc20"); bytes32 internal constant B_BRIDGED_ERC721 = bytes32("bridged_erc721"); bytes32 internal constant B_CHAIN_WATCHDOG = bytes32("chain_watchdog"); bytes32 internal constant B_ERC1155_VAULT = bytes32("erc1155_vault"); bytes32 internal constant B_ERC20_VAULT = bytes32("erc20_vault"); bytes32 internal constant B_ERC721_VAULT = bytes32("erc721_vault"); bytes32 internal constant B_PRECONF_TASK_MANAGER = bytes32("preconf_task_manager"); bytes32 internal constant B_PROVER_ASSIGNMENT = bytes32("PROVER_ASSIGNMENT"); bytes32 internal constant B_PROVER_SET = bytes32("prover_set"); bytes32 internal constant B_QUOTA_MANAGER = bytes32("quota_manager"); bytes32 internal constant B_SGX_WATCHDOG = bytes32("sgx_watchdog"); bytes32 internal constant B_SIGNAL_SERVICE = bytes32("signal_service"); bytes32 internal constant B_SP1_REMOTE_VERIFIER = bytes32("sp1_remote_verifier"); bytes32 internal constant B_TAIKO = bytes32("taiko"); bytes32 internal constant B_TAIKO_TOKEN = bytes32("taiko_token"); bytes32 internal constant B_TIER_GUARDIAN = bytes32("tier_guardian"); bytes32 internal constant B_TIER_GUARDIAN_MINORITY = bytes32("tier_guardian_minority"); bytes32 internal constant B_TIER_OPTIMISTIC = bytes32(""); bytes32 internal constant B_TIER_ROUTER = bytes32("tier_router"); bytes32 internal constant B_TIER_SGX = bytes32("tier_sgx"); bytes32 internal constant B_TIER_TDX = bytes32("tier_tdx"); bytes32 internal constant B_TIER_TEE_ANY = bytes32("tier_tee_any"); bytes32 internal constant B_TIER_ZKVM_RISC0 = bytes32("tier_zkvm_risc0"); bytes32 internal constant B_TIER_ZKVM_SP1 = bytes32("tier_zkvm_sp1"); bytes32 internal constant B_TIER_ZKVM_ANY = bytes32("tier_zkvm_any"); bytes32 internal constant B_TIER_ZKVM_AND_TEE = bytes32("tier_zkvm_and_tee"); bytes32 internal constant B_RISCZERO_GROTH16_VERIFIER = bytes32("risc0_groth16_verifier"); bytes32 internal constant B_WITHDRAWER = bytes32("withdrawer"); bytes32 internal constant H_RETURN_LIVENESS_BOND = keccak256("RETURN_LIVENESS_BOND"); bytes32 internal constant H_SIGNAL_ROOT = keccak256("SIGNAL_ROOT"); bytes32 internal constant H_STATE_ROOT = keccak256("STATE_ROOT"); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /// @title ITierProvider /// @notice Defines interface to return tier configuration. /// @custom:security-contact [email protected] interface ITierProvider { struct Tier { bytes32 verifierName; uint96 validityBond; uint96 contestBond; uint24 cooldownWindow; // in minutes uint16 provingWindow; // in minutes uint8 maxBlocksToVerifyPerProof; // DEPRECATED } error TIER_NOT_FOUND(); /// @dev Retrieves the configuration for a specified tier. /// @param tierId ID of the tier. /// @return Tier struct containing the tier's parameters. function getTier(uint16 tierId) external view returns (Tier memory); /// @dev Retrieves the IDs of all supported tiers. /// Note that the core protocol requires the number of tiers to be smaller /// than 256. In reality, this number should be much smaller. /// @return The ids of the tiers. function getTierIds() external view returns (uint16[] memory); /// @dev Determines the minimal tier for a block based on a random input. /// @param proposer The address of the block proposer. /// @param rand A pseudo-random number. /// @return The tier id. function getMinTier(address proposer, uint256 rand) external view returns (uint16); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /// @title LibTiers /// @dev Tier ID cannot be zero and must be unique. /// @custom:security-contact [email protected] library LibTiers { /// @notice Optimistic tier ID. uint16 public constant TIER_OPTIMISTIC = 100; /// @notice TEE tiers /// Although these tiers have diffeerent IDs, at most one should be selected in a verifier. uint16 public constant TIER_SGX = 200; uint16 public constant TIER_TDX = 201; uint16 public constant TIER_TEE_ANY = 202; /// @notice ZK Tiers. /// Although these tiers have diffeerent IDs, at most one should be selected in a verifier. uint16 public constant TIER_ZKVM_RISC0 = 250; uint16 public constant TIER_ZKVM_SP1 = 251; uint16 public constant TIER_ZKVM_ANY = 252; /// @notice Any ZKVM+TEE proof uint16 public constant TIER_ZKVM_AND_TEE = 300; /// @notice Guardian tier ID with minority approval. uint16 public constant TIER_GUARDIAN_MINORITY = 900; /// @notice Guardian tier ID with majority approval. uint16 public constant TIER_GUARDIAN = 1000; }
{ "remappings": [ "openzeppelin/=node_modules/@openzeppelin/", "@openzeppelin/=node_modules/@openzeppelin/", "@openzeppelin-upgrades/contracts/=node_modules/@openzeppelin/contracts-upgradeable/", "@risc0/contracts/=node_modules/risc0-ethereum/contracts/src/", "@solady/=node_modules/solady/", "@optimism/=node_modules/optimism/", "@sp1-contracts/=node_modules/sp1-contracts/contracts/", "forge-std/=node_modules/forge-std/", "ds-test/=node_modules/ds-test/src/", "@p256-verifier/contracts/=node_modules/p256-verifier/src/", "eigenlayer-middleware/=node_modules/eigenlayer-middleware/", "eigenlayer-contracts/=node_modules/eigenlayer-contracts/", "src/=contracts/", "test/=test/", "script/=script/", "@openzeppelin/=node_modules/@openzeppelin/", "optimism/=node_modules/optimism/", "p256-verifier/=node_modules/p256-verifier/", "risc0-ethereum/=node_modules/risc0-ethereum/", "solady/=node_modules/solady/", "sp1-contracts/=node_modules/sp1-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_daoFallbackProposer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"TIER_NOT_FOUND","type":"error"},{"inputs":[],"name":"BOND_UNIT","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAO_FALLBACK_PROPOSER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_proposer","type":"address"},{"internalType":"uint256","name":"_rand","type":"uint256"}],"name":"getMinTier","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_tierId","type":"uint16"}],"name":"getTier","outputs":[{"components":[{"internalType":"bytes32","name":"verifierName","type":"bytes32"},{"internalType":"uint96","name":"validityBond","type":"uint96"},{"internalType":"uint96","name":"contestBond","type":"uint96"},{"internalType":"uint24","name":"cooldownWindow","type":"uint24"},{"internalType":"uint16","name":"provingWindow","type":"uint16"},{"internalType":"uint8","name":"maxBlocksToVerifyPerProof","type":"uint8"}],"internalType":"struct ITierProvider.Tier","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTierIds","outputs":[{"internalType":"uint16[]","name":"tiers_","type":"uint16[]"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
60a0604052348015600e575f5ffd5b50604051610816380380610816833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f5ffd5b81516001600160a01b0381168114605f575f5ffd5b9392505050565b6080516107916100855f395f8181610163015261019d01526107915ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806352c5c56b14610064578063576c3de71461008f5780635c42d0791461010b5780638165fd2614610136578063bf62514d1461015e578063d8cde1c614610185575b5f5ffd5b610077610072366004610604565b61019a565b60405161ffff90911681526020015b60405180910390f35b6100a261009d366004610639565b610233565b60405161008691905f60c082019050825182526001600160601b0360208401511660208301526001600160601b03604084015116604083015262ffffff606084015116606083015261ffff608084015116608083015260ff60a08401511660a083015292915050565b61011e610119366004610661565b503090565b6040516001600160a01b039091168152602001610086565b6101466802b5e3af16b188000081565b6040516001600160601b039091168152602001610086565b61011e7f000000000000000000000000000000000000000000000000000000000000000081565b61018d61042c565b6040516100869190610678565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603610210576101df6064836106d2565b5f036101ed575060fa61022d565b6101f96103e8836106d2565b600103610208575060fb61022d565b5060c861022d565b61021b6002836106d2565b1561022757606461022a565b60c85b90505b92915050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081019190915260631961ffff8316016102815761022d5f60016105a0603c610555565b60c71961ffff8316016102a85761022d670e8d2cae4bee6cef60c31b600260f0603c610555565b60c81961ffff8316016102cf5761022d670e8d2cae4bee8c8f60c31b600260f0603c610555565b60c91961ffff8316016102fa5761022d6b746965725f7465655f616e7960a01b600260f0603c610555565b60f91961ffff8316016103285761022d6e0746965725f7a6b766d5f726973633608c1b600360f06078610555565b60fa1961ffff8316016103545761022d6c746965725f7a6b766d5f73703160981b600360f06078610555565b60fb1961ffff8316016103805761022d6c746965725f7a6b766d5f616e7960981b600360f06078610555565b61012b1961ffff8316016103b15761022d70746965725f7a6b766d5f616e645f74656560781b600360f06078610555565b6103831961ffff8316016103e75761022d75746965725f677561726469616e5f6d696e6f7269747960501b600460f06078610555565b6103e71961ffff8316016104135761022d6c3a34b2b92fb3bab0b93234b0b760991b5f6101e05f610555565b6040516334130f6160e21b815260040160405180910390fd5b60408051600680825260e082019092526060916020820160c0803683370190505090506064815f81518110610463576104636106e5565b602002602001019061ffff16908161ffff168152505060c88160018151811061048e5761048e6106e5565b602002602001019061ffff16908161ffff168152505060fa816002815181106104b9576104b96106e5565b602002602001019061ffff16908161ffff168152505060fb816003815181106104e4576104e46106e5565b602002602001019061ffff16908161ffff168152505061038481600481518110610510576105106106e5565b602002602001019061ffff16908161ffff16815250506103e88160058151811061053c5761053c6106e5565b602002602001019061ffff16908161ffff168152505090565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529061059c60ff86166802b5e3af16b18800006106f9565b6040805160c0810182528881526001600160601b038316602082015291925081016105c96127108461072e565b6105d690620100596106f9565b6001600160601b0316815261ffff958616602082015293909416604084015250505f60609091015292915050565b5f5f60408385031215610615575f5ffd5b82356001600160a01b038116811461062b575f5ffd5b946020939093013593505050565b5f60208284031215610649575f5ffd5b813561ffff8116811461065a575f5ffd5b9392505050565b5f60208284031215610671575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156106b357835161ffff16835260209384019390920191600101610691565b509095945050505050565b634e487b7160e01b5f52601260045260245ffd5b5f826106e0576106e06106be565b500690565b634e487b7160e01b5f52603260045260245ffd5b6001600160601b03818116838216029081169081811461072757634e487b7160e01b5f52601160045260245ffd5b5092915050565b5f6001600160601b03831680610746576107466106be565b806001600160601b038416049150509291505056fea2646970667358221220c0552c316a6da36cc4c62e5068670916f97943cdacc47f971876148c17679b9664736f6c634300081b0033000000000000000000000000d3f681bd6b49887a48cc9c9953720903967e9dc0
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806352c5c56b14610064578063576c3de71461008f5780635c42d0791461010b5780638165fd2614610136578063bf62514d1461015e578063d8cde1c614610185575b5f5ffd5b610077610072366004610604565b61019a565b60405161ffff90911681526020015b60405180910390f35b6100a261009d366004610639565b610233565b60405161008691905f60c082019050825182526001600160601b0360208401511660208301526001600160601b03604084015116604083015262ffffff606084015116606083015261ffff608084015116608083015260ff60a08401511660a083015292915050565b61011e610119366004610661565b503090565b6040516001600160a01b039091168152602001610086565b6101466802b5e3af16b188000081565b6040516001600160601b039091168152602001610086565b61011e7f000000000000000000000000d3f681bd6b49887a48cc9c9953720903967e9dc081565b61018d61042c565b6040516100869190610678565b5f7f000000000000000000000000d3f681bd6b49887a48cc9c9953720903967e9dc06001600160a01b0316836001600160a01b031603610210576101df6064836106d2565b5f036101ed575060fa61022d565b6101f96103e8836106d2565b600103610208575060fb61022d565b5060c861022d565b61021b6002836106d2565b1561022757606461022a565b60c85b90505b92915050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081019190915260631961ffff8316016102815761022d5f60016105a0603c610555565b60c71961ffff8316016102a85761022d670e8d2cae4bee6cef60c31b600260f0603c610555565b60c81961ffff8316016102cf5761022d670e8d2cae4bee8c8f60c31b600260f0603c610555565b60c91961ffff8316016102fa5761022d6b746965725f7465655f616e7960a01b600260f0603c610555565b60f91961ffff8316016103285761022d6e0746965725f7a6b766d5f726973633608c1b600360f06078610555565b60fa1961ffff8316016103545761022d6c746965725f7a6b766d5f73703160981b600360f06078610555565b60fb1961ffff8316016103805761022d6c746965725f7a6b766d5f616e7960981b600360f06078610555565b61012b1961ffff8316016103b15761022d70746965725f7a6b766d5f616e645f74656560781b600360f06078610555565b6103831961ffff8316016103e75761022d75746965725f677561726469616e5f6d696e6f7269747960501b600460f06078610555565b6103e71961ffff8316016104135761022d6c3a34b2b92fb3bab0b93234b0b760991b5f6101e05f610555565b6040516334130f6160e21b815260040160405180910390fd5b60408051600680825260e082019092526060916020820160c0803683370190505090506064815f81518110610463576104636106e5565b602002602001019061ffff16908161ffff168152505060c88160018151811061048e5761048e6106e5565b602002602001019061ffff16908161ffff168152505060fa816002815181106104b9576104b96106e5565b602002602001019061ffff16908161ffff168152505060fb816003815181106104e4576104e46106e5565b602002602001019061ffff16908161ffff168152505061038481600481518110610510576105106106e5565b602002602001019061ffff16908161ffff16815250506103e88160058151811061053c5761053c6106e5565b602002602001019061ffff16908161ffff168152505090565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529061059c60ff86166802b5e3af16b18800006106f9565b6040805160c0810182528881526001600160601b038316602082015291925081016105c96127108461072e565b6105d690620100596106f9565b6001600160601b0316815261ffff958616602082015293909416604084015250505f60609091015292915050565b5f5f60408385031215610615575f5ffd5b82356001600160a01b038116811461062b575f5ffd5b946020939093013593505050565b5f60208284031215610649575f5ffd5b813561ffff8116811461065a575f5ffd5b9392505050565b5f60208284031215610671575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156106b357835161ffff16835260209384019390920191600101610691565b509095945050505050565b634e487b7160e01b5f52601260045260245ffd5b5f826106e0576106e06106be565b500690565b634e487b7160e01b5f52603260045260245ffd5b6001600160601b03818116838216029081169081811461072757634e487b7160e01b5f52601160045260245ffd5b5092915050565b5f6001600160601b03831680610746576107466106be565b806001600160601b038416049150509291505056fea2646970667358221220c0552c316a6da36cc4c62e5068670916f97943cdacc47f971876148c17679b9664736f6c634300081b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d3f681bd6b49887a48cc9c9953720903967e9dc0
-----Decoded View---------------
Arg [0] : _daoFallbackProposer (address): 0xD3f681bD6B49887A48cC9C9953720903967E9DC0
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d3f681bd6b49887a48cc9c9953720903967e9dc0
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.