Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13715143 | 1065 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
ValidateQuorum
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.7.0; import "@ethereansos/swissknife/contracts/factory/model/IFactory.sol"; import "../../base/model/IProposalsManager.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@ethereansos/items-v2/contracts/model/Item.sol"; contract ValidateQuorum is IProposalChecker { string public constant LABEL = 'quorum'; uint256 public constant ONE_HUNDRED = 1e18; string public uri; uint256 public value; bool public discriminant; function lazyInit(bytes memory lazyInitData) external returns(bytes memory lazyInitResponseData) { require(keccak256(bytes(uri)) == keccak256("")); (uri, lazyInitResponseData) = abi.decode(lazyInitData, (string, bytes)); require(keccak256(bytes(uri)) != keccak256("")); (value, discriminant) = abi.decode(lazyInitResponseData, (uint256, bool)); lazyInitResponseData = ""; } function check(address, bytes32, bytes calldata proposalData, address, address) external override view returns(bool) { IProposalsManager.Proposal memory proposal = abi.decode(proposalData, (IProposalsManager.Proposal)); uint256 quorum = discriminant ? _calculatePercentage(_calculateCensusTotalSupply(proposal), value) : value; return ((proposal.accept + proposal.refuse) >= quorum) && (proposal.accept > proposal.refuse); } function _calculateCensusTotalSupply(IProposalsManager.Proposal memory proposal) private view returns (uint256 censusTotalSupply) { (address[] memory collectionAddresses, uint256[] memory objectIds, uint256[] memory weights) = abi.decode(proposal.votingTokens, (address[], uint256[], uint256[])); for(uint256 i = 0; i < collectionAddresses.length; i++) { censusTotalSupply += (_calculateTotalSupply(collectionAddresses[i], objectIds[i]) * weights[i]); } } function _calculatePercentage(uint256 totalSupply, uint256 percentage) private pure returns (uint256) { return (totalSupply * ((percentage * 1e18) / ONE_HUNDRED)) / 1e18; } function _calculateTotalSupply(address collectionAddress, uint256 collectionId) private view returns(uint256) { if(collectionAddress == address(0)) { return IERC20(address(uint160(collectionId))).totalSupply(); } return Item(collectionAddress).totalSupply(collectionId); } } contract CanBeValidBeforeBlockLength is IProposalChecker { string public constant LABEL = 'validationBomb'; string public uri; uint256 public value; function lazyInit(bytes memory lazyInitData) external returns(bytes memory lazyInitResponseData) { require(keccak256(bytes(uri)) == keccak256("")); (uri, lazyInitResponseData) = abi.decode(lazyInitData, (string, bytes)); require(keccak256(bytes(uri)) != keccak256("")); value = abi.decode(lazyInitResponseData, (uint256)); lazyInitResponseData = ""; } function check(address, bytes32, bytes calldata proposalData, address, address) external override view returns(bool) { return block.number < (value + abi.decode(proposalData, (IProposalsManager.Proposal)).creationBlock); } }
//SPDX-License-Identifier: MIT pragma solidity >=0.7.0; pragma abicoder v2; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "./IERC1155Views.sol"; struct Header { address host; string name; string symbol; string uri; } struct CreateItem { Header header; bytes32 collectionId; uint256 id; address[] accounts; uint256[] amounts; } interface Item is IERC1155, IERC1155Views { event CollectionItem(bytes32 indexed fromCollectionId, bytes32 indexed toCollectionId, uint256 indexed itemId); function name() external view returns(string memory); function symbol() external view returns(string memory); function decimals() external view returns(uint256); function burn(address account, uint256 itemId, uint256 amount) external; function burnBatch(address account, uint256[] calldata itemIds, uint256[] calldata amounts) external; function burn(address account, uint256 itemId, uint256 amount, bytes calldata data) external; function burnBatch(address account, uint256[] calldata itemIds, uint256[] calldata amounts, bytes calldata data) external; function mintItems(CreateItem[] calldata items) external returns(uint256[] memory itemIds); function setItemsCollection(uint256[] calldata itemIds, bytes32[] calldata collectionIds) external returns(bytes32[] memory oldCollectionIds); function setItemsMetadata(uint256[] calldata itemIds, Header[] calldata newValues) external returns(Header[] memory oldValues); function interoperableOf(uint256 itemId) external view returns(address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity >=0.7.0; import "@ethereansos/swissknife/contracts/generic/model/ILazyInitCapableElement.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; interface IProposalsManager is IERC1155Receiver, ILazyInitCapableElement { struct ProposalCode { address location; bytes bytecode; } struct ProposalCodes { ProposalCode[] codes; bool alsoTerminate; } struct Proposal { address proposer; address[] codeSequence; uint256 creationBlock; uint256 accept; uint256 refuse; address triggeringRules; address[] canTerminateAddresses; address[] validatorsAddresses; bool validationPassed; uint256 terminationBlock; bytes votingTokens; } struct ProposalConfiguration { address[] collections; uint256[] objectIds; uint256[] weights; address creationRules; address triggeringRules; address[] canTerminateAddresses; address[] validatorsAddresses; } function batchCreate(ProposalCodes[] calldata codeSequences) external returns(bytes32[] memory createdProposalIds); function list(bytes32[] calldata proposalIds) external view returns(Proposal[] memory); function votes(bytes32[] calldata proposalIds, address[] calldata voters, bytes32[][] calldata items) external view returns(uint256[][] memory accepts, uint256[][] memory refuses, uint256[][] memory toWithdraw); function weight(bytes32 code) external view returns(uint256); function vote(address erc20TokenAddress, bytes memory permitSignature, bytes32 proposalId, uint256 accept, uint256 refuse, address voter, bool alsoTerminate) external payable; function batchVote(bytes[] calldata data) external payable; function withdrawAll(bytes32[] memory proposalIds, address voterOrReceiver, bool afterTermination) external; function terminate(bytes32[] calldata proposalIds) external; function configuration() external view returns(ProposalConfiguration memory); function setConfiguration(ProposalConfiguration calldata newValue) external returns(ProposalConfiguration memory oldValue); function lastProposalId() external view returns(bytes32); function lastVoteBlock(address voter) external view returns (uint256); event ProposalCreated(address indexed proposer, address indexed code, bytes32 indexed proposalId); event ProposalWeight(bytes32 indexed proposalId, address indexed collection, uint256 indexed id, bytes32 key, uint256 weight); event ProposalTerminated(bytes32 indexed proposalId, bool result, bytes errorData); event Accept(bytes32 indexed proposalId, address indexed voter, bytes32 indexed item, uint256 amount); event MoveToAccept(bytes32 indexed proposalId, address indexed voter, bytes32 indexed item, uint256 amount); event RetireAccept(bytes32 indexed proposalId, address indexed voter, bytes32 indexed item, uint256 amount); event Refuse(bytes32 indexed proposalId, address indexed voter, bytes32 indexed item, uint256 amount); event MoveToRefuse(bytes32 indexed proposalId, address indexed voter, bytes32 indexed item, uint256 amount); event RetireRefuse(bytes32 indexed proposalId, address indexed voter, bytes32 indexed item, uint256 amount); } interface IProposalChecker { function check(address proposalsManagerAddress, bytes32 id, bytes calldata data, address from, address voter) external view returns(bool); } interface IExternalProposalsManagerCommands { function createProposalCodeSequence(bytes32 proposalId, IProposalsManager.ProposalCode[] memory codeSequenceInput, address sender) external returns (address[] memory codeSequence, IProposalsManager.ProposalConfiguration memory localConfiguration); function proposalCanBeFinalized(bytes32 proposalId, IProposalsManager.Proposal memory proposal, bool validationPassed, bool result) external view returns (bool); function isVotable(bytes32 proposalId, IProposalsManager.Proposal memory proposal, address from, address voter, bool voteOrWithtraw) external view returns (bytes memory response); }
// SPDX-License-Identifier: MIT pragma solidity >=0.7.0; import "../../dynamicMetadata/model/IDynamicMetadataCapableElement.sol"; interface IFactory is IDynamicMetadataCapableElement { event Deployed(address indexed modelAddress, address indexed deployedAddress, address indexed deployer, bytes deployedLazyInitResponse); function modelAddress() external view returns(address); function setModelAddress(address newValue) external returns(address oldValue); function deployer(address deployedAddress) external view returns(address); function deploy(bytes calldata deployData) external payable returns(address deployedAddress, bytes memory deployedLazyInitResponse); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity >=0.7.0; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; interface ILazyInitCapableElement is IERC165 { function lazyInit(bytes calldata lazyInitData) external returns(bytes memory initResponse); function initializer() external view returns(address); event Host(address indexed from, address indexed to); function host() external view returns(address); function setHost(address newValue) external returns(address oldValue); function subjectIsAuthorizedFor(address subject, address location, bytes4 selector, bytes calldata payload, uint256 value) external view returns(bool); }
//SPDX-License-Identifier: MIT pragma solidity >=0.7.0; import "../../generic/model/ILazyInitCapableElement.sol"; interface IDynamicMetadataCapableElement is ILazyInitCapableElement { function uri() external view returns(string memory); function plainUri() external view returns(string memory); function setUri(string calldata newValue) external returns (string memory oldValue); function dynamicUriResolver() external view returns(address); function setDynamicUriResolver(address newValue) external returns(address oldValue); }
// SPDX-License-Identifier: MIT pragma solidity >=0.7.0; /** * @title IERC1155Views - An optional utility interface to improve the ERC-1155 Standard. * @dev This interface introduces some additional capabilities for ERC-1155 Tokens. */ interface IERC1155Views { /** * @dev Returns the total supply of the given token id * @param itemId the id of the token whose availability you want to know */ function totalSupply(uint256 itemId) external view returns (uint256); /** * @dev Returns the name of the given token id * @param itemId the id of the token whose name you want to know */ function name(uint256 itemId) external view returns (string memory); /** * @dev Returns the symbol of the given token id * @param itemId the id of the token whose symbol you want to know */ function symbol(uint256 itemId) external view returns (string memory); /** * @dev Returns the decimals of the given token id * @param itemId the id of the token whose decimals you want to know */ function decimals(uint256 itemId) external view returns (uint256); /** * @dev Returns the uri of the given token id * @param itemId the id of the token whose uri you want to know */ function uri(uint256 itemId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"LABEL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_HUNDRED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"proposalData","type":"bytes"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"check","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discriminant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"lazyInitData","type":"bytes"}],"name":"lazyInit","outputs":[{"internalType":"bytes","name":"lazyInitResponseData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610e1e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638fb242fa1161005b5780638fb242fa146100e7578063bfaa8cca1461010a578063eac989f814610119578063f6eca4bc1461012157600080fd5b80630f38d8c3146100825780633fa4f245146100bd578063457f4bcc146100d4575b600080fd5b6100a76040518060400160405280600681526020016571756f72756d60d01b81525081565b6040516100b49190610be7565b60405180910390f35b6100c660015481565b6040519081526020016100b4565b6100a76100e23660046108cf565b61012e565b6100fa6100f536600461072e565b610220565b60405190151581526020016100b4565b6100c6670de0b6b3a764000081565b6100a7610294565b6002546100fa9060ff1681565b60607fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060006040516101609190610b4b565b60405180910390201461017257600080fd5b81806020019051810190610186919061090c565b8151909250829061019e906000906020850190610517565b5050507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060006040516101d19190610b4b565b604051809103902014156101e457600080fd5b808060200190518101906101f89190610aef565b6002805460ff1916911515919091179055600155505060408051602081019091526000815290565b60008061022f8587018761099b565b60025490915060009060ff166102475760015461025b565b61025b61025383610322565b6001546103da565b905080826080015183606001516102729190610ca1565b10158015610287575081608001518260600151115b9998505050505050505050565b600080546102a190610d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546102cd90610d2a565b801561031a5780601f106102ef5761010080835404028352916020019161031a565b820191906000526020600020905b8154815290600101906020018083116102fd57829003601f168201915b505050505081565b60008060008084610140015180602001905181019061034191906107df565b92509250925060005b83518110156103d15781818151811061036557610365610d96565b60200260200101516103a985838151811061038257610382610d96565b602002602001015185848151811061039c5761039c610d96565b6020026020010151610417565b6103b39190610cdb565b6103bd9086610ca1565b9450806103c981610d65565b91505061034a565b50505050919050565b6000670de0b6b3a7640000806103f08482610cdb565b6103fa9190610cb9565b6104049085610cdb565b61040e9190610cb9565b90505b92915050565b60006001600160a01b03831661049f57816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561046057600080fd5b505afa158015610474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104989190610ad6565b9050610411565b60405163bd85b03960e01b8152600481018390526001600160a01b0384169063bd85b0399060240160206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040e9190610ad6565b82805461052390610d2a565b90600052602060002090601f016020900481019282610545576000855561058b565b82601f1061055e57805160ff191683800117855561058b565b8280016001018555821561058b579182015b8281111561058b578251825591602001919060010190610570565b5061059792915061059b565b5090565b5b80821115610597576000815560010161059c565b60006105c36105be84610c79565b610c24565b90508281528383830111156105d757600080fd5b6105e5836020830184610cfa565b9392505050565b80356105f781610dc2565b919050565b600082601f83011261060d57600080fd5b8135602061061d6105be83610c55565b80838252828201915082860187848660051b890101111561063d57600080fd5b60005b8581101561066557813561065381610dc2565b84529284019290840190600101610640565b5090979650505050505050565b600082601f83011261068357600080fd5b815160206106936105be83610c55565b80838252828201915082860187848660051b89010111156106b357600080fd5b60005b85811015610665578151845292840192908401906001016106b6565b80356105f781610dda565b600082601f8301126106ee57600080fd5b81356106fc6105be82610c79565b81815284602083860101111561071157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060a0878903121561074757600080fd5b863561075281610dc2565b955060208701359450604087013567ffffffffffffffff8082111561077657600080fd5b818901915089601f83011261078a57600080fd5b81358181111561079957600080fd5b8a60208285010111156107ab57600080fd5b60208301965080955050505060608701356107c581610dc2565b91506107d3608088016105ec565b90509295509295509295565b6000806000606084860312156107f457600080fd5b835167ffffffffffffffff8082111561080c57600080fd5b818601915086601f83011261082057600080fd5b815160206108306105be83610c55565b8083825282820191508286018b848660051b890101111561085057600080fd5b600096505b8487101561087c57805161086881610dc2565b835260019690960195918301918301610855565b509189015191975090935050508082111561089657600080fd5b6108a287838801610672565b935060408601519150808211156108b857600080fd5b506108c586828701610672565b9150509250925092565b6000602082840312156108e157600080fd5b813567ffffffffffffffff8111156108f857600080fd5b610904848285016106dd565b949350505050565b6000806040838503121561091f57600080fd5b825167ffffffffffffffff8082111561093757600080fd5b818501915085601f83011261094b57600080fd5b61095a868351602085016105b0565b9350602085015191508082111561097057600080fd5b508301601f8101851361098257600080fd5b610991858251602084016105b0565b9150509250929050565b6000602082840312156109ad57600080fd5b813567ffffffffffffffff808211156109c557600080fd5b9083019061016082860312156109da57600080fd5b6109e2610bfa565b6109eb836105ec565b81526020830135828111156109ff57600080fd5b610a0b878286016105fc565b602083015250604083013560408201526060830135606082015260808301356080820152610a3b60a084016105ec565b60a082015260c083013582811115610a5257600080fd5b610a5e878286016105fc565b60c08301525060e083013582811115610a7657600080fd5b610a82878286016105fc565b60e083015250610100610a968185016106d2565b9082015261012083810135908201526101408084013583811115610ab957600080fd5b610ac5888287016106dd565b918301919091525095945050505050565b600060208284031215610ae857600080fd5b5051919050565b60008060408385031215610b0257600080fd5b825191506020830151610b1481610dda565b809150509250929050565b60008151808452610b37816020860160208601610cfa565b601f01601f19169290920160200192915050565b600080835481600182811c915080831680610b6757607f831692505b6020808410821415610b8757634e487b7160e01b86526022600452602486fd5b818015610b9b5760018114610bac57610bd9565b60ff19861689528489019650610bd9565b60008a81526020902060005b86811015610bd15781548b820152908501908301610bb8565b505084890196505b509498975050505050505050565b60208152600061040e6020830184610b1f565b604051610160810167ffffffffffffffff81118282101715610c1e57610c1e610dac565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610c4d57610c4d610dac565b604052919050565b600067ffffffffffffffff821115610c6f57610c6f610dac565b5060051b60200190565b600067ffffffffffffffff821115610c9357610c93610dac565b50601f01601f191660200190565b60008219821115610cb457610cb4610d80565b500190565b600082610cd657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610cf557610cf5610d80565b500290565b60005b83811015610d15578181015183820152602001610cfd565b83811115610d24576000848401525b50505050565b600181811c90821680610d3e57607f821691505b60208210811415610d5f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415610d7957610d79610d80565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610dd757600080fd5b50565b8015158114610dd757600080fdfea264697066735822122000d5ba0201f411058a843b4285df667bbc4a3744af592eb4b920d0ebf70c7f1a64736f6c63430008060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638fb242fa1161005b5780638fb242fa146100e7578063bfaa8cca1461010a578063eac989f814610119578063f6eca4bc1461012157600080fd5b80630f38d8c3146100825780633fa4f245146100bd578063457f4bcc146100d4575b600080fd5b6100a76040518060400160405280600681526020016571756f72756d60d01b81525081565b6040516100b49190610be7565b60405180910390f35b6100c660015481565b6040519081526020016100b4565b6100a76100e23660046108cf565b61012e565b6100fa6100f536600461072e565b610220565b60405190151581526020016100b4565b6100c6670de0b6b3a764000081565b6100a7610294565b6002546100fa9060ff1681565b60607fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060006040516101609190610b4b565b60405180910390201461017257600080fd5b81806020019051810190610186919061090c565b8151909250829061019e906000906020850190610517565b5050507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060006040516101d19190610b4b565b604051809103902014156101e457600080fd5b808060200190518101906101f89190610aef565b6002805460ff1916911515919091179055600155505060408051602081019091526000815290565b60008061022f8587018761099b565b60025490915060009060ff166102475760015461025b565b61025b61025383610322565b6001546103da565b905080826080015183606001516102729190610ca1565b10158015610287575081608001518260600151115b9998505050505050505050565b600080546102a190610d2a565b80601f01602080910402602001604051908101604052809291908181526020018280546102cd90610d2a565b801561031a5780601f106102ef5761010080835404028352916020019161031a565b820191906000526020600020905b8154815290600101906020018083116102fd57829003601f168201915b505050505081565b60008060008084610140015180602001905181019061034191906107df565b92509250925060005b83518110156103d15781818151811061036557610365610d96565b60200260200101516103a985838151811061038257610382610d96565b602002602001015185848151811061039c5761039c610d96565b6020026020010151610417565b6103b39190610cdb565b6103bd9086610ca1565b9450806103c981610d65565b91505061034a565b50505050919050565b6000670de0b6b3a7640000806103f08482610cdb565b6103fa9190610cb9565b6104049085610cdb565b61040e9190610cb9565b90505b92915050565b60006001600160a01b03831661049f57816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561046057600080fd5b505afa158015610474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104989190610ad6565b9050610411565b60405163bd85b03960e01b8152600481018390526001600160a01b0384169063bd85b0399060240160206040518083038186803b1580156104df57600080fd5b505afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040e9190610ad6565b82805461052390610d2a565b90600052602060002090601f016020900481019282610545576000855561058b565b82601f1061055e57805160ff191683800117855561058b565b8280016001018555821561058b579182015b8281111561058b578251825591602001919060010190610570565b5061059792915061059b565b5090565b5b80821115610597576000815560010161059c565b60006105c36105be84610c79565b610c24565b90508281528383830111156105d757600080fd5b6105e5836020830184610cfa565b9392505050565b80356105f781610dc2565b919050565b600082601f83011261060d57600080fd5b8135602061061d6105be83610c55565b80838252828201915082860187848660051b890101111561063d57600080fd5b60005b8581101561066557813561065381610dc2565b84529284019290840190600101610640565b5090979650505050505050565b600082601f83011261068357600080fd5b815160206106936105be83610c55565b80838252828201915082860187848660051b89010111156106b357600080fd5b60005b85811015610665578151845292840192908401906001016106b6565b80356105f781610dda565b600082601f8301126106ee57600080fd5b81356106fc6105be82610c79565b81815284602083860101111561071157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060a0878903121561074757600080fd5b863561075281610dc2565b955060208701359450604087013567ffffffffffffffff8082111561077657600080fd5b818901915089601f83011261078a57600080fd5b81358181111561079957600080fd5b8a60208285010111156107ab57600080fd5b60208301965080955050505060608701356107c581610dc2565b91506107d3608088016105ec565b90509295509295509295565b6000806000606084860312156107f457600080fd5b835167ffffffffffffffff8082111561080c57600080fd5b818601915086601f83011261082057600080fd5b815160206108306105be83610c55565b8083825282820191508286018b848660051b890101111561085057600080fd5b600096505b8487101561087c57805161086881610dc2565b835260019690960195918301918301610855565b509189015191975090935050508082111561089657600080fd5b6108a287838801610672565b935060408601519150808211156108b857600080fd5b506108c586828701610672565b9150509250925092565b6000602082840312156108e157600080fd5b813567ffffffffffffffff8111156108f857600080fd5b610904848285016106dd565b949350505050565b6000806040838503121561091f57600080fd5b825167ffffffffffffffff8082111561093757600080fd5b818501915085601f83011261094b57600080fd5b61095a868351602085016105b0565b9350602085015191508082111561097057600080fd5b508301601f8101851361098257600080fd5b610991858251602084016105b0565b9150509250929050565b6000602082840312156109ad57600080fd5b813567ffffffffffffffff808211156109c557600080fd5b9083019061016082860312156109da57600080fd5b6109e2610bfa565b6109eb836105ec565b81526020830135828111156109ff57600080fd5b610a0b878286016105fc565b602083015250604083013560408201526060830135606082015260808301356080820152610a3b60a084016105ec565b60a082015260c083013582811115610a5257600080fd5b610a5e878286016105fc565b60c08301525060e083013582811115610a7657600080fd5b610a82878286016105fc565b60e083015250610100610a968185016106d2565b9082015261012083810135908201526101408084013583811115610ab957600080fd5b610ac5888287016106dd565b918301919091525095945050505050565b600060208284031215610ae857600080fd5b5051919050565b60008060408385031215610b0257600080fd5b825191506020830151610b1481610dda565b809150509250929050565b60008151808452610b37816020860160208601610cfa565b601f01601f19169290920160200192915050565b600080835481600182811c915080831680610b6757607f831692505b6020808410821415610b8757634e487b7160e01b86526022600452602486fd5b818015610b9b5760018114610bac57610bd9565b60ff19861689528489019650610bd9565b60008a81526020902060005b86811015610bd15781548b820152908501908301610bb8565b505084890196505b509498975050505050505050565b60208152600061040e6020830184610b1f565b604051610160810167ffffffffffffffff81118282101715610c1e57610c1e610dac565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610c4d57610c4d610dac565b604052919050565b600067ffffffffffffffff821115610c6f57610c6f610dac565b5060051b60200190565b600067ffffffffffffffff821115610c9357610c93610dac565b50601f01601f191660200190565b60008219821115610cb457610cb4610d80565b500190565b600082610cd657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610cf557610cf5610d80565b500290565b60005b83811015610d15578181015183820152602001610cfd565b83811115610d24576000848401525b50505050565b600181811c90821680610d3e57607f821691505b60208210811415610d5f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415610d7957610d79610d80565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610dd757600080fd5b50565b8015158114610dd757600080fdfea264697066735822122000d5ba0201f411058a843b4285df667bbc4a3744af592eb4b920d0ebf70c7f1a64736f6c63430008060033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.