ETH Price: $2,217.31 (-0.88%)
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Increase Attribu...441823182026-04-02 18:19:439 days ago1775153983IN
Rage Protocol: Rage Depot
0 ETH0.000000680.006
Add Contract441527782026-04-02 1:55:0310 days ago1775094903IN
Rage Protocol: Rage Depot
0 ETH0.000001060.01
Add Contract441508732026-04-02 0:51:3310 days ago1775091093IN
Rage Protocol: Rage Depot
0 ETH0.000000480.007946

Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RageDepot

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

import {ReentrancyGuard} from "./ReentrancyGuard.sol";
import {IERC20} from "./IERC20.sol";
import {IRageChaosEngine} from "./IRageChaosEngine.sol";
import {RageStructs} from "./RageStructs.sol";

/**
 * RageDepot
 *
 * Central depot that holds RAGE tokens on behalf of multiple other contracts
 * Each registered contract has an attributed RAGE allowance that can only be increased, never decreased.
 * Registered contracts can request transfers of RAGE to recipients up to their attributed amount.
 * Adding or removing contracts requires both RCE owners to nominate the same address.
 * The automator can increase a registered contract's attribution up to the unallocated balance.
 */
contract RageDepot is ReentrancyGuard {
  // constant
  IRageChaosEngine private constant RAGE_CHAOS_ENGINE = IRageChaosEngine(0x4C15F778Ab59F25D5dFD2dD508236a25eD2813fe);
  IERC20 private constant RAGE = IERC20(0xc0df50143EA93AeC63e38A6ED4E92B378079eA15);
  uint256 private constant VERSION = 1;
  address private constant MULTISIG = 0x507fbdE39ba40DA4Fc79426AD5E3C64944fE43d4;

  // state
  address[] private contracts; // list of registered contract addresses
  mapping(address => RageStructs.DepotContract) private CONTRACTS_MAP; // mapping for all registered contracts
  RageStructs.DepotState private STATE;

  // events
  event ContractNominatedForAdd(address indexed owner, address indexed nominee);
  event ContractAdded(address indexed caller);
  event ContractNominatedForRemove(address indexed owner, address indexed nominee);
  event ContractRemoved(address indexed caller, uint256 attributed);
  event AttributionIncreased(address indexed caller, uint256 added, uint256 newTotal);
  event RageTransferred(address indexed caller, address indexed recipient, uint256 amount);
  event RageWithdrawn(uint256 amount);

  // modifier
  modifier onlyAutomator() {
    require(msg.sender == RAGE_CHAOS_ENGINE.getAutomator(), "unauthorized");
    _;
  }

  modifier onlyOwner() {
    (address owner1, address owner2) = getOwners();
    require(msg.sender == owner1 || msg.sender == owner2,"unauthorized");
    _;
  }

  modifier onlyRegisteredContract() {
    require(CONTRACTS_MAP[msg.sender].wallet != address(0), "invalidCaller");
    _;
  }

  // withdrawEth
  function withdrawEth() external nonReentrant onlyAutomator {
    uint256 balance = address(this).balance;
    require(balance > 0, "noEthBalance");
    (bool success, ) = payable(MULTISIG).call{value: balance}("");
    require(success, "ethTransferFailed");
  }

  // withdrawRage
  // withdraws all unallocated rage to the multisig
  function withdrawRage() external nonReentrant onlyAutomator {
    uint256 amount = getUnallocated();
    require(amount > 0, "noUnallocatedRage");

    require(RAGE.transfer(MULTISIG, amount), "transferFailed");

    emit RageWithdrawn(amount);
  }

  // withdrawToken
  // rage cannot be withdraw from this function
  function withdrawToken(address tokenAdr) external nonReentrant onlyAutomator {
    require(tokenAdr != address(RAGE), "cannotWithdrawRage");

    IERC20 token = IERC20(tokenAdr);
    uint256 balance = token.balanceOf(address(this));
    require(balance > 0, "noTokenBalance");
    require(token.transfer(MULTISIG, balance), "transferFailed");
  }

  // addContract
  // owner nominates a contract to be added as a registered contract
  // when both owners nominate the same address, the contract is registered
  function addContract(address caller) external nonReentrant onlyOwner {
    require(caller != address(0), "zeroAddress");
    require(CONTRACTS_MAP[caller].wallet == address(0), "alreadyRegistered");
    (address owner1,) = getOwners();

    if (msg.sender == owner1) {
        STATE.addNominee1 = caller;
    } else {
        STATE.addNominee2 = caller;
    }

    emit ContractNominatedForAdd(msg.sender, caller);

    // if both owners nominated the same address, register it
    if (STATE.addNominee1 != address(0) && STATE.addNominee1 == STATE.addNominee2) {
        CONTRACTS_MAP[caller].wallet = caller;
        contracts.push(caller);

        // reset nominations
        STATE.addNominee1 = address(0);
        STATE.addNominee2 = address(0);

        emit ContractAdded(caller);
    }
  }

  // removeContract
  // owner nominates a contract to be removed
  // when both owners nominate the same address, the contract is deregistered and its attribution freed
  function removeContract(address caller) external nonReentrant onlyOwner {
    require(CONTRACTS_MAP[caller].wallet != address(0), "invalidCaller");
    (address owner1,) = getOwners();

    if (msg.sender == owner1) {
        STATE.removeNominee1 = caller;
    } else {
        STATE.removeNominee2 = caller;
    }

    emit ContractNominatedForRemove(msg.sender, caller);

    // if both owners nominated the same address, remove it
    if (STATE.removeNominee1 != address(0) && STATE.removeNominee1 == STATE.removeNominee2) {
        uint256 attributed = CONTRACTS_MAP[caller].attributed;
        STATE.totalAttributed -= attributed;

        CONTRACTS_MAP[caller].wallet = address(0);
        CONTRACTS_MAP[caller].attributed = 0;
        CONTRACTS_MAP[caller].transferred = 0;
        CONTRACTS_MAP[caller].available = 0;
        CONTRACTS_MAP[caller].transferCount = 0;

        // remove from contracts array (swap with last element)
        for (uint256 i = 0; i < contracts.length; i++) {
            if (contracts[i] == caller) {
                contracts[i] = contracts[contracts.length - 1];
                contracts.pop();
                break;
            }
        }

        // reset nominations
        STATE.removeNominee1 = address(0);
        STATE.removeNominee2 = address(0);

        emit ContractRemoved(caller, attributed);
    }
  }

  // increaseAttribution
  // add more rage to a registered contract's allowance
  function increaseAttribution(address caller, uint256 amount) external nonReentrant onlyAutomator {
    require(CONTRACTS_MAP[caller].wallet != address(0), "invalidCaller");
    require(amount > 0, "zeroAmount");
    require(amount <= getUnallocated(), "exceedsUnallocated");

    CONTRACTS_MAP[caller].attributed += amount;
    CONTRACTS_MAP[caller].available = CONTRACTS_MAP[caller].attributed - CONTRACTS_MAP[caller].transferred;
    STATE.totalAttributed += amount;

    emit AttributionIncreased(caller, amount, CONTRACTS_MAP[caller].attributed);
  }

  // requestTransfer
  // registered contract requests rage to be sent to a recipient
  function requestTransfer(address recipient, uint256 amount) external nonReentrant onlyRegisteredContract returns (bool) {
    require(recipient != address(0), "zeroRecipient");
    require(amount > 0, "zeroAmount");

    uint256 available = CONTRACTS_MAP[msg.sender].attributed - CONTRACTS_MAP[msg.sender].transferred;
    require(amount <= available, "insufficientAttribution");

    uint256 rageBalance = getRageBalance();
    require(amount <= rageBalance, "insufficientRageBalance");

    CONTRACTS_MAP[msg.sender].transferred += amount;
    CONTRACTS_MAP[msg.sender].available = CONTRACTS_MAP[msg.sender].attributed - CONTRACTS_MAP[msg.sender].transferred;
    CONTRACTS_MAP[msg.sender].transferCount += 1;
    STATE.transferCount += 1;
    STATE.transferTotal += amount;
    require(RAGE.transfer(recipient, amount), "transferFailed");

    emit RageTransferred(msg.sender, recipient, amount);
    return true;
  }

  // getAvailableFor
  // returns how much rage is currently available for a specific registered contract
  function getAvailableFor(address caller) external view returns (uint256) {
    require(CONTRACTS_MAP[caller].wallet != address(0), "contractNotRegistered");
    return CONTRACTS_MAP[caller].attributed - CONTRACTS_MAP[caller].transferred;
  }

  // getOwners
  function getOwners() internal view returns (address, address) {
    return RAGE_CHAOS_ENGINE.getOwners();
  }

  // getUnallocated
  // returns rage balance not attributed to any registered contract
  function getUnallocated() internal view returns (uint256) {
    uint256 totalTransferred;
    for (uint256 i = 0; i < contracts.length; i++) {
        totalTransferred += CONTRACTS_MAP[contracts[i]].transferred;
    }

    uint256 rageBalance = getRageBalance();
    uint256 totalAvailable = STATE.totalAttributed - totalTransferred;
    return rageBalance > totalAvailable ? rageBalance - totalAvailable : 0;
  }

  // getRageBalance
  function getRageBalance() internal view returns (uint256) {
    return RAGE.balanceOf(address(this));
  }

  // getRegisteredContracts
  // returns the full DepotContract struct for every registered contract
  function getRegisteredContracts() external view returns (RageStructs.DepotContract[] memory) {
    uint256 count = contracts.length;
    RageStructs.DepotContract[] memory result = new RageStructs.DepotContract[](count);
    for (uint256 i = 0; i < count; i++) {
        result[i] = CONTRACTS_MAP[contracts[i]];
    }
    return result;
  }

  // getState
  // return the state of the contract
  function getState() external view returns (RageStructs.DepotGetState memory) {
    uint256 callerCount = contracts.length;
    (address owner1, address owner2) = getOwners();
    
    uint256 totalTransferredSum;
    for (uint256 i = 0; i < callerCount; i++) {
        address caller = contracts[i];
        totalTransferredSum += CONTRACTS_MAP[caller].transferred;
    }
    uint256 totalAvailable = STATE.totalAttributed - totalTransferredSum;

    return RageStructs.DepotGetState({
        version: VERSION,
        automator: RAGE_CHAOS_ENGINE.getAutomator(),
        owner1: owner1,
        owner2: owner2,
        state: STATE,
        contractCount: callerCount,
        contracts: contracts,
        rageBalance: getRageBalance(),
        totalTransferred: totalTransferredSum,
        totalAvailable: totalAvailable,
        unallocated: getUnallocated()
    });
  }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.26;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {RageStructs} from "./RageStructs.sol";

interface IRageChaosEngine {
    // Events
    event LockNft(uint256 nftId);
    event AutomatorSet(address automator);
    event RageBuyingProtocolProposed(address indexed proposer, address indexed pendingRbp);
    event RageBuyingProtocolSet(address indexed newRbp);
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);
    event SupplyRequested(uint256 percent);
    event SupplyBurned(uint256 amount);
    event YearlyAllowanceRequested(address indexed requester, address indexed recipient, uint256 amount, uint256 activeSupply);
    event RageTransferred(address recipient, uint256 amount);
    event ConfigChanged(uint256 stackRage, uint256 stackHestia, uint256 boostRage, uint128 crushDecrease, bool crushBuy, uint256 burstRage, uint256 burstLoop, uint256 slippage, address podAddress, address sideAddress1, address sideAddress2);
    event PoolBoosted(uint256 rageIncrease, uint256 usdcIncrease);
    event UnderlyingStacked(uint256 rageSold, uint256 pHestia, uint256 pCircle);
    event RageCrushed(uint256 rageBurned, uint256 usdcBought);
    event RageBursted(uint256 rageCollected, uint256 usdcCollected);
    
    // Withdrawal functions
    function withdrawEth() external;
    function withdrawToken(address tokenAdr) external;
    
    // NFT management
    function lockNFT() external;
    
    // Ownership and access control
    function transferOwnership(address newOwner) external;
    function setRageBuyingProtocol(address newRbp) external;
    function setAutomator(address automator) external;
    
    // RAGE token operations
    function requestSupply(uint256 percent) external;
    function burnSupply(uint256 amount) external;
    function requestYearlyAllowance(uint256 percent) external;
    function transferRage(address recipient, uint256 amount) external;
    
    // Core functionality
    function stackUnderlying() external;
    function poolBoost() external;
    function rageCrush() external;
    function rageBurst() external;
    
    // View functions
    function getMultisig() external pure returns (address);
    function getAutomator() external view returns (address);
    function getOwners() external view returns (address owner1, address owner2);
    function getRageBuyingProtocol() external view returns (address);
    function getActiveSupply() external view returns (uint256);
    function getRageInNft() external view returns (uint256);
}

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

