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
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x7917C55b...9215F22E0 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
HashiManager
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 100 runs
Other Settings:
byzantium EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.4.24; import "./Ownable.sol"; import "openzeppelin-solidity/contracts/math/SafeMath.sol"; import "./InitializableBridge.sol"; contract HashiManager is InitializableBridge, Ownable { bytes32 internal constant N_ADAPTERS = 0xdcf7815b28c450099ee39fe328212215e261dd8ce26acdea76caf742d778991e; // keccak256(abi.encodePacked("nAdapters")) bytes32 internal constant N_REPORTERS = 0x7759f17e5239c7f5c713a5c2ca4f103cbe6896de01dabfb0d08276642d579e33; // keccak256(abi.encodePacked("nReporters")) bytes32 internal constant YAHO = 0xb947d41ce6141eb4dc972fcad3b49fe0eb8d5f59730728c86b8f6e1427912f0e; // keccak256(abi.encodePacked("yaho")) bytes32 internal constant YARU = 0x524607f5322f856f1415d60956f8220a13a3abe3281979fdb843027035724c76; // keccak256(abi.encodePacked("yaru")) bytes32 internal constant TARGET_ADDRESS = 0x2f1696ba9bd43014bc580768c9270c32ad765cbf97d2a2ba5e81ab9f1ee90561; // keccak256(abi.encodePacked("targetAddress")) bytes32 internal constant TARGET_CHAIN_ID = 0xbd2b577e24554caf96874c1f333079c108fe5afbd441f36a76920df41d10820c; // keccak256(abi.encodePacked("targetChainId")) bytes32 internal constant THRESHOLD = 0xd46c2b20c7303c2e50535d224276492e8a1eda2a3d7398e0bea254640c1154e7; // keccak256(abi.encodePacked("threshold")) bytes32 internal constant EXPECTED_THRESHOLD = 0x8d22a2c372a80e72edabc4af18641f1c8144f8c3c74dce591bace2af2a167b88; // keccak256(abi.encodePacked("expectedThreshold")) bytes32 internal constant EXPECTED_ADAPTERS_HASH = 0x21aa67cae9293b939ada82eb9133293e592da66aa847a5596523bd6d2bf2529b; // keccak256(abi.encodePacked("expectedAdapters")) function initialize(address _owner) external onlyRelevantSender returns (bool) { require(!isInitialized()); _setOwner(_owner); setInitialize(); return isInitialized(); } function setReportersAdaptersAndThreshold(address[] reporters, address[] adapters, uint256 threshold) external onlyOwner { _setArray(N_REPORTERS, "reporters", reporters); _setArray(N_ADAPTERS, "adapters", adapters); uintStorage[THRESHOLD] = threshold; } function adapters() external view returns (address[]) { return _getArray(N_ADAPTERS, "adapters"); } function reporters() external view returns (address[]) { return _getArray(N_REPORTERS, "reporters"); } function expectedAdaptersHash() external view returns (bytes32) { return bytes32(uintStorage[EXPECTED_ADAPTERS_HASH]); } function setExpectedAdaptersHash(address[] adapters_) external onlyOwner { uintStorage[EXPECTED_ADAPTERS_HASH] = uint256(keccak256(abi.encodePacked(adapters_))); } function expectedThreshold() external view returns (uint256) { return uintStorage[EXPECTED_THRESHOLD]; } function setExpectedThreshold(uint256 expectedThreshold_) external onlyOwner { uintStorage[EXPECTED_THRESHOLD] = expectedThreshold_; } function yaho() external view returns (address) { return addressStorage[YAHO]; } function setYaho(address yaho_) external onlyOwner { addressStorage[YAHO] = yaho_; } function yaru() external view returns (address) { return addressStorage[YARU]; } function setYaru(address yaru_) external onlyOwner { addressStorage[YARU] = yaru_; } function targetAddress() external view returns (address) { return addressStorage[TARGET_ADDRESS]; } function setTargetAddress(address targetAddress_) external onlyOwner { addressStorage[TARGET_ADDRESS] = targetAddress_; } function targetChainId() external view returns (uint256) { return uintStorage[TARGET_CHAIN_ID]; } function setTargetChainId(uint256 targetChainId_) external onlyOwner { uintStorage[TARGET_CHAIN_ID] = targetChainId_; } function threshold() external view returns (uint256) { return uintStorage[THRESHOLD]; } function _getArray(bytes32 keyLength, bytes32 key) internal view returns (address[]) { uint256 n = uintStorage[keyLength]; address[] memory values = new address[](n); for (uint256 i = 0; i < n; i++) values[i] = addressStorage[keccak256(abi.encodePacked(key, i))]; return values; } function _setArray(bytes32 keyLength, bytes32 key, address[] values) internal { uint256 n = uintStorage[keyLength]; for (uint256 i = 0; i < n; i++) delete addressStorage[keccak256(abi.encodePacked(key, i))]; uintStorage[keyLength] = values.length; for (uint256 j = 0; j < values.length; j++) addressStorage[keccak256(abi.encodePacked(key, j))] = values[j]; } }
pragma solidity 0.4.24; interface IUpgradeabilityOwnerStorage { function upgradeabilityOwner() external view returns (address); }
pragma solidity 0.4.24; /** * @title EternalStorage * @dev This contract holds all the necessary state variables to carry out the storage of any contract. */ contract EternalStorage { mapping(bytes32 => uint256) internal uintStorage; mapping(bytes32 => string) internal stringStorage; mapping(bytes32 => address) internal addressStorage; mapping(bytes32 => bytes) internal bytesStorage; mapping(bytes32 => bool) internal boolStorage; mapping(bytes32 => int256) internal intStorage; }
pragma solidity 0.4.24; import "../upgradeability/EternalStorage.sol"; contract Initializable is EternalStorage { bytes32 internal constant INITIALIZED = 0x0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba; // keccak256(abi.encodePacked("isInitialized")) function setInitialize() internal { boolStorage[INITIALIZED] = true; } function isInitialized() public view returns (bool) { return boolStorage[INITIALIZED]; } }
pragma solidity 0.4.24; import "./Initializable.sol"; contract InitializableBridge is Initializable { bytes32 internal constant DEPLOYED_AT_BLOCK = 0xb120ceec05576ad0c710bc6e85f1768535e27554458f05dcbb5c65b8c7a749b0; // keccak256(abi.encodePacked("deployedAtBlock")) function deployedAtBlock() external view returns (uint256) { return uintStorage[DEPLOYED_AT_BLOCK]; } }
pragma solidity 0.4.24; import "../upgradeability/EternalStorage.sol"; import "../interfaces/IUpgradeabilityOwnerStorage.sol"; /** * @title Ownable * @dev This contract has an owner address providing basic authorization control */ contract Ownable is EternalStorage { bytes4 internal constant UPGRADEABILITY_OWNER = 0x6fde8202; // upgradeabilityOwner() /** * @dev Event to show ownership has been transferred * @param previousOwner representing the address of the previous owner * @param newOwner representing the address of the new owner */ event OwnershipTransferred(address previousOwner, address newOwner); /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner()); /* solcov ignore next */ _; } /** * @dev Throws if called by any account other than contract itself or owner. */ modifier onlyRelevantSender() { // proxy owner if used through proxy, address(0) otherwise require( !address(this).call(abi.encodeWithSelector(UPGRADEABILITY_OWNER)) || // covers usage without calling through storage proxy msg.sender == IUpgradeabilityOwnerStorage(this).upgradeabilityOwner() || // covers usage through regular proxy calls msg.sender == address(this) // covers calls through upgradeAndCall proxy method ); /* solcov ignore next */ _; } bytes32 internal constant OWNER = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0; // keccak256(abi.encodePacked("owner")) /** * @dev Tells the address of the owner * @return the address of the owner */ function owner() public view returns (address) { return addressStorage[OWNER]; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner the address to transfer ownership to. */ function transferOwnership(address newOwner) external onlyOwner { _setOwner(newOwner); } /** * @dev Sets a new owner address */ function _setOwner(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(owner(), newOwner); addressStorage[OWNER] = newOwner; } }
pragma solidity ^0.4.24; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { // assert(_b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return _a / _b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } }
{ "optimizer": { "enabled": true, "runs": 100 }, "evmVersion": "byzantium", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"constant":false,"inputs":[{"name":"expectedThreshold_","type":"uint256"}],"name":"setExpectedThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"yaho_","type":"address"}],"name":"setYaho","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"targetChainId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"reporters","type":"address[]"},{"name":"adapters","type":"address[]"},{"name":"threshold","type":"uint256"}],"name":"setReportersAdaptersAndThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"expectedThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"threshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"targetAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adapters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"yaru","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deployedAtBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"targetChainId_","type":"uint256"}],"name":"setTargetChainId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"yaru_","type":"address"}],"name":"setYaru","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"adapters_","type":"address[]"}],"name":"setExpectedAdaptersHash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yaho","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reporters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"expectedAdaptersHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"targetAddress_","type":"address"}],"name":"setTargetAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Deployed Bytecode
0x6080604052600436106101035763ffffffff60e060020a6000350416630b4a8bbb81146101085780630c0546ca14610122578063146ffb26146101435780631945c31f1461016a5780632690ff8b14610199578063392e53cd146101ae57806342cde4e8146101d75780635210eb56146101ec5780636b6e93d51461021d578063789b11d7146102825780638da5cb5b146102975780639a454b99146102ac578063c4d66de8146102c1578063dbe64a15146102e2578063dfa3e78f146102fa578063e155e6471461031b578063ee4937ba1461033b578063f144d48614610350578063f238ca2614610365578063f2fde38b1461037a578063fd8b23701461039b575b600080fd5b34801561011457600080fd5b506101206004356103bc565b005b34801561012e57600080fd5b50610120600160a060020a0360043516610425565b34801561014f57600080fd5b506101586104ab565b60408051918252519081900360200190f35b34801561017657600080fd5b5061012060246004803582810192908201359181359182019101356044356104f9565b3480156101a557600080fd5b5061015861065c565b3480156101ba57600080fd5b506101c36106aa565b604080519115158252519081900360200190f35b3480156101e357600080fd5b506101586106fb565b3480156101f857600080fd5b50610201610749565b60408051600160a060020a039092168252519081900360200190f35b34801561022957600080fd5b506102326107a0565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561026e578181015183820152602001610256565b505050509050019250505060405180910390f35b34801561028e57600080fd5b506102016107f1565b3480156102a357600080fd5b50610201610848565b3480156102b857600080fd5b5061015861089f565b3480156102cd57600080fd5b506101c3600160a060020a03600435166108ed565b3480156102ee57600080fd5b50610120600435610a73565b34801561030657600080fd5b50610120600160a060020a0360043516610adc565b34801561032757600080fd5b506101206004803560248101910135610b62565b34801561034757600080fd5b50610201610c4f565b34801561035c57600080fd5b50610232610ca6565b34801561037157600080fd5b50610158610cf2565b34801561038657600080fd5b50610120600160a060020a0360043516610d40565b3480156103a757600080fd5b50610120600160a060020a0360043516610d68565b6103c4610848565b600160a060020a031633146103d857600080fd5b7f8d22a2c372a80e72edabc4af18641f1c8144f8c3c74dce591bace2af2a167b8860009081526020527fcafa7e41014ddabd84add1a71d8e09bb89a48a4c5a138bd26d9755a66a2f99f555565b61042d610848565b600160a060020a0316331461044157600080fd5b7fb947d41ce6141eb4dc972fcad3b49fe0eb8d5f59730728c86b8f6e1427912f0e60005260026020527f0dadc510f212f2a92515c853e3683a83ce49ff155625dd5456929348b51dec068054600160a060020a031916600160a060020a0392909216919091179055565b7fbd2b577e24554caf96874c1f333079c108fe5afbd441f36a76920df41d10820c60009081526020527fe504c555886dd0dd62c7df3d04fe466666eaa051060b2567353319bed2d7ca5c5490565b610501610848565b600160a060020a0316331461051557600080fd5b6105907f7759f17e5239c7f5c713a5c2ca4f103cbe6896de01dabfb0d08276642d579e336001027f7265706f7274657273000000000000000000000000000000000000000000000087878080602002602001604051908101604052809392919081815260200183836020028082843750610dee945050505050565b61060b7fdcf7815b28c450099ee39fe328212215e261dd8ce26acdea76caf742d778991e6001027f616461707465727300000000000000000000000000000000000000000000000085858080602002602001604051908101604052809392919081815260200183836020028082843750610dee945050505050565b7fd46c2b20c7303c2e50535d224276492e8a1eda2a3d7398e0bea254640c1154e760009081526020527f31926f5037b9212811db282c90f46da69755c6ca200913531b96083e9c1bc42b5550505050565b7f8d22a2c372a80e72edabc4af18641f1c8144f8c3c74dce591bace2af2a167b8860009081526020527fcafa7e41014ddabd84add1a71d8e09bb89a48a4c5a138bd26d9755a66a2f99f55490565b7f0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba60005260046020527f078d888f9b66f3f8bfa10909e31f1e16240db73449f0500afdbbe3a70da457cc5460ff1690565b7fd46c2b20c7303c2e50535d224276492e8a1eda2a3d7398e0bea254640c1154e760009081526020527f31926f5037b9212811db282c90f46da69755c6ca200913531b96083e9c1bc42b5490565b7f2f1696ba9bd43014bc580768c9270c32ad765cbf97d2a2ba5e81ab9f1ee9056160005260026020527f0f0d504bd19845c69f8d799010412045606611d637d1764172e2e3257b54526b54600160a060020a031690565b60606107ec7fdcf7815b28c450099ee39fe328212215e261dd8ce26acdea76caf742d778991e7f6164617074657273000000000000000000000000000000000000000000000000610faa565b905090565b7f524607f5322f856f1415d60956f8220a13a3abe3281979fdb843027035724c7660005260026020527f71ae00b468404f7b1185c0b13cbb80b40213288bb12eef462014ce80f3720b9754600160a060020a031690565b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060005260026020527fb7802e97e87ef2842a6cce7da7ffaeaedaa2f61a6a7870b23d9d01fc9b73712e54600160a060020a031690565b7fb120ceec05576ad0c710bc6e85f1768535e27554458f05dcbb5c65b8c7a749b060009081526020527fe66bef0282a446f9848e2903380099bb6e431483ee78778868f33b4a154c818b5490565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fde8202000000000000000000000000000000000000000000000000000000001781529151815160009330939291829190808383895b8381101561096e578181015183820152602001610956565b50505050905090810190601f16801561099b5780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af19150501580610a2d575030600160a060020a0316636fde82026040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156109f557600080fd5b505af1158015610a09573d6000803e3d6000fd5b505050506040513d6020811015610a1f57600080fd5b5051600160a060020a031633145b80610a3757503330145b1515610a4257600080fd5b610a4a6106aa565b15610a5457600080fd5b610a5d826110cd565b610a65611197565b610a6d6106aa565b92915050565b610a7b610848565b600160a060020a03163314610a8f57600080fd5b7fbd2b577e24554caf96874c1f333079c108fe5afbd441f36a76920df41d10820c60009081526020527fe504c555886dd0dd62c7df3d04fe466666eaa051060b2567353319bed2d7ca5c55565b610ae4610848565b600160a060020a03163314610af857600080fd5b7f524607f5322f856f1415d60956f8220a13a3abe3281979fdb843027035724c7660005260026020527f71ae00b468404f7b1185c0b13cbb80b40213288bb12eef462014ce80f3720b978054600160a060020a031916600160a060020a0392909216919091179055565b610b6a610848565b600160a060020a03163314610b7e57600080fd5b8181604051602001808383602002808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b60208310610bd75780518252601f199092019160209182019101610bb8565b51815160209384036101000a60001901801990921691161790526040519190930181900390207f21aa67cae9293b939ada82eb9133293e592da66aa847a5596523bd6d2bf2529b6000908152909252507f804a4d5bac981629ca8de14c2a7f7d91bcaba03d4cb4f521b42784ab471b37b85550505050565b7fb947d41ce6141eb4dc972fcad3b49fe0eb8d5f59730728c86b8f6e1427912f0e60005260026020527f0dadc510f212f2a92515c853e3683a83ce49ff155625dd5456929348b51dec0654600160a060020a031690565b60606107ec7f7759f17e5239c7f5c713a5c2ca4f103cbe6896de01dabfb0d08276642d579e337f7265706f72746572730000000000000000000000000000000000000000000000610faa565b7f21aa67cae9293b939ada82eb9133293e592da66aa847a5596523bd6d2bf2529b60009081526020527f804a4d5bac981629ca8de14c2a7f7d91bcaba03d4cb4f521b42784ab471b37b85490565b610d48610848565b600160a060020a03163314610d5c57600080fd5b610d65816110cd565b50565b610d70610848565b600160a060020a03163314610d8457600080fd5b7f2f1696ba9bd43014bc580768c9270c32ad765cbf97d2a2ba5e81ab9f1ee9056160005260026020527f0f0d504bd19845c69f8d799010412045606611d637d1764172e2e3257b54526b8054600160a060020a031916600160a060020a0392909216919091179055565b60008381526020819052604081205490805b82821015610eb357604080516020808201889052818301859052825180830384018152606090920192839052815160029360009392909182918401908083835b60208310610e5f5780518252601f199092019160209182019101610e40565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000208054600160a060020a031916905550505060019190910190610e00565b5082516000868152602081905260408120919091555b8351811015610fa2578381815181101515610ee057fe5b60209081029091018101516040805180840189905280820185905281518082038301815260609091019182905280519293600293600093918291908401908083835b60208310610f415780518252601f199092019160209182019101610f22565b51815160209384036101000a600019018019909216911617905260408051929094018290039091208652850195909552929092016000208054600160a060020a031916600160a060020a039590951694909417909355505050600101610ec9565b505050505050565b60008281526020818152604080832054815181815281840281019093019091526060929091839190838015610fe9578160200160208202803883390190505b509150600090505b828110156110c457604080516020808201889052818301849052825180830384018152606090920192839052815160029360009392909182918401908083835b602083106110505780518252601f199092019160209182019101611031565b51815160209384036101000a60001901801990921691161790526040805192909401829003909120865285019590955292909201600020548551600160a060020a03909116935085925084915081106110a557fe5b600160a060020a03909216602092830290910190910152600101610ff1565b50949350505050565b600160a060020a03811615156110e257600080fd5b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e061110b610848565b60408051600160a060020a03928316815291841660208301528051918290030190a17f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060005260026020527fb7802e97e87ef2842a6cce7da7ffaeaedaa2f61a6a7870b23d9d01fc9b73712e8054600160a060020a031916600160a060020a0392909216919091179055565b7f0a6f646cd611241d8073675e00d1a1ff700fbf1b53fcf473de56d1e6e4b714ba60005260046020527f078d888f9b66f3f8bfa10909e31f1e16240db73449f0500afdbbe3a70da457cc805460ff191660011790555600a165627a7a7230582033d7b03bf05bc77fc261d54a616ecc84407245de6a40eba6f014604553b5d3310029
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.