ETH Price: $3,135.76 (-4.39%)

Contract

0xE7876f282bdF0f62e5fdb2C63b8b89c10538dF32
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deny160512442022-11-26 2:41:59719 days ago1669430519IN
0xE7876f28...10538dF32
0 ETH0.0002871411.22878608
Change Rate150388742022-06-28 8:51:18870 days ago1656406278IN
0xE7876f28...10538dF32
0 ETH0.0027597331.77692654
Change Rate150388712022-06-28 8:50:16870 days ago1656406216IN
0xE7876f28...10538dF32
0 ETH0.0027357429.45112893
Change Rate149212632022-06-07 14:17:03891 days ago1654611423IN
0xE7876f28...10538dF32
0 ETH0.005744961.36015554
Change Rate147866352022-05-16 13:55:32913 days ago1652709332IN
0xE7876f28...10538dF32
0 ETH0.0053325649.82911657
Deny147047192022-05-03 12:44:57926 days ago1651581897IN
0xE7876f28...10538dF32
0 ETH0.0016054562.78188159
Change Rate147047152022-05-03 12:43:27926 days ago1651581807IN
0xE7876f28...10538dF32
0 ETH0.0069034555.46637037
Deny142936532022-02-28 8:53:03990 days ago1646038383IN
0xE7876f28...10538dF32
0 ETH0.0008568933.50909673
Change Rate142936442022-02-28 8:50:51990 days ago1646038251IN
0xE7876f28...10538dF32
0 ETH0.0032811226.20709324
Deny141343012022-02-03 17:14:131015 days ago1643908453IN
0xE7876f28...10538dF32
0 ETH0.00546547213.72896222
Change Rate141342982022-02-03 17:13:211015 days ago1643908401IN
0xE7876f28...10538dF32
0 ETH0.02519247200.29953766
Change Rate123297452021-04-28 15:29:521296 days ago1619623792IN
0xE7876f28...10538dF32
0 ETH0.01879155150

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
114642012020-12-16 12:41:551429 days ago1608122515  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Pile

Compiler Version
v0.5.15+commit.6a57276f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2020-12-16
*/

// Verified using https://dapp.tools

// hevm: flattened sources of src/borrower/pile.sol
pragma solidity >=0.4.23 >=0.5.15 <0.6.0;

////// lib/tinlake-auth/lib/ds-note/src/note.sol
/// note.sol -- the `note' modifier, for logging calls as events

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

/* pragma solidity >=0.4.23; */

contract DSNote {
    event LogNote(
        bytes4   indexed  sig,
        address  indexed  guy,
        bytes32  indexed  foo,
        bytes32  indexed  bar,
        uint256           wad,
        bytes             fax
    ) anonymous;

    modifier note {
        bytes32 foo;
        bytes32 bar;
        uint256 wad;

        assembly {
            foo := calldataload(4)
            bar := calldataload(36)
            wad := callvalue()
        }

        _;

        emit LogNote(msg.sig, msg.sender, foo, bar, wad, msg.data);
    }
}

////// lib/tinlake-auth/src/auth.sol
// Copyright (C) Centrifuge 2020, based on MakerDAO dss https://github.com/makerdao/dss
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity >=0.5.15 <0.6.0; */

/* import "ds-note/note.sol"; */

contract Auth is DSNote {
    mapping (address => uint) public wards;
    function rely(address usr) public auth note { wards[usr] = 1; }
    function deny(address usr) public auth note { wards[usr] = 0; }
    modifier auth { require(wards[msg.sender] == 1); _; }
}

////// lib/tinlake-math/src/math.sol
// Copyright (C) 2018 Rain <[email protected]>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity >=0.5.15 <0.6.0; */

contract Math {
    uint256 constant ONE = 10 ** 27;

    function safeAdd(uint x, uint y) public pure returns (uint z) {
        require((z = x + y) >= x, "safe-add-failed");
    }

    function safeSub(uint x, uint y) public pure returns (uint z) {
        require((z = x - y) <= x, "safe-sub-failed");
    }

    function safeMul(uint x, uint y) public pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, "safe-mul-failed");
    }

    function safeDiv(uint x, uint y) public pure returns (uint z) {
        z = x / y;
    }

    function rmul(uint x, uint y) public pure returns (uint z) {
        z = safeMul(x, y) / ONE;
    }

    function rdiv(uint x, uint y) public pure returns (uint z) {
        require(y > 0, "division by zero");
        z = safeAdd(safeMul(x, ONE), y / 2) / y;
    }

    function rdivup(uint x, uint y) internal pure returns (uint z) {
        require(y > 0, "division by zero");
        // always rounds up
        z = safeAdd(safeMul(x, ONE), safeSub(y, 1)) / y;
    }


}

