ETH Price: $1,591.80 (+0.02%)
Gas: 8 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value
Block Caller146053602022-04-17 22:12:09524 days 19 hrs ago1650233529IN
0x19B3cc...6A32ae72
0 ETH0.0005058220.89823905
Allow Caller145611052022-04-11 0:19:04531 days 17 hrs ago1649636344IN
0x19B3cc...6A32ae72
0 ETH0.0015027831.21640371

Latest 1 internal transaction

Advanced mode:
Advanced Filter
Parent Txn Hash Block From To Value
145546032022-04-09 23:57:59532 days 17 hrs ago1649548679  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Aer

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 8000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-10
*/

// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (C) 2018 Rain <[email protected]>
pragma solidity ^0.8.4;

interface ICodex {
    function init(address vault) external;

    function setParam(bytes32 param, uint256 data) external;

    function setParam(
        address,
        bytes32,
        uint256
    ) external;

    function credit(address) external view returns (uint256);

    function unbackedDebt(address) external view returns (uint256);

    function balances(
        address,
        uint256,
        address
    ) external view returns (uint256);

    function vaults(address vault)
        external
        view
        returns (
            uint256 totalNormalDebt,
            uint256 rate,
            uint256 debtCeiling,
            uint256 debtFloor
        );

    function positions(
        address vault,
        uint256 tokenId,
        address position
    ) external view returns (uint256 collateral, uint256 normalDebt);

    function globalDebt() external view returns (uint256);

    function globalUnbackedDebt() external view returns (uint256);

    function globalDebtCeiling() external view returns (uint256);

    function delegates(address, address) external view returns (uint256);

    function grantDelegate(address) external;

    function revokeDelegate(address) external;

    function modifyBalance(
        address,
        uint256,
        address,
        int256
    ) external;

    function transferBalance(
        address vault,
        uint256 tokenId,
        address src,
        address dst,
        uint256 amount
    ) external;

    function transferCredit(
        address src,
        address dst,
        uint256 amount
    ) external;

    function modifyCollateralAndDebt(
        address vault,
        uint256 tokenId,
        address user,
        address collateralizer,
        address debtor,
        int256 deltaCollateral,
        int256 deltaNormalDebt
    ) external;

    function transferCollateralAndDebt(
        address vault,
        uint256 tokenId,
        address src,
        address dst,
        int256 deltaCollateral,
        int256 deltaNormalDebt
    ) external;

    function confiscateCollateralAndDebt(
        address vault,
        uint256 tokenId,
        address user,
        address collateralizer,
        address debtor,
        int256 deltaCollateral,
        int256 deltaNormalDebt
    ) external;

    function settleUnbackedDebt(uint256 debt) external;

    function createUnbackedDebt(
        address debtor,
        address creditor,
        uint256 debt
    ) external;

    function modifyRate(
        address vault,
        address creditor,
        int256 rate
    ) external;

    function lock() external;
}// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)



/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



interface IDebtAuction {
    function auctions(uint256)
        external
        view
        returns (
            uint256,
            uint256,
            address,
            uint48,
            uint48
        );

    function codex() external view returns (ICodex);

    function token() external view returns (IERC20);

    function minBidBump() external view returns (uint256);

    function tokenToSellBump() external view returns (uint256);

    function bidDuration() external view returns (uint48);

    function auctionDuration() external view returns (uint48);

    function auctionCounter() external view returns (uint256);

    function live() external view returns (uint256);

    function aer() external view returns (address);

    function setParam(bytes32 param, uint256 data) external;

    function startAuction(
        address recipient,
        uint256 tokensToSell,
        uint256 bid
    ) external returns (uint256 id);

    function redoAuction(uint256 id) external;

    function submitBid(
        uint256 id,
        uint256 tokensToSell,
        uint256 bid
    ) external;

    function closeAuction(uint256 id) external;

    function lock() external;

    function cancelAuction(uint256 id) external;
}interface ISurplusAuction {
    function auctions(uint256)
        external
        view
        returns (
            uint256,
            uint256,
            address,
            uint48,
            uint48
        );

    function codex() external view returns (ICodex);

    function token() external view returns (IERC20);

    function minBidBump() external view returns (uint256);

    function bidDuration() external view returns (uint48);

    function auctionDuration() external view returns (uint48);

    function auctionCounter() external view returns (uint256);

    function live() external view returns (uint256);

    function setParam(bytes32 param, uint256 data) external;

    function startAuction(uint256 creditToSell, uint256 bid) external returns (uint256 id);

    function redoAuction(uint256 id) external;

    function submitBid(
        uint256 id,
        uint256 creditToSell,
        uint256 bid
    ) external;

    function closeAuction(uint256 id) external;

    function lock(uint256 credit) external;

    function cancelAuction(uint256 id) external;
}

interface IAer {
    function codex() external view returns (ICodex);

    function surplusAuction() external view returns (ISurplusAuction);

    function debtAuction() external view returns (IDebtAuction);

    function debtQueue(uint256) external view returns (uint256);

    function queuedDebt() external view returns (uint256);

    function debtOnAuction() external view returns (uint256);

    function auctionDelay() external view returns (uint256);

    function debtAuctionSellSize() external view returns (uint256);

    function debtAuctionBidSize() external view returns (uint256);

    function surplusAuctionSellSize() external view returns (uint256);

    function surplusBuffer() external view returns (uint256);

    function live() external view returns (uint256);

    function setParam(bytes32 param, uint256 data) external;

    function setParam(bytes32 param, address data) external;

    function queueDebt(uint256 debt) external;

    function unqueueDebt(uint256 queuedAt) external;

    function settleDebtWithSurplus(uint256 debt) external;

    function settleAuctionedDebt(uint256 debt) external;

    function startDebtAuction() external returns (uint256 auctionId);

    function startSurplusAuction() external returns (uint256 auctionId);

    function transferCredit(address to, uint256 credit) external;

    function lock() external;
}
interface IGuarded {
    function ANY_SIG() external view returns (bytes32);

    function ANY_CALLER() external view returns (address);

    function allowCaller(bytes32 sig, address who) external;

    function blockCaller(bytes32 sig, address who) external;

