Overview
S Balance
0.1 S
S Value
-More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
408705 | 4 days ago | 0.1 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RandomnessOracle
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 50 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { IEntropyConsumer } from "./interfaces/IEntropyConsumer.sol"; import { IEntropy } from "./interfaces/IEntropy.sol"; interface IOracle { function requestRandomness(bytes32 userRandomNumber) external returns (uint64); } interface ISoniccoin { function collect(uint256 amount) external; function fulfillRandomness(uint64 sequenceNumber, bytes32 randomNumber) external; } contract RandomnessOracle is IOracle, IEntropyConsumer { address public immutable soniccoin; IEntropy public immutable entropy; address public owner; event RandomnessRequested(uint64 sequenceNumber); event RandomnessFulfilled(uint64 sequenceNumber, bytes32 randomNumber); constructor(address _soniccoin, address _entropy) { owner = msg.sender; soniccoin = _soniccoin; entropy = IEntropy(_entropy); } /** * @dev Requests randomness from Pyth's entropy, taking a user-provided seed. * @param userRandomNumber The user-provided random seed. * @return sequenceNumber The ID of the request (sequence number). */ function requestRandomness(bytes32 userRandomNumber) external override returns (uint64) { require(msg.sender == soniccoin, "RandomnessOracle: caller is not Soniccoin"); // Get the default provider and fee address entropyProvider = entropy.getDefaultProvider(); uint256 fee = entropy.getFee(entropyProvider); // Request the random number with a callback uint64 sequenceNumber = entropy.requestWithCallback{ value: fee }(entropyProvider, userRandomNumber); emit RandomnessRequested(sequenceNumber); return sequenceNumber; } /** * @dev Callback function that handles the response from Pyth Entropy. * This is called automatically by the entropy contract. * @param sequenceNumber The ID of the request. * @param provider The provider of the entropy (for multi-provider setups). * @param randomNumber The generated random number. */ function entropyCallback( uint64 sequenceNumber, address provider, bytes32 randomNumber ) internal override { // Ensure only the entropy contract can call this require(msg.sender == address(entropy), "Unauthorized entropy callback"); // Notify the Soniccoin contract of the randomness ISoniccoin(soniccoin).fulfillRandomness(sequenceNumber, randomNumber); emit RandomnessFulfilled(sequenceNumber, randomNumber); } /** * @dev Required by the IEntropyConsumer interface. * Returns the address of the entropy contract. */ function getEntropy() internal view override returns (address) { return address(entropy); } function setOwner(address _owner) external { require(msg.sender == owner, "RandomnessOracle: caller is not owner"); owner = _owner; } /** * @notice Collects the Ether. * @param amount The amount of Ether to collect */ function collectEntropyFeesMoney(uint256 amount) public { require(msg.sender == owner, "only owner can collect"); (bool sent,) = owner.call{value: amount}(""); require(sent, "failed to send Ether"); } // Directly receive Ether receive() external payable { } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./EntropyStructs.sol"; interface EntropyEvents { event Registered(EntropyStructs.ProviderInfo provider); event Requested(EntropyStructs.Request request); event RequestedWithCallback( address indexed provider, address indexed requestor, uint64 indexed sequenceNumber, bytes32 userRandomNumber, EntropyStructs.Request request ); event Revealed( EntropyStructs.Request request, bytes32 userRevelation, bytes32 providerRevelation, bytes32 blockHash, bytes32 randomNumber ); event RevealedWithCallback( EntropyStructs.Request request, bytes32 userRandomNumber, bytes32 providerRevelation, bytes32 randomNumber ); event ProviderFeeUpdated(address provider, uint128 oldFee, uint128 newFee); event ProviderUriUpdated(address provider, bytes oldUri, bytes newUri); event ProviderFeeManagerUpdated( address provider, address oldFeeManager, address newFeeManager ); event Withdrawal( address provider, address recipient, uint128 withdrawnAmount ); }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; contract EntropyStructs { struct ProviderInfo { uint128 feeInWei; uint128 accruedFeesInWei; // The commitment that the provider posted to the blockchain, and the sequence number // where they committed to this. This value is not advanced after the provider commits, // and instead is stored to help providers track where they are in the hash chain. bytes32 originalCommitment; uint64 originalCommitmentSequenceNumber; // Metadata for the current commitment. Providers may optionally use this field to help // manage rotations (i.e., to pick the sequence number from the correct hash chain). bytes commitmentMetadata; // Optional URI where clients can retrieve revelations for the provider. // Client SDKs can use this field to automatically determine how to retrieve random values for each provider. // TODO: specify the API that must be implemented at this URI bytes uri; // The first sequence number that is *not* included in the current commitment (i.e., an exclusive end index). // The contract maintains the invariant that sequenceNumber <= endSequenceNumber. // If sequenceNumber == endSequenceNumber, the provider must rotate their commitment to add additional random values. uint64 endSequenceNumber; // The sequence number that will be assigned to the next inbound user request. uint64 sequenceNumber; // The current commitment represents an index/value in the provider's hash chain. // These values are used to verify requests for future sequence numbers. Note that // currentCommitmentSequenceNumber < sequenceNumber. // // The currentCommitment advances forward through the provider's hash chain as values // are revealed on-chain. bytes32 currentCommitment; uint64 currentCommitmentSequenceNumber; // An address that is authorized to set / withdraw fees on behalf of this provider. address feeManager; } struct Request { // Storage slot 1 // address provider; uint64 sequenceNumber; // The number of hashes required to verify the provider revelation. uint32 numHashes; // Storage slot 2 // // The commitment is keccak256(userCommitment, providerCommitment). Storing the hash instead of both saves 20k gas by // eliminating 1 store. bytes32 commitment; // Storage slot 3 // // The number of the block where this request was created. // Note that we're using a uint64 such that we have an additional space for an address and other fields in // this storage slot. Although block.number returns a uint256, 64 bits should be plenty to index all of the // blocks ever generated. uint64 blockNumber; // The address that requested this random number. address requester; // If true, incorporate the blockhash of blockNumber into the generated random value. bool useBlockhash; // If true, the requester will be called back with the generated random value. bool isRequestWithCallback; // There are 2 remaining bytes of free space in this slot. } }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; import "./EntropyEvents.sol"; interface IEntropy is EntropyEvents { // Register msg.sender as a randomness provider. The arguments are the provider's configuration parameters // and initial commitment. Re-registering the same provider rotates the provider's commitment (and updates // the feeInWei). // // chainLength is the number of values in the hash chain *including* the commitment, that is, chainLength >= 1. function register( uint128 feeInWei, bytes32 commitment, bytes calldata commitmentMetadata, uint64 chainLength, bytes calldata uri ) external; // Withdraw a portion of the accumulated fees for the provider msg.sender. // Calling this function will transfer `amount` wei to the caller (provided that they have accrued a sufficient // balance of fees in the contract). function withdraw(uint128 amount) external; // Withdraw a portion of the accumulated fees for provider. The msg.sender must be the fee manager for this provider. // Calling this function will transfer `amount` wei to the caller (provided that they have accrued a sufficient // balance of fees in the contract). function withdrawAsFeeManager(address provider, uint128 amount) external; // As a user, request a random number from `provider`. Prior to calling this method, the user should // generate a random number x and keep it secret. The user should then compute hash(x) and pass that // as the userCommitment argument. (You may call the constructUserCommitment method to compute the hash.) // // This method returns a sequence number. The user should pass this sequence number to // their chosen provider (the exact method for doing so will depend on the provider) to retrieve the provider's // number. The user should then call fulfillRequest to construct the final random number. // // This method will revert unless the caller provides a sufficient fee (at least getFee(provider)) as msg.value. // Note that excess value is *not* refunded to the caller. function request( address provider, bytes32 userCommitment, bool useBlockHash ) external payable returns (uint64 assignedSequenceNumber); // Request a random number. The method expects the provider address and a secret random number // in the arguments. It returns a sequence number. // // The address calling this function should be a contract that inherits from the IEntropyConsumer interface. // The `entropyCallback` method on that interface will receive a callback with the generated random number. // // This method will revert unless the caller provides a sufficient fee (at least getFee(provider)) as msg.value. // Note that excess value is *not* refunded to the caller. function requestWithCallback( address provider, bytes32 userRandomNumber ) external payable returns (uint64 assignedSequenceNumber); // Fulfill a request for a random number. This method validates the provided userRandomness and provider's proof // against the corresponding commitments in the in-flight request. If both values are validated, this function returns // the corresponding random number. // // Note that this function can only be called once per in-flight request. Calling this function deletes the stored // request information (so that the contract doesn't use a linear amount of storage in the number of requests). // If you need to use the returned random number more than once, you are responsible for storing it. function reveal( address provider, uint64 sequenceNumber, bytes32 userRevelation, bytes32 providerRevelation ) external returns (bytes32 randomNumber); // Fulfill a request for a random number. This method validates the provided userRandomness // and provider's revelation against the corresponding commitment in the in-flight request. If both values are validated // and the requestor address is a contract address, this function calls the requester's entropyCallback method with the // sequence number, provider address and the random number as arguments. Else if the requestor is an EOA, it won't call it. // // Note that this function can only be called once per in-flight request. Calling this function deletes the stored // request information (so that the contract doesn't use a linear amount of storage in the number of requests). // If you need to use the returned random number more than once, you are responsible for storing it. // // Anyone can call this method to fulfill a request, but the callback will only be made to the original requester. function revealWithCallback( address provider, uint64 sequenceNumber, bytes32 userRandomNumber, bytes32 providerRevelation ) external; function getProviderInfo( address provider ) external view returns (EntropyStructs.ProviderInfo memory info); function getDefaultProvider() external view returns (address provider); function getRequest( address provider, uint64 sequenceNumber ) external view returns (EntropyStructs.Request memory req); function getFee(address provider) external view returns (uint128 feeAmount); function getAccruedPythFees() external view returns (uint128 accruedPythFeesInWei); function setProviderFee(uint128 newFeeInWei) external; function setProviderFeeAsFeeManager( address provider, uint128 newFeeInWei ) external; function setProviderUri(bytes calldata newUri) external; // Set manager as the fee manager for the provider msg.sender. // After calling this function, manager will be able to set the provider's fees and withdraw them. // Only one address can be the fee manager for a provider at a time -- calling this function again with a new value // will override the previous value. Call this function with the all-zero address to disable the fee manager role. function setFeeManager(address manager) external; function constructUserCommitment( bytes32 userRandomness ) external pure returns (bytes32 userCommitment); function combineRandomValues( bytes32 userRandomness, bytes32 providerRandomness, bytes32 blockHash ) external pure returns (bytes32 combinedRandomness); }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; abstract contract IEntropyConsumer { // This method is called by Entropy to provide the random number to the consumer. // It asserts that the msg.sender is the Entropy contract. It is not meant to be // override by the consumer. function _entropyCallback( uint64 sequence, address provider, bytes32 randomNumber ) external { address entropy = getEntropy(); require(entropy != address(0), "Entropy address not set"); require(msg.sender == entropy, "Only Entropy can call this function"); entropyCallback(sequence, provider, randomNumber); } // getEntropy returns Entropy contract address. The method is being used to check that the // callback is indeed from Entropy contract. The consumer is expected to implement this method. // Entropy address can be found here - https://docs.pyth.network/entropy/contract-addresses function getEntropy() internal view virtual returns (address); // This method is expected to be implemented by the consumer to handle the random number. // It will be called by _entropyCallback after _entropyCallback ensures that the call is // indeed from Entropy contract. function entropyCallback( uint64 sequence, address provider, bytes32 randomNumber ) internal virtual; }
{ "optimizer": { "enabled": true, "runs": 50 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_soniccoin","type":"address"},{"internalType":"address","name":"_entropy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"sequenceNumber","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"randomNumber","type":"bytes32"}],"name":"RandomnessFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"sequenceNumber","type":"uint64"}],"name":"RandomnessRequested","type":"event"},{"inputs":[{"internalType":"uint64","name":"sequence","type":"uint64"},{"internalType":"address","name":"provider","type":"address"},{"internalType":"bytes32","name":"randomNumber","type":"bytes32"}],"name":"_entropyCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"collectEntropyFeesMoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"entropy","outputs":[{"internalType":"contract IEntropy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"userRandomNumber","type":"bytes32"}],"name":"requestRandomness","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"soniccoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561000f575f80fd5b50604051610a00380380610a0083398101604081905261002e91610071565b5f80546001600160a01b031916331790556001600160a01b039182166080521660a0526100a2565b80516001600160a01b038116811461006c575f80fd5b919050565b5f8060408385031215610082575f80fd5b61008b83610056565b915061009960208401610056565b90509250929050565b60805160a05161090d6100f35f395f8181609f0152818161022c0152818161039e01528181610421015281816104e0015261068c01525f818161017b0152818161031c015261071e015261090d5ff3fe608060405260043610610062575f3560e01c806313af40351461006d57806347ce07cc1461008e57806352a5f1f8146100d75780635e3b709f146100f65780638d9ace031461012d5780638da5cb5b1461014c578063dc45a7f41461016a575f80fd5b3661006957005b5f80fd5b348015610078575f80fd5b5061008c6100873660046107dc565b61019d565b005b348015610099575f80fd5b506100c17f000000000000000000000000000000000000000000000000000000000000000081565b6040516100ce91906107fe565b60405180910390f35b3480156100e2575f80fd5b5061008c6100f1366004610826565b61022a565b348015610101575f80fd5b50610115610110366004610864565b610310565b6040516001600160401b0390911681526020016100ce565b348015610138575f80fd5b5061008c610147366004610864565b610594565b348015610157575f80fd5b505f546100c1906001600160a01b031681565b348015610175575f80fd5b506100c17f000000000000000000000000000000000000000000000000000000000000000081565b5f546001600160a01b031633146102095760405162461bcd60e51b815260206004820152602560248201527f52616e646f6d6e6573734f7261636c653a2063616c6c6572206973206e6f742060448201526437bbb732b960d91b60648201526084015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811661029b5760405162461bcd60e51b8152602060048201526017602482015276115b9d1c9bdc1e481859191c995cdcc81b9bdd081cd95d604a1b6044820152606401610200565b336001600160a01b038216146102ff5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c7920456e74726f70792063616e2063616c6c20746869732066756e637460448201526234b7b760e91b6064820152608401610200565b61030a848484610681565b50505050565b5f336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461039b5760405162461bcd60e51b815260206004820152602960248201527f52616e646f6d6e6573734f7261636c653a2063616c6c6572206973206e6f742060448201526829b7b734b1b1b7b4b760b91b6064820152608401610200565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166382ee990c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041c919061087b565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b88c9148836040518263ffffffff1660e01b815260040161046b91906107fe565b602060405180830381865afa158015610486573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104aa9190610896565b6040516319cb825f60e01b81526001600160a01b038481166004830152602482018790526001600160801b039290921692505f917f000000000000000000000000000000000000000000000000000000000000000016906319cb825f90849060440160206040518083038185885af1158015610528573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061054d91906108bc565b6040516001600160401b03821681529091507f21375f3d45f34ba59df13f786f613073e082f6c83c0eb2ef6eb83c89c22b8ec89060200160405180910390a1949350505050565b5f546001600160a01b031633146105e65760405162461bcd60e51b81526020600482015260166024820152751bdb9b1e481bdddb995c8818d85b8818dbdb1b1958dd60521b6044820152606401610200565b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f8114610630576040519150601f19603f3d011682016040523d82523d5f602084013e610635565b606091505b505090508061067d5760405162461bcd60e51b81526020600482015260146024820152733330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610200565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106f95760405162461bcd60e51b815260206004820152601d60248201527f556e617574686f72697a656420656e74726f70792063616c6c6261636b0000006044820152606401610200565b604051634131198960e11b81526001600160401b0384166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906382623312906044015f604051808303815f87803b158015610767575f80fd5b505af1158015610779573d5f803e3d5ffd5b5050604080516001600160401b0387168152602081018590527f7243e38e28145751690b8536ab18259ccd5180bad1ed5f3c639d1f9e50bf4d81935001905060405180910390a1505050565b6001600160a01b03811681146107d9575f80fd5b50565b5f602082840312156107ec575f80fd5b81356107f7816107c5565b9392505050565b6001600160a01b0391909116815260200190565b6001600160401b03811681146107d9575f80fd5b5f805f60608486031215610838575f80fd5b833561084381610812565b92506020840135610853816107c5565b929592945050506040919091013590565b5f60208284031215610874575f80fd5b5035919050565b5f6020828403121561088b575f80fd5b81516107f7816107c5565b5f602082840312156108a6575f80fd5b81516001600160801b03811681146107f7575f80fd5b5f602082840312156108cc575f80fd5b81516107f78161081256fea26469706673582212204c2b3d42c6c7078fa391ee6a226fd6f4b03c8eacf229f7e33ba9e84d75753bee64736f6c6343000818003300000000000000000000000099995a54fd82c16e1428690c0d6e3bed1e0d0cb900000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e320
Deployed Bytecode
0x608060405260043610610062575f3560e01c806313af40351461006d57806347ce07cc1461008e57806352a5f1f8146100d75780635e3b709f146100f65780638d9ace031461012d5780638da5cb5b1461014c578063dc45a7f41461016a575f80fd5b3661006957005b5f80fd5b348015610078575f80fd5b5061008c6100873660046107dc565b61019d565b005b348015610099575f80fd5b506100c17f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e32081565b6040516100ce91906107fe565b60405180910390f35b3480156100e2575f80fd5b5061008c6100f1366004610826565b61022a565b348015610101575f80fd5b50610115610110366004610864565b610310565b6040516001600160401b0390911681526020016100ce565b348015610138575f80fd5b5061008c610147366004610864565b610594565b348015610157575f80fd5b505f546100c1906001600160a01b031681565b348015610175575f80fd5b506100c17f00000000000000000000000099995a54fd82c16e1428690c0d6e3bed1e0d0cb981565b5f546001600160a01b031633146102095760405162461bcd60e51b815260206004820152602560248201527f52616e646f6d6e6573734f7261636c653a2063616c6c6572206973206e6f742060448201526437bbb732b960d91b60648201526084015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e3206001600160a01b03811661029b5760405162461bcd60e51b8152602060048201526017602482015276115b9d1c9bdc1e481859191c995cdcc81b9bdd081cd95d604a1b6044820152606401610200565b336001600160a01b038216146102ff5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c7920456e74726f70792063616e2063616c6c20746869732066756e637460448201526234b7b760e91b6064820152608401610200565b61030a848484610681565b50505050565b5f336001600160a01b037f00000000000000000000000099995a54fd82c16e1428690c0d6e3bed1e0d0cb9161461039b5760405162461bcd60e51b815260206004820152602960248201527f52616e646f6d6e6573734f7261636c653a2063616c6c6572206973206e6f742060448201526829b7b734b1b1b7b4b760b91b6064820152608401610200565b5f7f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e3206001600160a01b03166382ee990c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041c919061087b565b90505f7f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e3206001600160a01b031663b88c9148836040518263ffffffff1660e01b815260040161046b91906107fe565b602060405180830381865afa158015610486573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104aa9190610896565b6040516319cb825f60e01b81526001600160a01b038481166004830152602482018790526001600160801b039290921692505f917f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e32016906319cb825f90849060440160206040518083038185885af1158015610528573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061054d91906108bc565b6040516001600160401b03821681529091507f21375f3d45f34ba59df13f786f613073e082f6c83c0eb2ef6eb83c89c22b8ec89060200160405180910390a1949350505050565b5f546001600160a01b031633146105e65760405162461bcd60e51b81526020600482015260166024820152751bdb9b1e481bdddb995c8818d85b8818dbdb1b1958dd60521b6044820152606401610200565b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f8114610630576040519150601f19603f3d011682016040523d82523d5f602084013e610635565b606091505b505090508061067d5760405162461bcd60e51b81526020600482015260146024820152733330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610200565b5050565b336001600160a01b037f00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e32016146106f95760405162461bcd60e51b815260206004820152601d60248201527f556e617574686f72697a656420656e74726f70792063616c6c6261636b0000006044820152606401610200565b604051634131198960e11b81526001600160401b0384166004820152602481018290527f00000000000000000000000099995a54fd82c16e1428690c0d6e3bed1e0d0cb96001600160a01b0316906382623312906044015f604051808303815f87803b158015610767575f80fd5b505af1158015610779573d5f803e3d5ffd5b5050604080516001600160401b0387168152602081018590527f7243e38e28145751690b8536ab18259ccd5180bad1ed5f3c639d1f9e50bf4d81935001905060405180910390a1505050565b6001600160a01b03811681146107d9575f80fd5b50565b5f602082840312156107ec575f80fd5b81356107f7816107c5565b9392505050565b6001600160a01b0391909116815260200190565b6001600160401b03811681146107d9575f80fd5b5f805f60608486031215610838575f80fd5b833561084381610812565b92506020840135610853816107c5565b929592945050506040919091013590565b5f60208284031215610874575f80fd5b5035919050565b5f6020828403121561088b575f80fd5b81516107f7816107c5565b5f602082840312156108a6575f80fd5b81516001600160801b03811681146107f7575f80fd5b5f602082840312156108cc575f80fd5b81516107f78161081256fea26469706673582212204c2b3d42c6c7078fa391ee6a226fd6f4b03c8eacf229f7e33ba9e84d75753bee64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000099995a54fd82c16e1428690c0d6e3bed1e0d0cb900000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e320
-----Decoded View---------------
Arg [0] : _soniccoin (address): 0x99995a54FD82C16E1428690C0D6e3bEd1e0d0Cb9
Arg [1] : _entropy (address): 0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000099995a54fd82c16e1428690c0d6e3bed1e0d0cb9
Arg [1] : 00000000000000000000000036825bf3fbdf5a29e2d5148bfe7dcf7b5639e320
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ 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.