ETH Price: $2,869.23 (-2.71%)

Contract

0xc3991f83f2FB241b05db76e0c1BB24a81E0C5463

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Remove Asset3665104222025-08-09 6:00:34169 days ago1754719234IN
0xc3991f83...81E0C5463
0 ETH0.000000360.013294
Add Borrow3665103282025-08-09 6:00:11169 days ago1754719211IN
0xc3991f83...81E0C5463
0 ETH0.000000360.013079
Activate3665101682025-08-09 5:59:31169 days ago1754719171IN
0xc3991f83...81E0C5463
0 ETH0.00000030.011552
Deactivate3665100772025-08-09 5:59:08169 days ago1754719148IN
0xc3991f83...81E0C5463
0 ETH0.000000320.012065
Init389569312022-11-18 3:49:281164 days ago1668743368IN
0xc3991f83...81E0C5463
0 ETH0.000018040.1

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
720860892023-03-21 10:16:271041 days ago1679393787
0xc3991f83...81E0C5463
0 ETH
720860892023-03-21 10:16:271041 days ago1679393787
0xc3991f83...81E0C5463
0 ETH
720860892023-03-21 10:16:271041 days ago1679393787
0xc3991f83...81E0C5463
0 ETH
720860892023-03-21 10:16:271041 days ago1679393787
0xc3991f83...81E0C5463
0 ETH
720860892023-03-21 10:16:271041 days ago1679393787
0xc3991f83...81E0C5463
0 ETH
720860892023-03-21 10:16:271041 days ago1679393787
0xc3991f83...81E0C5463
0 ETH
720860892023-03-21 10:16:271041 days ago1679393787
0xc3991f83...81E0C5463
0 ETH
720860672023-03-21 10:16:201041 days ago1679393780
0xc3991f83...81E0C5463
0 ETH
720860672023-03-21 10:16:201041 days ago1679393780
0xc3991f83...81E0C5463
0 ETH
720860672023-03-21 10:16:201041 days ago1679393780
0xc3991f83...81E0C5463
0 ETH
720860672023-03-21 10:16:201041 days ago1679393780
0xc3991f83...81E0C5463
0 ETH
720860672023-03-21 10:16:201041 days ago1679393780
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720859942023-03-21 10:16:021041 days ago1679393762
0xc3991f83...81E0C5463
0 ETH
720846442023-03-21 10:10:261041 days ago1679393426
0xc3991f83...81E0C5463
0 ETH
720846442023-03-21 10:10:261041 days ago1679393426
0xc3991f83...81E0C5463
0 ETH
720846442023-03-21 10:10:261041 days ago1679393426
0xc3991f83...81E0C5463
0 ETH
720846442023-03-21 10:10:261041 days ago1679393426
0xc3991f83...81E0C5463
0 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Account

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import {Errors} from "../utils/Errors.sol";
import {Helpers} from "../utils/Helpers.sol";
import {IAccount} from "../interface/core/IAccount.sol";
import {IERC20} from "../interface/tokens/IERC20.sol";

