Overview
ETH Balance
ETH Value
$0.00Latest 1 from a total of 1 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Register Wallet | 25573770 | 108 days ago | IN | 0 ETH | 0 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 187619 | 696 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
/// SPDX-License-Identifier: BUSL-1.1
/// Copyright (C) 2023 Brahma.fi
pragma solidity 0.8.19;
import {AddressProviderService} from "../AddressProviderService.sol";
/**
* @title WalletRegistry
* @author Brahma.fi
* @notice Registry for wallet and sub account addresses
*/
contract WalletRegistry is AddressProviderService {
error AlreadyRegistered();
error InvalidSender();
error IsSubAccount();
event RegisterWallet(address indexed wallet);
event RegisterSubAccount(address indexed wallet, address indexed subAccount);
/// @notice subAccount addresses mapped to owner wallet
mapping(address subAccount => address wallet) public subAccountToWallet;
/// @notice wallet addresses mapped to list of subAccounts
mapping(address wallet => address[] subAccountList) public walletToSubAccountList;
/// @notice address of wallet mapped to boolean indicating if it's a wallet
mapping(address => bool) public isWallet;
constructor(address _addressProvider) AddressProviderService(_addressProvider) {}
/**
* @notice Registers a wallet
* @dev Can only be called by wallet to register itself
*/
function registerWallet() external {
if (isWallet[msg.sender]) revert AlreadyRegistered();
if (subAccountToWallet[msg.sender] != address(0)) revert IsSubAccount();
isWallet[msg.sender] = true;
emit RegisterWallet(msg.sender);
}
/**
* @notice Registers a sub account for a Safe
* @param _wallet Console account address, owner of sub account
* @param _subAccount Sub account address to register
* @dev Can only be called by safe deployer
*/
function registerSubAccount(address _wallet, address _subAccount) external {
if (msg.sender != AddressProviderService._getAuthorizedAddress(_SAFE_DEPLOYER_HASH)) revert InvalidSender();
if (subAccountToWallet[_subAccount] != address(0) || isWallet[_subAccount]) revert AlreadyRegistered();
subAccountToWallet[_subAccount] = _wallet;
walletToSubAccountList[_wallet].push(_subAccount);
emit RegisterSubAccount(_wallet, _subAccount);
}
/**
* @notice sub account list getter
* @dev returns sub account list associated with _wallet
* @param _wallet safe address
* @return list of subAccounts for wallet
*/
function getSubAccountsForWallet(address _wallet) external view returns (address[] memory) {
return walletToSubAccountList[_wallet];
}
}/// SPDX-License-Identifier: BUSL-1.1
/// Copyright (C) 2023 Brahma.fi
pragma solidity 0.8.19;
import {IAddressProviderService} from "../../interfaces/IAddressProviderService.sol";
import {AddressProvider} from "../core/AddressProvider.sol";
import {Constants} from "./Constants.sol";
/**
* @title AddressProviderService
* @author Brahma.fi
* @notice Provides a base contract for services to resolve other services through AddressProvider
* @dev This contract is designed to be inheritable by other contracts
* Provides quick and easy access to all contracts in Console Ecosystem
*/
abstract contract AddressProviderService is IAddressProviderService, Constants {
error InvalidAddressProvider();
error NotGovernance(address);
error InvalidAddress();
/// @notice address of addressProvider
// solhint-disable-next-line immutable-vars-naming
AddressProvider public immutable addressProvider;
address public immutable walletRegistry;
address public immutable policyRegistry;
address public immutable executorRegistry;
constructor(address _addressProvider) {
if (_addressProvider == address(0)) revert InvalidAddressProvider();
addressProvider = AddressProvider(_addressProvider);
walletRegistry = addressProvider.getRegistry(_WALLET_REGISTRY_HASH);
policyRegistry = addressProvider.getRegistry(_POLICY_REGISTRY_HASH);
executorRegistry = addressProvider.getRegistry(_EXECUTOR_REGISTRY_HASH);
_notNull(walletRegistry);
_notNull(policyRegistry);
_notNull(executorRegistry);
}
/**
* @inheritdoc IAddressProviderService
*/
function addressProviderTarget() external view override returns (address) {
return address(addressProvider);
}
/**
* @notice Helper to get authorized address from address provider
* @param _key keccak256 key corresponding to authorized address
* @return authorizedAddress
*/
function _getAuthorizedAddress(bytes32 _key) internal view returns (address authorizedAddress) {
authorizedAddress = addressProvider.getAuthorizedAddress(_key);
_notNull(authorizedAddress);
}
/**
* @notice Helper to revert if address is null
* @param _addr address to check
*/
function _notNull(address _addr) internal pure {
if (_addr == address(0)) revert InvalidAddress();
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;
interface IAddressProviderService {
/// @notice Returns the address of the AddressProvider
function addressProviderTarget() external view returns (address);
}/// SPDX-License-Identifier: BUSL-1.1
/// Copyright (C) 2023 Brahma.fi
pragma solidity 0.8.19;
import {IAddressProviderService} from "interfaces/IAddressProviderService.sol";
import {Constants} from "src/core/Constants.sol";
/**
* @title AddressProvider
* @author Brahma.fi
* @notice Single source of truth for resolving addresses of core components and external contracts
*/
contract AddressProvider is Constants {
error RegistryAlreadyExists();
error AddressProviderUnsupported();
error NotGovernance(address);
error NotPendingGovernance(address);
error NullAddress();
event RegistryInitialised(address indexed registry, bytes32 indexed key);
event AuthorizedAddressInitialised(address indexed authorizedAddress, bytes32 indexed key);
event GovernanceTransferRequested(address indexed previousGovernance, address indexed newGovernance);
event GovernanceTransferred(address indexed previousGovernance, address indexed newGovernance);
/// @notice address of governance
address public governance;
/// @notice address of pending governance before accepting
address public pendingGovernance;
/**
* @notice keccak256 hash of authorizedAddress keys mapped to their addresses
* @dev Core & Roles are used as keys for this mapping. These addresses are mutable
* @dev authorizedAddresses are updatable by governance
*/
mapping(bytes32 => address) internal authorizedAddresses;
/**
* @notice keccak256 hash of registry keys mapped to their addresses
* @dev registries are only set once by governance and immutable
*/
mapping(bytes32 => address) internal registries;
constructor(address _governance, address walletRegistry, address policyRegistry, address executorRegistry) {
_notNull(_governance);
governance = _governance;
_notNull(walletRegistry);
_notNull(policyRegistry);
_notNull(executorRegistry);
registries[_WALLET_REGISTRY_HASH] = walletRegistry;
registries[_POLICY_REGISTRY_HASH] = policyRegistry;
registries[_EXECUTOR_REGISTRY_HASH] = executorRegistry;
}
/**
* @notice Governance setter
* @param _newGovernance address of new governance
*/
function setGovernance(address _newGovernance) external {
_notNull(_newGovernance);
_onlyGov();
emit GovernanceTransferRequested(governance, _newGovernance);
pendingGovernance = _newGovernance;
}
/**
* @notice Governance accepter
*/
function acceptGovernance() external {
if (msg.sender != pendingGovernance) {
revert NotPendingGovernance(msg.sender);
}
emit GovernanceTransferred(governance, msg.sender);
governance = msg.sender;
delete pendingGovernance;
}
/**
* @notice Authorized address setter
* @param _key key of authorizedAddress
* @param _authorizedAddress address to set
* @param _overrideCheck overrides check for supported address provider
*/
function setAuthorizedAddress(bytes32 _key, address _authorizedAddress, bool _overrideCheck) external {
_onlyGov();
_notNull(_authorizedAddress);
/// @dev skips checks for supported `addressProvider()` if `_overrideCheck` is true
if (!_overrideCheck) {
/// @dev skips checks for supported `addressProvider()` if `_authorizedAddress` is an EOA
if (_authorizedAddress.code.length != 0) _ensureAddressProvider(_authorizedAddress);
}
authorizedAddresses[_key] = _authorizedAddress;
emit AuthorizedAddressInitialised(_authorizedAddress, _key);
}
/**
* @notice Registry address setter
* @param _key key of registry address
* @param _registry address to set
*/
function setRegistry(bytes32 _key, address _registry) external {
_onlyGov();
_ensureAddressProvider(_registry);
if (registries[_key] != address(0)) revert RegistryAlreadyExists();
registries[_key] = _registry;
emit RegistryInitialised(_registry, _key);
}
/**
* @notice Authorized address getter
* @param _key key of authorized address
* @return address of authorized address
*/
function getAuthorizedAddress(bytes32 _key) external view returns (address) {
return authorizedAddresses[_key];
}
/**
* @notice Registry address getter
* @param _key key of registry address
* @return address of registry address
*/
function getRegistry(bytes32 _key) external view returns (address) {
return registries[_key];
}
/**
* @notice Ensures that the new address supports the AddressProviderService interface
* and is pointing to this AddressProvider
* @param _newAddress address to check
*/
function _ensureAddressProvider(address _newAddress) internal view {
if (IAddressProviderService(_newAddress).addressProviderTarget() != address(this)) {
revert AddressProviderUnsupported();
}
}
/**
* @notice Checks if msg.sender is governance
*/
function _onlyGov() internal view {
if (msg.sender != governance) revert NotGovernance(msg.sender);
}
/**
* @notice Checks and reverts if address is null
* @param addr address to check if null
*/
function _notNull(address addr) internal pure {
if (addr == address(0)) revert NullAddress();
}
}/// SPDX-License-Identifier: BUSL-1.1
/// Copyright (C) 2023 Brahma.fi
pragma solidity 0.8.19;
/**
* @title Constants
* @author Brahma.fi
* @notice Contains constants used by multiple contracts
* @dev Inflates bytecode size by approximately 560 bytes on deployment, but saves gas on runtime
*/
abstract contract Constants {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* REGISTRIES */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @notice Key to map address of ExecutorRegistry
bytes32 internal constant _EXECUTOR_REGISTRY_HASH = bytes32(uint256(keccak256("console.core.ExecutorRegistry")) - 1);
/// @notice Key to map address of WalletRegistry
bytes32 internal constant _WALLET_REGISTRY_HASH = bytes32(uint256(keccak256("console.core.WalletRegistry")) - 1);
/// @notice Key to map address of PolicyRegistry
bytes32 internal constant _POLICY_REGISTRY_HASH = bytes32(uint256(keccak256("console.core.PolicyRegistry")) - 1);
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CORE */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @notice Key to map address of ExecutorPlugin
bytes32 internal constant _EXECUTOR_PLUGIN_HASH = bytes32(uint256(keccak256("console.core.ExecutorPlugin")) - 1);
/// @notice Key to map address of ConsoleFallbackHandler
bytes32 internal constant _CONSOLE_FALLBACK_HANDLER_HASH =
bytes32(uint256(keccak256("console.core.FallbackHandler")) - 1);
/// @notice Key to map address of Safe FallbackHandler
bytes32 internal constant _SAFE_FALLBACK_HANDLER_HASH = bytes32(uint256(keccak256("safe.FallbackHandler")) - 1);
/// @notice Key to map address of Safe MultiSend
bytes32 internal constant _SAFE_MULTI_SEND_HASH = bytes32(uint256(keccak256("safe.MultiSend")) - 1);
/// @notice Key to map address of SafeProxyFactory
bytes32 internal constant _SAFE_PROXY_FACTORY_HASH = bytes32(uint256(keccak256("safe.ProxyFactory")) - 1);
/// @notice Key to map address of SafeSingleton
bytes32 internal constant _SAFE_SINGLETON_HASH = bytes32(uint256(keccak256("safe.Singleton")) - 1);
/// @notice Key to map address of PolicyValidator
bytes32 internal constant _POLICY_VALIDATOR_HASH = bytes32(uint256(keccak256("console.core.PolicyValidator")) - 1);
/// @notice Key to map address of SafeDeployer
bytes32 internal constant _SAFE_DEPLOYER_HASH = bytes32(uint256(keccak256("console.core.SafeDeployer")) - 1);
/// @notice Key to map address of SafeEnabler
bytes32 internal constant _SAFE_ENABLER_HASH = bytes32(uint256(keccak256("console.core.SafeEnabler")) - 1);
/// @notice Key to map address of SafeModerator
bytes32 internal constant _SAFE_MODERATOR_HASH = bytes32(uint256(keccak256("console.core.SafeModerator")) - 1);
/// @notice Key to map address of SafeModeratorOverridable
bytes32 internal constant _SAFE_MODERATOR_OVERRIDABLE_HASH =
bytes32(uint256(keccak256("console.core.SafeModeratorOverridable")) - 1);
/// @notice Key to map address of TransactionValidator
bytes32 internal constant _TRANSACTION_VALIDATOR_HASH =
bytes32(uint256(keccak256("console.core.TransactionValidator")) - 1);
/// @notice Key to map address of ConsoleOpBuilder
bytes32 internal constant _CONSOLE_OP_BUILDER_HASH =
bytes32(uint256(keccak256("console.core.ConsoleOpBuilder")) - 1);
/// @notice Key to map address of ExecutionBlocker
bytes32 internal constant _EXECUTION_BLOCKER_HASH = bytes32(uint256(keccak256("console.core.ExecutionBlocker")) - 1);
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* ROLES */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @notice Key to map address of Role PolicyAuthenticator
bytes32 internal constant _POLICY_AUTHENTICATOR_HASH =
bytes32(uint256(keccak256("console.roles.PolicyAuthenticator")) - 1);
}{
"remappings": [
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
"openzeppelin/=lib/openzeppelin-contracts/contracts/",
"safe-contracts/=lib/safe-contracts/contracts/",
"solady/=lib/solady/src/",
"solmate/=lib/solady/lib/solmate/src/",
"solidity-bytes-utils/=lib/solidity-bytes-utils/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 20000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_addressProvider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyRegistered","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidAddressProvider","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"IsSubAccount","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NotGovernance","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":true,"internalType":"address","name":"subAccount","type":"address"}],"name":"RegisterSubAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"RegisterWallet","type":"event"},{"inputs":[],"name":"addressProvider","outputs":[{"internalType":"contract AddressProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressProviderTarget","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executorRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getSubAccountsForWallet","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"policyRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_subAccount","type":"address"}],"name":"registerSubAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"subAccount","type":"address"}],"name":"subAccountToWallet","outputs":[{"internalType":"address","name":"wallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"walletToSubAccountList","outputs":[{"internalType":"address","name":"subAccountList","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6101006040523480156200001257600080fd5b5060405162000c2238038062000c228339810160408190526200003591620002b9565b806001600160a01b0381166200005e5760405163186b216f60e11b815260040160405180910390fd5b6001600160a01b038116608081905263e51fd7a66200009f60017f70dc150361dabd9d041fabc7ce344e2a2f31a73e202f37c7ba3188518a32c207620002eb565b60405160e083901b6001600160e01b03191681526004810191909152602401602060405180830381865afa158015620000dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001029190620002b9565b6001600160a01b0390811660a0526080511663e51fd7a66200014660017f8547df78c054d57ec09e2772223da2229912d59e65dbd44da39709b40d8c40c3620002eb565b60405160e083901b6001600160e01b03191681526004810191909152602401602060405180830381865afa15801562000183573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a99190620002b9565b6001600160a01b0390811660c0526080511663e51fd7a6620001ed60017f25c3a50f208295151157a1115daca4d2b545fb99d7e2f46dca323d4edca762f2620002eb565b60405160e083901b6001600160e01b03191681526004810191909152602401602060405180830381865afa1580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002509190620002b9565b6001600160a01b031660e05260a0516200026a906200028e565b60c05162000278906200028e565b60e05162000286906200028e565b505062000313565b6001600160a01b038116620002b65760405163e6c4247b60e01b815260040160405180910390fd5b50565b600060208284031215620002cc57600080fd5b81516001600160a01b0381168114620002e457600080fd5b9392505050565b818103818111156200030d57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05160e0516108c76200035b600039600061021e01526000610148015260006101f701526000818161016c015281816101b5015261064f01526108c76000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80632954018c11610081578063ab7aa6ad1161005b578063ab7aa6ad146101f2578063b1cebbe014610219578063ce5570ec1461024057600080fd5b80632954018c146101b057806333ff495a146101d7578063588d65fb146101df57600080fd5b80631c4dd7d0116100b25780631c4dd7d01461014357806321b1e4801461016a578063281f60c11461019057600080fd5b80630db142f2146100ce57806313784dec1461012e575b600080fd5b6101046100dc366004610751565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610775565b610273565b005b6101047f000000000000000000000000000000000000000000000000000000000000000081565b7f0000000000000000000000000000000000000000000000000000000000000000610104565b6101a361019e366004610751565b610441565b60405161012591906107ae565b6101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416104d1565b6101046101ed366004610808565b6105d8565b6101047f000000000000000000000000000000000000000000000000000000000000000081565b6101047f000000000000000000000000000000000000000000000000000000000000000081565b61026361024e366004610751565b60026020526000908152604090205460ff1681565b6040519015158152602001610125565b6102a66102a160017ff75d35140dc499cc2fa6683ab85289215a2156f4e48297dac6392729677d4741610834565b61061d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461030a576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81811660009081526020819052604090205416151580610364575073ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff165b1561039b576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80821660008181526020818152604080832080549588167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716811790915580845260018084528285208054918201815585529284209092018054909516841790945592519192917facb9c63c1050d69261995b89893bf1e5e1fe8f53647db9747212d022f59bea849190a35050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160209081526040918290208054835181840281018401909452808452606093928301828280156104c557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161049a575b50505050509050919050565b3360009081526002602052604090205460ff161561051b576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1615610578576040517fe7a78cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3de0c4f89978c8c9ac219df0e8813f0b4a3df2fad979b3e3607cbe6c0ce6c7649190a2565b600160205281600052604060002081815481106105f457600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b6040517f2bf84475000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632bf8447590602401602060405180830381865afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf9190610874565b90506106da816106df565b919050565b73ffffffffffffffffffffffffffffffffffffffff811661072c576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff8116811461072c57600080fd5b60006020828403121561076357600080fd5b813561076e8161072f565b9392505050565b6000806040838503121561078857600080fd5b82356107938161072f565b915060208301356107a38161072f565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156107fc57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016107ca565b50909695505050505050565b6000806040838503121561081b57600080fd5b82356108268161072f565b946020939093013593505050565b8181038181111561086e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561088657600080fd5b815161076e8161072f56fea26469706673582212203ea6e5f1f4cafcd8decb36cb18900f2b739c1e507f975b1db4660b8bef7b6bb864736f6c634300081300330000000000000000000000006fcf22e22f736d9ead75de8a1f12ca869287e229
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80632954018c11610081578063ab7aa6ad1161005b578063ab7aa6ad146101f2578063b1cebbe014610219578063ce5570ec1461024057600080fd5b80632954018c146101b057806333ff495a146101d7578063588d65fb146101df57600080fd5b80631c4dd7d0116100b25780631c4dd7d01461014357806321b1e4801461016a578063281f60c11461019057600080fd5b80630db142f2146100ce57806313784dec1461012e575b600080fd5b6101046100dc366004610751565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610775565b610273565b005b6101047f000000000000000000000000e2033fd8a642e67f11df2c5567023c1900e440f881565b7f0000000000000000000000006fcf22e22f736d9ead75de8a1f12ca869287e229610104565b6101a361019e366004610751565b610441565b60405161012591906107ae565b6101047f0000000000000000000000006fcf22e22f736d9ead75de8a1f12ca869287e22981565b6101416104d1565b6101046101ed366004610808565b6105d8565b6101047f00000000000000000000000027fbc3310907c0425ea09115397a40dddc15464181565b6101047f0000000000000000000000000145f9674b22be444c9f0e5e2a7761643fe785be81565b61026361024e366004610751565b60026020526000908152604090205460ff1681565b6040519015158152602001610125565b6102a66102a160017ff75d35140dc499cc2fa6683ab85289215a2156f4e48297dac6392729677d4741610834565b61061d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461030a576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81811660009081526020819052604090205416151580610364575073ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff165b1561039b576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff80821660008181526020818152604080832080549588167fffffffffffffffffffffffff0000000000000000000000000000000000000000968716811790915580845260018084528285208054918201815585529284209092018054909516841790945592519192917facb9c63c1050d69261995b89893bf1e5e1fe8f53647db9747212d022f59bea849190a35050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160209081526040918290208054835181840281018401909452808452606093928301828280156104c557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161049a575b50505050509050919050565b3360009081526002602052604090205460ff161561051b576040517f3a81d6fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1615610578576040517fe7a78cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3de0c4f89978c8c9ac219df0e8813f0b4a3df2fad979b3e3607cbe6c0ce6c7649190a2565b600160205281600052604060002081815481106105f457600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b6040517f2bf84475000000000000000000000000000000000000000000000000000000008152600481018290526000907f0000000000000000000000006fcf22e22f736d9ead75de8a1f12ca869287e22973ffffffffffffffffffffffffffffffffffffffff1690632bf8447590602401602060405180830381865afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf9190610874565b90506106da816106df565b919050565b73ffffffffffffffffffffffffffffffffffffffff811661072c576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff8116811461072c57600080fd5b60006020828403121561076357600080fd5b813561076e8161072f565b9392505050565b6000806040838503121561078857600080fd5b82356107938161072f565b915060208301356107a38161072f565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156107fc57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016107ca565b50909695505050505050565b6000806040838503121561081b57600080fd5b82356108268161072f565b946020939093013593505050565b8181038181111561086e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561088657600080fd5b815161076e8161072f56fea26469706673582212203ea6e5f1f4cafcd8decb36cb18900f2b739c1e507f975b1db4660b8bef7b6bb864736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006fcf22e22f736d9ead75de8a1f12ca869287e229
-----Decoded View---------------
Arg [0] : _addressProvider (address): 0x6FCf22e22f736D9ead75de8A1f12cA869287E229
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006fcf22e22f736d9ead75de8a1f12ca869287e229
Net Worth in USD
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.