Source Code
Overview
S Balance
0 S
More Info
ContractCreator
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5309008 | 41 hrs ago | 0 S | ||||
5309008 | 41 hrs ago | 0 S | ||||
5309008 | 41 hrs ago | 0 S | ||||
5309008 | 41 hrs ago | 0 S | ||||
5309008 | 41 hrs ago | 0 S | ||||
5309008 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5309005 | 41 hrs ago | 0 S | ||||
5308809 | 41 hrs ago | 0 S | ||||
5308809 | 41 hrs ago | 0 S | ||||
5308805 | 41 hrs ago | 0 S | ||||
5308805 | 41 hrs ago | 0 S | ||||
5308805 | 41 hrs ago | 0 S | ||||
5308805 | 41 hrs ago | 0 S | ||||
5296560 | 42 hrs ago | 0 S |
Loading...
Loading
Contract Name:
SupraRouterContract
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; import {ReentrancyGuard} from "./ReentrancyGuard.sol"; import {IDepositContract} from "./IDepositContract.sol"; import {Ownable2Step} from "./Ownable2Step.sol"; import {ISupraRouterContract} from "./ISupraRouterContract.sol"; import {CheckContractAddress} from "./CheckContractAddress.sol"; /// @title VRF Router Contract /// @author Supra Developer /// @notice You can use this contract to interact with VRF Generator contract & Client contract /// @dev All function calls are currently implemented without side effects contract SupraRouterContract is ReentrancyGuard, Ownable2Step, ISupraRouterContract, CheckContractAddress { /// @dev nonce is an incremental counter which is associated with request uint256 internal _nonce = 0; /// @dev Generator contract address to forward random number request address public _supraGeneratorContract; /// @dev To put constraint on generator contract upgradability bool private _upgradable; ///@dev Deposit Contract address to check fund details of relevant user address public _depositContract; IDepositContract public depositContract; constructor() { _upgradable = true; } ///@notice This function is for updating the Deposit Contract Address ///@dev To update deposit contract address ///@param _contractAddress contract address of the deposit/new deposit contract function updateDepositContract(address _contractAddress) external onlyOwner { require( isContract(_contractAddress), "Deposit contract address cannot be EOA" ); require( _contractAddress != address(0), "Deposit contract address cannot be a zero address" ); _depositContract = _contractAddress; depositContract = IDepositContract(_contractAddress); } /// @notice This function is updating the generator contract address /// @dev To update the generator contract address /// @param _contractAddress contract address of new generator contract function updateGeneratorContract(address _contractAddress) external onlyOwner { require( isContract(_contractAddress), "Generator contract address cannot be EOA" ); require( _contractAddress != address(0), "Generator contract address cannot be a zero address" ); require(_upgradable, "Generator contract address cannot be updated"); _supraGeneratorContract = _contractAddress; } /// @notice By calling this function updation of generator contract address functionality would stop /// @dev It will freeze the upgradability of Generator contract address function freezeUpgradability() external onlyOwner { _upgradable = false; } /// @notice It will Generate the random number request to generator contract /// @dev It will forward the random number generation request by calling generator contracts function /// @param _functionSig A combination of a function and the types of parameters it takes, combined together as a string with no spaces /// @param _rngCount Number of random numbers requested /// @param _numConfirmations Number of Confirmations /// @return _nonce nonce is an incremental counter which is associated with request function generateRequest( string memory _functionSig, uint8 _rngCount, uint256 _numConfirmations, address _clientWalletAddress ) external override nonReentrant returns (uint256) { return generateRequest( _functionSig, _rngCount, _numConfirmations, 0, _clientWalletAddress ); } /// @notice It will Generate the random number request to generator contract with client's randomness added /// @dev It will forward the random number generation request by calling generator contracts function which takes seed value other than required parameter to add randomness /// @param _functionSig A combination of a function and the types of parameters it takes, combined together as a string with no spaces /// @param _rngCount Number of random numbers requested /// @param _numConfirmations Number of Confirmations /// @param _clientSeed Use of this is to add some extra randomness /// @return _nonce nonce is an incremental counter which is associated with request function generateRequest( string memory _functionSig, uint8 _rngCount, uint256 _numConfirmations, uint256 _clientSeed, address _clientWalletAddress ) public override returns (uint256) { //_functionSig should be in a format such that it should carry the parameter type altogether require( depositContract.isContractEligible( _clientWalletAddress, msg.sender ), "Contract not eligible to request" ); require( !depositContract.isMinimumBalanceReached(_clientWalletAddress), "Insufficient Funds: Minimum balance reached for request" ); bytes memory _functionSigbytes = bytes(_functionSig); require(_rngCount > 0, "Invalid rngCount"); require(_numConfirmations >= 0, "Invalid numConfirmations"); require(_functionSigbytes.length > 0, "Invalid functionSig"); _nonce++; if (_numConfirmations > 20) { _numConfirmations = 20; } uint256 nonce_ = _nonce; (bool _success, bytes memory _data) = _supraGeneratorContract.call( abi.encodeWithSignature( "rngRequest(uint256,string,uint8,address,uint256,uint256,address)", nonce_, _functionSig, _rngCount, msg.sender, _numConfirmations, _clientSeed, _clientWalletAddress ) ); require(_success, "Generator Contract call failed"); return _nonce; } /// @notice This is the call back function to serve random number request /// @dev This function will be called from generator contract address to fulfill random number request which goes to client contract /// @param nonce nonce is an incremental counter which is associated with request /// @param _clientContractAddress Actual contract address from which request has been generated /// @param _functionSig A combination of a function and the types of parameters it takes, combined together as a string with no spaces /// @return success bool variable which shows the status of request /// @return data data getting from client contract address function rngCallback( uint256 nonce, uint256[] memory rngList, address _clientContractAddress, string memory _functionSig ) public returns (bool, bytes memory) { require( msg.sender == _supraGeneratorContract, "Caller cannot generate the callback" ); (bool success, bytes memory data) = _clientContractAddress.call( abi.encodeWithSignature(_functionSig, nonce, rngList) ); return (success, data); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity 0.8.19; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// INSTRUCTIONS : Contains methods that will be used by the ROUTER and GENERATOR contracts. // SPDX-License-Identifier: MIT pragma solidity 0.8.19; interface IDepositContract { function isContractEligible(address _clientAddress, address _contractAddress) external view returns (bool); function isMinimumBalanceReached(address _clientAddress) external view returns (bool); function checkMinBalance(address _clientAddress) external view returns (uint256); function checkClientFund(address _clientAddress) external view returns (uint256); function collectFund(address _clientAddress, uint256 _amount) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol) pragma solidity 0.8.19; import "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; interface ISupraRouterContract { function generateRequest( string memory _functionSig, uint8 _rngCount, uint256 _numConfirmations, uint256 _clientSeed, address _clientWalletAddress ) external returns (uint256); function generateRequest( string memory _functionSig, uint8 _rngCount, uint256 _numConfirmations, address _clientWalletAddress ) external returns (uint256); function rngCallback( uint256 nonce, uint256[] memory rngList, address _clientContractAddress, string memory _functionSig ) external returns (bool, bytes memory) ; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; contract CheckContractAddress { /// @dev Returns a boolean indicating whether the given address is a contract or not. /// @param _addr The address to be checked. /// @return A boolean indicating whether the given address is a contract or not. function isContract(address _addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(_addr) } return size > 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity 0.8.19; import "./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. * * By default, the owner account will be the one that deploys the contract. 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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 v4.4.1 (utils/Context.sol) pragma solidity 0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "paris", "viaIR": true, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_depositContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_supraGeneratorContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositContract","outputs":[{"internalType":"contract IDepositContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeUpgradability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_functionSig","type":"string"},{"internalType":"uint8","name":"_rngCount","type":"uint8"},{"internalType":"uint256","name":"_numConfirmations","type":"uint256"},{"internalType":"uint256","name":"_clientSeed","type":"uint256"},{"internalType":"address","name":"_clientWalletAddress","type":"address"}],"name":"generateRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_functionSig","type":"string"},{"internalType":"uint8","name":"_rngCount","type":"uint8"},{"internalType":"uint256","name":"_numConfirmations","type":"uint256"},{"internalType":"address","name":"_clientWalletAddress","type":"address"}],"name":"generateRequest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256[]","name":"rngList","type":"uint256[]"},{"internalType":"address","name":"_clientContractAddress","type":"address"},{"internalType":"string","name":"_functionSig","type":"string"}],"name":"rngCallback","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"updateDepositContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"updateGeneratorContract","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608080604052346100825760016000818155600280546001600160a01b03199081169091558254908116339081179093556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360006003556004805460ff60a01b1916600160a01b179055610ff190816100888239f35b600080fdfe6040608081526004908136101561001557600080fd5b600090813560e01c80632932f04114610cb1578063660db17514610c8957806379ba509714610bbd5780638da5cb5b14610b95578063a1fa0c2d14610b6d578063b7b3243a1461082f578063c55dc8fa14610807578063d291ba0914610462578063df9d902814610352578063e30c39781461032a578063e94ad65b14610302578063f2fde38b146102915763f3c21ee0146100b057600080fd5b3461028d57608036600319011261028d57602491823567ffffffffffffffff8082116102895736602383011215610289578186013594818611610278578560051b96855193602097610104898b0187610e30565b855287850183819a8301019136831161026057848a9101915b838310610268575050604435956001600160a01b03949092509050838616860361026457606435858111610260576101589036908501610e84565b9383541633036102135787518451948a01949094206001600160e01b031916948411610202578884019485526064840192359084015286604484015251809152608482019790855b8181106101ee575050509083826101c78295946101ea98999a03601f198101835282610e30565b51925af1916101d4610f8b565b9080805195869515158652850152830190610edb565b0390f35b82518a5298880198918801916001016101a0565b634e487b7160e01b87526041835286fd5b8260236084928b8b519362461bcd60e51b85528401528201527f43616c6c65722063616e6e6f742067656e6572617465207468652063616c6c6260448201526261636b60e81b6064820152fd5b8780fd5b8680fd5b82358152918101918a910161011d565b634e487b7160e01b84526041875283fd5b8280fd5b5080fd5b82346102ff5760203660031901126102ff576102ab610e15565b6102b3610f1b565b600280546001600160a01b0319166001600160a01b039283169081179091556001549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461028d578160031936011261028d5760065490516001600160a01b039091168152602090f35b503461028d578160031936011261028d5760025490516001600160a01b039091168152602090f35b5082346102895760203660031901126102895761036d610e15565b610375610f1b565b803b15610410576001600160a01b03169182156103b35750506bffffffffffffffffffffffff60a01b81816005541617600555600654161760065580f35b906020608492519162461bcd60e51b8352820152603160248201527f4465706f73697420636f6e747261637420616464726573732063616e6e6f742060448201527062652061207a65726f206164647265737360781b6064820152fd5b506020608492519162461bcd60e51b8352820152602660248201527f4465706f73697420636f6e747261637420616464726573732063616e6e6f7420604482015265626520454f4160d01b6064820152fd5b503461028d57608036600319011261028d57823567ffffffffffffffff8111610289576104929036908501610e84565b61049a610ecb565b604490813560649384359060018060a01b038083168093036108035760028954146107c2579089959493929160028a558391816006541695848b519d8e636012107960e11b815201526024968d883391015260209d8e818b81855afa9081156107b6578f8f92610799575b505015610758578d86898c8f51948593849263263cc27360e21b84528301525afa90811561074e578e8e92610721575b50506106c05760ff1691821561068a5781511561065157600354600019811461063f578d8b8e9893978e978b978b9a978f8f90998d9a601460016105d59b019b8c60035511610636575b9160e0916105ad949354169d519a8b998a019d8e63a5e36129851b90528a0152880152610104870190610edb565b9385015233608485015260a48401528560c484015260e483015203601f198101835282610e30565b51925af16105e1610f8b565b50156105f857505050506001600354925551908152f35b845162461bcd60e51b8152928301879052601e908301527f47656e657261746f7220436f6e74726163742063616c6c206661696c6564000090820152fd5b6014955061057f565b634e487b7160e01b8d5260118a52878dfd5b50505050505090601372496e76616c69642066756e6374696f6e53696760681b928887519562461bcd60e51b8752860152840152820152fd5b5050505050509060106f125b9d985b1a59081c9b99d0dbdd5b9d60821b928887519562461bcd60e51b8752860152840152820152fd5b50895162461bcd60e51b81528089018d90526037818801527f496e73756666696369656e742046756e64733a204d696e696d756d2062616c6181890152761b98d9481c995858da195908199bdc881c995c5d595cdd604a1b818b0152608490fd5b6107409250803d10610747575b6107388183610e30565b810190610f73565b388e610535565b503d61072e565b8c513d8f823e3d90fd5b50505087877f436f6e7472616374206e6f7420656c696769626c6520746f2072657175657374888e89818f519562461bcd60e51b8752860152840152820152fd5b6107af9250803d10610747576107388183610e30565b388f610505565b8e8e51903d90823e3d90fd5b875162461bcd60e51b81526020818c0152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00818801528790fd5b8880fd5b503461028d578160031936011261028d5760055490516001600160a01b039091168152602090f35b5082346102895760a036600319011261028957803567ffffffffffffffff8111610b69576108609036908301610e84565b92610869610ecb565b9360449182356001600160a01b0360843581811690819003610b69578282600654169589519a636012107960e11b8c52838a8d01526024978c893391015260209c8d818c81855afa908115610b5f578e8a92610b42575b505015610b00578c858a8d8f51948593849263263cc27360e21b84528301525afa908115610af6578891610ad9575b50610a765760ff16938415610a4057815115610a075760035460001981146109f5578b9589958b8f93968b9a968f9661098e97601460018f9c019a8b600355116109ec575b9360e091610962949554169c51998a9889019c8d63a5e36129851b9052890152870152610104860190610edb565b92606485015233608485015260a484015260643560c484015260e483015203601f198101835282610e30565b51925af161099a610f8b565b50156109ad575050506003549051908152f35b601e906064957f47656e657261746f7220436f6e74726163742063616c6c206661696c656400009495519562461bcd60e51b8752860152840152820152fd5b60149350610934565b634e487b7160e01b885260118b528888fd5b5050885162461bcd60e51b81528089018b905260138188015272496e76616c69642066756e6374696f6e53696760681b81890152606490fd5b5050885162461bcd60e51b81528089018b90526010818801526f125b9d985b1a59081c9b99d0dbdd5b9d60821b81890152606490fd5b5050885162461bcd60e51b81528089018b90526037818801527f496e73756666696369656e742046756e64733a204d696e696d756d2062616c6181890152761b98d9481c995858da195908199bdc881c995c5d595cdd604a1b6064820152608490fd5b610af091508d803d10610747576107388183610e30565b8d6108ef565b8c513d8a823e3d90fd5b508a5162461bcd60e51b8152808b018d90528089018d90527f436f6e7472616374206e6f7420656c696769626c6520746f2072657175657374818b0152606490fd5b610b589250803d10610747576107388183610e30565b8e8e6108c0565b8d513d8b823e3d90fd5b8380fd5b5082346102895782600319360112610289575490516001600160a01b03909116815260209150f35b503461028d578160031936011261028d5760015490516001600160a01b039091168152602090f35b50829034610289578260031936011261028957600254916001600160a01b03913383851603610c345750506bffffffffffffffffffffffff60a01b8092166002556001549133908316176001553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152fd5b82843461028d578160031936011261028d57610ca3610f1b565b805460ff60a01b1916905580f35b5082903461028957602036600319011261028957610ccd610e15565b610cd5610f1b565b803b15610dc1576001600160a01b0316908115610d635782549060ff8260a01c1615610d0c57506001600160a01b03191617905580f35b5162461bcd60e51b8152602081850152602c60248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f60448201526b1d081899481d5c19185d195960a21b6064820152608490fd5b5162461bcd60e51b8152602081840152603360248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f604482015272742062652061207a65726f206164647265737360681b6064820152608490fd5b815162461bcd60e51b8152602081850152602860248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f6044820152677420626520454f4160c01b6064820152608490fd5b600435906001600160a01b0382168203610e2b57565b600080fd5b90601f8019910116810190811067ffffffffffffffff821117610e5257604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111610e5257601f01601f191660200190565b81601f82011215610e2b57803590610e9b82610e68565b92610ea96040519485610e30565b82845260208383010111610e2b57816000926020809301838601378301015290565b6024359060ff82168203610e2b57565b919082519283825260005b848110610f07575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610ee6565b6001546001600160a01b03163303610f2f57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b90816020910312610e2b57518015158103610e2b5790565b3d15610fb6573d90610f9c82610e68565b91610faa6040519384610e30565b82523d6000602084013e565b60609056fea26469706673582212209e4664f86e11d5d5ba441e5553367ff3dbb5d6e9018a1d9bae1d03a71cc1fe3464736f6c63430008130033
Deployed Bytecode
0x6040608081526004908136101561001557600080fd5b600090813560e01c80632932f04114610cb1578063660db17514610c8957806379ba509714610bbd5780638da5cb5b14610b95578063a1fa0c2d14610b6d578063b7b3243a1461082f578063c55dc8fa14610807578063d291ba0914610462578063df9d902814610352578063e30c39781461032a578063e94ad65b14610302578063f2fde38b146102915763f3c21ee0146100b057600080fd5b3461028d57608036600319011261028d57602491823567ffffffffffffffff8082116102895736602383011215610289578186013594818611610278578560051b96855193602097610104898b0187610e30565b855287850183819a8301019136831161026057848a9101915b838310610268575050604435956001600160a01b03949092509050838616860361026457606435858111610260576101589036908501610e84565b9383541633036102135787518451948a01949094206001600160e01b031916948411610202578884019485526064840192359084015286604484015251809152608482019790855b8181106101ee575050509083826101c78295946101ea98999a03601f198101835282610e30565b51925af1916101d4610f8b565b9080805195869515158652850152830190610edb565b0390f35b82518a5298880198918801916001016101a0565b634e487b7160e01b87526041835286fd5b8260236084928b8b519362461bcd60e51b85528401528201527f43616c6c65722063616e6e6f742067656e6572617465207468652063616c6c6260448201526261636b60e81b6064820152fd5b8780fd5b8680fd5b82358152918101918a910161011d565b634e487b7160e01b84526041875283fd5b8280fd5b5080fd5b82346102ff5760203660031901126102ff576102ab610e15565b6102b3610f1b565b600280546001600160a01b0319166001600160a01b039283169081179091556001549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461028d578160031936011261028d5760065490516001600160a01b039091168152602090f35b503461028d578160031936011261028d5760025490516001600160a01b039091168152602090f35b5082346102895760203660031901126102895761036d610e15565b610375610f1b565b803b15610410576001600160a01b03169182156103b35750506bffffffffffffffffffffffff60a01b81816005541617600555600654161760065580f35b906020608492519162461bcd60e51b8352820152603160248201527f4465706f73697420636f6e747261637420616464726573732063616e6e6f742060448201527062652061207a65726f206164647265737360781b6064820152fd5b506020608492519162461bcd60e51b8352820152602660248201527f4465706f73697420636f6e747261637420616464726573732063616e6e6f7420604482015265626520454f4160d01b6064820152fd5b503461028d57608036600319011261028d57823567ffffffffffffffff8111610289576104929036908501610e84565b61049a610ecb565b604490813560649384359060018060a01b038083168093036108035760028954146107c2579089959493929160028a558391816006541695848b519d8e636012107960e11b815201526024968d883391015260209d8e818b81855afa9081156107b6578f8f92610799575b505015610758578d86898c8f51948593849263263cc27360e21b84528301525afa90811561074e578e8e92610721575b50506106c05760ff1691821561068a5781511561065157600354600019811461063f578d8b8e9893978e978b978b9a978f8f90998d9a601460016105d59b019b8c60035511610636575b9160e0916105ad949354169d519a8b998a019d8e63a5e36129851b90528a0152880152610104870190610edb565b9385015233608485015260a48401528560c484015260e483015203601f198101835282610e30565b51925af16105e1610f8b565b50156105f857505050506001600354925551908152f35b845162461bcd60e51b8152928301879052601e908301527f47656e657261746f7220436f6e74726163742063616c6c206661696c6564000090820152fd5b6014955061057f565b634e487b7160e01b8d5260118a52878dfd5b50505050505090601372496e76616c69642066756e6374696f6e53696760681b928887519562461bcd60e51b8752860152840152820152fd5b5050505050509060106f125b9d985b1a59081c9b99d0dbdd5b9d60821b928887519562461bcd60e51b8752860152840152820152fd5b50895162461bcd60e51b81528089018d90526037818801527f496e73756666696369656e742046756e64733a204d696e696d756d2062616c6181890152761b98d9481c995858da195908199bdc881c995c5d595cdd604a1b818b0152608490fd5b6107409250803d10610747575b6107388183610e30565b810190610f73565b388e610535565b503d61072e565b8c513d8f823e3d90fd5b50505087877f436f6e7472616374206e6f7420656c696769626c6520746f2072657175657374888e89818f519562461bcd60e51b8752860152840152820152fd5b6107af9250803d10610747576107388183610e30565b388f610505565b8e8e51903d90823e3d90fd5b875162461bcd60e51b81526020818c0152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00818801528790fd5b8880fd5b503461028d578160031936011261028d5760055490516001600160a01b039091168152602090f35b5082346102895760a036600319011261028957803567ffffffffffffffff8111610b69576108609036908301610e84565b92610869610ecb565b9360449182356001600160a01b0360843581811690819003610b69578282600654169589519a636012107960e11b8c52838a8d01526024978c893391015260209c8d818c81855afa908115610b5f578e8a92610b42575b505015610b00578c858a8d8f51948593849263263cc27360e21b84528301525afa908115610af6578891610ad9575b50610a765760ff16938415610a4057815115610a075760035460001981146109f5578b9589958b8f93968b9a968f9661098e97601460018f9c019a8b600355116109ec575b9360e091610962949554169c51998a9889019c8d63a5e36129851b9052890152870152610104860190610edb565b92606485015233608485015260a484015260643560c484015260e483015203601f198101835282610e30565b51925af161099a610f8b565b50156109ad575050506003549051908152f35b601e906064957f47656e657261746f7220436f6e74726163742063616c6c206661696c656400009495519562461bcd60e51b8752860152840152820152fd5b60149350610934565b634e487b7160e01b885260118b528888fd5b5050885162461bcd60e51b81528089018b905260138188015272496e76616c69642066756e6374696f6e53696760681b81890152606490fd5b5050885162461bcd60e51b81528089018b90526010818801526f125b9d985b1a59081c9b99d0dbdd5b9d60821b81890152606490fd5b5050885162461bcd60e51b81528089018b90526037818801527f496e73756666696369656e742046756e64733a204d696e696d756d2062616c6181890152761b98d9481c995858da195908199bdc881c995c5d595cdd604a1b6064820152608490fd5b610af091508d803d10610747576107388183610e30565b8d6108ef565b8c513d8a823e3d90fd5b508a5162461bcd60e51b8152808b018d90528089018d90527f436f6e7472616374206e6f7420656c696769626c6520746f2072657175657374818b0152606490fd5b610b589250803d10610747576107388183610e30565b8e8e6108c0565b8d513d8b823e3d90fd5b8380fd5b5082346102895782600319360112610289575490516001600160a01b03909116815260209150f35b503461028d578160031936011261028d5760015490516001600160a01b039091168152602090f35b50829034610289578260031936011261028957600254916001600160a01b03913383851603610c345750506bffffffffffffffffffffffff60a01b8092166002556001549133908316176001553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152fd5b82843461028d578160031936011261028d57610ca3610f1b565b805460ff60a01b1916905580f35b5082903461028957602036600319011261028957610ccd610e15565b610cd5610f1b565b803b15610dc1576001600160a01b0316908115610d635782549060ff8260a01c1615610d0c57506001600160a01b03191617905580f35b5162461bcd60e51b8152602081850152602c60248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f60448201526b1d081899481d5c19185d195960a21b6064820152608490fd5b5162461bcd60e51b8152602081840152603360248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f604482015272742062652061207a65726f206164647265737360681b6064820152608490fd5b815162461bcd60e51b8152602081850152602860248201527f47656e657261746f7220636f6e747261637420616464726573732063616e6e6f6044820152677420626520454f4160c01b6064820152608490fd5b600435906001600160a01b0382168203610e2b57565b600080fd5b90601f8019910116810190811067ffffffffffffffff821117610e5257604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111610e5257601f01601f191660200190565b81601f82011215610e2b57803590610e9b82610e68565b92610ea96040519485610e30565b82845260208383010111610e2b57816000926020809301838601378301015290565b6024359060ff82168203610e2b57565b919082519283825260005b848110610f07575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610ee6565b6001546001600160a01b03163303610f2f57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b90816020910312610e2b57518015158103610e2b5790565b3d15610fb6573d90610f9c82610e68565b91610faa6040519384610e30565b82523d6000602084013e565b60609056fea26469706673582212209e4664f86e11d5d5ba441e5553367ff3dbb5d6e9018a1d9bae1d03a71cc1fe3464736f6c63430008130033
Deployed Bytecode Sourcemap
580:6753:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:114;580:6753;4878:114;;;580:6753;;;;;4878:114;580:6753;4878:114;;;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;-1:-1:-1;;;;;580:6753:7;;;-1:-1:-1;580:6753:7;-1:-1:-1;580:6753:7;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;7044:10;:37;580:6753;;;;;;;;;7229:53;;;;-1:-1:-1;;;;;;580:6753:7;;;;;;7229:53;;;;;;580:6753;;;;;7229:53;;;580:6753;;;;;;;;;;;;;;;;;;;;;;7229:53;;;;;;;;;;580:6753;7229:53;;;;5703:332;;7229:53;;;;;;:::i;:::-;7188:104;;;;;;;:::i;:::-;580:6753;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;:::i;:::-;1056:62:4;;:::i;:::-;1228:24:5;580:6753:7;;-1:-1:-1;;;;;;580:6753:7;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;1267:43:5;;;;580:6753:7;;;;;;;;;;;;;;;;;;1133:39;580:6753;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;926:13:5;580:6753:7;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;:::i;:::-;1056:62:4;;:::i;:::-;412:59:0;;487:8;580:6753:7;;-1:-1:-1;;;;;580:6753:7;;1681:30;;580:6753;;;;;;;;;1796:35;580:6753;;;1796:35;580:6753;1841:52;580:6753;;;1841:52;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1759:1:6;580:6753:7;;2468:19:6;1759:1;;;;;;;;;;;;3647:154:7;580:6753;;4878:15;580:6753;;;;;;;;;;;4878:114;;;580:6753;;4968:10;;;;580:6753;;;4878:114;;;;;;;;;;;;;;;;;;;580:6753;;;;;;;;;;;;;;;;;;;;5082:61;;;;580:6753;5082:61;;;;;;;;;;;;580:6753;5081:62;;580:6753;;;;5305:13;;;580:6753;;;;5426:28;580:6753;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;5530:2;580:6753;5703:332;580:6753;;1759:1:6;;580:6753:7;1759:1:6;5510:22:7;5506:75;;580:6753;;;;;;;;;;;5703:332;;;;;;;;;;;;;;580:6753;;;;;;;;;:::i;:::-;;;;;4968:10;580:6753;;;;;;;;;;;;;;;;;5703:332;;;;;;;;;:::i;:::-;5661:384;;;;;;:::i;:::-;;580:6753;;;;;;;;;;1759:1:6;;580:6753:7;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;5506:75;5530:2;;-1:-1:-1;5506:75:7;;580:6753;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;5082:61;;;;;;-1:-1:-1;5082:61:7;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:114;;;;;;-1:-1:-1;4878:114:7;;;;;;:::i;:::-;;;;;;580:6753;;;;;;;;;;;1759:1:6;580:6753:7;;-1:-1:-1;;;1759:1:6;;580:6753:7;1759:1:6;;;;;580:6753:7;1759:1:6;;580:6753:7;1759:1:6;580:6753:7;;;1759:1:6;580:6753:7;;1759:1:6;580:6753:7;;;;;;;;;;;;;;;;;1096:31;580:6753;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;4878:15;580:6753;;;;;;;;;4878:114;;;;;;580:6753;;4968:10;;;;580:6753;;;4878:114;;;;;;;;;;;;;;;;;;;580:6753;;;;;;;;;;;;;;;;;;;;5082:61;;;;580:6753;5082:61;;;;;;;;;;;580:6753;5081:62;580:6753;;;;5305:13;;;580:6753;;;;5426:28;580:6753;;;;-1:-1:-1;;580:6753:7;;;;;;;;;;;;;;;;;5703:332;580:6753;5530:2;580:6753;;;;1759:1:6;;580:6753:7;1759:1:6;5510:22:7;5506:75;;580:6753;;;;;;;;;;;5703:332;;;;;;;;;;;;;;580:6753;;;;;;;;;:::i;:::-;;;;;;4968:10;580:6753;;;;;;;;;;;;;;;;;;5703:332;;;;;;;;;:::i;:::-;5661:384;;;;;;:::i;:::-;;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5506:75;5530:2;;-1:-1:-1;5506:75:7;;580:6753;-1:-1:-1;;;580:6753:7;;;;;;;;;-1:-1:-1;;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;-1:-1:-1;;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;-1:-1:-1;;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;5082:61;;;;;;;-1:-1:-1;5082:61:7;;;;;;:::i;:::-;;;;;580:6753;;;;;;;;;;-1:-1:-1;580:6753:7;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;4878:114;;;;;;-1:-1:-1;4878:114:7;;;;;;:::i;:::-;;;;;;580:6753;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;580:6753:7;;;;;;;-1:-1:-1;580:6753:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;926:13:5;580:6753:7;;-1:-1:-1;;;;;580:6753:7;222:10:1;580:6753:7;;;1833:24:5;580:6753:7;;;;;;;;;;926:13:5;580:6753:7;;;222:10:1;;580:6753:7;;;;;;222:10:1;580:6753:7;;2123:40:4;;;;580:6753:7;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;;;1056:62:4;;:::i;:::-;580:6753:7;;-1:-1:-1;;;;580:6753:7;;;;;;;;;;;;;;-1:-1:-1;;580:6753:7;;;;;;:::i;:::-;1056:62:4;;:::i;:::-;412:59:0;;487:8;580:6753:7;;-1:-1:-1;;;;;580:6753:7;;2354:30;;580:6753;;;;;;;;;;;;;-1:-1:-1;;;;;;;580:6753:7;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;;;;;;;-1:-1:-1;;;580:6753:7;;;;;;;;;;;-1:-1:-1;;;;;580:6753:7;;;;;;:::o;:::-;;;;;;5703:332;;;580:6753;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;5703:332;580:6753;-1:-1:-1;;580:6753:7;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;580:6753:7;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5703:332;;;580:6753;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;1352:130:4;580:6753:7;;-1:-1:-1;;;;;580:6753:7;222:10:1;1415:23:4;580:6753:7;;1352:130:4:o;580:6753:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;580:6753:7;;;;:::o;:::-;;;:::o
Swarm Source
ipfs://9e4664f86e11d5d5ba441e5553367ff3dbb5d6e9018a1d9bae1d03a71cc1fe34
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.