/**
    @title Sentiment Account
    @notice Contract that acts as a dynamic and distributed asset reserve
        which holds a user’s collateral and loaned assets
*/
contract Account is IAccount {
    using Helpers for address;

    /* -------------------------------------------------------------------------- */
    /*                              STATE VARIABLES                             */
    /* -------------------------------------------------------------------------- */

    /// @notice Block number for when the account is activated
    uint public activationBlock;

    /**
        @notice Address of account manager
        @dev If the value is 0x0 the contract is not initialized
    */
    address public accountManager;


    /// @notice A list of ERC-20 assets (Collaterals + Borrows) present in the account
    address[] public assets;

    /// @notice A list of borrowed ERC-20 assets present in the account
    address[] public borrows;

    /// @notice A mapping of ERC-20 assets present in the account
    mapping(address => bool) public hasAsset;

    /* -------------------------------------------------------------------------- */
    /*                              CUSTOM MODIFIERS                              */
    /* -------------------------------------------------------------------------- */

    modifier accountManagerOnly() {
        if (msg.sender != accountManager) revert Errors.AccountManagerOnly();
        _;
    }

    /* -------------------------------------------------------------------------- */
    /*                             EXTERNAL FUNCTIONS                             */
    /* -------------------------------------------------------------------------- */

    /**
        @notice Initializes the account by setting the address of the account
            manager
        @dev Can only be called as long as the address of the accountManager is
            0x0
        @param _accountManager address of the account manager
    */
    function init(address _accountManager) external {
        if (accountManager != address(0))
            revert Errors.ContractAlreadyInitialized();
        accountManager = _accountManager;
    }

    /**
        @notice Activates an account by setting the activationBlock to the
            current block number
    */
    function activate() external accountManagerOnly {
        activationBlock = block.number;
    }

    /**
        @notice Deactivates an account by setting the activationBlock to 0
    */
    function deactivate() external accountManagerOnly {
        activationBlock = 0;
    }

    /**
        @notice Returns a list of ERC-20 assets deposited and borrowed by the owner
        @return assets List of addresses
    */
    function getAssets() external view returns (address[] memory) {
        return assets;
    }

    /**
        @notice Returns a list of ERC-20 assets borrowed by the owner
        @return borrows List of addresses
    */
    function getBorrows() external view returns (address[] memory) {
        return borrows;
    }

    /**
        @notice Adds a given ERC-20 token to the assets list
        @param token Address of the ERC-20 token to add
    */
    function addAsset(address token) external accountManagerOnly {
        assets.push(token);
        hasAsset[token] = true;
    }

    /**
        @notice Adds a given ERC-20 token to the borrows list
        @param token Address of the ERC-20 token to add
    */
    function addBorrow(address token) external accountManagerOnly {
        borrows.push(token);
    }

    /**
        @notice Removes a given ERC-20 token from the assets list
        @param token Address of the ERC-20 token to remove
    */
    function removeAsset(address token) external accountManagerOnly {
        _remove(assets, token);
        hasAsset[token] = false;
    }

    /**
        @notice Removes a given ERC-20 token from the borrows list
        @param token Address of the ERC-20 token to remove
    */
    function removeBorrow(address token) external accountManagerOnly {
        _remove(borrows, token);
    }

    /**
        @notice Returns whether the account has debt or not by checking the length
            of the borrows list
        @return hasNoDebt bool
    */
    function hasNoDebt() external view returns (bool) {
        return borrows.length == 0;
    }

    /**
        @notice Generalized utility function to transact with a given contract
        @param target Address of contract to transact with
        @param amt Amount of Eth to send to the target contract
        @param data Encoded sig + params of the function to transact with in the
            target contract
        @return success True if transaction was successful, false otherwise
        @return retData Data returned by given target contract after
            the transaction
    */
    function exec(address target, uint amt, bytes calldata data)
        external
        accountManagerOnly
        returns (bool, bytes memory)
    {
        (bool success, bytes memory retData) = target.call{value: amt}(data);
        return (success, retData);
    }

    /**
        @notice Utility function to transfer all assets to a specified account
            and delete all assets
        @param toAddress address of the account to send the assets to
    */
    function sweepTo(address toAddress) external accountManagerOnly {
        uint assetsLen = assets.length;
        for(uint i; i < assetsLen; ++i) {
            try IERC20(assets[i]).transfer(
                toAddress, assets[i].balanceOf(address(this))
            ) {} catch {}
            if (assets[i].balanceOf(address(this)) == 0)
                hasAsset[assets[i]] = false;
        }
        delete assets;
        toAddress.safeTransferEth(address(this).balance);
    }

    /* -------------------------------------------------------------------------- */
    /*                             INTERNAL FUNCTIONS                             */
    /* -------------------------------------------------------------------------- */

    /**
        @dev Utility function to remove a given address from a list of addresses
        @param arr A list of addresses
        @param token Address to remove
    */
    function _remove(address[] storage arr, address token) internal {
        uint len = arr.length;
        for(uint i; i < len; ++i) {
            if (arr[i] == token) {
                arr[i] = arr[arr.length - 1];
                arr.pop();
                break;
            }
        }
    }

    receive() external payable {}
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IAccount {
    function activate() external;
    function deactivate() external;
    function addAsset(address token) external;
    function addBorrow(address token) external;
    function removeAsset(address token) external;
    function sweepTo(address toAddress) external;
    function removeBorrow(address token) external;
    function init(address accountManager) external;
    function hasAsset(address) external returns (bool);
    function assets(uint) external returns (address);
    function hasNoDebt() external view returns (bool);
    function activationBlock() external view returns (uint);
    function accountManager() external view returns (address);
    function getAssets() external view returns (address[] memory);
    function getBorrows() external view returns (address[] memory);
    function exec(
        address target,
        uint amt,
        bytes calldata data
    ) external returns (bool, bytes memory);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IERC20 {
    function decimals() external view returns (uint8);
    function balanceOf(address _owner) external view returns (uint256 balance);
    function transfer(address _to, uint256 _value)
        external returns (bool success);
    function approve(address _spender, uint256 _value)
        external returns (bool success);
    function allowance(address _owner, address _spender)
        external view returns (uint256 remaining);
    function transferFrom(address _from, address _to, uint256 _value)
        external returns (bool success);
}

File 4 of 5 : Errors.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

library Errors {
    error AdminOnly();
    error MaxSupply();
    error ZeroShares();
    error ZeroAssets();
    error ZeroAddress();
    error MinimumShares();
    error ContractPaused();
    error OutstandingDebt();
    error AccountOwnerOnly();
    error TokenNotContract();
    error AddressNotContract();
    error ContractNotPaused();
    error LTokenUnavailable();
    error LiquidationFailed();
    error EthTransferFailure();
    error AccountManagerOnly();
    error RiskThresholdBreached();
    error FunctionCallRestricted();
    error AccountNotLiquidatable();
    error CollateralTypeRestricted();
    error IncorrectConstructorArgs();
    error ContractAlreadyInitialized();
    error AccountDeactivationFailure();
    error AccountInteractionFailure(address, address, uint, bytes);
}

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity ^0.8.17;

import {Errors} from "./Errors.sol";
import {IERC20} from "../interface/tokens/IERC20.sol";
import {IAccount} from "../interface/core/IAccount.sol";

/// @author Modified from Rari-Capital/Solmate
library Helpers {
    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 amt
    ) internal {
        if (!isContract(token)) revert Errors.TokenNotContract();
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amt)
        );
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FROM_FAILED");
    }

    function safeTransfer(
        address token,
        address to,
        uint256 amt
    ) internal {
        if (!isContract(token)) revert Errors.TokenNotContract();
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(IERC20.transfer.selector, to, amt)
        );
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED");
    }

    function safeTransferEth(address to, uint256 amt) internal {
        (bool success, ) = to.call{value: amt}(new bytes(0));
        if(!success) revert Errors.EthTransferFailure();
    }

    function balanceOf(address token, address owner) internal view returns (uint) {
        return IERC20(token).balanceOf(owner);
    }

    function withdrawEth(address account, address to, uint amt) internal {
        (bool success, ) = IAccount(account).exec(to, amt, new bytes(0));
        if(!success) revert Errors.EthTransferFailure();
    }

    function withdraw(address account, address to, address token, uint amt) internal {
        if (!isContract(token)) revert Errors.TokenNotContract();
        (bool success, bytes memory data) = IAccount(account).exec(token, 0,
                abi.encodeWithSelector(IERC20.transfer.selector, to, amt));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED");
    }

    function safeApprove(address account, address token, address spender, uint amt) internal {
        (bool success, bytes memory data) = IAccount(account).exec(token, 0,
            abi.encodeWithSelector(IERC20.approve.selector, spender, amt));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "APPROVE_FAILED");
    }

    function isContract(address token) internal view returns (bool) {
        return token.code.length > 0;
    }

    function functionDelegateCall(
        address target,
        bytes calldata data
    ) internal {
        if (!isContract(target)) revert Errors.AddressNotContract();
        (bool success, ) = target.delegatecall(data);
        require(success, "CALL_FAILED");
    }
}