library RageStructs {

  // OtcConfig: configurable parameters for the OTC contract, adjustable by the automator
  struct OtcConfig {
    bool active;              // whether the OTC contract is accepting trades
    bool allowHestia;         // whether HESTIA is accepted as input token
    bool allowCircle;         // whether CIRCLE is accepted as input token
    uint256 allowUsdcMinBonus; // minimum bonus % required to allow USDC (0 = always allowed, >bonusMax = disabled)
    uint256 percentMultisig;  // maximum percentage of input tokens sent to multisig (0-100, whole percents); effective value may be reduced when bonus is high to ensure percentMultisig + bonus never exceeds 100
    uint256 buyType;          // which asset to buy when input is USDC: 1 = HESTIA, 2 = CIRCLE
    uint256 bonusInterval;    // time interval for the bonus to automatically increment by 1 (min 1 hour, max 1 day, default 12 hours)
    uint256 bonusMin;         // minimum amount of bonus in percent (min 0, max 5, default 0)
    uint256 bonusMax;         // maximum amount of bonus in percent (min 10, max 50, default 25)
    uint256 minUsdcValue;     // minimum USDC equivalent value required for a trade (6 decimals, e.g. 10e6 = $10)
    uint256 slippage;         // max slippage for pool swaps in basis points (0-2500, e.g. 500 = 5%)
    uint32 twap;              // TWAP duration in seconds for oracle price calculations (1-3600)
  }

  // OtcState: internal state tracking for the OTC contract
  struct OtcState {
    uint256 txCount;          // total number of OTC trades executed
    uint256 batchTxCount;     // number of OTC trades since last setConfigs call
    uint256 txHestiaCount;    // number of OTC trades with HESTIA as input
    uint256 txCircleCount;    // number of OTC trades with CIRCLE as input
    uint256 txUsdcCount;      // number of OTC trades with USDC as input
    uint256 inputValue;       // cumulative USDC value of all input tokens across all trades
    uint256 inputValueForMultisig;  // cumulative USDC value of input portions sent to multisig
    uint256 inputValueForBacking;   // cumulative USDC value of input portions converted to pTokens for backing
    uint256 hestiaAmount;     // cumulative HESTIA tokens received as input
    uint256 circleAmount;     // cumulative CIRCLE tokens received as input
    uint256 usdcAmount;       // cumulative USDC tokens received as input
    uint256 rageOutputAmount; // cumulative RAGE tokens sent to users
    uint256 rageOutputValue;  // cumulative USDC value of all RAGE tokens sent to users
    uint256 nextConfigTime;   // earliest timestamp when config can be changed again
  }

  // OtcGetState: complete read-only snapshot of the OTC contract returned by getState()
  struct OtcGetState {
    uint256 version;          // contract version identifier
    address rageChaosEngine;  // address of the RageChaosEngine contract
    address rageSwapper;      // address of the RageSwapper contract used for token swaps
    address rageOracle;       // address of the RageOracle contract used for price lookups
    address rageDepot;     // address of the RageDepot contract where the rage balance is stored
    address multisig;         // multisig wallet that receives the percentMultisig portion of input
    address automator;        // current automator address with config privileges
    uint256 rageBalance;      // RAGE token balance held by this contract, available for OTC trades
    bool active;              // True if contract active config is true, and if rage balance > 1 token
    uint256 minHestia;        // Minimum Hestia amount for the investor to submit
    uint256 maxHestia;        // Maximum Hestia amount for the investor to submit (takes into account rageBalance value)
    uint256 minCircle;        // Minimum Circle amount for the investor to submit
    uint256 maxCircle;        // Maximum Circle amount for the investor to submit (takes into account rageBalance value)
    uint256 minUsdc;          // Minimum USDC amount for the investor to submit (is equal to config minUsdcValue)
    uint256 maxUsdc;          // Maximum USDC amount for the investor to submit (takes into account rageBalance value)
    uint256 ragePrice;        // Price of 1 Rage token
    uint256 hestiaPrice;      // Price of 1 Hestia token
    uint256 circlePrice;      // Price of 1 Circle token
    uint256 bonusCurrent;     // Current amount of the bonus in percent
    uint256 bonusNextIncrement; // Timestamp of the next bonus increment
    uint256 bonusLastReset;     // Timestamp of the last bonus reset
    RageStructs.OtcOverview lastTx; // last transaction
    RageStructs.OtcState state;   // current internal state
    RageStructs.OtcConfig config; // current configuration
  }

  // OtcOverview: preview of an OTC trade returned by otcOverview(), used by both frontend and otc()
  struct OtcOverview {
    uint256 timestamp;        // timestamp of the transaction
    address wallet;           // wallet who initiated the transaction
    bool canOtc;              // true if all conditions are met for the trade to execute
    bool userBalance;         // true if the wallet holds enough of the input token
    bool contractBalance;     // true if the contract holds enough RAGE for the output
    uint256 inputAmount;      // amount of input tokens the user is sending
    uint256 inputType;        // input token type: 1 = HESTIA, 2 = CIRCLE, 3 = USDC
    uint256 inputValue;       // usdc value of input token amount
    uint256 outputAmount;     // total RAGE tokens the user will receive (base + bonus)
    uint256 outputBonus;      // portion of outputAmount that comes from the bonus
    uint256 outputValue;      // usdc value of output rage amount
    uint256 inputForMultisig; // portion of inputAmount sent to multisig
    uint256 inputValueForMultisig;  // usdc value of the input portion sent to multisig
    uint256 inputForBacking;  // portion of inputAmount converted to pTokens and sent to RBP as backing
    uint256 inputValueForBacking;   // usdc value of the input portion converted to pTokens for backing  
    uint256 bonus;            // bonus percentage of extra RAGE value given to the user (whole percents)
    uint256 percentMultisig;  // percentage of input tokens sent to multisig (0-100, whole percents)
    uint256 rageBalance;      // current rage balance in the contract
  }

  // DepotContract: per-caller attribution snapshot
  struct DepotContract {
    address wallet;           // registered caller contract address
    uint256 attributed;       // total rage attributed to this caller
    uint256 transferred;      // total rage already transferred by this caller
    uint256 available;        // rage still available (attributed - transferred)
    uint256 transferCount;    // number of times tokens where transfered for this caller
  }

  // Depot state for the contract
  struct DepotState {
    uint256 totalAttributed;  // sum of all attributed amounts
    uint256 transferCount;    // number of transfer tokens transactions for all contract
    uint256 transferTotal;    // number of rage tokens transfered for all contract
    address addNominee1;      // address nominated by owner1 for add
    address addNominee2;      // address nominated by owner2 for add
    address removeNominee1;   // address nominated by owner1 for remove
    address removeNominee2;   // address nominated by owner2 for remove
  }

  // DepotGetState: complete read-only snapshot of the Depot contract
  struct DepotGetState {
    uint256 version;          // contract version identifier
    address automator;        // current automator address
    address owner1;           // RCE owner1
    address owner2;           // RCE owner2
    DepotState state;         // full depot state
    address[] contracts;      // array of all registered contracts addresses
    uint256 contractCount;    // number of contracts currently active within the depot contract
    uint256 rageBalance;      // actual RAGE balance held by the contract
    uint256 totalTransferred; // sum of all transferred amounts across callers
    uint256 totalAvailable;   // totalAttributed - totalTransferred
    uint256 unallocated;      // rage in contract not attributed to any caller
  }
}