////// lib/tinlake-math/src/interest.sol
// Copyright (C) 2018 Rain <[email protected]> and Centrifuge, referencing MakerDAO dss => https://github.com/makerdao/dss/blob/master/src/pot.sol
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity >=0.5.15 <0.6.0; */

/* import "./math.sol"; */

contract Interest is Math {
    // @notice This function provides compounding in seconds
    // @param chi Accumulated interest rate over time
    // @param ratePerSecond Interest rate accumulation per second in RAD(10ˆ27)
    // @param lastUpdated When the interest rate was last updated
    // @param pie Total sum of all amounts accumulating under one interest rate, divided by that rate
    // @return The new accumulated rate, as well as the difference between the debt calculated with the old and new accumulated rates.
    function compounding(uint chi, uint ratePerSecond, uint lastUpdated, uint pie) public view returns (uint, uint) {
        require(block.timestamp >= lastUpdated, "tinlake-math/invalid-timestamp");
        require(chi != 0);
        // instead of a interestBearingAmount we use a accumulated interest rate index (chi)
        uint updatedChi = _chargeInterest(chi ,ratePerSecond, lastUpdated, block.timestamp);
        return (updatedChi, safeSub(rmul(updatedChi, pie), rmul(chi, pie)));
    }

    // @notice This function charge interest on a interestBearingAmount
    // @param interestBearingAmount is the interest bearing amount
    // @param ratePerSecond Interest rate accumulation per second in RAD(10ˆ27)
    // @param lastUpdated last time the interest has been charged
    // @return interestBearingAmount + interest
    function chargeInterest(uint interestBearingAmount, uint ratePerSecond, uint lastUpdated) public view returns (uint) {
        if (block.timestamp >= lastUpdated) {
            interestBearingAmount = _chargeInterest(interestBearingAmount, ratePerSecond, lastUpdated, block.timestamp);
        }
        return interestBearingAmount;
    }

    function _chargeInterest(uint interestBearingAmount, uint ratePerSecond, uint lastUpdated, uint current) internal pure returns (uint) {
        return rmul(rpow(ratePerSecond, current - lastUpdated, ONE), interestBearingAmount);
    }


    // convert pie to debt/savings amount
    function toAmount(uint chi, uint pie) public pure returns (uint) {
        return rmul(pie, chi);
    }

    // convert debt/savings amount to pie
    function toPie(uint chi, uint amount) public pure returns (uint) {
        return rdivup(amount, chi);
    }

    function rpow(uint x, uint n, uint base) public pure returns (uint z) {
        assembly {
            switch x case 0 {switch n case 0 {z := base} default {z := 0}}
            default {
                switch mod(n, 2) case 0 { z := base } default { z := x }
                let half := div(base, 2)  // for rounding.
                for { n := div(n, 2) } n { n := div(n,2) } {
                let xx := mul(x, x)
                if iszero(eq(div(xx, x), x)) { revert(0,0) }
                let xxRound := add(xx, half)
                if lt(xxRound, xx) { revert(0,0) }
                x := div(xxRound, base)
                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, base)
                }
            }
            }
        }
    }
}

////// src/borrower/pile.sol
// Copyright (C) 2018  Rain <[email protected]>, Centrifuge
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity >=0.5.15 <0.6.0; */

/* import "ds-note/note.sol"; */
/* import "tinlake-math/interest.sol"; */
/* import "tinlake-auth/auth.sol"; */