    function canCall(bytes32 sig, address who) external view returns (bool);
}
/// @title Guarded
/// @notice Mixin implementing an authentication scheme on a method level
abstract contract Guarded is IGuarded {
    /// ======== Custom Errors ======== ///

    error Guarded__notRoot();
    error Guarded__notGranted();

    /// ======== Storage ======== ///

    /// @notice Wildcard for granting a caller to call every guarded method
    bytes32 public constant override ANY_SIG = keccak256("ANY_SIG");
    /// @notice Wildcard for granting a caller to call every guarded method
    address public constant override ANY_CALLER = address(uint160(uint256(bytes32(keccak256("ANY_CALLER")))));

    /// @notice Mapping storing who is granted to which method
    /// @dev Method Signature => Caller => Bool
    mapping(bytes32 => mapping(address => bool)) private _canCall;

    /// ======== Events ======== ///

    event AllowCaller(bytes32 sig, address who);
    event BlockCaller(bytes32 sig, address who);

    constructor() {
        // set root
        _setRoot(msg.sender);
    }

    /// ======== Auth ======== ///

    modifier callerIsRoot() {
        if (_canCall[ANY_SIG][msg.sender]) {
            _;
        } else revert Guarded__notRoot();
    }

    modifier checkCaller() {
        if (canCall(msg.sig, msg.sender)) {
            _;
        } else revert Guarded__notGranted();
    }

    /// @notice Grant the right to call method `sig` to `who`
    /// @dev Only the root user (granted `ANY_SIG`) is able to call this method
    /// @param sig Method signature (4Byte)
    /// @param who Address of who should be able to call `sig`
    function allowCaller(bytes32 sig, address who) public override callerIsRoot {
        _canCall[sig][who] = true;
        emit AllowCaller(sig, who);
    }

    /// @notice Revoke the right to call method `sig` from `who`
    /// @dev Only the root user (granted `ANY_SIG`) is able to call this method
    /// @param sig Method signature (4Byte)
    /// @param who Address of who should not be able to call `sig` anymore
    function blockCaller(bytes32 sig, address who) public override callerIsRoot {
        _canCall[sig][who] = false;
        emit BlockCaller(sig, who);
    }

    /// @notice Returns if `who` can call `sig`
    /// @param sig Method signature (4Byte)
    /// @param who Address of who should be able to call `sig`
    function canCall(bytes32 sig, address who) public view override returns (bool) {
        return (_canCall[sig][who] || _canCall[ANY_SIG][who] || _canCall[sig][ANY_CALLER]);
    }

    /// @notice Sets the root user (granted `ANY_SIG`)
    /// @param root Address of who should be set as root
    function _setRoot(address root) internal {
        _canCall[ANY_SIG][root] = true;
        emit AllowCaller(ANY_SIG, root);
    }

    /// @notice Unsets the root user (granted `ANY_SIG`)
    /// @param root Address of who should be unset as root
    function _unsetRoot(address root) internal {
        _canCall[ANY_SIG][root] = false;
        emit AllowCaller(ANY_SIG, root);
    }
}// Copyright (C) 2020 Maker Ecosystem Growth Holdings, INC.

uint256 constant MLN = 10**6;
uint256 constant BLN = 10**9;
uint256 constant WAD = 10**18;
uint256 constant RAY = 10**18;
uint256 constant RAD = 10**18;

/* solhint-disable func-visibility, no-inline-assembly */

error Math__toInt256_overflow(uint256 x);

function toInt256(uint256 x) pure returns (int256) {
    if (x > uint256(type(int256).max)) revert Math__toInt256_overflow(x);
    return int256(x);
}

function min(uint256 x, uint256 y) pure returns (uint256 z) {
    unchecked {
        z = x <= y ? x : y;
    }
}

function max(uint256 x, uint256 y) pure returns (uint256 z) {
    unchecked {
        z = x >= y ? x : y;
    }
}

error Math__diff_overflow(uint256 x, uint256 y);

function diff(uint256 x, uint256 y) pure returns (int256 z) {
    unchecked {
        z = int256(x) - int256(y);
        if (!(int256(x) >= 0 && int256(y) >= 0)) revert Math__diff_overflow(x, y);
    }
}

error Math__add_overflow(uint256 x, uint256 y);

function add(uint256 x, uint256 y) pure returns (uint256 z) {
    unchecked {
        if ((z = x + y) < x) revert Math__add_overflow(x, y);
    }
}

error Math__add48_overflow(uint256 x, uint256 y);

function add48(uint48 x, uint48 y) pure returns (uint48 z) {
    unchecked {
        if ((z = x + y) < x) revert Math__add48_overflow(x, y);
    }
}

error Math__add_overflow_signed(uint256 x, int256 y);

function add(uint256 x, int256 y) pure returns (uint256 z) {
    unchecked {
        z = x + uint256(y);
        if (!(y >= 0 || z <= x)) revert Math__add_overflow_signed(x, y);
        if (!(y <= 0 || z >= x)) revert Math__add_overflow_signed(x, y);
    }
}

error Math__sub_overflow(uint256 x, uint256 y);

function sub(uint256 x, uint256 y) pure returns (uint256 z) {
    unchecked {
        if ((z = x - y) > x) revert Math__sub_overflow(x, y);
    }
}

error Math__sub_overflow_signed(uint256 x, int256 y);

function sub(uint256 x, int256 y) pure returns (uint256 z) {
    unchecked {
        z = x - uint256(y);
        if (!(y <= 0 || z <= x)) revert Math__sub_overflow_signed(x, y);
        if (!(y >= 0 || z >= x)) revert Math__sub_overflow_signed(x, y);
    }
}

error Math__mul_overflow(uint256 x, uint256 y);

function mul(uint256 x, uint256 y) pure returns (uint256 z) {
    unchecked {
        if (!(y == 0 || (z = x * y) / y == x)) revert Math__mul_overflow(x, y);
    }
}

error Math__mul_overflow_signed(uint256 x, int256 y);

function mul(uint256 x, int256 y) pure returns (int256 z) {
    unchecked {
        z = int256(x) * y;
        if (int256(x) < 0) revert Math__mul_overflow_signed(x, y);
        if (!(y == 0 || z / y == int256(x))) revert Math__mul_overflow_signed(x, y);
    }
}

function wmul(uint256 x, uint256 y) pure returns (uint256 z) {
    unchecked {
        z = mul(x, y) / WAD;
    }
}

function wmul(uint256 x, int256 y) pure returns (int256 z) {
    unchecked {
        z = mul(x, y) / int256(WAD);
    }
}

error Math__div_overflow(uint256 x, uint256 y);

function div(uint256 x, uint256 y) pure returns (uint256 z) {
    unchecked {
        if (y == 0) revert Math__div_overflow(x, y);
        return x / y;
    }
}

