ETH Price: $2,629.47 (-0.72%)

Contract

0xAa241Ccd398feC742f463c534a610529dCC5888E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SmartWalletWhitelist

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, MIT license
File 1 of 1 : SmartWalletChecker.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.7;

/// @notice Interface of the `SmartWalletChecker` contracts of the protocol
interface SmartWalletChecker {
    function check(address) external view returns (bool);
}

/// @title SmartWalletWhitelist
/// @author Curve Finance and adapted by Angle Core Team (https://etherscan.io/address/0xca719728ef172d0961768581fdf35cb116e0b7a4#code)
/// @notice Provides functions to check whether a wallet has been verified or not to own veANGLE
contract SmartWalletWhitelist {
    /// @notice Mapping between addresses and whether they are whitelisted or not
    mapping(address => bool) public wallets;
    /// @notice Admin address of the contract
    address public admin;
    /// @notice Future admin address of the contract
    //solhint-disable-next-line
    address public future_admin;
    /// @notice Contract which works as this contract and that can whitelist addresses
    address public checker;
    /// @notice Future address to become checker
    //solhint-disable-next-line
    address public future_checker;

    event ApproveWallet(address indexed _wallet);
    event RevokeWallet(address indexed _wallet);

    /// @notice Constructor of the contract
    /// @param _admin Admin address of the contract
    constructor(address _admin) {
        require(_admin != address(0), "0");
        admin = _admin;
    }

    /// @notice Commits to change the admin
    /// @param _admin New admin of the contract
    function commitAdmin(address _admin) external {
        require(msg.sender == admin, "!admin");
        future_admin = _admin;
    }

    /// @notice Changes the admin to the admin that has been committed
    function applyAdmin() external {
        require(msg.sender == admin, "!admin");
        require(future_admin != address(0), "admin not set");
        admin = future_admin;
    }

    /// @notice Commits to change the checker address
    /// @param _checker New checker address
    /// @dev This address can be the zero address in which case there will be no checker
    function commitSetChecker(address _checker) external {
        require(msg.sender == admin, "!admin");
        future_checker = _checker;
    }

    /// @notice Applies the checker previously committed
    function applySetChecker() external {
        require(msg.sender == admin, "!admin");
        checker = future_checker;
    }

    /// @notice Approves a wallet
    /// @param _wallet Wallet to approve
    function approveWallet(address _wallet) public {
        require(msg.sender == admin, "!admin");
        wallets[_wallet] = true;

        emit ApproveWallet(_wallet);
    }

    /// @notice Revokes a wallet
    /// @param _wallet Wallet to revoke
    function revokeWallet(address _wallet) external {
        require(msg.sender == admin, "!admin");
        wallets[_wallet] = false;

        emit RevokeWallet(_wallet);
    }

    /// @notice Checks whether a wallet is whitelisted
    /// @param _wallet Wallet address to check
    /// @dev This function can also rely on another SmartWalletChecker (a `checker` to see whether the wallet is whitelisted or not)
    function check(address _wallet) external view returns (bool) {
        bool _check = wallets[_wallet];
        if (_check) {
            return _check;
        } else {
            if (checker != address(0)) {
                return SmartWalletChecker(checker).check(_wallet);
            }
        }
        return false;
    }
}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_wallet","type":"address"}],"name":"ApproveWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_wallet","type":"address"}],"name":"RevokeWallet","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applySetChecker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"approveWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"check","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"commitAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_checker","type":"address"}],"name":"commitSetChecker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"future_admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"future_checker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"revokeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50604051610a21380380610a2183398101604081905261002f91610092565b6001600160a01b03811661006d5760405162461bcd60e51b81526020600482015260016024820152600360fc1b604482015260640160405180910390fd5b600180546001600160a01b0319166001600160a01b03929092169190911790556100c2565b6000602082840312156100a457600080fd5b81516001600160a01b03811681146100bb57600080fd5b9392505050565b610950806100d16000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80638fcdecc811610081578063c23697a81161005b578063c23697a8146101d4578063cf5303cf146101e7578063f851a4401461020757600080fd5b80638fcdecc81461018e578063943f35a4146101ae578063b0f3b734146101c157600080fd5b80634e67428d116100b25780634e67428d14610140578063808a9d401461014857806389b08f111461015b57600080fd5b80630fcb0ae5146100d957806317f7182a146100ee57806326b42b1a14610138575b600080fd5b6100ec6100e73660046108c2565b610227565b005b60025461010e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100ec610324565b6100ec6103ee565b6100ec6101563660046108c2565b610537565b61017e6101693660046108c2565b60006020819052908152604090205460ff1681565b604051901515815260200161012f565b60045461010e9073ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101bc3660046108c2565b61062c565b6100ec6101cf3660046108c2565b6106f4565b61017e6101e23660046108c2565b6107bc565b60035461010e9073ffffffffffffffffffffffffffffffffffffffff1681565b60015461010e9073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fc1e7aae3f3125e58cfc69ab2a872a655dbb9427614aa85b29bb5abeaca4d6a929190a250565b60015473ffffffffffffffffffffffffffffffffffffffff1633146103a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b600454600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b60025473ffffffffffffffffffffffffffffffffffffffff166104ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f61646d696e206e6f74207365740000000000000000000000000000000000000060448201526064016102a4565b600254600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1b676c3cc753786cb95aff57280fd7406f1da74e2a8b9755fdd395aded3e16dd9190a250565b60015473ffffffffffffffffffffffffffffffffffffffff1633146106ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604081205460ff1680156107f15792915050565b60035473ffffffffffffffffffffffffffffffffffffffff16156108b9576003546040517fc23697a800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063c23697a89060240160206040518083038186803b15801561087a57600080fd5b505afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906108f8565b9392505050565b50600092915050565b6000602082840312156108d457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108b257600080fd5b60006020828403121561090a57600080fd5b815180151581146108b257600080fdfea2646970667358221220d4638eaad596fc470622a43f97524bcd915c6465b6e28d89b2ae6e760a15a2dc64736f6c63430008070033000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80638fcdecc811610081578063c23697a81161005b578063c23697a8146101d4578063cf5303cf146101e7578063f851a4401461020757600080fd5b80638fcdecc81461018e578063943f35a4146101ae578063b0f3b734146101c157600080fd5b80634e67428d116100b25780634e67428d14610140578063808a9d401461014857806389b08f111461015b57600080fd5b80630fcb0ae5146100d957806317f7182a146100ee57806326b42b1a14610138575b600080fd5b6100ec6100e73660046108c2565b610227565b005b60025461010e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100ec610324565b6100ec6103ee565b6100ec6101563660046108c2565b610537565b61017e6101693660046108c2565b60006020819052908152604090205460ff1681565b604051901515815260200161012f565b60045461010e9073ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101bc3660046108c2565b61062c565b6100ec6101cf3660046108c2565b6106f4565b61017e6101e23660046108c2565b6107bc565b60035461010e9073ffffffffffffffffffffffffffffffffffffffff1681565b60015461010e9073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fc1e7aae3f3125e58cfc69ab2a872a655dbb9427614aa85b29bb5abeaca4d6a929190a250565b60015473ffffffffffffffffffffffffffffffffffffffff1633146103a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b600454600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b60025473ffffffffffffffffffffffffffffffffffffffff166104ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f61646d696e206e6f74207365740000000000000000000000000000000000000060448201526064016102a4565b600254600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1b676c3cc753786cb95aff57280fd7406f1da74e2a8b9755fdd395aded3e16dd9190a250565b60015473ffffffffffffffffffffffffffffffffffffffff1633146106ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e000000000000000000000000000000000000000000000000000060448201526064016102a4565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604081205460ff1680156107f15792915050565b60035473ffffffffffffffffffffffffffffffffffffffff16156108b9576003546040517fc23697a800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063c23697a89060240160206040518083038186803b15801561087a57600080fd5b505afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906108f8565b9392505050565b50600092915050565b6000602082840312156108d457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108b257600080fd5b60006020828403121561090a57600080fd5b815180151581146108b257600080fdfea2646970667358221220d4638eaad596fc470622a43f97524bcd915c6465b6e28d89b2ae6e760a15a2dc64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8

-----Decoded View---------------
Arg [0] : _admin (address): 0xdC4e6DFe07EFCa50a197DF15D9200883eF4Eb1c8

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000dc4e6dfe07efca50a197df15d9200883ef4eb1c8


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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.