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 25 from a total of 209 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Dapp | 17727438 | 444 days ago | IN | 0 ETH | 0.00098689 | ||||
Remove Dapp | 17727437 | 444 days ago | IN | 0 ETH | 0.00100403 | ||||
Remove Dapp | 17727436 | 444 days ago | IN | 0 ETH | 0.00099041 | ||||
Remove Dapp | 17727435 | 444 days ago | IN | 0 ETH | 0.00098286 | ||||
Remove Dapp | 17727434 | 444 days ago | IN | 0 ETH | 0.000972 | ||||
Remove Dapp | 17727433 | 444 days ago | IN | 0 ETH | 0.00098248 | ||||
Remove Dapp | 17727432 | 444 days ago | IN | 0 ETH | 0.00101104 | ||||
Remove Dapp | 17727431 | 444 days ago | IN | 0 ETH | 0.00101772 | ||||
Remove Dapp | 17727430 | 444 days ago | IN | 0 ETH | 0.00099162 | ||||
Remove Dapp | 17727429 | 444 days ago | IN | 0 ETH | 0.00100323 | ||||
Remove Dapp | 17727428 | 444 days ago | IN | 0 ETH | 0.0010097 | ||||
Remove Dapp | 17727427 | 444 days ago | IN | 0 ETH | 0.0010282 | ||||
Remove Dapp | 17727426 | 444 days ago | IN | 0 ETH | 0.00104982 | ||||
Remove Dapp | 17721133 | 445 days ago | IN | 0 ETH | 0.00143092 | ||||
Remove Dapp | 17721132 | 445 days ago | IN | 0 ETH | 0.00145563 | ||||
Remove Dapp | 17721131 | 445 days ago | IN | 0 ETH | 0.00145608 | ||||
Remove Dapp | 17721130 | 445 days ago | IN | 0 ETH | 0.00146375 | ||||
Remove Dapp | 17721129 | 445 days ago | IN | 0 ETH | 0.00146522 | ||||
Remove Dapp | 17721128 | 445 days ago | IN | 0 ETH | 0.00137856 | ||||
Remove Dapp | 17721127 | 445 days ago | IN | 0 ETH | 0.00141294 | ||||
Remove Dapp | 17721126 | 445 days ago | IN | 0 ETH | 0.00142855 | ||||
Remove Dapp | 17721125 | 445 days ago | IN | 0 ETH | 0.00143987 | ||||
Remove Dapp | 17721124 | 445 days ago | IN | 0 ETH | 0.00142949 | ||||
Remove Dapp | 17721123 | 445 days ago | IN | 0 ETH | 0.00140972 | ||||
Remove Dapp | 17721122 | 445 days ago | IN | 0 ETH | 0.00143087 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DappRegistry
Compiler Version
v0.8.3+commit.8d00100c
Optimization Enabled:
Yes with 999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// Copyright (C) 2021 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.3; import "./IAuthoriser.sol"; import "./dapp/IFilter.sol"; contract DappRegistry is IAuthoriser { // The timelock period uint64 public timelockPeriod; // The new timelock period uint64 public newTimelockPeriod; // Time at which the new timelock becomes effective uint64 public timelockPeriodChangeAfter; // bit vector of enabled registry ids for each wallet mapping (address => bytes32) public enabledRegistryIds; // [wallet] => [bit vector of 256 registry ids] // authorised dapps and their filters for each registry id mapping (uint8 => mapping (address => bytes32)) public authorisations; // [registryId] => [dapp] => [{filter:160}{validAfter:64}] // pending authorised dapps and their filters for each registry id mapping (uint8 => mapping (address => bytes32)) public pendingFilterUpdates; // [registryId] => [dapp] => [{filter:160}{validAfter:64}] // owners for each registry id mapping (uint8 => address) public registryOwners; // [registryId] => [owner] event RegistryCreated(uint8 registryId, address registryOwner); event OwnerChanged(uint8 registryId, address newRegistryOwner); event TimelockChangeRequested(uint64 newTimelockPeriod); event TimelockChanged(uint64 newTimelockPeriod); event FilterUpdated(uint8 indexed registryId, address dapp, address filter, uint256 validAfter); event FilterUpdateRequested(uint8 indexed registryId, address dapp, address filter, uint256 validAfter); event DappAdded(uint8 indexed registryId, address dapp, address filter, uint256 validAfter); event DappRemoved(uint8 indexed registryId, address dapp); event ToggledRegistry(address indexed sender, uint8 registryId, bool enabled); modifier onlyOwner(uint8 _registryId) { validateOwner(_registryId); _; } constructor(uint64 _timelockPeriod) { // set the timelock period timelockPeriod = _timelockPeriod; // set the owner of the Argent Registry (registryId = 0) registryOwners[0] = msg.sender; emit RegistryCreated(0, msg.sender); emit TimelockChanged(_timelockPeriod); } /********* Wallet-centered functions *************/ /** * @notice Returns whether a registry is enabled for a wallet * @param _wallet The wallet * @param _registryId The registry id */ function isEnabledRegistry(address _wallet, uint8 _registryId) external view returns (bool isEnabled) { uint registries = uint(enabledRegistryIds[_wallet]); return (((registries >> _registryId) & 1) > 0) /* "is bit set for regId?" */ == (_registryId > 0) /* "not Argent registry?" */; } /** * @notice Returns whether a (_spender, _to, _data) call is authorised for a wallet * @param _wallet The wallet * @param _spender The spender of the tokens for token approvals, or the target of the transaction otherwise * @param _to The target of the transaction * @param _data The calldata of the transaction */ function isAuthorised(address _wallet, address _spender, address _to, bytes calldata _data) public view override returns (bool) { uint registries = uint(enabledRegistryIds[_wallet]); // Check Argent Default Registry first. It is enabled by default, implying that a zero // at position 0 of the `registries` bit vector means that the Argent Registry is enabled) for(uint registryId = 0; registryId == 0 || (registries >> registryId) > 0; registryId++) { bool isEnabled = (((registries >> registryId) & 1) > 0) /* "is bit set for regId?" */ == (registryId > 0) /* "not Argent registry?" */; if(isEnabled) { // if registryId is enabled uint auth = uint(authorisations[uint8(registryId)][_spender]); uint validAfter = auth & 0xffffffffffffffff; if (0 < validAfter && validAfter <= block.timestamp) { // if the current time is greater than the validity time address filter = address(uint160(auth >> 64)); if(filter == address(0) || IFilter(filter).isValid(_wallet, _spender, _to, _data)) { return true; } } } } return false; } /** * @notice Returns whether a collection of (_spender, _to, _data) calls are authorised for a wallet * @param _wallet The wallet * @param _spenders The spenders of the tokens for token approvals, or the targets of the transaction otherwise * @param _to The targets of the transaction * @param _data The calldata of the transaction */ function areAuthorised( address _wallet, address[] calldata _spenders, address[] calldata _to, bytes[] calldata _data ) external view override returns (bool) { for(uint i = 0; i < _spenders.length; i++) { if(!isAuthorised(_wallet, _spenders[i], _to[i], _data[i])) { return false; } } return true; } /** * @notice Allows a wallet to decide whether _registryId should be part of the list of enabled registries for that wallet * @param _registryId The id of the registry to enable/disable * @param _enabled Whether the registry should be enabled (true) or disabled (false) */ function toggleRegistry(uint8 _registryId, bool _enabled) external { require(registryOwners[_registryId] != address(0), "DR: unknown registry"); uint registries = uint(enabledRegistryIds[msg.sender]); bool current = (((registries >> _registryId) & 1) > 0) /* "is bit set for regId?" */ == (_registryId > 0) /* "not Argent registry?" */; if(current != _enabled) { enabledRegistryIds[msg.sender] = bytes32(registries ^ (uint(1) << _registryId)); // toggle [_registryId]^th bit emit ToggledRegistry(msg.sender, _registryId, _enabled); } } /************** Management of registry list *****************/ /** * @notice Create a new registry. Only the owner of the Argent registry (i.e. the registry with id 0 -- hence the use of `onlyOwner(0)`) * can create a new registry. * @param _registryId The id of the registry to create * @param _registryOwner The owner of that new registry */ function createRegistry(uint8 _registryId, address _registryOwner) external onlyOwner(0) { require(_registryOwner != address(0), "DR: registry owner is 0"); require(registryOwners[_registryId] == address(0), "DR: duplicate registry"); registryOwners[_registryId] = _registryOwner; emit RegistryCreated(_registryId, _registryOwner); } // Note: removeRegistry is not supported because that would allow the owner to replace registries that // have already been enabled by users with a new (potentially maliciously populated) registry /** * @notice Lets a registry owner change the owner of the registry. * @param _registryId The id of the registry * @param _newRegistryOwner The new owner of the registry */ function changeOwner(uint8 _registryId, address _newRegistryOwner) external onlyOwner(_registryId) { require(_newRegistryOwner != address(0), "DR: new registry owner is 0"); registryOwners[_registryId] = _newRegistryOwner; emit OwnerChanged(_registryId, _newRegistryOwner); } /** * @notice Request a change of the timelock value. Only the owner of the Argent registry (i.e. the registry with id 0 -- * hence the use of `onlyOwner(0)`) can perform that action. This action can be confirmed after the (old) timelock period. * @param _newTimelockPeriod The new timelock period */ function requestTimelockChange(uint64 _newTimelockPeriod) external onlyOwner(0) { newTimelockPeriod = _newTimelockPeriod; timelockPeriodChangeAfter = uint64(block.timestamp) + timelockPeriod; emit TimelockChangeRequested(_newTimelockPeriod); } /** * @notice Confirm a change of the timelock value requested by `requestTimelockChange()`. */ function confirmTimelockChange() external { uint64 newPeriod = newTimelockPeriod; require(timelockPeriodChangeAfter > 0 && timelockPeriodChangeAfter <= block.timestamp, "DR: can't (yet) change timelock"); timelockPeriod = newPeriod; newTimelockPeriod = 0; timelockPeriodChangeAfter = 0; emit TimelockChanged(newPeriod); } /************** Management of registries' content *****************/ /** * @notice Returns the (filter, validAfter) tuple recorded for a dapp in a given registry. * `filter` is the authorisation filter stored for the dapp (if any) and `validAfter` is the * timestamp after which the filter becomes active. * @param _registryId The registry id * @param _dapp The dapp */ function getAuthorisation(uint8 _registryId, address _dapp) external view returns (address filter, uint64 validAfter) { uint auth = uint(authorisations[_registryId][_dapp]); filter = address(uint160(auth >> 64)); validAfter = uint64(auth & 0xffffffffffffffff); } /** * @notice Add a new dapp to the registry with an optional filter * @param _registryId The id of the registry to modify * @param _dapp The address of the dapp contract to authorise. * @param _filter The address of the filter contract to use, if any. */ function addDapp(uint8 _registryId, address _dapp, address _filter) external onlyOwner(_registryId) { require(authorisations[_registryId][_dapp] == bytes32(0), "DR: dapp already added"); uint validAfter = block.timestamp + timelockPeriod; // Store the new authorisation as {filter:160}{validAfter:64}. authorisations[_registryId][_dapp] = bytes32((uint(uint160(_filter)) << 64) | validAfter); emit DappAdded(_registryId, _dapp, _filter, validAfter); } /** * @notice Deauthorise a dapp in a registry * @param _registryId The id of the registry to modify * @param _dapp The address of the dapp contract to deauthorise. */ function removeDapp(uint8 _registryId, address _dapp) external onlyOwner(_registryId) { require(authorisations[_registryId][_dapp] != bytes32(0), "DR: unknown dapp"); delete authorisations[_registryId][_dapp]; delete pendingFilterUpdates[_registryId][_dapp]; emit DappRemoved(_registryId, _dapp); } /** * @notice Request to change an authorisation filter for a dapp that has previously been authorised. We cannot * immediately override the existing filter and need to store the new filter for a timelock period before being * able to change the filter. * @param _registryId The id of the registry to modify * @param _dapp The address of the dapp contract to authorise. * @param _filter The address of the new filter contract to use. */ function requestFilterUpdate(uint8 _registryId, address _dapp, address _filter) external onlyOwner(_registryId) { require(authorisations[_registryId][_dapp] != bytes32(0), "DR: unknown dapp"); uint validAfter = block.timestamp + timelockPeriod; // Store the future authorisation as {filter:160}{validAfter:64} pendingFilterUpdates[_registryId][_dapp] = bytes32((uint(uint160(_filter)) << 64) | validAfter); emit FilterUpdateRequested(_registryId, _dapp, _filter, validAfter); } /** * @notice Confirm the filter change requested by `requestFilterUpdate` * @param _registryId The id of the registry to modify * @param _dapp The address of the dapp contract to authorise. */ function confirmFilterUpdate(uint8 _registryId, address _dapp) external { uint newAuth = uint(pendingFilterUpdates[_registryId][_dapp]); require(newAuth > 0, "DR: no pending filter update"); uint validAfter = newAuth & 0xffffffffffffffff; require(validAfter <= block.timestamp, "DR: too early to confirm auth"); authorisations[_registryId][_dapp] = bytes32(newAuth); emit FilterUpdated(_registryId, _dapp, address(uint160(newAuth >> 64)), validAfter); delete pendingFilterUpdates[_registryId][_dapp]; } /******** Internal Functions ***********/ function validateOwner(uint8 _registryId) internal view { address owner = registryOwners[_registryId]; require(owner != address(0), "DR: unknown registry"); require(msg.sender == owner, "DR: sender != registry owner"); } }
// Copyright (C) 2021 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.3; interface IAuthoriser { function isAuthorised(address _sender, address _spender, address _to, bytes calldata _data) external view returns (bool); function areAuthorised( address _spender, address[] calldata _spenders, address[] calldata _to, bytes[] calldata _data ) external view returns (bool); }
// Copyright (C) 2021 Argent Labs Ltd. <https://argent.xyz> // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.3; interface IFilter { function isValid(address _wallet, address _spender, address _to, bytes calldata _data) external view returns (bool valid); }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 999 }, "evmVersion": "istanbul", "libraries": { "": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint64","name":"_timelockPeriod","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"dapp","type":"address"},{"indexed":false,"internalType":"address","name":"filter","type":"address"},{"indexed":false,"internalType":"uint256","name":"validAfter","type":"uint256"}],"name":"DappAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"dapp","type":"address"}],"name":"DappRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"dapp","type":"address"},{"indexed":false,"internalType":"address","name":"filter","type":"address"},{"indexed":false,"internalType":"uint256","name":"validAfter","type":"uint256"}],"name":"FilterUpdateRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"dapp","type":"address"},{"indexed":false,"internalType":"address","name":"filter","type":"address"},{"indexed":false,"internalType":"uint256","name":"validAfter","type":"uint256"}],"name":"FilterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"newRegistryOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"address","name":"registryOwner","type":"address"}],"name":"RegistryCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"newTimelockPeriod","type":"uint64"}],"name":"TimelockChangeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"newTimelockPeriod","type":"uint64"}],"name":"TimelockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint8","name":"registryId","type":"uint8"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ToggledRegistry","type":"event"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"},{"internalType":"address","name":"_filter","type":"address"}],"name":"addDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address[]","name":"_spenders","type":"address[]"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"bytes[]","name":"_data","type":"bytes[]"}],"name":"areAuthorised","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_newRegistryOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"}],"name":"confirmFilterUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"confirmTimelockChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_registryOwner","type":"address"}],"name":"createRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"enabledRegistryIds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"}],"name":"getAuthorisation","outputs":[{"internalType":"address","name":"filter","type":"address"},{"internalType":"uint64","name":"validAfter","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"isAuthorised","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint8","name":"_registryId","type":"uint8"}],"name":"isEnabledRegistry","outputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newTimelockPeriod","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"pendingFilterUpdates","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"registryOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"}],"name":"removeDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"address","name":"_dapp","type":"address"},{"internalType":"address","name":"_filter","type":"address"}],"name":"requestFilterUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_newTimelockPeriod","type":"uint64"}],"name":"requestTimelockChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timelockPeriod","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockPeriodChangeAfter","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_registryId","type":"uint8"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405161166438038061166483398101604081905261002f91610101565b600080546001600160401b0319166001600160401b038316178155808052600460209081527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8054336001600160a01b0319909116811790915560408051938452918301527fcf0821d600839aa615a26b19af26ff187a7efc142f0487233e2768987237db31910160405180910390a16040516001600160401b03821681527f5cc48c8c2fbfcbb899f818c7569d966a7ebe91ead498b9234cddfc509453659b9060200160405180910390a15061012f565b600060208284031215610112578081fd5b81516001600160401b0381168114610128578182fd5b9392505050565b6115268061013e6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636dd2ee2d116100cd5780639451881911610081578063cbe0afaa11610066578063cbe0afaa14610386578063ecd08dba14610399578063fcc6983e146103b95761016c565b80639451881914610360578063b0e8b8a6146103735761016c565b806387f4415f116100b257806387f4415f1461031a5780638aa6e8de146103455780638c6f896a146103585761016c565b80636dd2ee2d146102b957806377098290146102fa5761016c565b8063314c51fe116101245780634021291611610109578063402129161461025557806345d62e08146102685780635cfdc4d0146102a65761016c565b8063314c51fe1461020957806332df05601461021c5761016c565b806319a1fa6f1161015557806319a1fa6f146101bf5780632a42be54146101d25780632ecaf675146101f55761016c565b806305424669146101715780630ee981f214610186575b600080fd5b61018461017f366004611331565b61042d565b005b6000546101a190600160801b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6101846101cd366004611331565b61050b565b6101e56101e03660046111fa565b610679565b60405190151581526020016101b6565b6000546101a19067ffffffffffffffff1681565b610184610217366004611331565b610756565b61024761022a366004611331565b600260209081526000928352604080842090915290825290205481565b6040519081526020016101b6565b610184610263366004611331565b610890565b6101e56102763660046112a1565b6001600160a01b039190911660009081526001602081905260409091205460ff90921691821c1615159015151490565b6101e56102b436600461115d565b610982565b6102e26102c7366004611317565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101b6565b61024761030836600461113c565b60016020526000908152604090205481565b610247610328366004611331565b600360209081526000928352604080842090915290825290205481565b61018461035336600461139c565b610af7565b610184610be8565b61018461036e36600461135a565b610ce6565b6101846103813660046112ef565b610e18565b61018461039436600461135a565b610eda565b6000546101a19068010000000000000000900467ffffffffffffffff1681565b6104056103c7366004611331565b60ff90911660009081526002602090815260408083206001600160a01b039094168352929052819020549081901c9167ffffffffffffffff90911690565b604080516001600160a01b03909316835267ffffffffffffffff9091166020830152016101b6565b8161043781611000565b6001600160a01b0382166104925760405162461bcd60e51b815260206004820152601b60248201527f44523a206e6577207265676973747279206f776e65722069732030000000000060448201526064015b60405180910390fd5b60ff8316600081815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558251938452908301527f37f23baa6a7d1fb1a55c195205c562cf79564602b331961ea8c3a5a2deed99ba91015b60405180910390a1505050565b60ff821660009081526003602090815260408083206001600160a01b03851684529091529020548061057f5760405162461bcd60e51b815260206004820152601c60248201527f44523a206e6f2070656e64696e672066696c74657220757064617465000000006044820152606401610489565b67ffffffffffffffff8116428111156105da5760405162461bcd60e51b815260206004820152601d60248201527f44523a20746f6f206561726c7920746f20636f6e6669726d20617574680000006044820152606401610489565b60ff841660008181526002602090815260408083206001600160a01b0388811680865291845293829020879055815190815286821c9093169183019190915281018390527f8a5ab3077deda9cd003e635672e2b76a9511e7b7e887881e48a1272baa5eae6f9060600160405180910390a2505060ff90911660009081526003602090815260408083206001600160a01b03909416835292905290812055565b6000805b8681101561074557610725898989848181106106a957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106be919061113c565b8888858181106106de57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106f3919061113c565b87878681811061071357634e487b7160e01b600052603260045260246000fd5b90506020028101906102b49190611425565b61073357600091505061074b565b8061073d816114ae565b91505061067d565b50600190505b979650505050505050565b600061076181611000565b6001600160a01b0382166107b75760405162461bcd60e51b815260206004820152601760248201527f44523a207265676973747279206f776e657220697320300000000000000000006044820152606401610489565b60ff83166000908152600460205260409020546001600160a01b0316156108205760405162461bcd60e51b815260206004820152601660248201527f44523a206475706c6963617465207265676973747279000000000000000000006044820152606401610489565b60ff8316600081815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558251938452908301527fcf0821d600839aa615a26b19af26ff187a7efc142f0487233e2768987237db3191016104fe565b8161089a81611000565b60ff831660009081526002602090815260408083206001600160a01b038616845290915290205461090d5760405162461bcd60e51b815260206004820152601060248201527f44523a20756e6b6e6f776e2064617070000000000000000000000000000000006044820152606401610489565b60ff831660008181526002602090815260408083206001600160a01b03871680855290835281842084905584845260038352818420818552835281842093909355519182527f5585d359d64ad5b95bbb98eb5ea9bae762f70d022015e4887305b1f070d149c4910160405180910390a2505050565b6001600160a01b038516600090815260016020526040812054815b8015806109ab575081811c15155b15610ae757600182821c161515811515148015610ad45760ff821660009081526002602090815260408083206001600160a01b038c16845290915290205467ffffffffffffffff81168015801590610a035750428111155b15610ad157604082901c6001600160a01b0381161580610abb57506040517fe0274e1d0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063e0274e1d90610a6b908f908f908f908f908f906004016113d2565b60206040518083038186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb91906112d3565b15610acf5760019650505050505050610aee565b505b50505b5080610adf816114ae565b91505061099d565b5060009150505b95945050505050565b60ff82166000908152600460205260409020546001600160a01b0316610b5f5760405162461bcd60e51b815260206004820152601460248201527f44523a20756e6b6e6f776e2072656769737472790000000000000000000000006044820152606401610489565b336000908152600160208190526040909120549060ff841682811c9091161515901515148215158114610be2573360008181526001602081815260409283902060ff891692831b871890558251918252861515908201527ff5ccd7ad3122597a385a39f9a6337dee41076036734cf1a1de45c2893a0191ac910160405180910390a25b50505050565b60005467ffffffffffffffff680100000000000000008204811691600160801b90041615801590610c2d575060005442600160801b90910467ffffffffffffffff1611155b610c795760405162461bcd60e51b815260206004820152601f60248201527f44523a2063616e2774202879657429206368616e67652074696d656c6f636b006044820152606401610489565b600080547fffffffffffffffff0000000000000000000000000000000000000000000000001667ffffffffffffffff83169081179091556040519081527f5cc48c8c2fbfcbb899f818c7569d966a7ebe91ead498b9234cddfc509453659b9060200160405180910390a150565b82610cf081611000565b60ff841660009081526002602090815260408083206001600160a01b038716845290915290205415610d645760405162461bcd60e51b815260206004820152601660248201527f44523a206461707020616c7265616479206164646564000000000000000000006044820152606401610489565b60008054610d7c9067ffffffffffffffff164261146a565b60ff861660008181526002602090815260408083206001600160a01b038a81168086529184529382902089831b7bffffffffffffffffffffffffffffffffffffffff000000000000000016871790558151908152928816918301919091528101839052919250907f4fb13278643ce6c9ced7cdc7fdb7a726ce56f62bb8e985aa634b2c4288672331906060015b60405180910390a25050505050565b6000610e2381611000565b6000805467ffffffffffffffff80851668010000000000000000026fffffffffffffffff00000000000000001983168117909355610e6692811691161742611482565b600080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b67ffffffffffffffff9384160217905560405190831681527ff4b7860684c929835858edd3e43644f73901d2b6e70bd71c83920fff61539bb79060200160405180910390a15050565b82610ee481611000565b60ff841660009081526002602090815260408083206001600160a01b0387168452909152902054610f575760405162461bcd60e51b815260206004820152601060248201527f44523a20756e6b6e6f776e2064617070000000000000000000000000000000006044820152606401610489565b60008054610f6f9067ffffffffffffffff164261146a565b60ff861660008181526003602090815260408083206001600160a01b038a81168086529184529382902089831b7bffffffffffffffffffffffffffffffffffffffff000000000000000016871790558151908152928816918301919091528101839052919250907fea06a73e654a8bf96d06dfbceea17dbb955d1f3e3d508d724c67c8846fa0d55290606001610e09565b60ff81166000908152600460205260409020546001600160a01b0316806110695760405162461bcd60e51b815260206004820152601460248201527f44523a20756e6b6e6f776e2072656769737472790000000000000000000000006044820152606401610489565b336001600160a01b038216146110c15760405162461bcd60e51b815260206004820152601c60248201527f44523a2073656e64657220213d207265676973747279206f776e6572000000006044820152606401610489565b5050565b80356001600160a01b03811681146110dc57600080fd5b919050565b60008083601f8401126110f2578182fd5b50813567ffffffffffffffff811115611109578182fd5b6020830191508360208260051b850101111561112457600080fd5b9250929050565b803560ff811681146110dc57600080fd5b60006020828403121561114d578081fd5b611156826110c5565b9392505050565b600080600080600060808688031215611174578081fd5b61117d866110c5565b945061118b602087016110c5565b9350611199604087016110c5565b9250606086013567ffffffffffffffff808211156111b5578283fd5b818801915088601f8301126111c8578283fd5b8135818111156111d6578384fd5b8960208285010111156111e7578384fd5b9699959850939650602001949392505050565b60008060008060008060006080888a031215611214578182fd5b61121d886110c5565b9650602088013567ffffffffffffffff80821115611239578384fd5b6112458b838c016110e1565b909850965060408a013591508082111561125d578384fd5b6112698b838c016110e1565b909650945060608a0135915080821115611281578384fd5b5061128e8a828b016110e1565b989b979a50959850939692959293505050565b600080604083850312156112b3578182fd5b6112bc836110c5565b91506112ca6020840161112b565b90509250929050565b6000602082840312156112e4578081fd5b8151611156816114df565b600060208284031215611300578081fd5b813567ffffffffffffffff81168114611156578182fd5b600060208284031215611328578081fd5b6111568261112b565b60008060408385031215611343578182fd5b61134c8361112b565b91506112ca602084016110c5565b60008060006060848603121561136e578283fd5b6113778461112b565b9250611385602085016110c5565b9150611393604085016110c5565b90509250925092565b600080604083850312156113ae578182fd5b6113b78361112b565b915060208301356113c7816114df565b809150509250929050565b60006001600160a01b038088168352808716602084015280861660408401525060806060830152826080830152828460a084013781830160a090810191909152601f909201601f19160101949350505050565b6000808335601e1984360301811261143b578283fd5b83018035915067ffffffffffffffff821115611455578283fd5b60200191503681900382131561112457600080fd5b6000821982111561147d5761147d6114c9565b500190565b600067ffffffffffffffff8083168185168083038211156114a5576114a56114c9565b01949350505050565b60006000198214156114c2576114c26114c9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b80151581146114ed57600080fd5b5056fea2646970667358221220edd1177b8fcebe58bbb819769b98378328e6cb14f39ebaf58b34a4d910ea4a5c64736f6c634300080300330000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80636dd2ee2d116100cd5780639451881911610081578063cbe0afaa11610066578063cbe0afaa14610386578063ecd08dba14610399578063fcc6983e146103b95761016c565b80639451881914610360578063b0e8b8a6146103735761016c565b806387f4415f116100b257806387f4415f1461031a5780638aa6e8de146103455780638c6f896a146103585761016c565b80636dd2ee2d146102b957806377098290146102fa5761016c565b8063314c51fe116101245780634021291611610109578063402129161461025557806345d62e08146102685780635cfdc4d0146102a65761016c565b8063314c51fe1461020957806332df05601461021c5761016c565b806319a1fa6f1161015557806319a1fa6f146101bf5780632a42be54146101d25780632ecaf675146101f55761016c565b806305424669146101715780630ee981f214610186575b600080fd5b61018461017f366004611331565b61042d565b005b6000546101a190600160801b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6101846101cd366004611331565b61050b565b6101e56101e03660046111fa565b610679565b60405190151581526020016101b6565b6000546101a19067ffffffffffffffff1681565b610184610217366004611331565b610756565b61024761022a366004611331565b600260209081526000928352604080842090915290825290205481565b6040519081526020016101b6565b610184610263366004611331565b610890565b6101e56102763660046112a1565b6001600160a01b039190911660009081526001602081905260409091205460ff90921691821c1615159015151490565b6101e56102b436600461115d565b610982565b6102e26102c7366004611317565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101b6565b61024761030836600461113c565b60016020526000908152604090205481565b610247610328366004611331565b600360209081526000928352604080842090915290825290205481565b61018461035336600461139c565b610af7565b610184610be8565b61018461036e36600461135a565b610ce6565b6101846103813660046112ef565b610e18565b61018461039436600461135a565b610eda565b6000546101a19068010000000000000000900467ffffffffffffffff1681565b6104056103c7366004611331565b60ff90911660009081526002602090815260408083206001600160a01b039094168352929052819020549081901c9167ffffffffffffffff90911690565b604080516001600160a01b03909316835267ffffffffffffffff9091166020830152016101b6565b8161043781611000565b6001600160a01b0382166104925760405162461bcd60e51b815260206004820152601b60248201527f44523a206e6577207265676973747279206f776e65722069732030000000000060448201526064015b60405180910390fd5b60ff8316600081815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558251938452908301527f37f23baa6a7d1fb1a55c195205c562cf79564602b331961ea8c3a5a2deed99ba91015b60405180910390a1505050565b60ff821660009081526003602090815260408083206001600160a01b03851684529091529020548061057f5760405162461bcd60e51b815260206004820152601c60248201527f44523a206e6f2070656e64696e672066696c74657220757064617465000000006044820152606401610489565b67ffffffffffffffff8116428111156105da5760405162461bcd60e51b815260206004820152601d60248201527f44523a20746f6f206561726c7920746f20636f6e6669726d20617574680000006044820152606401610489565b60ff841660008181526002602090815260408083206001600160a01b0388811680865291845293829020879055815190815286821c9093169183019190915281018390527f8a5ab3077deda9cd003e635672e2b76a9511e7b7e887881e48a1272baa5eae6f9060600160405180910390a2505060ff90911660009081526003602090815260408083206001600160a01b03909416835292905290812055565b6000805b8681101561074557610725898989848181106106a957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106be919061113c565b8888858181106106de57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106f3919061113c565b87878681811061071357634e487b7160e01b600052603260045260246000fd5b90506020028101906102b49190611425565b61073357600091505061074b565b8061073d816114ae565b91505061067d565b50600190505b979650505050505050565b600061076181611000565b6001600160a01b0382166107b75760405162461bcd60e51b815260206004820152601760248201527f44523a207265676973747279206f776e657220697320300000000000000000006044820152606401610489565b60ff83166000908152600460205260409020546001600160a01b0316156108205760405162461bcd60e51b815260206004820152601660248201527f44523a206475706c6963617465207265676973747279000000000000000000006044820152606401610489565b60ff8316600081815260046020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558251938452908301527fcf0821d600839aa615a26b19af26ff187a7efc142f0487233e2768987237db3191016104fe565b8161089a81611000565b60ff831660009081526002602090815260408083206001600160a01b038616845290915290205461090d5760405162461bcd60e51b815260206004820152601060248201527f44523a20756e6b6e6f776e2064617070000000000000000000000000000000006044820152606401610489565b60ff831660008181526002602090815260408083206001600160a01b03871680855290835281842084905584845260038352818420818552835281842093909355519182527f5585d359d64ad5b95bbb98eb5ea9bae762f70d022015e4887305b1f070d149c4910160405180910390a2505050565b6001600160a01b038516600090815260016020526040812054815b8015806109ab575081811c15155b15610ae757600182821c161515811515148015610ad45760ff821660009081526002602090815260408083206001600160a01b038c16845290915290205467ffffffffffffffff81168015801590610a035750428111155b15610ad157604082901c6001600160a01b0381161580610abb57506040517fe0274e1d0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063e0274e1d90610a6b908f908f908f908f908f906004016113d2565b60206040518083038186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb91906112d3565b15610acf5760019650505050505050610aee565b505b50505b5080610adf816114ae565b91505061099d565b5060009150505b95945050505050565b60ff82166000908152600460205260409020546001600160a01b0316610b5f5760405162461bcd60e51b815260206004820152601460248201527f44523a20756e6b6e6f776e2072656769737472790000000000000000000000006044820152606401610489565b336000908152600160208190526040909120549060ff841682811c9091161515901515148215158114610be2573360008181526001602081815260409283902060ff891692831b871890558251918252861515908201527ff5ccd7ad3122597a385a39f9a6337dee41076036734cf1a1de45c2893a0191ac910160405180910390a25b50505050565b60005467ffffffffffffffff680100000000000000008204811691600160801b90041615801590610c2d575060005442600160801b90910467ffffffffffffffff1611155b610c795760405162461bcd60e51b815260206004820152601f60248201527f44523a2063616e2774202879657429206368616e67652074696d656c6f636b006044820152606401610489565b600080547fffffffffffffffff0000000000000000000000000000000000000000000000001667ffffffffffffffff83169081179091556040519081527f5cc48c8c2fbfcbb899f818c7569d966a7ebe91ead498b9234cddfc509453659b9060200160405180910390a150565b82610cf081611000565b60ff841660009081526002602090815260408083206001600160a01b038716845290915290205415610d645760405162461bcd60e51b815260206004820152601660248201527f44523a206461707020616c7265616479206164646564000000000000000000006044820152606401610489565b60008054610d7c9067ffffffffffffffff164261146a565b60ff861660008181526002602090815260408083206001600160a01b038a81168086529184529382902089831b7bffffffffffffffffffffffffffffffffffffffff000000000000000016871790558151908152928816918301919091528101839052919250907f4fb13278643ce6c9ced7cdc7fdb7a726ce56f62bb8e985aa634b2c4288672331906060015b60405180910390a25050505050565b6000610e2381611000565b6000805467ffffffffffffffff80851668010000000000000000026fffffffffffffffff00000000000000001983168117909355610e6692811691161742611482565b600080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b67ffffffffffffffff9384160217905560405190831681527ff4b7860684c929835858edd3e43644f73901d2b6e70bd71c83920fff61539bb79060200160405180910390a15050565b82610ee481611000565b60ff841660009081526002602090815260408083206001600160a01b0387168452909152902054610f575760405162461bcd60e51b815260206004820152601060248201527f44523a20756e6b6e6f776e2064617070000000000000000000000000000000006044820152606401610489565b60008054610f6f9067ffffffffffffffff164261146a565b60ff861660008181526003602090815260408083206001600160a01b038a81168086529184529382902089831b7bffffffffffffffffffffffffffffffffffffffff000000000000000016871790558151908152928816918301919091528101839052919250907fea06a73e654a8bf96d06dfbceea17dbb955d1f3e3d508d724c67c8846fa0d55290606001610e09565b60ff81166000908152600460205260409020546001600160a01b0316806110695760405162461bcd60e51b815260206004820152601460248201527f44523a20756e6b6e6f776e2072656769737472790000000000000000000000006044820152606401610489565b336001600160a01b038216146110c15760405162461bcd60e51b815260206004820152601c60248201527f44523a2073656e64657220213d207265676973747279206f776e6572000000006044820152606401610489565b5050565b80356001600160a01b03811681146110dc57600080fd5b919050565b60008083601f8401126110f2578182fd5b50813567ffffffffffffffff811115611109578182fd5b6020830191508360208260051b850101111561112457600080fd5b9250929050565b803560ff811681146110dc57600080fd5b60006020828403121561114d578081fd5b611156826110c5565b9392505050565b600080600080600060808688031215611174578081fd5b61117d866110c5565b945061118b602087016110c5565b9350611199604087016110c5565b9250606086013567ffffffffffffffff808211156111b5578283fd5b818801915088601f8301126111c8578283fd5b8135818111156111d6578384fd5b8960208285010111156111e7578384fd5b9699959850939650602001949392505050565b60008060008060008060006080888a031215611214578182fd5b61121d886110c5565b9650602088013567ffffffffffffffff80821115611239578384fd5b6112458b838c016110e1565b909850965060408a013591508082111561125d578384fd5b6112698b838c016110e1565b909650945060608a0135915080821115611281578384fd5b5061128e8a828b016110e1565b989b979a50959850939692959293505050565b600080604083850312156112b3578182fd5b6112bc836110c5565b91506112ca6020840161112b565b90509250929050565b6000602082840312156112e4578081fd5b8151611156816114df565b600060208284031215611300578081fd5b813567ffffffffffffffff81168114611156578182fd5b600060208284031215611328578081fd5b6111568261112b565b60008060408385031215611343578182fd5b61134c8361112b565b91506112ca602084016110c5565b60008060006060848603121561136e578283fd5b6113778461112b565b9250611385602085016110c5565b9150611393604085016110c5565b90509250925092565b600080604083850312156113ae578182fd5b6113b78361112b565b915060208301356113c7816114df565b809150509250929050565b60006001600160a01b038088168352808716602084015280861660408401525060806060830152826080830152828460a084013781830160a090810191909152601f909201601f19160101949350505050565b6000808335601e1984360301811261143b578283fd5b83018035915067ffffffffffffffff821115611455578283fd5b60200191503681900382131561112457600080fd5b6000821982111561147d5761147d6114c9565b500190565b600067ffffffffffffffff8083168185168083038211156114a5576114a56114c9565b01949350505050565b60006000198214156114c2576114c26114c9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b80151581146114ed57600080fd5b5056fea2646970667358221220edd1177b8fcebe58bbb819769b98378328e6cb14f39ebaf58b34a4d910ea4a5c64736f6c63430008030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _timelockPeriod (uint64): 0
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.