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
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BaseWallet
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) 2018 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 "../modules/common/IModule.sol"; import "./IWallet.sol"; /** * @title BaseWallet * @notice Simple modular wallet that authorises modules to call its invoke() method. * @author Julien Niset - <[email protected]> */ contract BaseWallet is IWallet { // The owner address public override owner; // The authorised modules mapping (address => bool) public override authorised; // module executing static calls address public staticCallExecutor; // The number of modules uint public override modules; event AuthorisedModule(address indexed module, bool value); event Invoked(address indexed module, address indexed target, uint indexed value, bytes data); event Received(uint indexed value, address indexed sender, bytes data); event OwnerChanged(address owner); /** * @notice Throws if the sender is not an authorised module. */ modifier moduleOnly { require(authorised[msg.sender], "BW: sender not authorized"); _; } /** * @notice Inits the wallet by setting the owner and authorising a list of modules. * @param _owner The owner. * @param _modules The modules to authorise. */ function init(address _owner, address[] calldata _modules) external { require(owner == address(0) && modules == 0, "BW: wallet already initialised"); require(_modules.length > 0, "BW: empty modules"); owner = _owner; modules = _modules.length; for (uint256 i = 0; i < _modules.length; i++) { require(authorised[_modules[i]] == false, "BW: module is already added"); authorised[_modules[i]] = true; IModule(_modules[i]).init(address(this)); emit AuthorisedModule(_modules[i], true); } if (address(this).balance > 0) { emit Received(address(this).balance, address(0), ""); } } /** * @inheritdoc IWallet */ function authoriseModule(address _module, bool _value) external override moduleOnly { if (authorised[_module] != _value) { emit AuthorisedModule(_module, _value); if (_value == true) { modules += 1; authorised[_module] = true; IModule(_module).init(address(this)); } else { modules -= 1; require(modules > 0, "BW: cannot remove last module"); delete authorised[_module]; } } } /** * @inheritdoc IWallet */ function enabled(bytes4 _sig) public view override returns (address) { address executor = staticCallExecutor; if(executor != address(0) && IModule(executor).supportsStaticCall(_sig)) { return executor; } return address(0); } /** * @inheritdoc IWallet */ function enableStaticCall(address _module, bytes4 /* _method */) external override moduleOnly { if(staticCallExecutor != _module) { require(authorised[_module], "BW: unauthorized executor"); staticCallExecutor = _module; } } /** * @inheritdoc IWallet */ function setOwner(address _newOwner) external override moduleOnly { require(_newOwner != address(0), "BW: address cannot be null"); owner = _newOwner; emit OwnerChanged(_newOwner); } /** * @notice Performs a generic transaction. * @param _target The address for the transaction. * @param _value The value of the transaction. * @param _data The data of the transaction. */ function invoke(address _target, uint _value, bytes calldata _data) external moduleOnly returns (bytes memory _result) { bool success; (success, _result) = _target.call{value: _value}(_data); if (!success) { // solhint-disable-next-line no-inline-assembly assembly { returndatacopy(0, 0, returndatasize()) revert(0, returndatasize()) } } emit Invoked(msg.sender, _target, _value, _data); } /** * @notice This method delegates the static call to a target contract if the data corresponds * to an enabled module, or logs the call otherwise. */ fallback() external payable { address module = enabled(msg.sig); if (module == address(0)) { emit Received(msg.value, msg.sender, msg.data); } else { require(authorised[module], "BW: unauthorised module"); // solhint-disable-next-line no-inline-assembly assembly { calldatacopy(0, 0, calldatasize()) let result := staticcall(gas(), module, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 {revert(0, returndatasize())} default {return (0, returndatasize())} } } } receive() external payable { } }
// Copyright (C) 2018 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; /** * @title IModule * @notice Interface for a Module. * @author Julien Niset - <[email protected]>, Olivier VDB - <[email protected]> */ interface IModule { /** * @notice Adds a module to a wallet. Cannot execute when wallet is locked (or under recovery) * @param _wallet The target wallet. * @param _module The modules to authorise. */ function addModule(address _wallet, address _module) external; /** * @notice Inits a Module for a wallet by e.g. setting some wallet specific parameters in storage. * @param _wallet The wallet. */ function init(address _wallet) external; /** * @notice Returns whether the module implements a callback for a given static call method. * @param _methodId The method id. */ function supportsStaticCall(bytes4 _methodId) external view returns (bool _isSupported); }
// Copyright (C) 2018 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.5.4 <0.9.0; /** * @title IWallet * @notice Interface for the BaseWallet */ interface IWallet { /** * @notice Returns the wallet owner. * @return The wallet owner address. */ function owner() external view returns (address); /** * @notice Returns the number of authorised modules. * @return The number of authorised modules. */ function modules() external view returns (uint); /** * @notice Sets a new owner for the wallet. * @param _newOwner The new owner. */ function setOwner(address _newOwner) external; /** * @notice Checks if a module is authorised on the wallet. * @param _module The module address to check. * @return `true` if the module is authorised, otherwise `false`. */ function authorised(address _module) external view returns (bool); /** * @notice Returns the module responsible for a static call redirection. * @param _sig The signature of the static call. * @return the module doing the redirection */ function enabled(bytes4 _sig) external view returns (address); /** * @notice Enables/Disables a module. * @param _module The target module. * @param _value Set to `true` to authorise the module. */ function authoriseModule(address _module, bool _value) external; /** * @notice Enables a static method by specifying the target module to which the call must be delegated. * @param _module The target module. * @param _method The static method signature. */ function enableStaticCall(address _module, bytes4 _method) external; }
{ "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
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"AuthorisedModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Invoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Received","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_module","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"authoriseModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorised","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_module","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"enableStaticCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sig","type":"bytes4"}],"name":"enabled","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address[]","name":"_modules","type":"address[]"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"invoke","outputs":[{"internalType":"bytes","name":"_result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"modules","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticCallExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50611029806100206000396000f3fe6080604052600436106100b55760003560e01c80636e474be7116100695780638f6f03321161004e5780638f6f0332146102d8578063d6eb1bbf14610305578063f7e80e9814610345576100bc565b80636e474be7146102985780638da5cb5b146102b8576100bc565b80631f17732d1161009a5780631f17732d1461021b5780633c5a3cea1461023b5780635f54892b1461025b576100bc565b806313af4035146101d957806313da30b2146101fb576100bc565b366100bc57005b60006100eb6000357fffffffff0000000000000000000000000000000000000000000000000000000016610369565b90506001600160a01b03811661014557336001600160a01b0316347f606834f57405380c4fb88d1f4850326ad3885f014bab3b568dfbf7a041eef738600036604051610138929190610f00565b60405180910390a36101d6565b6001600160a01b03811660009081526001602052604090205460ff166101b25760405162461bcd60e51b815260206004820152601760248201527f42573a20756e617574686f7269736564206d6f64756c6500000000000000000060448201526064015b60405180910390fd5b3660008037600080366000845afa3d6000803e8080156101d1573d6000f35b3d6000fd5b50005b3480156101e557600080fd5b506101f96101f4366004610d2e565b61044b565b005b34801561020757600080fd5b506101f9610216366004610e06565b610561565b34801561022757600080fd5b506101f9610236366004610dd0565b61066a565b34801561024757600080fd5b506101f9610256366004610d4f565b610858565b34801561026757600080fd5b5061027b610276366004610ed6565b610369565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102a457600080fd5b5060025461027b906001600160a01b031681565b3480156102c457600080fd5b5060005461027b906001600160a01b031681565b3480156102e457600080fd5b506102f86102f3366004610e38565b610bbb565b60405161028f9190610f2f565b34801561031157600080fd5b50610335610320366004610d2e565b60016020526000908152604090205460ff1681565b604051901515815260200161028f565b34801561035157600080fd5b5061035b60035481565b60405190815260200161028f565b6002546000906001600160a01b0316801580159061043457506040517f25b509340000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000841660048201526001600160a01b038216906325b509349060240160206040518083038186803b1580156103fc57600080fd5b505afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190610eba565b15610440579050610446565b60009150505b919050565b3360009081526001602052604090205460ff166104aa5760405162461bcd60e51b815260206004820152601960248201527f42573a2073656e646572206e6f7420617574686f72697a65640000000000000060448201526064016101a9565b6001600160a01b0381166105005760405162461bcd60e51b815260206004820152601a60248201527f42573a20616464726573732063616e6e6f74206265206e756c6c00000000000060448201526064016101a9565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369060200160405180910390a150565b3360009081526001602052604090205460ff166105c05760405162461bcd60e51b815260206004820152601960248201527f42573a2073656e646572206e6f7420617574686f72697a65640000000000000060448201526064016101a9565b6002546001600160a01b03838116911614610666576001600160a01b03821660009081526001602052604090205460ff1661063d5760405162461bcd60e51b815260206004820152601960248201527f42573a20756e617574686f72697a6564206578656375746f720000000000000060448201526064016101a9565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b3360009081526001602052604090205460ff166106c95760405162461bcd60e51b815260206004820152601960248201527f42573a2073656e646572206e6f7420617574686f72697a65640000000000000060448201526064016101a9565b6001600160a01b03821660009081526001602052604090205460ff1615158115151461066657816001600160a01b03167f8da3ff870ae294081392139550e167f1f31f277f22015ee22fbffdbd7758f4e18260405161072c911515815260200190565b60405180910390a2600181151514156107cf576001600360008282546107529190610f82565b90915550506001600160a01b038216600081815260016020819052604091829020805460ff191690911790555163066ad14f60e21b81523060048201526319ab453c90602401600060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b50505050610666565b6001600360008282546107e29190610f9a565b90915550506003546108365760405162461bcd60e51b815260206004820152601d60248201527f42573a2063616e6e6f742072656d6f7665206c617374206d6f64756c6500000060448201526064016101a9565b506001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03161580156108715750600354155b6108bd5760405162461bcd60e51b815260206004820152601e60248201527f42573a2077616c6c657420616c726561647920696e697469616c69736564000060448201526064016101a9565b8061090a5760405162461bcd60e51b815260206004820152601160248201527f42573a20656d707479206d6f64756c657300000000000000000000000000000060448201526064016101a9565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03851617815560038290555b81811015610b61576001600084848481811061096457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906109799190610d2e565b6001600160a01b0316815260208101919091526040016000205460ff16156109e35760405162461bcd60e51b815260206004820152601b60248201527f42573a206d6f64756c6520697320616c7265616479206164646564000000000060448201526064016101a9565b6001806000858585818110610a0857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a1d9190610d2e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055828282818110610a6557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a7a9190610d2e565b60405163066ad14f60e21b81523060048201526001600160a01b0391909116906319ab453c90602401600060405180830381600087803b158015610abd57600080fd5b505af1158015610ad1573d6000803e3d6000fd5b50505050828282818110610af557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b0a9190610d2e565b6001600160a01b03167f8da3ff870ae294081392139550e167f1f31f277f22015ee22fbffdbd7758f4e16001604051610b47911515815260200190565b60405180910390a280610b5981610fb1565b915050610938565b504715610bb65760006001600160a01b0316477f606834f57405380c4fb88d1f4850326ad3885f014bab3b568dfbf7a041eef738604051610bad90602080825260009082015260400190565b60405180910390a35b505050565b3360009081526001602052604090205460609060ff16610c1d5760405162461bcd60e51b815260206004820152601960248201527f42573a2073656e646572206e6f7420617574686f72697a65640000000000000060448201526064016101a9565b6000856001600160a01b0316858585604051610c3a929190610ef0565b60006040518083038185875af1925050503d8060008114610c77576040519150601f19603f3d011682016040523d82523d6000602084013e610c7c565b606091505b509250905080610c90573d6000803e3d6000fd5b84866001600160a01b0316336001600160a01b03167f7d2476ab50663f025cff0be85655bcf355f62768615c0c478f3cd5293f8073658787604051610cd6929190610f00565b60405180910390a450949350505050565b80356001600160a01b038116811461044657600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461044657600080fd5b600060208284031215610d3f578081fd5b610d4882610ce7565b9392505050565b600080600060408486031215610d63578182fd5b610d6c84610ce7565b9250602084013567ffffffffffffffff80821115610d88578384fd5b818601915086601f830112610d9b578384fd5b813581811115610da9578485fd5b8760208260051b8501011115610dbd578485fd5b6020830194508093505050509250925092565b60008060408385031215610de2578182fd5b610deb83610ce7565b91506020830135610dfb81610fe2565b809150509250929050565b60008060408385031215610e18578182fd5b610e2183610ce7565b9150610e2f60208401610cfe565b90509250929050565b60008060008060608587031215610e4d578081fd5b610e5685610ce7565b935060208501359250604085013567ffffffffffffffff80821115610e79578283fd5b818701915087601f830112610e8c578283fd5b813581811115610e9a578384fd5b886020828501011115610eab578384fd5b95989497505060200194505050565b600060208284031215610ecb578081fd5b8151610d4881610fe2565b600060208284031215610ee7578081fd5b610d4882610cfe565b6000828483379101908152919050565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b6000602080835283518082850152825b81811015610f5b57858101830151858201604001528201610f3f565b81811115610f6c5783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610f9557610f95610fcc565b500190565b600082821015610fac57610fac610fcc565b500390565b6000600019821415610fc557610fc5610fcc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114610ff057600080fd5b5056fea2646970667358221220b8263be77c2bd4a0e7a515d240d62af837ff31077641bc79f707f7eb16ca53f264736f6c63430008030033
Deployed Bytecode
0x6080604052600436106100b55760003560e01c80636e474be7116100695780638f6f03321161004e5780638f6f0332146102d8578063d6eb1bbf14610305578063f7e80e9814610345576100bc565b80636e474be7146102985780638da5cb5b146102b8576100bc565b80631f17732d1161009a5780631f17732d1461021b5780633c5a3cea1461023b5780635f54892b1461025b576100bc565b806313af4035146101d957806313da30b2146101fb576100bc565b366100bc57005b60006100eb6000357fffffffff0000000000000000000000000000000000000000000000000000000016610369565b90506001600160a01b03811661014557336001600160a01b0316347f606834f57405380c4fb88d1f4850326ad3885f014bab3b568dfbf7a041eef738600036604051610138929190610f00565b60405180910390a36101d6565b6001600160a01b03811660009081526001602052604090205460ff166101b25760405162461bcd60e51b815260206004820152601760248201527f42573a20756e617574686f7269736564206d6f64756c6500000000000000000060448201526064015b60405180910390fd5b3660008037600080366000845afa3d6000803e8080156101d1573d6000f35b3d6000fd5b50005b3480156101e557600080fd5b506101f96101f4366004610d2e565b61044b565b005b34801561020757600080fd5b506101f9610216366004610e06565b610561565b34801561022757600080fd5b506101f9610236366004610dd0565b61066a565b34801561024757600080fd5b506101f9610256366004610d4f565b610858565b34801561026757600080fd5b5061027b610276366004610ed6565b610369565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102a457600080fd5b5060025461027b906001600160a01b031681565b3480156102c457600080fd5b5060005461027b906001600160a01b031681565b3480156102e457600080fd5b506102f86102f3366004610e38565b610bbb565b60405161028f9190610f2f565b34801561031157600080fd5b50610335610320366004610d2e565b60016020526000908152604090205460ff1681565b604051901515815260200161028f565b34801561035157600080fd5b5061035b60035481565b60405190815260200161028f565b6002546000906001600160a01b0316801580159061043457506040517f25b509340000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000841660048201526001600160a01b038216906325b509349060240160206040518083038186803b1580156103fc57600080fd5b505afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190610eba565b15610440579050610446565b60009150505b919050565b3360009081526001602052604090205460ff166104aa5760405162461bcd60e51b815260206004820152601960248201527f42573a2073656e646572206e6f7420617574686f72697a65640000000000000060448201526064016101a9565b6001600160a01b0381166105005760405162461bcd60e51b815260206004820152601a60248201527f42573a20616464726573732063616e6e6f74206265206e756c6c00000000000060448201526064016101a9565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369060200160405180910390a150565b3360009081526001602052604090205460ff166105c05760405162461bcd60e51b815260206004820152601960248201527f42573a2073656e646572206e6f7420617574686f72697a65640000000000000060448201526064016101a9565b6002546001600160a01b03838116911614610666576001600160a01b03821660009081526001602052604090205460ff1661063d5760405162461bcd60e51b815260206004820152601960248201527f42573a20756e617574686f72697a6564206578656375746f720000000000000060448201526064016101a9565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b3360009081526001602052604090205460ff166106c95760405162461bcd60e51b815260206004820152601960248201527f42573a2073656e646572206e6f7420617574686f72697a65640000000000000060448201526064016101a9565b6001600160a01b03821660009081526001602052604090205460ff1615158115151461066657816001600160a01b03167f8da3ff870ae294081392139550e167f1f31f277f22015ee22fbffdbd7758f4e18260405161072c911515815260200190565b60405180910390a2600181151514156107cf576001600360008282546107529190610f82565b90915550506001600160a01b038216600081815260016020819052604091829020805460ff191690911790555163066ad14f60e21b81523060048201526319ab453c90602401600060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b50505050610666565b6001600360008282546107e29190610f9a565b90915550506003546108365760405162461bcd60e51b815260206004820152601d60248201527f42573a2063616e6e6f742072656d6f7665206c617374206d6f64756c6500000060448201526064016101a9565b506001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03161580156108715750600354155b6108bd5760405162461bcd60e51b815260206004820152601e60248201527f42573a2077616c6c657420616c726561647920696e697469616c69736564000060448201526064016101a9565b8061090a5760405162461bcd60e51b815260206004820152601160248201527f42573a20656d707479206d6f64756c657300000000000000000000000000000060448201526064016101a9565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03851617815560038290555b81811015610b61576001600084848481811061096457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906109799190610d2e565b6001600160a01b0316815260208101919091526040016000205460ff16156109e35760405162461bcd60e51b815260206004820152601b60248201527f42573a206d6f64756c6520697320616c7265616479206164646564000000000060448201526064016101a9565b6001806000858585818110610a0857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a1d9190610d2e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055828282818110610a6557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a7a9190610d2e565b60405163066ad14f60e21b81523060048201526001600160a01b0391909116906319ab453c90602401600060405180830381600087803b158015610abd57600080fd5b505af1158015610ad1573d6000803e3d6000fd5b50505050828282818110610af557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b0a9190610d2e565b6001600160a01b03167f8da3ff870ae294081392139550e167f1f31f277f22015ee22fbffdbd7758f4e16001604051610b47911515815260200190565b60405180910390a280610b5981610fb1565b915050610938565b504715610bb65760006001600160a01b0316477f606834f57405380c4fb88d1f4850326ad3885f014bab3b568dfbf7a041eef738604051610bad90602080825260009082015260400190565b60405180910390a35b505050565b3360009081526001602052604090205460609060ff16610c1d5760405162461bcd60e51b815260206004820152601960248201527f42573a2073656e646572206e6f7420617574686f72697a65640000000000000060448201526064016101a9565b6000856001600160a01b0316858585604051610c3a929190610ef0565b60006040518083038185875af1925050503d8060008114610c77576040519150601f19603f3d011682016040523d82523d6000602084013e610c7c565b606091505b509250905080610c90573d6000803e3d6000fd5b84866001600160a01b0316336001600160a01b03167f7d2476ab50663f025cff0be85655bcf355f62768615c0c478f3cd5293f8073658787604051610cd6929190610f00565b60405180910390a450949350505050565b80356001600160a01b038116811461044657600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461044657600080fd5b600060208284031215610d3f578081fd5b610d4882610ce7565b9392505050565b600080600060408486031215610d63578182fd5b610d6c84610ce7565b9250602084013567ffffffffffffffff80821115610d88578384fd5b818601915086601f830112610d9b578384fd5b813581811115610da9578485fd5b8760208260051b8501011115610dbd578485fd5b6020830194508093505050509250925092565b60008060408385031215610de2578182fd5b610deb83610ce7565b91506020830135610dfb81610fe2565b809150509250929050565b60008060408385031215610e18578182fd5b610e2183610ce7565b9150610e2f60208401610cfe565b90509250929050565b60008060008060608587031215610e4d578081fd5b610e5685610ce7565b935060208501359250604085013567ffffffffffffffff80821115610e79578283fd5b818701915087601f830112610e8c578283fd5b813581811115610e9a578384fd5b886020828501011115610eab578384fd5b95989497505060200194505050565b600060208284031215610ecb578081fd5b8151610d4881610fe2565b600060208284031215610ee7578081fd5b610d4882610cfe565b6000828483379101908152919050565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b6000602080835283518082850152825b81811015610f5b57858101830151858201604001528201610f3f565b81811115610f6c5783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610f9557610f95610fcc565b500190565b600082821015610fac57610fac610fcc565b500390565b6000600019821415610fc557610fc5610fcc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114610ff057600080fd5b5056fea2646970667358221220b8263be77c2bd4a0e7a515d240d62af837ff31077641bc79f707f7eb16ca53f264736f6c63430008030033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.