// ## Interest Group based Pile
// The following is one implementation of a debt module. It keeps track of different buckets of interest rates and is optimized for many loans per interest bucket. It keeps track of interest
// rate accumulators (chi values) for all interest rate categories. It calculates debt each
// loan according to its interest rate category and pie value.
contract Pile is DSNote, Auth, Interest {
    // --- Data ---

    /// stores all needed information of an interest rate group
    struct Rate {
        uint   pie;                 // Total debt of all loans with this rate
        uint   chi;                 // Accumulated rates
        uint   ratePerSecond;       // Accumulation per second
        uint48 lastUpdated;         // Last time the rate was accumulated
        uint   fixedRate;           // fixed rate applied to each loan of the group
    }

    /// Interest Rate Groups are identified by a `uint` and stored in a mapping
    mapping (uint => Rate) public rates;

    /// mapping of all loan debts
    /// the debt is stored as pie
    /// pie is defined as pie = debt/chi therefore debt = pie * chi
    /// where chi is the accumulated interest rate index over time
    mapping (uint => uint) public pie;
    /// loan => rate
    mapping (uint => uint) public loanRates;


    /// total debt of all ongoing loans
    uint public total;

    constructor() public {
        wards[msg.sender] = 1;
        /// pre-definition for loans without interest rates
        rates[0].chi = ONE;
        rates[0].ratePerSecond = ONE;
    }

     // --- Public Debt Methods  ---
    /// increases the debt of a loan by a currencyAmount
    /// a change of the loan debt updates the rate debt and total debt
    function incDebt(uint loan, uint currencyAmount) external auth note { 
        uint rate = loanRates[loan];
        require(now == rates[rate].lastUpdated, "rate-group-not-updated");
        currencyAmount = safeAdd(currencyAmount, rmul(currencyAmount, rates[rate].fixedRate));
        uint pieAmount = toPie(rates[rate].chi, currencyAmount);

        pie[loan] = safeAdd(pie[loan], pieAmount);
        rates[rate].pie = safeAdd(rates[rate].pie, pieAmount);
        total = safeAdd(total, currencyAmount);
    }

    /// decrease the loan's debt by a currencyAmount
    /// a change of the loan debt updates the rate debt and total debt
    function decDebt(uint loan, uint currencyAmount) external auth note {
        uint rate = loanRates[loan];
        require(now == rates[rate].lastUpdated, "rate-group-not-updated");
        uint pieAmount = toPie(rates[rate].chi, currencyAmount);

        pie[loan] = safeSub(pie[loan], pieAmount);
        rates[rate].pie = safeSub(rates[rate].pie, pieAmount);

        if (currencyAmount > total) {
            total = 0;
            return;
        }

        total = safeSub(total, currencyAmount);
    }

    /// returns the current debt based on actual block.timestamp (now)
    function debt(uint loan) external view returns (uint) {
        uint rate_ = loanRates[loan];
        uint chi_ = rates[rate_].chi;
        if (now >= rates[rate_].lastUpdated) {
            chi_ = chargeInterest(rates[rate_].chi, rates[rate_].ratePerSecond, rates[rate_].lastUpdated);
        }
        return toAmount(chi_, pie[loan]);
    }

    /// returns the total debt of a interest rate group
    function rateDebt(uint rate) external view returns (uint) {
        uint chi_ = rates[rate].chi;
        uint pie_ = rates[rate].pie;

        if (now >= rates[rate].lastUpdated) {
            chi_ = chargeInterest(rates[rate].chi, rates[rate].ratePerSecond, rates[rate].lastUpdated);
        }
        return toAmount(chi_, pie_);
    }

    // --- Interest Rate Group Implementation ---

    // set rate loanRates for a loan
    function setRate(uint loan, uint rate) external auth note {
        require(pie[loan] == 0, "non-zero-debt");
        // rate category has to be initiated
        require(rates[rate].chi != 0, "rate-group-not-set");
        loanRates[loan] = rate;
    }

    // change rate loanRates for a loan
    function changeRate(uint loan, uint newRate) external auth note {
        require(rates[newRate].chi != 0, "rate-group-not-set");
        uint currentRate = loanRates[loan];
        drip(currentRate);
        drip(newRate);
        uint pie_ = pie[loan];
        uint debt_ = toAmount(rates[currentRate].chi, pie_);
        rates[currentRate].pie = safeSub(rates[currentRate].pie, pie_);
        pie[loan] = toPie(rates[newRate].chi, debt_);
        rates[newRate].pie = safeAdd(rates[newRate].pie, pie[loan]);
        loanRates[loan] = newRate;
    }

    // set/change the interest rate of a rate category
    function file(bytes32 what, uint rate, uint value) external auth note {
        if (what == "rate") {
            require(value != 0, "rate-per-second-can-not-be-0");
            if (rates[rate].chi == 0) {
                rates[rate].chi = ONE;
                rates[rate].lastUpdated = uint48(now);
            } else {
                drip(rate);
            } 
            rates[rate].ratePerSecond = value;
        } else if (what == "fixedRate") {
            rates[rate].fixedRate = value;
        } else revert("unknown parameter");
    }

    // accrue needs to be called before any debt amounts are modified by an external component
    function accrue(uint loan) external {
        drip(loanRates[loan]);
    }

    // drip updates the chi of the rate category by compounding the interest and
    // updates the total debt
    function drip(uint rate) public {        
        if (now >= rates[rate].lastUpdated) {
            (uint chi, uint deltaInterest) = compounding(rates[rate].chi, rates[rate].ratePerSecond, rates[rate].lastUpdated, rates[rate].pie);
            rates[rate].chi = chi;
            rates[rate].lastUpdated = uint48(now);
            total = safeAdd(total, deltaInterest);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes4","name":"sig","type":"bytes4"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":true,"internalType":"bytes32","name":"foo","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"bar","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"fax","type":"bytes"}],"name":"LogNote","type":"event"},{"constant":false,"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"}],"name":"accrue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"changeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"interestBearingAmount","type":"uint256"},{"internalType":"uint256","name":"ratePerSecond","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"}],"name":"chargeInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"chi","type":"uint256"},{"internalType":"uint256","name":"ratePerSecond","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"},{"internalType":"uint256","name":"pie","type":"uint256"}],"name":"compounding","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"}],"name":"debt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"}],"name":"decDebt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"drip","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"file","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"}],"name":"incDebt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"loanRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pie","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"rateDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rates","outputs":[{"internalType":"uint256","name":"pie","type":"uint256"},{"internalType":"uint256","name":"chi","type":"uint256"},{"internalType":"uint256","name":"ratePerSecond","type":"uint256"},{"internalType":"uint48","name":"lastUpdated","type":"uint48"},{"internalType":"uint256","name":"fixedRate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rdiv","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rmul","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"},{"internalType":"uint256","name":"base","type":"uint256"}],"name":"rpow","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeAdd","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeDiv","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeMul","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeSub","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"chi","type":"uint256"},{"internalType":"uint256","name":"pie","type":"uint256"}],"name":"toAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"chi","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"toPie","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b5060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506b033b2e3c9fd0803ce800000060016000808152602001908152602001600020600101819055506b033b2e3c9fd0803ce80000006001600080815260200190815260200160002060020181905550612229806100b26000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063744f4cf6116100f9578063b5931f7c11610097578063d7affae311610071578063d7affae3146107b0578063dd418ae2146107f2578063e4064a7714610860578063e6cb9013146108c7576101a9565b8063b5931f7c146106c0578063bf353dbb1461070c578063d05c78da14610764576101a9565b80639c52a7f1116100d35780639c52a7f1146105ac5780639e1aaae6146105f0578063a293d1e81461063c578063a883b0c414610688576101a9565b8063744f4cf6146104fa57806386c1762a146105285780639717411d1461056a576101a9565b806329a8f4f81161016657806358326b7a1161014057806358326b7a146103e657806365fae35e14610414578063674570221461045857806367b870af146104a4576101a9565b806329a8f4f81461033a5780632ddbd13a1461039057806346df2ccb146103ae576101a9565b806301aa8a6e146101ae578063071ffb3c146101f05780630e2286d3146102285780631e0029c8146102745780632047a267146102b657806328a7996f146102ee575b600080fd5b6101da600480360360208110156101c457600080fd5b8101908080359060200190929190505050610913565b6040518082815260200191505060405180910390f35b6102266004803603604081101561020657600080fd5b81019080803590602001909291908035906020019092919050505061092b565b005b61025e6004803603604081101561023e57600080fd5b810190808035906020019092919080359060200190929190505050610bc5565b6040518082815260200191505060405180910390f35b6102a06004803603602081101561028a57600080fd5b8101908080359060200190929190505050610c76565b6040518082815260200191505060405180910390f35b6102ec600480360360408110156102cc57600080fd5b810190808035906020019092919080359060200190929190505050610d71565b005b6103246004803603604081101561030457600080fd5b810190808035906020019092919080359060200190929190505050610ffa565b6040518082815260200191505060405180910390f35b61037a6004803603606081101561035057600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061100e565b6040518082815260200191505060405180910390f35b610398611030565b6040518082815260200191505060405180910390f35b6103e4600480360360408110156103c457600080fd5b810190808035906020019092919080359060200190929190505050611036565b005b610412600480360360208110156103fc57600080fd5b8101908080359060200190929190505050611270565b005b6104566004803603602081101561042a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611398565b005b61048e6004803603604081101561046e57600080fd5b8101908080359060200190929190803590602001909291905050506114e7565b6040518082815260200191505060405180910390f35b6104e4600480360360608110156104ba57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611510565b6040518082815260200191505060405180910390f35b6105266004803603602081101561051057600080fd5b81019080803590602001909291905050506115d6565b005b6105546004803603602081101561053e57600080fd5b81019080803590602001909291905050506115f5565b6040518082815260200191505060405180910390f35b6105966004803603602081101561058057600080fd5b81019080803590602001909291905050506116e0565b6040518082815260200191505060405180910390f35b6105ee600480360360208110156105c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f8565b005b6106266004803603604081101561060657600080fd5b810190808035906020019092919080359060200190929190505050611847565b6040518082815260200191505060405180910390f35b6106726004803603604081101561065257600080fd5b81019080803590602001909291908035906020019092919050505061185b565b6040518082815260200191505060405180910390f35b6106be6004803603604081101561069e57600080fd5b8101908080359060200190929190803590602001909291905050506118de565b005b6106f6600480360360408110156106d657600080fd5b810190808035906020019092919080359060200190929190505050611bb6565b6040518082815260200191505060405180910390f35b61074e6004803603602081101561072257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bca565b6040518082815260200191505060405180910390f35b61079a6004803603604081101561077a57600080fd5b810190808035906020019092919080359060200190929190505050611be2565b6040518082815260200191505060405180910390f35b6107f0600480360360608110156107c657600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611c77565b005b61081e6004803603602081101561080857600080fd5b8101908080359060200190929190505050611f88565b604051808681526020018581526020018481526020018365ffffffffffff1665ffffffffffff1681526020018281526020019550505050505060405180910390f35b6108aa6004803603608081101561087657600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611fd0565b604051808381526020018281526020019250505060405180910390f35b6108fd600480360360408110156108dd57600080fd5b810190808035906020019092919080359060200190929190505050612092565b6040518082815260200191505060405180910390f35b60036020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461097657600080fd5b6000806000600435925060243591503490506000600360008781526020019081526020016000205490506001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164214610a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f726174652d67726f75702d6e6f742d757064617465640000000000000000000081525060200191505060405180910390fd5b610a6e85610a698760016000868152602001908152602001600020600401546114e7565b612092565b94506000610a92600160008481526020019081526020016000206001015487610ffa565b9050610ab1600260008981526020019081526020016000205482612092565b6002600089815260200190815260200160002081905550610ae8600160008481526020019081526020016000206000015482612092565b6001600084815260200190815260200160002060000181905550610b0e60045487612092565b600481905550505081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a45050505050565b6000808211610c3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6469766973696f6e206279207a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b81610c66610c56856b033b2e3c9fd0803ce8000000611be2565b60028581610c6057fe5b04612092565b81610c6d57fe5b04905092915050565b600080600360008481526020019081526020016000205490506000600160008381526020019081526020016000206001015490506001600083815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164210610d4b57610d48600160008481526020019081526020016000206001015460016000858152602001908152602001600020600201546001600086815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff1661100e565b90505b610d68816002600087815260200190815260200160002054611847565b92505050919050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610dbc57600080fd5b6000806000600435925060243591503490506000600360008781526020019081526020016000205490506001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164214610e8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f726174652d67726f75702d6e6f742d757064617465640000000000000000000081525060200191505060405180910390fd5b6000610ead600160008481526020019081526020016000206001015487610ffa565b9050610ecc60026000898152602001908152602001600020548261185b565b6002600089815260200190815260200160002081905550610f0360016000848152602001908152602001600020600001548261185b565b6001600084815260200190815260200160002060000181905550600454861115610f365760006004819055505050610f4b565b610f426004548761185b565b60048190555050505b81833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a45050505050565b60006110068284612115565b905092915050565b600081421061102657611023848484426121c6565b93505b8390509392505050565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461108157600080fd5b600080600060043592506024359150349050600060026000878152602001908152602001600020541461111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6e6f6e2d7a65726f2d646562740000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008681526020019081526020016000206001015414156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f726174652d67726f75702d6e6f742d736574000000000000000000000000000081525060200191505060405180910390fd5b83600360008781526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a45050505050565b6001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff16421061139557600080611328600160008581526020019081526020016000206001015460016000868152602001908152602001600020600201546001600087815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff166001600088815260200190815260200160002060000154611fd0565b91509150816001600085815260200190815260200160002060010181905550426001600085815260200190815260200160002060030160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555061138c60045482612092565b60048190555050505b50565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113e357600080fd5b60008060006004359250602435915034905060016000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a450505050565b60006b033b2e3c9fd0803ce80000006115008484611be2565b8161150757fe5b04905092915050565b600083600081146115b657600284066000811461152f57859250611533565b8392505b50600283046002850494505b84156115b057858602868782041461155657600080fd5b8181018181101561156657600080fd5b858104975060028706156115a357878502858982041415891515161561158b57600080fd5b8381018181101561159b57600080fd5b878104965050505b505060028504945061153f565b506115ce565b83600081146115c857600092506115cc565b8392505b505b509392505050565b6115f26003600083815260200190815260200160002054611270565b50565b600080600160008481526020019081526020016000206001015490506000600160008581526020019081526020016000206000015490506001600085815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff1642106116cd576116ca600160008681526020019081526020016000206001015460016000878152602001908152602001600020600201546001600088815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff1661100e565b91505b6116d78282611847565b92505050919050565b60026020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461174357600080fd5b60008060006004359250602435915034905060008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a450505050565b600061185382846114e7565b905092915050565b60008282840391508111156118d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d7375622d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461192957600080fd5b6000806000600435925060243591503490506000600160008681526020019081526020016000206001015414156119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f726174652d67726f75702d6e6f742d736574000000000000000000000000000081525060200191505060405180910390fd5b6000600360008781526020019081526020016000205490506119e981611270565b6119f285611270565b6000600260008881526020019081526020016000205490506000611a2c600160008581526020019081526020016000206001015483611847565b9050611a4e60016000858152602001908152602001600020600001548361185b565b6001600085815260200190815260200160002060000181905550611a88600160008981526020019081526020016000206001015482610ffa565b600260008a815260200190815260200160002081905550611ad26001600089815260200190815260200160002060000154600260008b815260200190815260200160002054612092565b600160008981526020019081526020016000206000018190555086600360008a81526020019081526020016000208190555050505081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a45050505050565b6000818381611bc157fe5b04905092915050565b60006020528060005260406000206000915090505481565b600080821480611bff5750828283850292508281611bfc57fe5b04145b611c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d6d756c2d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611cc257600080fd5b6000806000600435925060243591503490507f7261746500000000000000000000000000000000000000000000000000000000861415611e21576000841415611d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f726174652d7065722d7365636f6e642d63616e2d6e6f742d62652d300000000081525060200191505060405180910390fd5b600060016000878152602001908152602001600020600101541415611df7576b033b2e3c9fd0803ce80000006001600087815260200190815260200160002060010181905550426001600087815260200190815260200160002060030160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550611e01565b611e0085611270565b5b836001600087815260200190815260200160002060020181905550611ed8565b7f6669786564526174650000000000000000000000000000000000000000000000861415611e6957836001600087815260200190815260200160002060040181905550611ed7565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f756e6b6e6f776e20706172616d6574657200000000000000000000000000000081525060200191505060405180910390fd5b5b81833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a4505050505050565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900465ffffffffffff16908060040154905085565b60008083421015612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f74696e6c616b652d6d6174682f696e76616c69642d74696d657374616d70000081525060200191505060405180910390fd5b600086141561205757600080fd5b6000612065878787426121c6565b90508061208461207583876114e7565b61207f8a886114e7565b61185b565b925092505094509492505050565b600082828401915081101561210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d6164642d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b600080821161218c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6469766973696f6e206279207a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b816121b66121a6856b033b2e3c9fd0803ce8000000611be2565b6121b185600161185b565b612092565b816121bd57fe5b04905092915050565b60006121ea6121e4858585036b033b2e3c9fd0803ce8000000611510565b866114e7565b905094935050505056fea265627a7a723158206a899cc49173e84b45c728a29c08f27c91ec65ffb802ffa56fded219f02a7fa264736f6c634300050f0032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c8063744f4cf6116100f9578063b5931f7c11610097578063d7affae311610071578063d7affae3146107b0578063dd418ae2146107f2578063e4064a7714610860578063e6cb9013146108c7576101a9565b8063b5931f7c146106c0578063bf353dbb1461070c578063d05c78da14610764576101a9565b80639c52a7f1116100d35780639c52a7f1146105ac5780639e1aaae6146105f0578063a293d1e81461063c578063a883b0c414610688576101a9565b8063744f4cf6146104fa57806386c1762a146105285780639717411d1461056a576101a9565b806329a8f4f81161016657806358326b7a1161014057806358326b7a146103e657806365fae35e14610414578063674570221461045857806367b870af146104a4576101a9565b806329a8f4f81461033a5780632ddbd13a1461039057806346df2ccb146103ae576101a9565b806301aa8a6e146101ae578063071ffb3c146101f05780630e2286d3146102285780631e0029c8146102745780632047a267146102b657806328a7996f146102ee575b600080fd5b6101da600480360360208110156101c457600080fd5b8101908080359060200190929190505050610913565b6040518082815260200191505060405180910390f35b6102266004803603604081101561020657600080fd5b81019080803590602001909291908035906020019092919050505061092b565b005b61025e6004803603604081101561023e57600080fd5b810190808035906020019092919080359060200190929190505050610bc5565b6040518082815260200191505060405180910390f35b6102a06004803603602081101561028a57600080fd5b8101908080359060200190929190505050610c76565b6040518082815260200191505060405180910390f35b6102ec600480360360408110156102cc57600080fd5b810190808035906020019092919080359060200190929190505050610d71565b005b6103246004803603604081101561030457600080fd5b810190808035906020019092919080359060200190929190505050610ffa565b6040518082815260200191505060405180910390f35b61037a6004803603606081101561035057600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061100e565b6040518082815260200191505060405180910390f35b610398611030565b6040518082815260200191505060405180910390f35b6103e4600480360360408110156103c457600080fd5b810190808035906020019092919080359060200190929190505050611036565b005b610412600480360360208110156103fc57600080fd5b8101908080359060200190929190505050611270565b005b6104566004803603602081101561042a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611398565b005b61048e6004803603604081101561046e57600080fd5b8101908080359060200190929190803590602001909291905050506114e7565b6040518082815260200191505060405180910390f35b6104e4600480360360608110156104ba57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611510565b6040518082815260200191505060405180910390f35b6105266004803603602081101561051057600080fd5b81019080803590602001909291905050506115d6565b005b6105546004803603602081101561053e57600080fd5b81019080803590602001909291905050506115f5565b6040518082815260200191505060405180910390f35b6105966004803603602081101561058057600080fd5b81019080803590602001909291905050506116e0565b6040518082815260200191505060405180910390f35b6105ee600480360360208110156105c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f8565b005b6106266004803603604081101561060657600080fd5b810190808035906020019092919080359060200190929190505050611847565b6040518082815260200191505060405180910390f35b6106726004803603604081101561065257600080fd5b81019080803590602001909291908035906020019092919050505061185b565b6040518082815260200191505060405180910390f35b6106be6004803603604081101561069e57600080fd5b8101908080359060200190929190803590602001909291905050506118de565b005b6106f6600480360360408110156106d657600080fd5b810190808035906020019092919080359060200190929190505050611bb6565b6040518082815260200191505060405180910390f35b61074e6004803603602081101561072257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bca565b6040518082815260200191505060405180910390f35b61079a6004803603604081101561077a57600080fd5b810190808035906020019092919080359060200190929190505050611be2565b6040518082815260200191505060405180910390f35b6107f0600480360360608110156107c657600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611c77565b005b61081e6004803603602081101561080857600080fd5b8101908080359060200190929190505050611f88565b604051808681526020018581526020018481526020018365ffffffffffff1665ffffffffffff1681526020018281526020019550505050505060405180910390f35b6108aa6004803603608081101561087657600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611fd0565b604051808381526020018281526020019250505060405180910390f35b6108fd600480360360408110156108dd57600080fd5b810190808035906020019092919080359060200190929190505050612092565b6040518082815260200191505060405180910390f35b60036020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461097657600080fd5b6000806000600435925060243591503490506000600360008781526020019081526020016000205490506001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164214610a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f726174652d67726f75702d6e6f742d757064617465640000000000000000000081525060200191505060405180910390fd5b610a6e85610a698760016000868152602001908152602001600020600401546114e7565b612092565b94506000610a92600160008481526020019081526020016000206001015487610ffa565b9050610ab1600260008981526020019081526020016000205482612092565b6002600089815260200190815260200160002081905550610ae8600160008481526020019081526020016000206000015482612092565b6001600084815260200190815260200160002060000181905550610b0e60045487612092565b600481905550505081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a45050505050565b6000808211610c3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6469766973696f6e206279207a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b81610c66610c56856b033b2e3c9fd0803ce8000000611be2565b60028581610c6057fe5b04612092565b81610c6d57fe5b04905092915050565b600080600360008481526020019081526020016000205490506000600160008381526020019081526020016000206001015490506001600083815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164210610d4b57610d48600160008481526020019081526020016000206001015460016000858152602001908152602001600020600201546001600086815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff1661100e565b90505b610d68816002600087815260200190815260200160002054611847565b92505050919050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610dbc57600080fd5b6000806000600435925060243591503490506000600360008781526020019081526020016000205490506001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164214610e8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f726174652d67726f75702d6e6f742d757064617465640000000000000000000081525060200191505060405180910390fd5b6000610ead600160008481526020019081526020016000206001015487610ffa565b9050610ecc60026000898152602001908152602001600020548261185b565b6002600089815260200190815260200160002081905550610f0360016000848152602001908152602001600020600001548261185b565b6001600084815260200190815260200160002060000181905550600454861115610f365760006004819055505050610f4b565b610f426004548761185b565b60048190555050505b81833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a45050505050565b60006110068284612115565b905092915050565b600081421061102657611023848484426121c6565b93505b8390509392505050565b60045481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461108157600080fd5b600080600060043592506024359150349050600060026000878152602001908152602001600020541461111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6e6f6e2d7a65726f2d646562740000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008681526020019081526020016000206001015414156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f726174652d67726f75702d6e6f742d736574000000000000000000000000000081525060200191505060405180910390fd5b83600360008781526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a45050505050565b6001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff16421061139557600080611328600160008581526020019081526020016000206001015460016000868152602001908152602001600020600201546001600087815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff166001600088815260200190815260200160002060000154611fd0565b91509150816001600085815260200190815260200160002060010181905550426001600085815260200190815260200160002060030160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555061138c60045482612092565b60048190555050505b50565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113e357600080fd5b60008060006004359250602435915034905060016000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a450505050565b60006b033b2e3c9fd0803ce80000006115008484611be2565b8161150757fe5b04905092915050565b600083600081146115b657600284066000811461152f57859250611533565b8392505b50600283046002850494505b84156115b057858602868782041461155657600080fd5b8181018181101561156657600080fd5b858104975060028706156115a357878502858982041415891515161561158b57600080fd5b8381018181101561159b57600080fd5b878104965050505b505060028504945061153f565b506115ce565b83600081146115c857600092506115cc565b8392505b505b509392505050565b6115f26003600083815260200190815260200160002054611270565b50565b600080600160008481526020019081526020016000206001015490506000600160008581526020019081526020016000206000015490506001600085815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff1642106116cd576116ca600160008681526020019081526020016000206001015460016000878152602001908152602001600020600201546001600088815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff1661100e565b91505b6116d78282611847565b92505050919050565b60026020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461174357600080fd5b60008060006004359250602435915034905060008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a450505050565b600061185382846114e7565b905092915050565b60008282840391508111156118d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d7375622d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461192957600080fd5b6000806000600435925060243591503490506000600160008681526020019081526020016000206001015414156119c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f726174652d67726f75702d6e6f742d736574000000000000000000000000000081525060200191505060405180910390fd5b6000600360008781526020019081526020016000205490506119e981611270565b6119f285611270565b6000600260008881526020019081526020016000205490506000611a2c600160008581526020019081526020016000206001015483611847565b9050611a4e60016000858152602001908152602001600020600001548361185b565b6001600085815260200190815260200160002060000181905550611a88600160008981526020019081526020016000206001015482610ffa565b600260008a815260200190815260200160002081905550611ad26001600089815260200190815260200160002060000154600260008b815260200190815260200160002054612092565b600160008981526020019081526020016000206000018190555086600360008a81526020019081526020016000208190555050505081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a45050505050565b6000818381611bc157fe5b04905092915050565b60006020528060005260406000206000915090505481565b600080821480611bff5750828283850292508281611bfc57fe5b04145b611c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d6d756c2d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611cc257600080fd5b6000806000600435925060243591503490507f7261746500000000000000000000000000000000000000000000000000000000861415611e21576000841415611d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f726174652d7065722d7365636f6e642d63616e2d6e6f742d62652d300000000081525060200191505060405180910390fd5b600060016000878152602001908152602001600020600101541415611df7576b033b2e3c9fd0803ce80000006001600087815260200190815260200160002060010181905550426001600087815260200190815260200160002060030160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550611e01565b611e0085611270565b5b836001600087815260200190815260200160002060020181905550611ed8565b7f6669786564526174650000000000000000000000000000000000000000000000861415611e6957836001600087815260200190815260200160002060040181905550611ed7565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f756e6b6e6f776e20706172616d6574657200000000000000000000000000000081525060200191505060405180910390fd5b5b81833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168460003660405180848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a4505050505050565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900465ffffffffffff16908060040154905085565b60008083421015612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f74696e6c616b652d6d6174682f696e76616c69642d74696d657374616d70000081525060200191505060405180910390fd5b600086141561205757600080fd5b6000612065878787426121c6565b90508061208461207583876114e7565b61207f8a886114e7565b61185b565b925092505094509492505050565b600082828401915081101561210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d6164642d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b600080821161218c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6469766973696f6e206279207a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b816121b66121a6856b033b2e3c9fd0803ce8000000611be2565b6121b185600161185b565b612092565b816121bd57fe5b04905092915050565b60006121ea6121e4858585036b033b2e3c9fd0803ce8000000611510565b866114e7565b905094935050505056fea265627a7a723158206a899cc49173e84b45c728a29c08f27c91ec65ffb802ffa56fded219f02a7fa264736f6c634300050f0032

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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