Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
TestVRF
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 10 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; import {GelatoVRFConsumerBase} from "contracts/Integrations/Gelato/VRF/GelatoVRFConsumerBase.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; struct RandomnessRequest { bool requestSent; bool fulfilled; uint256 pendingRequestId; uint256 latestRandomness; uint256 latestRequestId; } contract TestVRF is GelatoVRFConsumerBase, Ownable { RandomnessRequest public randomnessRequest; address private immutable _operatorAddr; constructor(address operator) Ownable(msg.sender) { _operatorAddr = operator; } function _fulfillRandomness( uint256 randomness, uint256 requestId, bytes memory ) internal override { require(randomnessRequest.pendingRequestId == requestId, "requestId not valid"); randomnessRequest.latestRandomness = randomness; randomnessRequest.latestRequestId = requestId; } function _operator() internal view override returns (address) { return _operatorAddr; } // Simulate bool testEnded; function testSync() public onlyOwner { if (!randomnessRequest.requestSent) { require(!randomnessRequest.requestSent, "Request already sent"); randomnessRequest.pendingRequestId = _requestRandomness(abi.encode(0)); testEnded = true; } else if (testEnded) { clearRequest(); testEnded = false; } } bool testActive = true; function testSetActive(bool active) public onlyOwner { testActive = active; } function checkExecuteGiveaway() public view returns (bool) { return ((testActive && randomnessRequest.fulfilled) || !testActive); } uint256 public checkReturn; function testExecute(uint256 lenght) public onlyOwner { checkReturn = 667; require (checkExecuteGiveaway(), "Can't execute giveaway"); uint256 randomIndex = 669; if (testActive && randomnessRequest.fulfilled) { randomIndex = getRandomIndex(lenght); testEnded = false; clearRequest(); } if (randomnessRequest.fulfilled) return; else if (!testEnded) checkReturn = randomIndex; else checkReturn = 0; } function getRandomIndex( uint256 lenght ) public view returns (uint256 index) { uint256 res = (uint256(keccak256(abi.encodePacked(randomnessRequest.latestRandomness))) % lenght); return (res); } function clearRequest() private { randomnessRequest.requestSent = false; randomnessRequest.fulfilled = false; randomnessRequest.pendingRequestId = 0; randomnessRequest.latestRandomness = 0; randomnessRequest.latestRequestId = 0; } function getRandomnessRequest() public view returns (RandomnessRequest memory) { return randomnessRequest; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IGelatoVRFConsumer} from "./IGelatoVRFConsumer.sol"; /// @title GelatoVRFConsumerBase /// @dev This contract can be inherit by upgradeable smart contracts as well. /// @dev This contract handles domain separation between consecutive randomness requests /// The contract has to be implemented by contracts willing to use the gelato VRF system. /// This base contract enhances the GelatoVRFConsumer by introducing request IDs and /// ensuring unique random values. /// for different request IDs by hashing them with the random number provided by drand. /// For security considerations, refer to the Gelato documentation. abstract contract GelatoVRFConsumerBase is IGelatoVRFConsumer { uint256 private constant _PERIOD = 3; uint256 private constant _GENESIS = 1692803367; bool[] public requestPending; mapping(uint256 => bytes32) public requestedHash; /// @notice Returns the address of the dedicated msg.sender. /// @dev The operator can be found on the Gelato dashboard after a VRF is deployed. /// @return Address of the operator. function _operator() internal view virtual returns (address); /// @notice User logic to handle the random value received. /// @param randomness The random number generated by Gelato VRF. /// @param requestId The ID for the randomness request. /// @param extraData Additional data from the randomness request. function _fulfillRandomness( uint256 randomness, uint256 requestId, bytes memory extraData ) internal virtual; /// @notice Requests randomness from the Gelato VRF. /// @dev The extraData parameter allows for additional data to be passed to /// the VRF, which is then forwarded to the callback. This is useful for /// request tracking purposes if requestId is not enough. /// @param extraData Additional data for the randomness request. /// @return requestId The ID for the randomness request. function _requestRandomness( bytes memory extraData ) internal returns (uint256 requestId) { requestId = uint256(requestPending.length); requestPending.push(); requestPending[requestId] = true; bytes memory data = abi.encode(requestId, extraData); uint256 round = _round(); bytes memory dataWithRound = abi.encode(round, data); bytes32 requestHash = keccak256(dataWithRound); requestedHash[requestId] = requestHash; emit RequestedRandomness(round, data); } /// @notice Callback function used by Gelato VRF to return the random number. /// The randomness is derived by hashing the provided randomness with the request ID. /// @param randomness The random number generated by Gelato VRF. /// @param dataWithRound Additional data provided by Gelato VRF containing request details. function fulfillRandomness( uint256 randomness, bytes calldata dataWithRound ) external { require(msg.sender == _operator(), "only operator"); (, bytes memory data) = abi.decode(dataWithRound, (uint256, bytes)); (uint256 requestId, bytes memory extraData) = abi.decode( data, (uint256, bytes) ); bytes32 requestHash = keccak256(dataWithRound); bool isValidRequestHash = requestHash == requestedHash[requestId]; require(requestPending[requestId], "request fulfilled or missing"); if (isValidRequestHash) { randomness = uint( keccak256( abi.encode( randomness, address(this), block.chainid, requestId ) ) ); _fulfillRandomness(randomness, requestId, extraData); requestPending[requestId] = false; delete requestedHash[requestId]; } delete requestedHash[requestId]; } /// @notice Computes and returns the round number of drand to request randomness from. function _round() private view returns (uint256 round) { // solhint-disable-next-line not-rely-on-time uint256 elapsedFromGenesis = block.timestamp - _GENESIS; uint256 currentRound = (elapsedFromGenesis / _PERIOD) + 1; round = block.chainid == 1 ? currentRound + 4 : currentRound + 1; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @title IGelatoVRFConsumer /// @dev Interface for consuming random number provided by Drand. /// @notice This interface allows contracts to receive a random number provided by Gelato VRF. interface IGelatoVRFConsumer { /// @notice Event emitted when a randomness request is made. /// @param data The round of randomness to request. /// @param data Additional data associated with the request. event RequestedRandomness(uint256 round, bytes data); /// @notice Callback function used by Gelato to return the random number. /// @dev The random number is fetched from one among many drand endpoints /// and passed back to this function like in a Gelato Web3 Function. /// @param randomness The random number generated by drand. /// @param data Additional data provided by Gelato VRF or the user, typically unused. function fulfillRandomness( uint256 randomness, bytes calldata data ) external; }
{ "evmVersion": "paris", "optimizer": { "enabled": true, "runs": 10 }, "metadata": { "bytecodeHash": "none" }, "viaIR": true, "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":"operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"RequestedRandomness","type":"event"},{"inputs":[],"name":"checkExecuteGiveaway","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkReturn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"randomness","type":"uint256"},{"internalType":"bytes","name":"dataWithRound","type":"bytes"}],"name":"fulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lenght","type":"uint256"}],"name":"getRandomIndex","outputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRandomnessRequest","outputs":[{"components":[{"internalType":"bool","name":"requestSent","type":"bool"},{"internalType":"bool","name":"fulfilled","type":"bool"},{"internalType":"uint256","name":"pendingRequestId","type":"uint256"},{"internalType":"uint256","name":"latestRandomness","type":"uint256"},{"internalType":"uint256","name":"latestRequestId","type":"uint256"}],"internalType":"struct RandomnessRequest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomnessRequest","outputs":[{"internalType":"bool","name":"requestSent","type":"bool"},{"internalType":"bool","name":"fulfilled","type":"bool"},{"internalType":"uint256","name":"pendingRequestId","type":"uint256"},{"internalType":"uint256","name":"latestRandomness","type":"uint256"},{"internalType":"uint256","name":"latestRequestId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestedHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lenght","type":"uint256"}],"name":"testExecute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"testSetActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0346100d657601f610c5c38819003918201601f19168301916001600160401b038311848410176100db578084926020946040528339810103126100d657516001600160a01b039081811681036100d65733156100bd5760028054336001600160a01b03198216811790925560405193167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a361010061ff00196007541617600755608052610b6a90816100f282396080518161025b0152f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630922c83f146108335780635f061e031461080c578063715018a6146107c157806375ce7fff146107815780637a42d1c5146106e55780637c7c5ba6146104ec5780638da5cb5b146104c3578063a48debd11461049d578063b3f6b99a1461020c578063c4f8f27b146101e4578063d9c3d3c9146101c5578063e02ae8ce1461017d578063ed83a50a1461013b5763f2fde38b146100ba57600080fd5b34610137576020366003190112610137576001600160a01b03823581811693919290849003610133576100eb61088b565b831561011d575050600280546001600160a01b03198116841790915516600080516020610b3e8339815191528380a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8480fd5b8280fd5b50503461017957602036600319011261017957358015158091036101795761016161088b565b61ff006007549160081b169061ff0019161760075580f35b5080fd5b503461013757826003193601126101375760a092506003549154600554906006549260ff8151958181161515875260081c161515602086015284015260608301526080820152f35b8382346101795781600319360112610179576020906008549051908152f35b5090346101375760203660031901126101375760209282913581526001845220549051908152f35b508290346101795780600319360112610179576001600160401b039260248035918583116101335736602384011215610133578281013592868411610499578381018381019036821161045f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361046757828791031261046357604482013588811161045f5782018160438201121561045f5790816044866102bd9401359101610941565b938451850160209887878b840193031261045b57898701519688810151918211610457570181603f8201121561045b5789810151916102fb83610926565b906103088a519283610903565b838252898484010111610457579161032a91898c61033397969501910161097d565b84369201610941565b86815191012083865260018752848620541460ff61035085610858565b90549060031b1c161561041757610372575b5050829360019184525281205580f35b8351868101908235825230868201524660608201528460808201526080815261039a816108b7565b51902091838254036103df575050936001918495600555806006556103be81610858565b60ff82549160031b1b19169055808552828252848481205591819550610362565b845162461bcd60e51b8152918201879052601390820152721c995c5d595cdd1259081b9bdd081d985b1a59606a1b6044820152606490fd5b50601c6064928786519362461bcd60e51b85528401528201527b726571756573742066756c66696c6c6564206f72206d697373696e6760201b6044820152fd5b8980fd5b8880fd5b8780fd5b8680fd5b865162461bcd60e51b8152602081860152600d818701526c37b7363c9037b832b930ba37b960991b6044820152606490fd5b8580fd5b8382346101795781600319360112610179576020906104ba6109d3565b90519015158152f35b83823461017957816003193601126101795760025490516001600160a01b039091168152602090f35b503461013757826003193601126101375761050561088b565b60035460ff166106c15760ff60035416610687578051918360208401526020835261052f836108e8565b835491600160401b8310156106745761058090600194858501875561055385610858565b505061055e85610858565b81549060031b9060ff89831b921b1916179055815192839186602084016109a0565b0390610594601f1992838101855284610903565b6364e621261942014281116106285760039004868101908181116106615746880361063b5760050180911161062857600080516020610b1e83398151915293929161061591925b81516105fd6020820192826105f18989876109a0565b03908101835282610903565b519020878a5288602052818a205551928392836109a0565b0390a15560ff1960075416176007555b80f35b634e487b7160e01b885260118552602488fd5b60020180911161062857600080516020610b1e83398151915293929161061591926105db565b634e487b7160e01b895260118652602489fd5b634e487b7160e01b855260418252602485fd5b906020606492519162461bcd60e51b8352820152601460248201527314995c5d595cdd08185b1c9958591e481cd95b9d60621b6044820152fd5b505060ff600754166106d05780f35b6106d8610b01565b60ff196007541660075580f35b503461013757826003193601126101375760a09260808251610706816108b7565b82815282602082015282848201528260608201520152805190610728826108b7565b6003549060ff821615159384845260ff602085019360081c161515835254818401908152600554926060850193845260806006549501948552825195865251151560208601525190840152516060830152516080820152f35b50903461013757602036600319011261013757359180548310156107be575060ff6107ad602093610858565b92905490519260031b1c1615158152f35b80fd5b83346107be57806003193601126107be576107da61088b565b600280546001600160a01b0319811690915581906001600160a01b0316600080516020610b3e8339815191528280a380f35b5082346107be5760203660031901126107be575061082c60209235610ac4565b9051908152f35b505034610179576020366003190112610179576106259061085261088b565b35610a03565b90600080548310156108775760208180601f9352208360051c01921690565b634e487b7160e01b81526032600452602490fd5b6002546001600160a01b0316330361089f57565b60405163118cdaa760e01b8152336004820152602490fd5b60a081019081106001600160401b038211176108d257604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176108d257604052565b601f909101601f19168101906001600160401b038211908210176108d257604052565b6001600160401b0381116108d257601f01601f191660200190565b92919261094d82610926565b9161095b6040519384610903565b829481845281830111610978578281602093846000960137010152565b600080fd5b60005b8381106109905750506000910152565b8181015183820152602001610980565b90916060928252604060208301526109c7815180928160408601526020868601910161097d565b601f01601f1916010190565b60ff60075460081c1680806109f3575b81156109ed575090565b90501590565b60035460081c60ff1691506109e3565b600861029b8155610a126109d3565b15610a865760075461029d9281831c60ff1680610a78575b610a56575b5050600354811c60ff1615610a42575050565b60075460ff16610a4f5755565b6000915055565b610a61919350610ac4565b9160ff1916600755610a71610b01565b3880610a2f565b5060ff600354841c16610a2a565b60405162461bcd60e51b815260206004820152601660248201527543616e2774206578656375746520676976656177617960501b6044820152606490fd5b6005546040516020810191825260208152610ade816108e8565b5190208115610aeb570690565b634e487b7160e01b600052601260045260246000fd5b61ffff196003541660035560006004556000600555600060065556fed91fc3685b930310b008ec37d2334870cab88a023ed8cc628a2e2ccd4e55d2028be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a164736f6c6343000814000a0000000000000000000000007fece6ab0d1473b7e6abe52a3b155269c0f8e4f9
Deployed Bytecode
0x60406080815260048036101561001457600080fd5b600091823560e01c80630922c83f146108335780635f061e031461080c578063715018a6146107c157806375ce7fff146107815780637a42d1c5146106e55780637c7c5ba6146104ec5780638da5cb5b146104c3578063a48debd11461049d578063b3f6b99a1461020c578063c4f8f27b146101e4578063d9c3d3c9146101c5578063e02ae8ce1461017d578063ed83a50a1461013b5763f2fde38b146100ba57600080fd5b34610137576020366003190112610137576001600160a01b03823581811693919290849003610133576100eb61088b565b831561011d575050600280546001600160a01b03198116841790915516600080516020610b3e8339815191528380a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8480fd5b8280fd5b50503461017957602036600319011261017957358015158091036101795761016161088b565b61ff006007549160081b169061ff0019161760075580f35b5080fd5b503461013757826003193601126101375760a092506003549154600554906006549260ff8151958181161515875260081c161515602086015284015260608301526080820152f35b8382346101795781600319360112610179576020906008549051908152f35b5090346101375760203660031901126101375760209282913581526001845220549051908152f35b508290346101795780600319360112610179576001600160401b039260248035918583116101335736602384011215610133578281013592868411610499578381018381019036821161045f577f0000000000000000000000007fece6ab0d1473b7e6abe52a3b155269c0f8e4f96001600160a01b0316330361046757828791031261046357604482013588811161045f5782018160438201121561045f5790816044866102bd9401359101610941565b938451850160209887878b840193031261045b57898701519688810151918211610457570181603f8201121561045b5789810151916102fb83610926565b906103088a519283610903565b838252898484010111610457579161032a91898c61033397969501910161097d565b84369201610941565b86815191012083865260018752848620541460ff61035085610858565b90549060031b1c161561041757610372575b5050829360019184525281205580f35b8351868101908235825230868201524660608201528460808201526080815261039a816108b7565b51902091838254036103df575050936001918495600555806006556103be81610858565b60ff82549160031b1b19169055808552828252848481205591819550610362565b845162461bcd60e51b8152918201879052601390820152721c995c5d595cdd1259081b9bdd081d985b1a59606a1b6044820152606490fd5b50601c6064928786519362461bcd60e51b85528401528201527b726571756573742066756c66696c6c6564206f72206d697373696e6760201b6044820152fd5b8980fd5b8880fd5b8780fd5b8680fd5b865162461bcd60e51b8152602081860152600d818701526c37b7363c9037b832b930ba37b960991b6044820152606490fd5b8580fd5b8382346101795781600319360112610179576020906104ba6109d3565b90519015158152f35b83823461017957816003193601126101795760025490516001600160a01b039091168152602090f35b503461013757826003193601126101375761050561088b565b60035460ff166106c15760ff60035416610687578051918360208401526020835261052f836108e8565b835491600160401b8310156106745761058090600194858501875561055385610858565b505061055e85610858565b81549060031b9060ff89831b921b1916179055815192839186602084016109a0565b0390610594601f1992838101855284610903565b6364e621261942014281116106285760039004868101908181116106615746880361063b5760050180911161062857600080516020610b1e83398151915293929161061591925b81516105fd6020820192826105f18989876109a0565b03908101835282610903565b519020878a5288602052818a205551928392836109a0565b0390a15560ff1960075416176007555b80f35b634e487b7160e01b885260118552602488fd5b60020180911161062857600080516020610b1e83398151915293929161061591926105db565b634e487b7160e01b895260118652602489fd5b634e487b7160e01b855260418252602485fd5b906020606492519162461bcd60e51b8352820152601460248201527314995c5d595cdd08185b1c9958591e481cd95b9d60621b6044820152fd5b505060ff600754166106d05780f35b6106d8610b01565b60ff196007541660075580f35b503461013757826003193601126101375760a09260808251610706816108b7565b82815282602082015282848201528260608201520152805190610728826108b7565b6003549060ff821615159384845260ff602085019360081c161515835254818401908152600554926060850193845260806006549501948552825195865251151560208601525190840152516060830152516080820152f35b50903461013757602036600319011261013757359180548310156107be575060ff6107ad602093610858565b92905490519260031b1c1615158152f35b80fd5b83346107be57806003193601126107be576107da61088b565b600280546001600160a01b0319811690915581906001600160a01b0316600080516020610b3e8339815191528280a380f35b5082346107be5760203660031901126107be575061082c60209235610ac4565b9051908152f35b505034610179576020366003190112610179576106259061085261088b565b35610a03565b90600080548310156108775760208180601f9352208360051c01921690565b634e487b7160e01b81526032600452602490fd5b6002546001600160a01b0316330361089f57565b60405163118cdaa760e01b8152336004820152602490fd5b60a081019081106001600160401b038211176108d257604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176108d257604052565b601f909101601f19168101906001600160401b038211908210176108d257604052565b6001600160401b0381116108d257601f01601f191660200190565b92919261094d82610926565b9161095b6040519384610903565b829481845281830111610978578281602093846000960137010152565b600080fd5b60005b8381106109905750506000910152565b8181015183820152602001610980565b90916060928252604060208301526109c7815180928160408601526020868601910161097d565b601f01601f1916010190565b60ff60075460081c1680806109f3575b81156109ed575090565b90501590565b60035460081c60ff1691506109e3565b600861029b8155610a126109d3565b15610a865760075461029d9281831c60ff1680610a78575b610a56575b5050600354811c60ff1615610a42575050565b60075460ff16610a4f5755565b6000915055565b610a61919350610ac4565b9160ff1916600755610a71610b01565b3880610a2f565b5060ff600354841c16610a2a565b60405162461bcd60e51b815260206004820152601660248201527543616e2774206578656375746520676976656177617960501b6044820152606490fd5b6005546040516020810191825260208152610ade816108e8565b5190208115610aeb570690565b634e487b7160e01b600052601260045260246000fd5b61ffff196003541660035560006004556000600555600060065556fed91fc3685b930310b008ec37d2334870cab88a023ed8cc628a2e2ccd4e55d2028be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a164736f6c6343000814000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007fece6ab0d1473b7e6abe52a3b155269c0f8e4f9
-----Decoded View---------------
Arg [0] : operator (address): 0x7FECe6AB0d1473b7E6ABe52a3B155269C0F8e4F9
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007fece6ab0d1473b7e6abe52a3b155269c0f8e4f9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.