function wdiv(uint256 x, uint256 y) pure returns (uint256 z) {
    unchecked {
        z = mul(x, WAD) / y;
    }
}

// optimized version from dss PR #78
function wpow(
    uint256 x,
    uint256 n,
    uint256 b
) pure returns (uint256 z) {
    unchecked {
        assembly {
            switch n
            case 0 {
                z := b
            }
            default {
                switch x
                case 0 {
                    z := 0
                }
                default {
                    switch mod(n, 2)
                    case 0 {
                        z := b
                    }
                    default {
                        z := x
                    }
                    let half := div(b, 2) // for rounding.
                    for {
                        n := div(n, 2)
                    } n {
                        n := div(n, 2)
                    } {
                        let xx := mul(x, x)
                        if shr(128, x) {
                            revert(0, 0)
                        }
                        let xxRound := add(xx, half)
                        if lt(xxRound, xx) {
                            revert(0, 0)
                        }
                        x := div(xxRound, b)
                        if mod(n, 2) {
                            let zx := mul(z, x)
                            if and(iszero(iszero(x)), iszero(eq(div(zx, x), z))) {
                                revert(0, 0)
                            }
                            let zxRound := add(zx, half)
                            if lt(zxRound, zx) {
                                revert(0, 0)
                            }
                            z := div(zxRound, b)
                        }
                    }
                }
            }
        }
    }
}