File 5 of 5 : ReentrancyGuard.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Gas optimized reentrancy protection for smart contracts.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ReentrancyGuard.sol)
/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol)
abstract contract ReentrancyGuard {
    uint256 private locked = 1;

    modifier nonReentrant() virtual {
        require(locked == 1, "REENTRANCY");

        locked = 2;

        _;

        locked = 1;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"added","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotal","type":"uint256"}],"name":"AttributionIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"ContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"nominee","type":"address"}],"name":"ContractNominatedForAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"nominee","type":"address"}],"name":"ContractNominatedForRemove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"attributed","type":"uint256"}],"name":"ContractRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RageTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RageWithdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"addContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"getAvailableFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRegisteredContracts","outputs":[{"components":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"attributed","type":"uint256"},{"internalType":"uint256","name":"transferred","type":"uint256"},{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"transferCount","type":"uint256"}],"internalType":"struct RageStructs.DepotContract[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getState","outputs":[{"components":[{"internalType":"uint256","name":"version","type":"uint256"},{"internalType":"address","name":"automator","type":"address"},{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"},{"components":[{"internalType":"uint256","name":"totalAttributed","type":"uint256"},{"internalType":"uint256","name":"transferCount","type":"uint256"},{"internalType":"uint256","name":"transferTotal","type":"uint256"},{"internalType":"address","name":"addNominee1","type":"address"},{"internalType":"address","name":"addNominee2","type":"address"},{"internalType":"address","name":"removeNominee1","type":"address"},{"internalType":"address","name":"removeNominee2","type":"address"}],"internalType":"struct RageStructs.DepotState","name":"state","type":"tuple"},{"internalType":"address[]","name":"contracts","type":"address[]"},{"internalType":"uint256","name":"contractCount","type":"uint256"},{"internalType":"uint256","name":"rageBalance","type":"uint256"},{"internalType":"uint256","name":"totalTransferred","type":"uint256"},{"internalType":"uint256","name":"totalAvailable","type":"uint256"},{"internalType":"uint256","name":"unallocated","type":"uint256"}],"internalType":"struct RageStructs.DepotGetState","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAttribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"removeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"requestTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdr","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60808060405234601a57600160005561195290816100208239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081631865c57d146111a9575080633497f26d14610fd05780635f539d6914610dc75780638947606914610ba757806395877f3214610a24578063a0ef91df14610887578063aa5fc794146105f1578063c375c2ef146102fd578063ce858a2f146101385763fa1fe82e1461008d57600080fd5b34610133576020366003190112610133576001600160a01b036100ae61157b565b166000818152600260205260409020546001600160a01b0316156100f657600090815260026020818152604090922060018101549101546100ee91611646565b604051908152f35b60405162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9858dd139bdd149959da5cdd195c9959605a1b6044820152606490fd5b600080fd5b3461013357600036600319011261013357610157600160005414611667565b6002600055604051632b74522360e21b8152602081600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa801561027d576000906102c2575b6101a991506001600160a01b031633146116a0565b6101b16118c7565b80156102895760405163a9059cbb60e01b815273507fbde39ba40da4fc79426ad5e3c64944fe43d460048201526024810182905290602082604481600073c0df50143ea93aec63e38a6ed4e92b378079ea155af190811561027d576102426020927f4e755e40075a6548a33ee2cdb7b97121dacef60b22fd0fc346698c1923060ecf94600091610250575b50611768565b604051908152a16001600055005b6102709150843d8611610276575b61026881836115e6565b810190611750565b8561023c565b503d61025e565b6040513d6000823e3d90fd5b60405162461bcd60e51b81526020600482015260116024820152706e6f556e616c6c6f63617465645261676560781b6044820152606490fd5b506020813d6020116102f5575b816102dc602093836115e6565b81010312610133576102f06101a991611653565b610194565b3d91506102cf565b346101335760203660031901126101335761031661157b565b610324600160005414611667565b600260005561034d6103346117d1565b9060018060a01b031633149081156105de575b506116a0565b6001600160a01b039081166000818152600260205260409020549091610375911615156116db565b61037d6117d1565b50336001600160a01b0391909116036105c757600880546001600160a01b031916821790555b80337f86a660b6a76f59127cc547658d390444318fa3f6bdc4cca310b935cb1755f6c6600080a36008546001600160a01b031680151590816105b2575b506103ed575b6001600055005b80600052600260205260016040600020015461040b81600354611646565b60039081556000838152600260208190526040822080546001600160a01b03191681556001810183905590810182905591820181905560049091018190555b6001549081811015610587578361046082611608565b905460039190911b1c6001600160a01b03161461048157600191500161044a565b6000198201918211610571576104b461049c6104d893611608565b905460039190911b1c6001600160a01b031691611608565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b600154801561055b577f1941e29a0e9f15492f0bb97f82d955da3462e09f3981db178c595b0b2005ba62916020916000190161051381611608565b81549060018060a01b039060031b1b191690556001555b6001600160601b0360a01b600854166008556001600160601b0360a01b60095416600955604051908152a2806103e6565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b505060207f1941e29a0e9f15492f0bb97f82d955da3462e09f3981db178c595b0b2005ba629161052a565b6009546001600160a01b0316149050826103e0565b600980546001600160a01b031916821790556103a3565b6001600160a01b03163314905083610347565b346101335760403660031901126101335761060a61157b565b6024359061061c600160005414611667565b600260005533600052600260205261064260018060a01b036040600020541615156116db565b6001600160a01b03169081156108525761065d811515611717565b336000908152600260208190526040909120600181015491015461068091611646565b811161080d5761068e611856565b81116107c85733600052600260205260026040600020016106b0828254611639565b905533600090815260026020819052604090912060018101549101546106d591611646565b3360009081526002602052604090206003810191909155600401805460018101919082106105715755600454600181018091116105715760045561071b81600554611639565b60055560405163a9059cbb60e01b8152826004820152816024820152602081604481600073c0df50143ea93aec63e38a6ed4e92b378079ea155af1801561027d5761076d916000916107a95750611768565b6040519081527f6294c286530f77866920654b6752dcf694867dbc1991f4cf426324380db5149760203392a36001600055602060405160018152f35b6107c2915060203d6020116102765761026881836115e6565b8461023c565b60405162461bcd60e51b815260206004820152601760248201527f696e73756666696369656e745261676542616c616e63650000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f696e73756666696369656e744174747269627574696f6e0000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c1e995c9bd49958da5c1a595b9d609a1b6044820152606490fd5b34610133576000366003190112610133576108a6600160005414611667565b6002600055604051632b74522360e21b8152602081600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa801561027d576000906109e9575b6108f891506001600160a01b031633146116a0565b4780156109b55760008080809373507fbde39ba40da4fc79426ad5e3c64944fe43d45af13d156109b0573d67ffffffffffffffff811161099a576040519061094a601f8201601f1916602001836115e6565b8152600060203d92013e5b15610961576001600055005b60405162461bcd60e51b8152602060048201526011602482015270195d1a151c985b9cd9995c91985a5b1959607a1b6044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b610955565b60405162461bcd60e51b815260206004820152600c60248201526b6e6f45746842616c616e636560a01b6044820152606490fd5b506020813d602011610a1c575b81610a03602093836115e6565b8101031261013357610a176108f891611653565b6108e3565b3d91506109f6565b3461013357600036600319011261013357600154610a41816117a5565b90610a4f60405192836115e6565b808252601f19610a5e826117a5565b0160005b818110610b6d57505060005b818110610aec578260405180916020820160208352815180915260206040840192019060005b818110610aa2575050500390f35b91935091602060a0600192608087518580851b0381511683528481015185840152604081015160408401526060810151606084015201516080820152019401910191849392610a94565b80610af8600192611608565b838060a01b0391549060031b1c1660005260026020526040600020600460405191610b22836115ca565b848060a01b038154168352848101546020840152600281015460408401526003810154606084015201546080820152610b5b82866117bd565b52610b6681856117bd565b5001610a6e565b602090604051610b7c816115ca565b6000815260008382015260006040820152600060608201526000608082015282828701015201610a62565b3461013357602036600319011261013357610bc061157b565b610bce600160005414611667565b6002600055604051632b74522360e21b8152602081600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa801561027d57600090610d8c575b610c2091506001600160a01b031633146116a0565b6001600160a01b031673c0df50143ea93aec63e38a6ed4e92b378079ea158114610d52576040516370a0823160e01b8152306004820152602081602481855afa90811561027d57600091610d1d575b508015610ce7576000916044602092604051948593849263a9059cbb60e01b845273507fbde39ba40da4fc79426ad5e3c64944fe43d4600485015260248401525af1801561027d576103e691600091610cc85750611768565b610ce1915060203d6020116102765761026881836115e6565b8261023c565b60405162461bcd60e51b815260206004820152600e60248201526d6e6f546f6b656e42616c616e636560901b6044820152606490fd5b906020823d602011610d4a575b81610d37602093836115e6565b81010312610d4757505182610c6f565b80fd5b3d9150610d2a565b60405162461bcd60e51b815260206004820152601260248201527163616e6e6f7457697468647261775261676560701b6044820152606490fd5b506020813d602011610dbf575b81610da6602093836115e6565b8101031261013357610dba610c2091611653565b610c0b565b3d9150610d99565b3461013357602036600319011261013357610de061157b565b610dee600160005414611667565b6002600055610dfe6103346117d1565b6001600160a01b038116908115610f9d576000828152600260205260409020546001600160a01b0316610f6457610e336117d1565b50336001600160a01b039190911603610f4d57600680546001600160a01b031916831790555b81337f0dee59e0fc9e5b8b2e79444ae8c52a5ea15014a1a971ad2b8749388536b55b0d600080a36006546001600160a01b03168015159081610f38575b50610ea2576001600055005b600082815260026020526040902080546001600160a01b03191683179055600154906801000000000000000082101561099a576104b4826001610ee89401600155611608565b6001600160601b0360a01b600654166006556001600160601b0360a01b600754166007557f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205600080a280806103e6565b6007546001600160a01b031614905083610e96565b600780546001600160a01b03191683179055610e59565b60405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e549959da5cdd195c9959607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a7a65726f4164647265737360a81b6044820152606490fd5b3461013357604036600319011261013357610fe961157b565b60243590610ffb600160005414611667565b6002600055604051632b74522360e21b8152602081600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa801561027d5760009061116e575b61104d91506001600160a01b031633146116a0565b6001600160a01b03908116600081815260026020526040902054909291611076911615156116db565b611081811515611717565b6110896118c7565b81116111345760407f39cede6754145420bb2d8ef283c60bcf5e3ca491badc6d85a30c9c6e429ae21a91836000526002602052600182600020016110ce828254611639565b90556000848152600260208190529083902060018101549101546110f191611646565b846000526002602052600383600020015561110e81600354611639565b600355836000526002602052600182600020015482519182526020820152a26001600055005b60405162461bcd60e51b8152602060048201526012602482015271195e18d959591cd55b985b1b1bd8d85d195960721b6044820152606490fd5b506020813d6020116111a1575b81611188602093836115e6565b810103126101335761119c61104d91611653565b611038565b3d915061117b565b3461013357600036600319011261013357610140816111c9600093611591565b8281528260208201528260408201528260608201526040516111ea816115ae565b8381528360208201528360408201528360608201528360808201528360a08201528360c08201526080820152606060a08201528260c08201528260e0820152826101008201528261012082015201526001546112446117d1565b916000805b82811061153f57506003549061125f8183611646565b9060405194632b74522360e21b8652602086600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa95861561027d57600096611503575b506112a3611856565b906112ac6118c7565b94604051986112ba8a611591565b60018a526001600160a01b0398891660208b019081529289166040808c019182529190991660608b019081529051929892916112f5836115ae565b82526004546020830152600554604083015260018060a01b0360065416606083015260018060a01b0360075416608083015260018060a01b036008541660a083015260018060a01b036009541660c083015260808a01918252604051926020848a8152016001600052847fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69160005b8c81106114e15750611398925003856115e6565b60a08b0193845260c08b0198895260e08b019485526101008b019586526101208b019687526101408b019788526040519960208b526102408b019b5160208c015260018060a01b0390511660408b015260018060a01b0390511660608a015260018060a01b03905116608089015251805160a0890152602081015160c0890152604081015160e089015260018060a01b0360608201511661010089015260018060a01b0360808201511661012089015260018060a01b0360a08201511661014089015260c060018060a01b0391015116610160880152519461022061018088015285518098526020610260880196016000985b808a106114be575050869750516101a0870152516101c0860152516101e085015251610200840152516102208301520390f35b81516001600160a01b03168852600199909901986020978801979091019061148b565b83546001600160a01b0316825260019384019388935060209092019101611384565b9095506020813d602011611537575b8161151f602093836115e6565b810103126101335761153090611653565b948761129a565b3d9150611512565b9061157460019161154f84611608565b848060a01b0391549060031b1c16600052600260205260026040600020015490611639565b9101611249565b600435906001600160a01b038216820361013357565b610160810190811067ffffffffffffffff82111761099a57604052565b60e0810190811067ffffffffffffffff82111761099a57604052565b60a0810190811067ffffffffffffffff82111761099a57604052565b90601f8019910116810190811067ffffffffffffffff82111761099a57604052565b60015481101561162357600160005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b9190820180921161057157565b9190820391821161057157565b51906001600160a01b038216820361013357565b1561166e57565b60405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b6044820152606490fd5b156116a757565b60405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b6044820152606490fd5b156116e257565b60405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b221b0b63632b960991b6044820152606490fd5b1561171e57565b60405162461bcd60e51b815260206004820152600a6024820152691e995c9bd05b5bdd5b9d60b21b6044820152606490fd5b90816020910312610133575180151581036101335790565b1561176f57565b60405162461bcd60e51b815260206004820152600e60248201526d1d1c985b9cd9995c91985a5b195960921b6044820152606490fd5b67ffffffffffffffff811161099a5760051b60200190565b80518210156116235760209160051b010190565b6040805163a0e67e2b60e01b8152919082600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa91821561027d5760009060009361181257509190565b9250506040823d60401161184e575b8161182e604093836115e6565b810103126101335761184b602061184484611653565b9301611653565b90565b3d9150611821565b6040516370a0823160e01b815230600482015260208160248173c0df50143ea93aec63e38a6ed4e92b378079ea155afa90811561027d57600091611898575090565b90506020813d6020116118bf575b816118b3602093836115e6565b81010312610133575190565b3d91506118a6565b6000806001545b8082106119035750506118eb6118e2611856565b91600354611646565b808211156118fc5761184b91611646565b5050600090565b909161191460019161154f85611608565b9201906118ce56fea2646970667358221220785fa6bb24787e876f3683a0e4606b372fd8ac61b877899255309c0753e5799764736f6c634300081a0033

Deployed Bytecode

0x608080604052600436101561001357600080fd5b60003560e01c9081631865c57d146111a9575080633497f26d14610fd05780635f539d6914610dc75780638947606914610ba757806395877f3214610a24578063a0ef91df14610887578063aa5fc794146105f1578063c375c2ef146102fd578063ce858a2f146101385763fa1fe82e1461008d57600080fd5b34610133576020366003190112610133576001600160a01b036100ae61157b565b166000818152600260205260409020546001600160a01b0316156100f657600090815260026020818152604090922060018101549101546100ee91611646565b604051908152f35b60405162461bcd60e51b815260206004820152601560248201527418dbdb9d1c9858dd139bdd149959da5cdd195c9959605a1b6044820152606490fd5b600080fd5b3461013357600036600319011261013357610157600160005414611667565b6002600055604051632b74522360e21b8152602081600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa801561027d576000906102c2575b6101a991506001600160a01b031633146116a0565b6101b16118c7565b80156102895760405163a9059cbb60e01b815273507fbde39ba40da4fc79426ad5e3c64944fe43d460048201526024810182905290602082604481600073c0df50143ea93aec63e38a6ed4e92b378079ea155af190811561027d576102426020927f4e755e40075a6548a33ee2cdb7b97121dacef60b22fd0fc346698c1923060ecf94600091610250575b50611768565b604051908152a16001600055005b6102709150843d8611610276575b61026881836115e6565b810190611750565b8561023c565b503d61025e565b6040513d6000823e3d90fd5b60405162461bcd60e51b81526020600482015260116024820152706e6f556e616c6c6f63617465645261676560781b6044820152606490fd5b506020813d6020116102f5575b816102dc602093836115e6565b81010312610133576102f06101a991611653565b610194565b3d91506102cf565b346101335760203660031901126101335761031661157b565b610324600160005414611667565b600260005561034d6103346117d1565b9060018060a01b031633149081156105de575b506116a0565b6001600160a01b039081166000818152600260205260409020549091610375911615156116db565b61037d6117d1565b50336001600160a01b0391909116036105c757600880546001600160a01b031916821790555b80337f86a660b6a76f59127cc547658d390444318fa3f6bdc4cca310b935cb1755f6c6600080a36008546001600160a01b031680151590816105b2575b506103ed575b6001600055005b80600052600260205260016040600020015461040b81600354611646565b60039081556000838152600260208190526040822080546001600160a01b03191681556001810183905590810182905591820181905560049091018190555b6001549081811015610587578361046082611608565b905460039190911b1c6001600160a01b03161461048157600191500161044a565b6000198201918211610571576104b461049c6104d893611608565b905460039190911b1c6001600160a01b031691611608565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b600154801561055b577f1941e29a0e9f15492f0bb97f82d955da3462e09f3981db178c595b0b2005ba62916020916000190161051381611608565b81549060018060a01b039060031b1b191690556001555b6001600160601b0360a01b600854166008556001600160601b0360a01b60095416600955604051908152a2806103e6565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b505060207f1941e29a0e9f15492f0bb97f82d955da3462e09f3981db178c595b0b2005ba629161052a565b6009546001600160a01b0316149050826103e0565b600980546001600160a01b031916821790556103a3565b6001600160a01b03163314905083610347565b346101335760403660031901126101335761060a61157b565b6024359061061c600160005414611667565b600260005533600052600260205261064260018060a01b036040600020541615156116db565b6001600160a01b03169081156108525761065d811515611717565b336000908152600260208190526040909120600181015491015461068091611646565b811161080d5761068e611856565b81116107c85733600052600260205260026040600020016106b0828254611639565b905533600090815260026020819052604090912060018101549101546106d591611646565b3360009081526002602052604090206003810191909155600401805460018101919082106105715755600454600181018091116105715760045561071b81600554611639565b60055560405163a9059cbb60e01b8152826004820152816024820152602081604481600073c0df50143ea93aec63e38a6ed4e92b378079ea155af1801561027d5761076d916000916107a95750611768565b6040519081527f6294c286530f77866920654b6752dcf694867dbc1991f4cf426324380db5149760203392a36001600055602060405160018152f35b6107c2915060203d6020116102765761026881836115e6565b8461023c565b60405162461bcd60e51b815260206004820152601760248201527f696e73756666696369656e745261676542616c616e63650000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f696e73756666696369656e744174747269627574696f6e0000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c1e995c9bd49958da5c1a595b9d609a1b6044820152606490fd5b34610133576000366003190112610133576108a6600160005414611667565b6002600055604051632b74522360e21b8152602081600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa801561027d576000906109e9575b6108f891506001600160a01b031633146116a0565b4780156109b55760008080809373507fbde39ba40da4fc79426ad5e3c64944fe43d45af13d156109b0573d67ffffffffffffffff811161099a576040519061094a601f8201601f1916602001836115e6565b8152600060203d92013e5b15610961576001600055005b60405162461bcd60e51b8152602060048201526011602482015270195d1a151c985b9cd9995c91985a5b1959607a1b6044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b610955565b60405162461bcd60e51b815260206004820152600c60248201526b6e6f45746842616c616e636560a01b6044820152606490fd5b506020813d602011610a1c575b81610a03602093836115e6565b8101031261013357610a176108f891611653565b6108e3565b3d91506109f6565b3461013357600036600319011261013357600154610a41816117a5565b90610a4f60405192836115e6565b808252601f19610a5e826117a5565b0160005b818110610b6d57505060005b818110610aec578260405180916020820160208352815180915260206040840192019060005b818110610aa2575050500390f35b91935091602060a0600192608087518580851b0381511683528481015185840152604081015160408401526060810151606084015201516080820152019401910191849392610a94565b80610af8600192611608565b838060a01b0391549060031b1c1660005260026020526040600020600460405191610b22836115ca565b848060a01b038154168352848101546020840152600281015460408401526003810154606084015201546080820152610b5b82866117bd565b52610b6681856117bd565b5001610a6e565b602090604051610b7c816115ca565b6000815260008382015260006040820152600060608201526000608082015282828701015201610a62565b3461013357602036600319011261013357610bc061157b565b610bce600160005414611667565b6002600055604051632b74522360e21b8152602081600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa801561027d57600090610d8c575b610c2091506001600160a01b031633146116a0565b6001600160a01b031673c0df50143ea93aec63e38a6ed4e92b378079ea158114610d52576040516370a0823160e01b8152306004820152602081602481855afa90811561027d57600091610d1d575b508015610ce7576000916044602092604051948593849263a9059cbb60e01b845273507fbde39ba40da4fc79426ad5e3c64944fe43d4600485015260248401525af1801561027d576103e691600091610cc85750611768565b610ce1915060203d6020116102765761026881836115e6565b8261023c565b60405162461bcd60e51b815260206004820152600e60248201526d6e6f546f6b656e42616c616e636560901b6044820152606490fd5b906020823d602011610d4a575b81610d37602093836115e6565b81010312610d4757505182610c6f565b80fd5b3d9150610d2a565b60405162461bcd60e51b815260206004820152601260248201527163616e6e6f7457697468647261775261676560701b6044820152606490fd5b506020813d602011610dbf575b81610da6602093836115e6565b8101031261013357610dba610c2091611653565b610c0b565b3d9150610d99565b3461013357602036600319011261013357610de061157b565b610dee600160005414611667565b6002600055610dfe6103346117d1565b6001600160a01b038116908115610f9d576000828152600260205260409020546001600160a01b0316610f6457610e336117d1565b50336001600160a01b039190911603610f4d57600680546001600160a01b031916831790555b81337f0dee59e0fc9e5b8b2e79444ae8c52a5ea15014a1a971ad2b8749388536b55b0d600080a36006546001600160a01b03168015159081610f38575b50610ea2576001600055005b600082815260026020526040902080546001600160a01b03191683179055600154906801000000000000000082101561099a576104b4826001610ee89401600155611608565b6001600160601b0360a01b600654166006556001600160601b0360a01b600754166007557f89c66952b48f3e96bf1d8ba1b63189520fd988a6979b8b740bd5c5d8dc53e205600080a280806103e6565b6007546001600160a01b031614905083610e96565b600780546001600160a01b03191683179055610e59565b60405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e549959da5cdd195c9959607a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a7a65726f4164647265737360a81b6044820152606490fd5b3461013357604036600319011261013357610fe961157b565b60243590610ffb600160005414611667565b6002600055604051632b74522360e21b8152602081600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa801561027d5760009061116e575b61104d91506001600160a01b031633146116a0565b6001600160a01b03908116600081815260026020526040902054909291611076911615156116db565b611081811515611717565b6110896118c7565b81116111345760407f39cede6754145420bb2d8ef283c60bcf5e3ca491badc6d85a30c9c6e429ae21a91836000526002602052600182600020016110ce828254611639565b90556000848152600260208190529083902060018101549101546110f191611646565b846000526002602052600383600020015561110e81600354611639565b600355836000526002602052600182600020015482519182526020820152a26001600055005b60405162461bcd60e51b8152602060048201526012602482015271195e18d959591cd55b985b1b1bd8d85d195960721b6044820152606490fd5b506020813d6020116111a1575b81611188602093836115e6565b810103126101335761119c61104d91611653565b611038565b3d915061117b565b3461013357600036600319011261013357610140816111c9600093611591565b8281528260208201528260408201528260608201526040516111ea816115ae565b8381528360208201528360408201528360608201528360808201528360a08201528360c08201526080820152606060a08201528260c08201528260e0820152826101008201528261012082015201526001546112446117d1565b916000805b82811061153f57506003549061125f8183611646565b9060405194632b74522360e21b8652602086600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa95861561027d57600096611503575b506112a3611856565b906112ac6118c7565b94604051986112ba8a611591565b60018a526001600160a01b0398891660208b019081529289166040808c019182529190991660608b019081529051929892916112f5836115ae565b82526004546020830152600554604083015260018060a01b0360065416606083015260018060a01b0360075416608083015260018060a01b036008541660a083015260018060a01b036009541660c083015260808a01918252604051926020848a8152016001600052847fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69160005b8c81106114e15750611398925003856115e6565b60a08b0193845260c08b0198895260e08b019485526101008b019586526101208b019687526101408b019788526040519960208b526102408b019b5160208c015260018060a01b0390511660408b015260018060a01b0390511660608a015260018060a01b03905116608089015251805160a0890152602081015160c0890152604081015160e089015260018060a01b0360608201511661010089015260018060a01b0360808201511661012089015260018060a01b0360a08201511661014089015260c060018060a01b0391015116610160880152519461022061018088015285518098526020610260880196016000985b808a106114be575050869750516101a0870152516101c0860152516101e085015251610200840152516102208301520390f35b81516001600160a01b03168852600199909901986020978801979091019061148b565b83546001600160a01b0316825260019384019388935060209092019101611384565b9095506020813d602011611537575b8161151f602093836115e6565b810103126101335761153090611653565b948761129a565b3d9150611512565b9061157460019161154f84611608565b848060a01b0391549060031b1c16600052600260205260026040600020015490611639565b9101611249565b600435906001600160a01b038216820361013357565b610160810190811067ffffffffffffffff82111761099a57604052565b60e0810190811067ffffffffffffffff82111761099a57604052565b60a0810190811067ffffffffffffffff82111761099a57604052565b90601f8019910116810190811067ffffffffffffffff82111761099a57604052565b60015481101561162357600160005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b9190820180921161057157565b9190820391821161057157565b51906001600160a01b038216820361013357565b1561166e57565b60405162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b6044820152606490fd5b156116a757565b60405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b6044820152606490fd5b156116e257565b60405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b221b0b63632b960991b6044820152606490fd5b1561171e57565b60405162461bcd60e51b815260206004820152600a6024820152691e995c9bd05b5bdd5b9d60b21b6044820152606490fd5b90816020910312610133575180151581036101335790565b1561176f57565b60405162461bcd60e51b815260206004820152600e60248201526d1d1c985b9cd9995c91985a5b195960921b6044820152606490fd5b67ffffffffffffffff811161099a5760051b60200190565b80518210156116235760209160051b010190565b6040805163a0e67e2b60e01b8152919082600481734c15f778ab59f25d5dfd2dd508236a25ed2813fe5afa91821561027d5760009060009361181257509190565b9250506040823d60401161184e575b8161182e604093836115e6565b810103126101335761184b602061184484611653565b9301611653565b90565b3d9150611821565b6040516370a0823160e01b815230600482015260208160248173c0df50143ea93aec63e38a6ed4e92b378079ea155afa90811561027d57600091611898575090565b90506020813d6020116118bf575b816118b3602093836115e6565b81010312610133575190565b3d91506118a6565b6000806001545b8082106119035750506118eb6118e2611856565b91600354611646565b808211156118fc5761184b91611646565b5050600090565b909161191460019161154f85611608565b9201906118ce56fea2646970667358221220785fa6bb24787e876f3683a0e4606b372fd8ac61b877899255309c0753e5799764736f6c634300081a0033

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  ]

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.