Settings
{
  "remappings": [
    "controller/=lib/controller/src/",
    "ds-test/=lib/solmate/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "oracle/=lib/oracle/src/",
    "solidity-bytes-utils/=lib/controller/lib/solidity-bytes-utils/contracts/",
    "solmate/=lib/solmate/src/",
    "v3-core/=lib/oracle/lib/v3-core/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"AccountManagerOnly","type":"error"},{"inputs":[],"name":"ContractAlreadyInitialized","type":"error"},{"inputs":[],"name":"EthTransferFailure","type":"error"},{"inputs":[],"name":"accountManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"assets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"borrows","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"exec","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAssets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBorrows","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasNoDebt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_accountManager","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeBorrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"}],"name":"sweepTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50610dd9806100206000396000f3fe6080604052600436106101025760003560e01c806367e4ac2c11610095578063c982e27a11610064578063c982e27a146102c1578063cbbf7280146102e1578063cf35bdd014610301578063e30cbfa514610321578063eae93e7e1461034157600080fd5b806367e4ac2c1461022b57806380faa3d21461024d57806391c2c46914610271578063a567fb471461029157600080fd5b8063298410e5116100d1578063298410e5146101b45780634a5e42b1146101d457806351b42b00146101f45780635205c9b61461020957600080fd5b80630565bb671461010e5780630f15f4c014610145578063191e9d7c1461015c57806319ab453c1461019457600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b5061012e610129366004610b5f565b610356565b60405161013c929190610c0a565b60405180910390f35b34801561015157600080fd5b5061015a6103f7565b005b34801561016857600080fd5b5061017c610177366004610c46565b610428565b6040516001600160a01b03909116815260200161013c565b3480156101a057600080fd5b5061015a6101af366004610c5f565b610452565b3480156101c057600080fd5b5061015a6101cf366004610c5f565b61049e565b3480156101e057600080fd5b5061015a6101ef366004610c5f565b610530565b34801561020057600080fd5b5061015a610587565b34801561021557600080fd5b50600354155b604051901515815260200161013c565b34801561023757600080fd5b506102406105b8565b60405161013c9190610c7a565b34801561025957600080fd5b5061026360005481565b60405190815260200161013c565b34801561027d57600080fd5b5060015461017c906001600160a01b031681565b34801561029d57600080fd5b5061021b6102ac366004610c5f565b60046020526000908152604090205460ff1681565b3480156102cd57600080fd5b5061015a6102dc366004610c5f565b61061a565b3480156102ed57600080fd5b5061015a6102fc366004610c5f565b610653565b34801561030d57600080fd5b5061017c61031c366004610c46565b61080c565b34801561032d57600080fd5b5061015a61033c366004610c5f565b61081c565b34801561034d57600080fd5b50610240610899565b6001546000906060906001600160a01b031633146103875760405163fae067e560e01b815260040160405180910390fd5b600080876001600160a01b03168787876040516103a5929190610cc7565b60006040518083038185875af1925050503d80600081146103e2576040519150601f19603f3d011682016040523d82523d6000602084013e6103e7565b606091505b5090999098509650505050505050565b6001546001600160a01b031633146104225760405163fae067e560e01b815260040160405180910390fd5b43600055565b6003818154811061043857600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03161561047c57604051631ee1e30360e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146104c95760405163fae067e560e01b815260040160405180910390fd5b6002805460018181019092557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b039093166001600160a01b031990931683179055600091825260046020526040909120805460ff19169091179055565b6001546001600160a01b0316331461055b5760405163fae067e560e01b815260040160405180910390fd5b6105666002826108f9565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6001546001600160a01b031633146105b25760405163fae067e560e01b815260040160405180910390fd5b60008055565b6060600280548060200260200160405190810160405280929190818152602001828054801561061057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105f2575b5050505050905090565b6001546001600160a01b031633146106455760405163fae067e560e01b815260040160405180910390fd5b6106506003826108f9565b50565b6001546001600160a01b0316331461067e5760405163fae067e560e01b815260040160405180910390fd5b60025460005b818110156107e8576002818154811061069f5761069f610cd7565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb846106fe30600286815481106106e3576106e3610cd7565b6000918252602090912001546001600160a01b031690610a07565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1925050508015610765575060408051601f3d908101601f1916820190925261076291810190610ced565b60015b1561076c57505b61078330600283815481106106e3576106e3610cd7565b6000036107d857600060046000600284815481106107a3576107a3610cd7565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790555b6107e181610d2c565b9050610684565b506107f560026000610b11565b6108086001600160a01b03831647610a7e565b5050565b6002818154811061043857600080fd5b6001546001600160a01b031633146108475760405163fae067e560e01b815260040160405180910390fd5b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60606003805480602002602001604051908101604052809291908181526020018280548015610610576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105f2575050505050905090565b815460005b81811015610a0157826001600160a01b031684828154811061092257610922610cd7565b6000918252602090912001546001600160a01b0316036109f1578354849061094c90600190610d45565b8154811061095c5761095c610cd7565b9060005260206000200160009054906101000a90046001600160a01b031684828154811061098c5761098c610cd7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550838054806109ca576109ca610d58565b600082815260209020810160001990810180546001600160a01b0319169055019055610a01565b6109fa81610d2c565b90506108fe565b50505050565b6040516370a0823160e01b81526001600160a01b038281166004830152600091908416906370a0823190602401602060405180830381865afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a759190610d6e565b90505b92915050565b604080516000808252602082019092526001600160a01b038416908390604051610aa89190610d87565b60006040518083038185875af1925050503d8060008114610ae5576040519150601f19603f3d011682016040523d82523d6000602084013e610aea565b606091505b5050905080610b0c5760405163af2349ad60e01b815260040160405180910390fd5b505050565b508054600082559060005260206000209081019061065091905b80821115610b3f5760008155600101610b2b565b5090565b80356001600160a01b0381168114610b5a57600080fd5b919050565b60008060008060608587031215610b7557600080fd5b610b7e85610b43565b935060208501359250604085013567ffffffffffffffff80821115610ba257600080fd5b818701915087601f830112610bb657600080fd5b813581811115610bc557600080fd5b886020828501011115610bd757600080fd5b95989497505060200194505050565b60005b83811015610c01578181015183820152602001610be9565b50506000910152565b82151581526040602082015260008251806040840152610c31816060850160208701610be6565b601f01601f1916919091016060019392505050565b600060208284031215610c5857600080fd5b5035919050565b600060208284031215610c7157600080fd5b610a7582610b43565b6020808252825182820181905260009190848201906040850190845b81811015610cbb5783516001600160a01b031683529284019291840191600101610c96565b50909695505050505050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cff57600080fd5b81518015158114610d0f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600060018201610d3e57610d3e610d16565b5060010190565b81810381811115610a7857610a78610d16565b634e487b7160e01b600052603160045260246000fd5b600060208284031215610d8057600080fd5b5051919050565b60008251610d99818460208701610be6565b919091019291505056fea264697066735822122019e0d717d713217ed6d2d4342b47a883b7fffc3a90cc5fa71620fa03d364a1df64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101025760003560e01c806367e4ac2c11610095578063c982e27a11610064578063c982e27a146102c1578063cbbf7280146102e1578063cf35bdd014610301578063e30cbfa514610321578063eae93e7e1461034157600080fd5b806367e4ac2c1461022b57806380faa3d21461024d57806391c2c46914610271578063a567fb471461029157600080fd5b8063298410e5116100d1578063298410e5146101b45780634a5e42b1146101d457806351b42b00146101f45780635205c9b61461020957600080fd5b80630565bb671461010e5780630f15f4c014610145578063191e9d7c1461015c57806319ab453c1461019457600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b5061012e610129366004610b5f565b610356565b60405161013c929190610c0a565b60405180910390f35b34801561015157600080fd5b5061015a6103f7565b005b34801561016857600080fd5b5061017c610177366004610c46565b610428565b6040516001600160a01b03909116815260200161013c565b3480156101a057600080fd5b5061015a6101af366004610c5f565b610452565b3480156101c057600080fd5b5061015a6101cf366004610c5f565b61049e565b3480156101e057600080fd5b5061015a6101ef366004610c5f565b610530565b34801561020057600080fd5b5061015a610587565b34801561021557600080fd5b50600354155b604051901515815260200161013c565b34801561023757600080fd5b506102406105b8565b60405161013c9190610c7a565b34801561025957600080fd5b5061026360005481565b60405190815260200161013c565b34801561027d57600080fd5b5060015461017c906001600160a01b031681565b34801561029d57600080fd5b5061021b6102ac366004610c5f565b60046020526000908152604090205460ff1681565b3480156102cd57600080fd5b5061015a6102dc366004610c5f565b61061a565b3480156102ed57600080fd5b5061015a6102fc366004610c5f565b610653565b34801561030d57600080fd5b5061017c61031c366004610c46565b61080c565b34801561032d57600080fd5b5061015a61033c366004610c5f565b61081c565b34801561034d57600080fd5b50610240610899565b6001546000906060906001600160a01b031633146103875760405163fae067e560e01b815260040160405180910390fd5b600080876001600160a01b03168787876040516103a5929190610cc7565b60006040518083038185875af1925050503d80600081146103e2576040519150601f19603f3d011682016040523d82523d6000602084013e6103e7565b606091505b5090999098509650505050505050565b6001546001600160a01b031633146104225760405163fae067e560e01b815260040160405180910390fd5b43600055565b6003818154811061043857600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03161561047c57604051631ee1e30360e21b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146104c95760405163fae067e560e01b815260040160405180910390fd5b6002805460018181019092557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b039093166001600160a01b031990931683179055600091825260046020526040909120805460ff19169091179055565b6001546001600160a01b0316331461055b5760405163fae067e560e01b815260040160405180910390fd5b6105666002826108f9565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6001546001600160a01b031633146105b25760405163fae067e560e01b815260040160405180910390fd5b60008055565b6060600280548060200260200160405190810160405280929190818152602001828054801561061057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105f2575b5050505050905090565b6001546001600160a01b031633146106455760405163fae067e560e01b815260040160405180910390fd5b6106506003826108f9565b50565b6001546001600160a01b0316331461067e5760405163fae067e560e01b815260040160405180910390fd5b60025460005b818110156107e8576002818154811061069f5761069f610cd7565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb846106fe30600286815481106106e3576106e3610cd7565b6000918252602090912001546001600160a01b031690610a07565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1925050508015610765575060408051601f3d908101601f1916820190925261076291810190610ced565b60015b1561076c57505b61078330600283815481106106e3576106e3610cd7565b6000036107d857600060046000600284815481106107a3576107a3610cd7565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790555b6107e181610d2c565b9050610684565b506107f560026000610b11565b6108086001600160a01b03831647610a7e565b5050565b6002818154811061043857600080fd5b6001546001600160a01b031633146108475760405163fae067e560e01b815260040160405180910390fd5b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60606003805480602002602001604051908101604052809291908181526020018280548015610610576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116105f2575050505050905090565b815460005b81811015610a0157826001600160a01b031684828154811061092257610922610cd7565b6000918252602090912001546001600160a01b0316036109f1578354849061094c90600190610d45565b8154811061095c5761095c610cd7565b9060005260206000200160009054906101000a90046001600160a01b031684828154811061098c5761098c610cd7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550838054806109ca576109ca610d58565b600082815260209020810160001990810180546001600160a01b0319169055019055610a01565b6109fa81610d2c565b90506108fe565b50505050565b6040516370a0823160e01b81526001600160a01b038281166004830152600091908416906370a0823190602401602060405180830381865afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a759190610d6e565b90505b92915050565b604080516000808252602082019092526001600160a01b038416908390604051610aa89190610d87565b60006040518083038185875af1925050503d8060008114610ae5576040519150601f19603f3d011682016040523d82523d6000602084013e610aea565b606091505b5050905080610b0c5760405163af2349ad60e01b815260040160405180910390fd5b505050565b508054600082559060005260206000209081019061065091905b80821115610b3f5760008155600101610b2b565b5090565b80356001600160a01b0381168114610b5a57600080fd5b919050565b60008060008060608587031215610b7557600080fd5b610b7e85610b43565b935060208501359250604085013567ffffffffffffffff80821115610ba257600080fd5b818701915087601f830112610bb657600080fd5b813581811115610bc557600080fd5b886020828501011115610bd757600080fd5b95989497505060200194505050565b60005b83811015610c01578181015183820152602001610be9565b50506000910152565b82151581526040602082015260008251806040840152610c31816060850160208701610be6565b601f01601f1916919091016060019392505050565b600060208284031215610c5857600080fd5b5035919050565b600060208284031215610c7157600080fd5b610a7582610b43565b6020808252825182820181905260009190848201906040850190845b81811015610cbb5783516001600160a01b031683529284019291840191600101610c96565b50909695505050505050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610cff57600080fd5b81518015158114610d0f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600060018201610d3e57610d3e610d16565b5060010190565b81810381811115610a7857610a78610d16565b634e487b7160e01b600052603160045260246000fd5b600060208284031215610d8057600080fd5b5051919050565b60008251610d99818460208701610be6565b919091019291505056fea264697066735822122019e0d717d713217ed6d2d4342b47a883b7fffc3a90cc5fa71620fa03d364a1df64736f6c63430008110033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.