/* solhint-disable func-visibility, no-inline-assembly */
/// @title Aer (short for Aerarium)
/// @notice `Aer` is used for managing the protocol's debt and surplus balances via the DebtAuction and
/// SurplusAuction contracts.
/// Uses Vow.sol from DSS (MakerDAO) / AccountingEngine.sol from GEB (Reflexer Labs) as a blueprint
/// Changes from Vow.sol / AccountingEngine.sol:
/// - only WAD precision is used (no RAD and RAY)
/// - uses a method signature based authentication scheme
contract Aer is Guarded, IAer {
    /// ======== Custom Errors ======== ///

    error Aer__setParam_unrecognizedParam();
    error Aer__unqueueDebt_auctionDelayNotPassed();
    error Aer__settleDebtWithSurplus_insufficientSurplus();
    error Aer__settleDebtWithSurplus_insufficientDebt();
    error Aer__settleAuctionedDebt_notEnoughDebtOnAuction();
    error Aer__settleAuctionedDebt_insufficientSurplus();
    error Aer__startDebtAuction_insufficientDebt();
    error Aer__startDebtAuction_surplusNotZero();
    error Aer__startSurplusAuction_insufficientSurplus();
    error Aer__startSurplusAuction_debtNotZero();
    error Aer__transferCredit_insufficientCredit();
    error Aer__lock_notLive();

    /// ======== Storage ======== ///

    /// @notice Codex
    ICodex public immutable override codex;
    /// @notice SurplusAuction
    ISurplusAuction public override surplusAuction;
    /// @notice DebtAuction
    IDebtAuction public override debtAuction;

    /// @notice List of debt amounts to be auctioned sorted by the time at which they where queued
    /// @dev Queued at timestamp => Debt [wad]
    mapping(uint256 => uint256) public override debtQueue;
    /// @notice Queued debt amount [wad]
    uint256 public override queuedDebt;
    /// @notice Amount of debt currently on auction [wad]
    uint256 public override debtOnAuction;

    /// @notice Time after which queued debt can be put up for auction [seconds]
    uint256 public override auctionDelay;
    /// @notice Amount of tokens to sell in each debt auction [wad]
    uint256 public override debtAuctionSellSize;
    /// @notice Min. amount of (credit to bid or debt to sell) for tokens [wad]
    uint256 public override debtAuctionBidSize;

    /// @notice Amount of credit to sell in each surplus auction [wad]
    uint256 public override surplusAuctionSellSize;
    /// @notice Amount of credit required for starting a surplus auction [wad]
    uint256 public override surplusBuffer;

    /// @notice Boolean indicating if this contract is live (0 - not live, 1 - live)
    uint256 public override live;

    /// ======== Events ======== ///
    event SetParam(bytes32 indexed param, uint256 data);
    event SetParam(bytes32 indexed param, address indexed data);
    event QueueDebt(uint256 indexed queuedAt, uint256 debtQueue, uint256 queuedDebt);
    event UnqueueDebt(uint256 indexed queuedAt, uint256 queuedDebt);
    event StartDebtAuction(uint256 debtOnAuction, uint256 indexed auctionId);
    event SettleAuctionedDebt(uint256 debtOnAuction);
    event StartSurplusAuction(uint256 indexed auctionId);
    event SettleDebtWithSurplus(uint256 debt);
    event Lock();

    constructor(
        address codex_,
        address surplusAuction_,
        address debtAuction_
    ) Guarded() {
        codex = ICodex(codex_);
        surplusAuction = ISurplusAuction(surplusAuction_);
        debtAuction = IDebtAuction(debtAuction_);
        ICodex(codex_).grantDelegate(surplusAuction_);
        live = 1;
    }

    /// ======== Configuration ======== ///

    /// @notice Sets various variables for this contract
    /// @dev Sender has to be allowed to call this method
    /// @param param Name of the variable to set
    /// @param data New value to set for the variable [wad]
    function setParam(bytes32 param, uint256 data) external override checkCaller {
        if (param == "auctionDelay") auctionDelay = data;
        else if (param == "surplusAuctionSellSize") surplusAuctionSellSize = data;
        else if (param == "debtAuctionBidSize") debtAuctionBidSize = data;
        else if (param == "debtAuctionSellSize") debtAuctionSellSize = data;
        else if (param == "surplusBuffer") surplusBuffer = data;
        else revert Aer__setParam_unrecognizedParam();
        emit SetParam(param, data);
    }

    /// @notice Sets various variables for this contract
    /// @dev Sender has to be allowed to call this method
    /// @param param Name of the variable to set
    /// @param data New value to set for the variable [address]
    function setParam(bytes32 param, address data) external override checkCaller {
        if (param == "surplusAuction") {
            codex.revokeDelegate(address(surplusAuction));
            surplusAuction = ISurplusAuction(data);
            codex.grantDelegate(data);
        } else if (param == "debtAuction") debtAuction = IDebtAuction(data);
        else revert Aer__setParam_unrecognizedParam();
        emit SetParam(param, data);
    }

    /// ======== Debt Auction ======== ///

    /// @notice Pushes new debt to the debt queue
    /// @dev Sender has to be allowed to call this method
    /// @param debt Amount of debt [wad]
    function queueDebt(uint256 debt) external override checkCaller {
        debtQueue[block.timestamp] = add(debtQueue[block.timestamp], debt);
        queuedDebt = add(queuedDebt, debt);
        emit QueueDebt(block.timestamp, debtQueue[block.timestamp], queuedDebt);
    }

    /// @notice Pops debt from the debt queue
    /// @param queuedAt Timestamp at which the debt has been queued [seconds]
    function unqueueDebt(uint256 queuedAt) external override {
        if (add(queuedAt, auctionDelay) > block.timestamp) revert Aer__unqueueDebt_auctionDelayNotPassed();
        queuedDebt = sub(queuedDebt, debtQueue[queuedAt]);
        debtQueue[queuedAt] = 0;
        emit UnqueueDebt(queuedAt, queuedDebt);
    }

    /// @notice Starts a debt auction
    /// @dev Sender has to be allowed to call this method
    /// Checks if enough debt exists to be put up for auction
    /// debtAuctionBidSize > (unbackedDebt - queuedDebt - debtOnAuction)
    /// @return auctionId Id of the debt auction
    function startDebtAuction() external override checkCaller returns (uint256 auctionId) {
        if (debtAuctionBidSize > sub(sub(codex.unbackedDebt(address(this)), queuedDebt), debtOnAuction))
            revert Aer__startDebtAuction_insufficientDebt();
        if (codex.credit(address(this)) != 0) revert Aer__startDebtAuction_surplusNotZero();
        debtOnAuction = add(debtOnAuction, debtAuctionBidSize);
        auctionId = debtAuction.startAuction(address(this), debtAuctionSellSize, debtAuctionBidSize);
        emit StartDebtAuction(debtOnAuction, auctionId);
    }

    /// @notice Settles debt collected from debt auctions
    /// @dev Cannot settle debt with accrued surplus (only from debt auctions)
    /// @param debt Amount of debt to settle [wad]
    function settleAuctionedDebt(uint256 debt) external override {
        if (debt > debtOnAuction) revert Aer__settleAuctionedDebt_notEnoughDebtOnAuction();
        if (debt > codex.credit(address(this))) revert Aer__settleAuctionedDebt_insufficientSurplus();
        debtOnAuction = sub(debtOnAuction, debt);
        codex.settleUnbackedDebt(debt);
        emit SettleAuctionedDebt(debtOnAuction);
    }

    /// ======== Surplus Auction ======== ///

    /// @notice Starts a surplus auction
    /// @dev Sender has to be allowed to call this method
    /// Checks if enough surplus has accrued (surplusAuctionSellSize + surplusBuffer) and there's
    /// no queued debt to be put up for a debt auction
    /// @return auctionId Id of the surplus auction
    function startSurplusAuction() external override checkCaller returns (uint256 auctionId) {
        if (
            codex.credit(address(this)) <
            add(add(codex.unbackedDebt(address(this)), surplusAuctionSellSize), surplusBuffer)
        ) revert Aer__startSurplusAuction_insufficientSurplus();
        if (sub(sub(codex.unbackedDebt(address(this)), queuedDebt), debtOnAuction) != 0)
            revert Aer__startSurplusAuction_debtNotZero();
        auctionId = surplusAuction.startAuction(surplusAuctionSellSize, 0);
        emit StartSurplusAuction(auctionId);
    }

    /// @notice Settles debt with the accrued surplus
    /// @dev Sender has to be allowed to call this method
    /// Can not settle more debt than there's unbacked debt and which is not expected
    /// to be settled via debt auctions (queuedDebt + debtOnAuction)
    /// @param debt Amount of debt to settle [wad]
    function settleDebtWithSurplus(uint256 debt) external override checkCaller {
        if (debt > codex.credit(address(this))) revert Aer__settleDebtWithSurplus_insufficientSurplus();
        if (debt > sub(sub(codex.unbackedDebt(address(this)), queuedDebt), debtOnAuction))
            revert Aer__settleDebtWithSurplus_insufficientDebt();
        codex.settleUnbackedDebt(debt);
        emit SettleDebtWithSurplus(debt);
    }

    /// @notice Transfer accrued credit surplus to another account
    /// @dev Can only transfer backed credit out of Aer
    /// @param credit Amount of debt to settle [wad]
    function transferCredit(address to, uint256 credit) external override checkCaller {
        if (credit > sub(codex.credit(address(this)), codex.unbackedDebt(address(this))))
            revert Aer__transferCredit_insufficientCredit();
        codex.transferCredit(address(this), to, credit);
    }

    /// ======== Shutdown ======== ///

    /// @notice Locks the contract
    /// @dev Sender has to be allowed to call this method
    /// Wipes queued debt and debt on auction, locks DebtAuction and SurplusAuction and
    /// settles debt with what it has available
    function lock() external override checkCaller {
        if (live == 0) revert Aer__lock_notLive();
        live = 0;
        queuedDebt = 0;
        debtOnAuction = 0;
        surplusAuction.lock(codex.credit(address(surplusAuction)));
        debtAuction.lock();
        codex.settleUnbackedDebt(min(codex.credit(address(this)), codex.unbackedDebt(address(this))));
        emit Lock();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"codex_","type":"address"},{"internalType":"address","name":"surplusAuction_","type":"address"},{"internalType":"address","name":"debtAuction_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Aer__lock_notLive","type":"error"},{"inputs":[],"name":"Aer__setParam_unrecognizedParam","type":"error"},{"inputs":[],"name":"Aer__settleAuctionedDebt_insufficientSurplus","type":"error"},{"inputs":[],"name":"Aer__settleAuctionedDebt_notEnoughDebtOnAuction","type":"error"},{"inputs":[],"name":"Aer__settleDebtWithSurplus_insufficientDebt","type":"error"},{"inputs":[],"name":"Aer__settleDebtWithSurplus_insufficientSurplus","type":"error"},{"inputs":[],"name":"Aer__startDebtAuction_insufficientDebt","type":"error"},{"inputs":[],"name":"Aer__startDebtAuction_surplusNotZero","type":"error"},{"inputs":[],"name":"Aer__startSurplusAuction_debtNotZero","type":"error"},{"inputs":[],"name":"Aer__startSurplusAuction_insufficientSurplus","type":"error"},{"inputs":[],"name":"Aer__transferCredit_insufficientCredit","type":"error"},{"inputs":[],"name":"Aer__unqueueDebt_auctionDelayNotPassed","type":"error"},{"inputs":[],"name":"Guarded__notGranted","type":"error"},{"inputs":[],"name":"Guarded__notRoot","type":"error"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"Math__add_overflow","type":"error"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"Math__sub_overflow","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sig","type":"bytes32"},{"indexed":false,"internalType":"address","name":"who","type":"address"}],"name":"AllowCaller","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"sig","type":"bytes32"},{"indexed":false,"internalType":"address","name":"who","type":"address"}],"name":"BlockCaller","type":"event"},{"anonymous":false,"inputs":[],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"queuedAt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"debtQueue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"queuedDebt","type":"uint256"}],"name":"QueueDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"param","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"SetParam","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"param","type":"bytes32"},{"indexed":true,"internalType":"address","name":"data","type":"address"}],"name":"SetParam","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"debtOnAuction","type":"uint256"}],"name":"SettleAuctionedDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"debt","type":"uint256"}],"name":"SettleDebtWithSurplus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"debtOnAuction","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"StartDebtAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"StartSurplusAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"queuedAt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"queuedDebt","type":"uint256"}],"name":"UnqueueDebt","type":"event"},{"inputs":[],"name":"ANY_CALLER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ANY_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sig","type":"bytes32"},{"internalType":"address","name":"who","type":"address"}],"name":"allowCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auctionDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sig","type":"bytes32"},{"internalType":"address","name":"who","type":"address"}],"name":"blockCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sig","type":"bytes32"},{"internalType":"address","name":"who","type":"address"}],"name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"codex","outputs":[{"internalType":"contract ICodex","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debtAuction","outputs":[{"internalType":"contract IDebtAuction","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debtAuctionBidSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debtAuctionSellSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debtOnAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"debt","type":"uint256"}],"name":"queueDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"queuedDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"param","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"setParam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"param","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"setParam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"debt","type":"uint256"}],"name":"settleAuctionedDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"debt","type":"uint256"}],"name":"settleDebtWithSurplus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startDebtAuction","outputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSurplusAuction","outputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"surplusAuction","outputs":[{"internalType":"contract ISurplusAuction","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"surplusAuctionSellSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"surplusBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"credit","type":"uint256"}],"name":"transferCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"queuedAt","type":"uint256"}],"name":"unqueueDebt","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b506040516200220638038062002206833981016040819052620000349162000198565b6200003f33620000db565b6001600160a01b038381166080819052600180546001600160a01b0319908116868516908117909255600280549091169385169390931790925560405163a757acd960e01b815260048101929092529063a757acd990602401600060405180830381600087803b158015620000b357600080fd5b505af1158015620000c8573d6000803e3d6000fd5b50506001600b5550620001e29350505050565b6001600160a01b03811660008181527f107ee6c9edf8142ba51e10023f320f7b6ccd180a42be95ddbc18c0e5425b29006020908152604091829020805460ff1916600117905581517f13eb61d6467453b8d8e0d2a40b8dcee776dde376f951013dfdab1b9189651b618152908101929092527f9c21fb13a2f9c0e9222fe9a6810fe483b60248132981e1e0554bae602e93a9dd910160405180910390a150565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b9150620001d9604085016200017b565b90509250925092565b608051611f8a6200027c6000396000818161029201528181610634015281816106dd015281816107e0015281816109f701528181610afb01528181610b9201528181610fd20152818161106a0152818161127f0152818161132d0152818161143d01528181611507015281816115fe0152818161174401528181611814015281816119f801528181611b610152611c1d0152611f8a6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806382b83815116100f9578063bf2924b311610097578063deef560d11610071578063deef560d146103c4578063edd1b0be146103cd578063f83d08ba146103e0578063f9d53974146103e857600080fd5b8063bf2924b314610396578063cc58a6bb1461039e578063d0264bc8146103b157600080fd5b8063a2e131a4116100d3578063a2e131a414610333578063a746d4891461033c578063bbd91c461461034f578063be85c0be1461037657600080fd5b806382b838151461030e578063957aa58c146103175780639f30490a1461032057600080fd5b80633eb646b511610166578063639ad44a11610140578063639ad44a146102d757806375067b31146102df578063759e3d21146102f25780637908f2e5146102fb57600080fd5b80633eb646b51461024857806341779f861461028d57806352b43adf146102b457600080fd5b80632936ff2b116101975780632936ff2b146101f85780632a608d5b1461021f5780633977a3191461022857600080fd5b8063012abbe9146101be578063032a2a5c146101d35780630502cddc146101ef575b600080fd5b6101d16101cc366004611eaa565b6103fb565b005b6101dc60095481565b6040519081526020015b60405180910390f35b6101dc60085481565b6101dc7f13eb61d6467453b8d8e0d2a40b8dcee776dde376f951013dfdab1b9189651b6181565b6101dc600a5481565b6101dc610236366004611ed6565b60036020526000908152604090205481565b6001546102689073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b6102c76102c2366004611eaa565b6104f6565b60405190151581526020016101e6565b6101dc6105b5565b6101d16102ed366004611ed6565b610996565b6101dc60065481565b6101d1610309366004611ed6565b610c3f565b6101dc60075481565b6101dc600b5481565b6101d161032e366004611eef565b610cf7565b6101dc60045481565b6101d161034a366004611eaa565b610e8f565b6102687f48a48edb17b6277f3d9897feeb510d1503580c3997a055cb5a635e86f81c243a81565b6002546102689073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc610f53565b6101d16103ac366004611f11565b61121a565b6101d16103bf366004611ed6565b61149d565b6101dc60055481565b6101d16103db366004611eaa565b6116a2565b6101d1611928565b6101d16103f6366004611ed6565b611d1d565b3360009081527f107ee6c9edf8142ba51e10023f320f7b6ccd180a42be95ddbc18c0e5425b2900602052604090205460ff16156104c45760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051858152918201929092527faec761575684e54a883064093131de012d7a9e8fc898f13474e50fcfbdce7d0b91015b60405180910390a15050565b6040517f6d6b83b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1680610576575073ffffffffffffffffffffffffffffffffffffffff821660009081527f107ee6c9edf8142ba51e10023f320f7b6ccd180a42be95ddbc18c0e5425b2900602052604090205460ff165b806105ac575060008381526020818152604080832073eb510d1503580c3997a055cb5a635e86f81c243a845290915290205460ff165b90505b92915050565b60006105e47fffffffff00000000000000000000000000000000000000000000000000000000823516336104f6565b15610964576040517f1ffeaa220000000000000000000000000000000000000000000000000000000081523060048201526106af906106a79073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631ffeaa2290602401602060405180830381865afa15801561067b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069f9190611f3b565b600954611dd8565b600a54611dd8565b6040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa158015610739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075d9190611f3b565b1015610795576040517f989d7fe200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1ffeaa2200000000000000000000000000000000000000000000000000000000815230600482015261085c906108549073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631ffeaa22906024015b602060405180830381865afa158015610828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084c9190611f3b565b600454611e24565b600554611e24565b15610893576040517f4458be2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546009546040517f4fee13fc00000000000000000000000000000000000000000000000000000000815260048101919091526000602482015273ffffffffffffffffffffffffffffffffffffffff90911690634fee13fc906044016020604051808303816000875af115801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190611f3b565b60405190915081907fe8eec443b74a5af727548ee4fd323a6eed8f20d0fb4259065288c0240153ce9890600090a290565b6040517faa68b5bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c47fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b15610964576040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190611f3b565b811115610ab0576040517fe2acb45100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1ffeaa22000000000000000000000000000000000000000000000000000000008152306004820152610b2a906108549073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631ffeaa229060240161080b565b811115610b63576040517ff203950800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa015d109000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a015d10990602401600060405180830381600087803b158015610beb57600080fd5b505af1158015610bff573d6000803e3d6000fd5b505050507f50ddd9348ec9ed23bdb34814ce8ac5b124408ebfa17b40cb5863102a7098e5a481604051610c3491815260200190565b60405180910390a150565b42610c4c82600654611dd8565b1115610c84576040517fa03e5cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600454600082815260036020526040902054610ca09190611e24565b6004908155600082815260036020526040808220919091559054905182917f770cf6b4c7095e5c11394fb1d315f1dd3d133f48905ee5e5b03ff63c0ffaf4db91610cec91815260200190565b60405180910390a250565b610d257fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b1561096457817f61756374696f6e44656c6179000000000000000000000000000000000000000003610d5b576006819055610e51565b817f737572706c757341756374696f6e53656c6c53697a650000000000000000000003610d8c576009819055610e51565b817f6465627441756374696f6e42696453697a65000000000000000000000000000003610dbd576008819055610e51565b817f6465627441756374696f6e53656c6c53697a650000000000000000000000000003610dee576007819055610e51565b817f737572706c75734275666665720000000000000000000000000000000000000003610e1f57600a819055610e51565b6040517fcd7463b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b817ff04ee4a7c5e0072de141f68fbec4aba82bfa0866ce04ad1f286b8602e0cbcfa682604051610e8391815260200190565b60405180910390a25050565b3360009081527f107ee6c9edf8142ba51e10023f320f7b6ccd180a42be95ddbc18c0e5425b2900602052604090205460ff16156104c45760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558051858152918201929092527f9c21fb13a2f9c0e9222fe9a6810fe483b60248132981e1e0554bae602e93a9dd91016104b8565b6000610f827fffffffff00000000000000000000000000000000000000000000000000000000823516336104f6565b15610964576040517f1ffeaa22000000000000000000000000000000000000000000000000000000008152306004820152611001906108549073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631ffeaa229060240161080b565b600854111561103c576040517f7a6f107700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa1580156110c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ea9190611f3b565b15611121576040517f345d25ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61112f600554600854611dd8565b6005556002546007546008546040517f56dd47550000000000000000000000000000000000000000000000000000000081523060048201526024810192909252604482015273ffffffffffffffffffffffffffffffffffffffff909116906356dd4755906064016020604051808303816000875af11580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190611f3b565b9050807fc4ba610231991622b8bbdda9ec3d204b4645a1789a08fe92bcc2b08ce9344a4060055460405161120f91815260200190565b60405180910390a290565b6112487fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b15610964576040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201526113b2907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa1580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff9190611f3b565b6040517f1ffeaa220000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631ffeaa2290602401602060405180830381865afa158015611389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ad9190611f3b565b611e24565b8111156113eb576040517fb1056f5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f4aedbd7c00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690634aedbd7c90606401600060405180830381600087803b15801561148157600080fd5b505af1158015611495573d6000803e3d6000fd5b505050505050565b6005548111156114d9576040517fcfec1a8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa158015611563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115879190611f3b565b8111156115c0576040517f4643c95300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115cc60055482611e24565b6005556040517fa015d109000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a015d10990602401600060405180830381600087803b15801561165757600080fd5b505af115801561166b573d6000803e3d6000fd5b505050507ffcbfaac04a463157075ba2d55963a4d2e80887a472c389b0c90553c544a8c882600554604051610c3491815260200190565b6116d07fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b1561096457817f737572706c757341756374696f6e00000000000000000000000000000000000003611879576001546040517ffa352c0000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063fa352c0090602401600060405180830381600087803b15801561178a57600080fd5b505af115801561179e573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8581169182179092556040517fa757acd900000000000000000000000000000000000000000000000000000000815260048101919091527f0000000000000000000000000000000000000000000000000000000000000000909116925063a757acd99150602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b505050506118e1565b817f6465627441756374696f6e00000000000000000000000000000000000000000003610e1f57600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b60405173ffffffffffffffffffffffffffffffffffffffff82169083907fd473402183a624b7a23eb21bfd0a2863a628f61fb004edd801a2eab61ac2bd3d90600090a35050565b6119567fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b1561096457600b54600003611997576040517f6d2b822600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600b81905560048181556005919091556001546040517fd5d44d8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821692810183905263dd467064917f0000000000000000000000000000000000000000000000000000000000000000169063d5d44d8090602401602060405180830381865afa158015611a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a639190611f3b565b6040518263ffffffff1660e01b8152600401611a8191815260200190565b600060405180830381600087803b158015611a9b57600080fd5b505af1158015611aaf573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f83d08ba6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50506040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16925063a015d1099150611ca290839063d5d44d8090602401602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef9190611f3b565b6040517f1ffeaa220000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631ffeaa2290602401602060405180830381865afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d9190611f3b565b611e6a565b6040518263ffffffff1660e01b8152600401611cc091815260200190565b600060405180830381600087803b158015611cda57600080fd5b505af1158015611cee573d6000803e3d6000fd5b50506040517f46620e39f4e119bf05f13544f8ef38338fc06c17f6b731c7f95bee356572db96925060009150a1565b611d4b7fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b156109645742600090815260036020526040902054611d6a9082611dd8565b42600090815260036020526040902055600454611d879082611dd8565b6004819055426000818152600360205260409081902054905191927fe9c1bcbd786a3bc7431e41970d4388d421e21fe318bd538c260fd7ce268efe8b92610cec929190918252602082015260400190565b808201828110156105af576040517f2c203e7200000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b808203828111156105af576040517e5318ee0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401611e1b565b600081831115611e7a57816105ac565b5090919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ea557600080fd5b919050565b60008060408385031215611ebd57600080fd5b82359150611ecd60208401611e81565b90509250929050565b600060208284031215611ee857600080fd5b5035919050565b60008060408385031215611f0257600080fd5b50508035926020909101359150565b60008060408385031215611f2457600080fd5b611f2d83611e81565b946020939093013593505050565b600060208284031215611f4d57600080fd5b505191905056fea2646970667358221220ddf4bc373ad707b26731662bef52aec3bec2311187c92ca2445d790e3edf0ebf64736f6c634300080d00330000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f9000000000000000000000000e2a287e5225395f9e2c0a11b4d63cdf76d6f435b00000000000000000000000035d5fd5e41eea82b73b9936c25a39b700259ffea

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101b95760003560e01c806382b83815116100f9578063bf2924b311610097578063deef560d11610071578063deef560d146103c4578063edd1b0be146103cd578063f83d08ba146103e0578063f9d53974146103e857600080fd5b8063bf2924b314610396578063cc58a6bb1461039e578063d0264bc8146103b157600080fd5b8063a2e131a4116100d3578063a2e131a414610333578063a746d4891461033c578063bbd91c461461034f578063be85c0be1461037657600080fd5b806382b838151461030e578063957aa58c146103175780639f30490a1461032057600080fd5b80633eb646b511610166578063639ad44a11610140578063639ad44a146102d757806375067b31146102df578063759e3d21146102f25780637908f2e5146102fb57600080fd5b80633eb646b51461024857806341779f861461028d57806352b43adf146102b457600080fd5b80632936ff2b116101975780632936ff2b146101f85780632a608d5b1461021f5780633977a3191461022857600080fd5b8063012abbe9146101be578063032a2a5c146101d35780630502cddc146101ef575b600080fd5b6101d16101cc366004611eaa565b6103fb565b005b6101dc60095481565b6040519081526020015b60405180910390f35b6101dc60085481565b6101dc7f13eb61d6467453b8d8e0d2a40b8dcee776dde376f951013dfdab1b9189651b6181565b6101dc600a5481565b6101dc610236366004611ed6565b60036020526000908152604090205481565b6001546102689073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b6102687f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f981565b6102c76102c2366004611eaa565b6104f6565b60405190151581526020016101e6565b6101dc6105b5565b6101d16102ed366004611ed6565b610996565b6101dc60065481565b6101d1610309366004611ed6565b610c3f565b6101dc60075481565b6101dc600b5481565b6101d161032e366004611eef565b610cf7565b6101dc60045481565b6101d161034a366004611eaa565b610e8f565b6102687f48a48edb17b6277f3d9897feeb510d1503580c3997a055cb5a635e86f81c243a81565b6002546102689073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc610f53565b6101d16103ac366004611f11565b61121a565b6101d16103bf366004611ed6565b61149d565b6101dc60055481565b6101d16103db366004611eaa565b6116a2565b6101d1611928565b6101d16103f6366004611ed6565b611d1d565b3360009081527f107ee6c9edf8142ba51e10023f320f7b6ccd180a42be95ddbc18c0e5425b2900602052604090205460ff16156104c45760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051858152918201929092527faec761575684e54a883064093131de012d7a9e8fc898f13474e50fcfbdce7d0b91015b60405180910390a15050565b6040517f6d6b83b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1680610576575073ffffffffffffffffffffffffffffffffffffffff821660009081527f107ee6c9edf8142ba51e10023f320f7b6ccd180a42be95ddbc18c0e5425b2900602052604090205460ff165b806105ac575060008381526020818152604080832073eb510d1503580c3997a055cb5a635e86f81c243a845290915290205460ff165b90505b92915050565b60006105e47fffffffff00000000000000000000000000000000000000000000000000000000823516336104f6565b15610964576040517f1ffeaa220000000000000000000000000000000000000000000000000000000081523060048201526106af906106a79073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f91690631ffeaa2290602401602060405180830381865afa15801561067b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069f9190611f3b565b600954611dd8565b600a54611dd8565b6040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa158015610739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075d9190611f3b565b1015610795576040517f989d7fe200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1ffeaa2200000000000000000000000000000000000000000000000000000000815230600482015261085c906108549073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f91690631ffeaa22906024015b602060405180830381865afa158015610828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084c9190611f3b565b600454611e24565b600554611e24565b15610893576040517f4458be2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546009546040517f4fee13fc00000000000000000000000000000000000000000000000000000000815260048101919091526000602482015273ffffffffffffffffffffffffffffffffffffffff90911690634fee13fc906044016020604051808303816000875af115801561090f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109339190611f3b565b60405190915081907fe8eec443b74a5af727548ee4fd323a6eed8f20d0fb4259065288c0240153ce9890600090a290565b6040517faa68b5bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c47fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b15610964576040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190611f3b565b811115610ab0576040517fe2acb45100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1ffeaa22000000000000000000000000000000000000000000000000000000008152306004820152610b2a906108549073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f91690631ffeaa229060240161080b565b811115610b63576040517ff203950800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa015d109000000000000000000000000000000000000000000000000000000008152600481018290527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff169063a015d10990602401600060405180830381600087803b158015610beb57600080fd5b505af1158015610bff573d6000803e3d6000fd5b505050507f50ddd9348ec9ed23bdb34814ce8ac5b124408ebfa17b40cb5863102a7098e5a481604051610c3491815260200190565b60405180910390a150565b42610c4c82600654611dd8565b1115610c84576040517fa03e5cca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600454600082815260036020526040902054610ca09190611e24565b6004908155600082815260036020526040808220919091559054905182917f770cf6b4c7095e5c11394fb1d315f1dd3d133f48905ee5e5b03ff63c0ffaf4db91610cec91815260200190565b60405180910390a250565b610d257fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b1561096457817f61756374696f6e44656c6179000000000000000000000000000000000000000003610d5b576006819055610e51565b817f737572706c757341756374696f6e53656c6c53697a650000000000000000000003610d8c576009819055610e51565b817f6465627441756374696f6e42696453697a65000000000000000000000000000003610dbd576008819055610e51565b817f6465627441756374696f6e53656c6c53697a650000000000000000000000000003610dee576007819055610e51565b817f737572706c75734275666665720000000000000000000000000000000000000003610e1f57600a819055610e51565b6040517fcd7463b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b817ff04ee4a7c5e0072de141f68fbec4aba82bfa0866ce04ad1f286b8602e0cbcfa682604051610e8391815260200190565b60405180910390a25050565b3360009081527f107ee6c9edf8142ba51e10023f320f7b6ccd180a42be95ddbc18c0e5425b2900602052604090205460ff16156104c45760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558051858152918201929092527f9c21fb13a2f9c0e9222fe9a6810fe483b60248132981e1e0554bae602e93a9dd91016104b8565b6000610f827fffffffff00000000000000000000000000000000000000000000000000000000823516336104f6565b15610964576040517f1ffeaa22000000000000000000000000000000000000000000000000000000008152306004820152611001906108549073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f91690631ffeaa229060240161080b565b600854111561103c576040517f7a6f107700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa1580156110c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ea9190611f3b565b15611121576040517f345d25ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61112f600554600854611dd8565b6005556002546007546008546040517f56dd47550000000000000000000000000000000000000000000000000000000081523060048201526024810192909252604482015273ffffffffffffffffffffffffffffffffffffffff909116906356dd4755906064016020604051808303816000875af11580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190611f3b565b9050807fc4ba610231991622b8bbdda9ec3d204b4645a1789a08fe92bcc2b08ce9344a4060055460405161120f91815260200190565b60405180910390a290565b6112487fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b15610964576040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201526113b2907f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa1580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff9190611f3b565b6040517f1ffeaa220000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff1690631ffeaa2290602401602060405180830381865afa158015611389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ad9190611f3b565b611e24565b8111156113eb576040517fb1056f5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f4aedbd7c00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f91690634aedbd7c90606401600060405180830381600087803b15801561148157600080fd5b505af1158015611495573d6000803e3d6000fd5b505050505050565b6005548111156114d9576040517fcfec1a8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff169063d5d44d8090602401602060405180830381865afa158015611563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115879190611f3b565b8111156115c0576040517f4643c95300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115cc60055482611e24565b6005556040517fa015d109000000000000000000000000000000000000000000000000000000008152600481018290527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff169063a015d10990602401600060405180830381600087803b15801561165757600080fd5b505af115801561166b573d6000803e3d6000fd5b505050507ffcbfaac04a463157075ba2d55963a4d2e80887a472c389b0c90553c544a8c882600554604051610c3491815260200190565b6116d07fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b1561096457817f737572706c757341756374696f6e00000000000000000000000000000000000003611879576001546040517ffa352c0000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f99091169063fa352c0090602401600060405180830381600087803b15801561178a57600080fd5b505af115801561179e573d6000803e3d6000fd5b5050600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8581169182179092556040517fa757acd900000000000000000000000000000000000000000000000000000000815260048101919091527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f9909116925063a757acd99150602401600060405180830381600087803b15801561185c57600080fd5b505af1158015611870573d6000803e3d6000fd5b505050506118e1565b817f6465627441756374696f6e00000000000000000000000000000000000000000003610e1f57600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b60405173ffffffffffffffffffffffffffffffffffffffff82169083907fd473402183a624b7a23eb21bfd0a2863a628f61fb004edd801a2eab61ac2bd3d90600090a35050565b6119567fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b1561096457600b54600003611997576040517f6d2b822600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600b81905560048181556005919091556001546040517fd5d44d8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821692810183905263dd467064917f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f9169063d5d44d8090602401602060405180830381865afa158015611a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a639190611f3b565b6040518263ffffffff1660e01b8152600401611a8191815260200190565b600060405180830381600087803b158015611a9b57600080fd5b505af1158015611aaf573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f83d08ba6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50506040517fd5d44d800000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff16925063a015d1099150611ca290839063d5d44d8090602401602060405180830381865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef9190611f3b565b6040517f1ffeaa220000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f973ffffffffffffffffffffffffffffffffffffffff1690631ffeaa2290602401602060405180830381865afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d9190611f3b565b611e6a565b6040518263ffffffff1660e01b8152600401611cc091815260200190565b600060405180830381600087803b158015611cda57600080fd5b505af1158015611cee573d6000803e3d6000fd5b50506040517f46620e39f4e119bf05f13544f8ef38338fc06c17f6b731c7f95bee356572db96925060009150a1565b611d4b7fffffffff0000000000000000000000000000000000000000000000000000000060003516336104f6565b156109645742600090815260036020526040902054611d6a9082611dd8565b42600090815260036020526040902055600454611d879082611dd8565b6004819055426000818152600360205260409081902054905191927fe9c1bcbd786a3bc7431e41970d4388d421e21fe318bd538c260fd7ce268efe8b92610cec929190918252602082015260400190565b808201828110156105af576040517f2c203e7200000000000000000000000000000000000000000000000000000000815260048101849052602481018390526044015b60405180910390fd5b808203828111156105af576040517e5318ee0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401611e1b565b600081831115611e7a57816105ac565b5090919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611ea557600080fd5b919050565b60008060408385031215611ebd57600080fd5b82359150611ecd60208401611e81565b90509250929050565b600060208284031215611ee857600080fd5b5035919050565b60008060408385031215611f0257600080fd5b50508035926020909101359150565b60008060408385031215611f2457600080fd5b611f2d83611e81565b946020939093013593505050565b600060208284031215611f4d57600080fd5b505191905056fea2646970667358221220ddf4bc373ad707b26731662bef52aec3bec2311187c92ca2445d790e3edf0ebf64736f6c634300080d0033

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

0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f9000000000000000000000000e2a287e5225395f9e2c0a11b4d63cdf76d6f435b00000000000000000000000035d5fd5e41eea82b73b9936c25a39b700259ffea

-----Decoded View---------------
Arg [0] : codex_ (address): 0x6bF5EB06201e4ea7C315b1C23BfE79fAE30541F9
Arg [1] : surplusAuction_ (address): 0xe2A287e5225395f9e2c0a11b4d63Cdf76D6F435B
Arg [2] : debtAuction_ (address): 0x35d5fd5E41EEA82b73b9936c25A39B700259fFea

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000006bf5eb06201e4ea7c315b1c23bfe79fae30541f9
Arg [1] : 000000000000000000000000e2a287e5225395f9e2c0a11b4d63cdf76d6f435b
Arg [2] : 00000000000000000000000035d5fd5e41eea82b73b9936c25a39b700259ffea


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.