Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 4 from a total of 4 transactions
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WalletRegistryImpl
Compiler Version
v0.6.6+commit.6c089d02
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-06-01 */ /** Author: Loopring Foundation (Loopring Project Ltd) */ pragma solidity ^0.6.6; contract AddressSet { struct Set { address[] addresses; mapping (address => uint) positions; uint count; } mapping (bytes32 => Set) private sets; function addAddressToSet( bytes32 key, address addr, bool maintainList ) internal { Set storage set = sets[key]; require(set.positions[addr] == 0, "ALREADY_IN_SET"); if (maintainList) { require(set.addresses.length == set.count, "PREVIOUSLY_NOT_MAINTAILED"); set.addresses.push(addr); } else { require(set.addresses.length == 0, "MUST_MAINTAIN"); } set.count += 1; set.positions[addr] = set.count; } function removeAddressFromSet( bytes32 key, address addr ) internal { Set storage set = sets[key]; uint pos = set.positions[addr]; require(pos != 0, "NOT_IN_SET"); delete set.positions[addr]; set.count -= 1; if (set.addresses.length > 0) { address lastAddr = set.addresses[set.count]; if (lastAddr != addr) { set.addresses[pos - 1] = lastAddr; set.positions[lastAddr] = pos; } set.addresses.pop(); } } function removeSet(bytes32 key) internal { delete sets[key]; } function isAddressInSet( bytes32 key, address addr ) internal view returns (bool) { return sets[key].positions[addr] != 0; } function numAddressesInSet(bytes32 key) internal view returns (uint) { Set storage set = sets[key]; return set.count; } function addressesInSet(bytes32 key) internal view returns (address[] memory) { Set storage set = sets[key]; require(set.count == set.addresses.length, "NOT_MAINTAINED"); return sets[key].addresses; } } contract Ownable { address public owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner, "UNAUTHORIZED"); _; } function transferOwnership( address newOwner ) public virtual onlyOwner { require(newOwner != address(0), "ZERO_ADDRESS"); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(owner, address(0)); owner = address(0); } } contract Claimable is Ownable { address public pendingOwner; modifier onlyPendingOwner() { require(msg.sender == pendingOwner, "UNAUTHORIZED"); _; } function transferOwnership( address newOwner ) public override onlyOwner { require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); pendingOwner = newOwner; } function claimOwnership() public onlyPendingOwner { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } interface WalletRegistry { function registerWallet(address wallet) external; function isWalletRegistered(address addr) external view returns (bool); function numOfWallets() external view returns (uint); } contract WalletRegistryImpl is Claimable, AddressSet, WalletRegistry { bytes32 internal constant WALLET = keccak256("__WALLET__"); address internal factory; event WalletRegistered (address indexed wallet); event WalletFactoryUpdated (address indexed factory); modifier onlyFactory() { require(msg.sender == factory, "FACTORY_UNAUTHORIZED"); _; } constructor() public Claimable() {} function setWalletFactory(address _factory) external onlyOwner { require(_factory != address(0), "ZERO_ADDRESS"); factory = _factory; emit WalletFactoryUpdated(factory); } function registerWallet(address wallet) external override onlyFactory { addAddressToSet(WALLET, wallet, false); emit WalletRegistered(wallet); } function isWalletRegistered(address addr) public view override returns (bool) { return isAddressInSet(WALLET, addr); } function numOfWallets() public view override returns (uint) { return numAddressesInSet(WALLET); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"}],"name":"WalletFactoryUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"WalletRegistered","type":"event"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWalletRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numOfWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"registerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"name":"setWalletFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916331790556107c9806100326000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80637ebf879c116100665780637ebf879c146100ea5780637f247e49146101105780638da5cb5b1461014a578063e30c39781461016e578063f2fde38b1461017657610093565b80634e71e0c8146100985780634f7a6580146100a2578063715018a6146100bc578063779beedf146100c4575b600080fd5b6100a061019c565b005b6100aa61024e565b60408051918252519081900360200190f35b6100a061027e565b6100a0600480360360208110156100da57600080fd5b50356001600160a01b0316610316565b6100a06004803603602081101561010057600080fd5b50356001600160a01b03166103ce565b6101366004803603602081101561012657600080fd5b50356001600160a01b03166104b6565b604080519115158252519081900360200190f35b6101526104e8565b604080516001600160a01b039092168252519081900360200190f35b6101526104f7565b6100a06004803603602081101561018c57600080fd5b50356001600160a01b0316610506565b6001546001600160a01b031633146101ea576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60408051695f5f57414c4c45545f5f60b01b8152905190819003600a019020600090610279906105df565b905090565b6000546001600160a01b031633146102cc576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6003546001600160a01b0316331461036c576040805162461bcd60e51b8152602060048201526014602482015273119050d513d49657d5539055551213d49256915160621b604482015290519081900360640190fd5b60408051695f5f57414c4c45545f5f60b01b8152905190819003600a019020610397908260006105f5565b6040516001600160a01b038216907faa2be1d5cb66e5596a57cf0d001b117127b2873efd19309d4aa609784c16124890600090a250565b6000546001600160a01b0316331461041c576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b6001600160a01b038116610466576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f276bc6b7f3a3bf51ef77c951554906c71c845188820b58292b7bbca5b010a9d190600090a250565b60408051695f5f57414c4c45545f5f60b01b8152905190819003600a0190206000906104e29083610765565b92915050565b6000546001600160a01b031681565b6001546001600160a01b031681565b6000546001600160a01b03163314610554576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b6001600160a01b0381161580159061057a57506000546001600160a01b03828116911614155b6105bd576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600260208190526040909120015490565b60008381526002602090815260408083206001600160a01b0386168452600181019092529091205415610660576040805162461bcd60e51b815260206004820152600e60248201526d1053149150511657d25397d4d15560921b604482015290519081900360640190fd5b81156106ef5760028101548154146106bf576040805162461bcd60e51b815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c454400000000000000604482015290519081900360640190fd5b80546001810182556000828152602090200180546001600160a01b0319166001600160a01b038516179055610733565b805415610733576040805162461bcd60e51b815260206004820152600d60248201526c26aaa9aa2fa6a0a4a72a20a4a760991b604482015290519081900360640190fd5b6002810180546001908101918290556001600160a01b0390941660009081529190930160205260409020919091555050565b60008281526002602090815260408083206001600160a01b038516845260010190915290205415159291505056fea26469706673582212203a0246414799ae695990f75b0803298596ede36834f7b6161dc8ed6b2d911cc964736f6c63430006060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c80637ebf879c116100665780637ebf879c146100ea5780637f247e49146101105780638da5cb5b1461014a578063e30c39781461016e578063f2fde38b1461017657610093565b80634e71e0c8146100985780634f7a6580146100a2578063715018a6146100bc578063779beedf146100c4575b600080fd5b6100a061019c565b005b6100aa61024e565b60408051918252519081900360200190f35b6100a061027e565b6100a0600480360360208110156100da57600080fd5b50356001600160a01b0316610316565b6100a06004803603602081101561010057600080fd5b50356001600160a01b03166103ce565b6101366004803603602081101561012657600080fd5b50356001600160a01b03166104b6565b604080519115158252519081900360200190f35b6101526104e8565b604080516001600160a01b039092168252519081900360200190f35b6101526104f7565b6100a06004803603602081101561018c57600080fd5b50356001600160a01b0316610506565b6001546001600160a01b031633146101ea576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60408051695f5f57414c4c45545f5f60b01b8152905190819003600a019020600090610279906105df565b905090565b6000546001600160a01b031633146102cc576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6003546001600160a01b0316331461036c576040805162461bcd60e51b8152602060048201526014602482015273119050d513d49657d5539055551213d49256915160621b604482015290519081900360640190fd5b60408051695f5f57414c4c45545f5f60b01b8152905190819003600a019020610397908260006105f5565b6040516001600160a01b038216907faa2be1d5cb66e5596a57cf0d001b117127b2873efd19309d4aa609784c16124890600090a250565b6000546001600160a01b0316331461041c576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b6001600160a01b038116610466576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f276bc6b7f3a3bf51ef77c951554906c71c845188820b58292b7bbca5b010a9d190600090a250565b60408051695f5f57414c4c45545f5f60b01b8152905190819003600a0190206000906104e29083610765565b92915050565b6000546001600160a01b031681565b6001546001600160a01b031681565b6000546001600160a01b03163314610554576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b6001600160a01b0381161580159061057a57506000546001600160a01b03828116911614155b6105bd576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600260208190526040909120015490565b60008381526002602090815260408083206001600160a01b0386168452600181019092529091205415610660576040805162461bcd60e51b815260206004820152600e60248201526d1053149150511657d25397d4d15560921b604482015290519081900360640190fd5b81156106ef5760028101548154146106bf576040805162461bcd60e51b815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c454400000000000000604482015290519081900360640190fd5b80546001810182556000828152602090200180546001600160a01b0319166001600160a01b038516179055610733565b805415610733576040805162461bcd60e51b815260206004820152600d60248201526c26aaa9aa2fa6a0a4a72a20a4a760991b604482015290519081900360640190fd5b6002810180546001908101918290556001600160a01b0390941660009081529190930160205260409020919091555050565b60008281526002602090815260408083206001600160a01b038516845260010190915290205415159291505056fea26469706673582212203a0246414799ae695990f75b0803298596ede36834f7b6161dc8ed6b2d911cc964736f6c63430006060033
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.