ETH Price: $2,063.77 (-2.69%)
Gas: 0.04 Gwei

Contract

0xde36a8773531406dCBefFdfd3C7b89fCed7A9F84
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute128242112021-07-14 8:57:141716 days ago1626253034IN
0xde36a877...Ced7A9F84
0 ETH0.0034104145
Sign128242022021-07-14 8:55:541716 days ago1626252954IN
0xde36a877...Ced7A9F84
0 ETH0.004483242
Sign128233102021-07-14 5:38:091717 days ago1626241089IN
0xde36a877...Ced7A9F84
0 ETH0.0055846338
Execute128206432021-07-13 19:26:261717 days ago1626204386IN
0xde36a877...Ced7A9F84
0 ETH0.002336240
Sign128206222021-07-13 19:22:171717 days ago1626204137IN
0xde36a877...Ced7A9F84
0 ETH0.0034157732
Sign128197012021-07-13 15:49:231717 days ago1626191363IN
0xde36a877...Ced7A9F84
0 ETH0.0029407420.01
Execute117961262021-02-05 12:03:031875 days ago1612526583IN
0xde36a877...Ced7A9F84
0 ETH0.00869248138
Sign117960942021-02-05 11:57:031875 days ago1612526223IN
0xde36a877...Ced7A9F84
0 ETH0.01474802140
Sign117312272021-01-26 12:16:591885 days ago1611663419IN
0xde36a877...Ced7A9F84
0 ETH0.0071483651.00000145
Execute108812562020-09-17 18:07:092016 days ago1600366029IN
0xde36a877...Ced7A9F84
0 ETH0.02724313491
Sign108811522020-09-17 17:46:072016 days ago1600364767IN
0xde36a877...Ced7A9F84
0 ETH0.0526715500
Sign108810322020-09-17 17:20:322016 days ago1600363232IN
0xde36a877...Ced7A9F84
0 ETH0.06896208492.01
Execute96881232020-03-17 9:13:212200 days ago1584436401IN
0xde36a877...Ced7A9F84
0 ETH0.000315575.01
Sign96881082020-03-17 9:10:402200 days ago1584436240IN
0xde36a877...Ced7A9F84
0 ETH0.000527765.01
Sign96832862020-03-16 15:01:552201 days ago1584370915IN
0xde36a877...Ced7A9F84
0 ETH0.0018221313
Execute96679332020-03-14 6:31:272204 days ago1584167487IN
0xde36a877...Ced7A9F84
0 ETH0.000090822.01
Sign96679032020-03-14 6:26:042204 days ago1584167164IN
0xde36a877...Ced7A9F84
0 ETH0.000211732.01
Sign96641512020-03-13 16:17:532204 days ago1584116273IN
0xde36a877...Ced7A9F84
0 ETH0.0049057435
Execute88718892019-11-04 14:35:412334 days ago1572878141IN
0xde36a877...Ced7A9F84
0 ETH0.000043761.01
Sign88718712019-11-04 14:31:102334 days ago1572877870IN
0xde36a877...Ced7A9F84
0 ETH0.000099391
Sign88718462019-11-04 14:25:152334 days ago1572877515IN
0xde36a877...Ced7A9F84
0 ETH0.000134941.01
Execute88717492019-11-04 14:04:012334 days ago1572876241IN
0xde36a877...Ced7A9F84
0 ETH0.000039621.1
Sign88717362019-11-04 14:00:552334 days ago1572876055IN
0xde36a877...Ced7A9F84
0 ETH0.000099391
Sign88716082019-11-04 13:32:282334 days ago1572874348IN
0xde36a877...Ced7A9F84
0 ETH0.000268562.01
Sign86319832019-09-27 16:24:252372 days ago1569601465IN
0xde36a877...Ced7A9F84
0 ETH0.000506895.1
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
StabilityBoardProxy

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-11-14
*/

// File: contracts/generic/SafeMath.sol

/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error

    TODO: check against ds-math: https://blog.dapphub.com/ds-math/
    TODO: move roundedDiv to a sep lib? (eg. Math.sol)
    TODO: more unit tests!
*/
pragma solidity 0.4.24;


library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        require(a == 0 || c / a == b, "mul overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "div by 0"); // Solidity automatically throws for div by 0 but require to emit reason
        uint256 c = a / b;
        // require(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "sub underflow");
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "add overflow");
        return c;
    }

    // Division, round to nearest integer, round half up
    function roundedDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "div by 0"); // Solidity automatically throws for div by 0 but require to emit reason
        uint256 halfB = (b % 2 == 0) ? (b / 2) : (b / 2 + 1);
        return (a % b >= halfB) ? (a / b + 1) : (a / b);
    }

    // Division, always rounds up
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "div by 0"); // Solidity automatically throws for div by 0 but require to emit reason
        return (a % b != 0) ? (a / b + 1) : (a / b);
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? b : a;
    }    
}

// File: contracts/generic/MultiSig.sol

/* Abstract multisig contract to allow multi approval execution of atomic contracts scripts
        e.g. migrations or settings.
    * Script added by signing a script address by a signer  (NEW state)
    * Script goes to ALLOWED state once a quorom of signers sign it (quorom fx is defined in each derived contracts)
    * Script can be signed even in APPROVED state
    * APPROVED scripts can be executed only once.
        - if script succeeds then state set to DONE
        - If script runs out of gas or reverts then script state set to FAILEd and not allowed to run again
          (To avoid leaving "behind" scripts which fail in a given state but eventually execute in the future)
    * Scripts can be cancelled by an other multisig script approved and calling cancelScript()
    * Adding/removing signers is only via multisig approved scripts using addSigners / removeSigners fxs
*/
pragma solidity 0.4.24;



contract MultiSig {
    using SafeMath for uint256;

    mapping(address => bool) public isSigner;
    address[] public allSigners; // all signers, even the disabled ones
                                // NB: it can contain duplicates when a signer is added, removed then readded again
                                //   the purpose of this array is to being able to iterate on signers in isSigner
    uint public activeSignersCount;

    enum ScriptState {New, Approved, Done, Cancelled, Failed}

    struct Script {
        ScriptState state;
        uint signCount;
        mapping(address => bool) signedBy;
        address[] allSigners;
    }

    mapping(address => Script) public scripts;
    address[] public scriptAddresses;

    event SignerAdded(address signer);
    event SignerRemoved(address signer);

    event ScriptSigned(address scriptAddress, address signer);
    event ScriptApproved(address scriptAddress);
    event ScriptCancelled(address scriptAddress);

    event ScriptExecuted(address scriptAddress, bool result);

    constructor() public {
        // deployer address is the first signer. Deployer can configure new contracts by itself being the only "signer"
        // The first script which sets the new contracts live should add signers and revoke deployer's signature right
        isSigner[msg.sender] = true;
        allSigners.push(msg.sender);
        activeSignersCount = 1;
        emit SignerAdded(msg.sender);
    }

    function sign(address scriptAddress) public {
        require(isSigner[msg.sender], "sender must be signer");
        Script storage script = scripts[scriptAddress];
        require(script.state == ScriptState.Approved || script.state == ScriptState.New,
                "script state must be New or Approved");
        require(!script.signedBy[msg.sender], "script must not be signed by signer yet");

        if (script.allSigners.length == 0) {
            // first sign of a new script
            scriptAddresses.push(scriptAddress);
        }

        script.allSigners.push(msg.sender);
        script.signedBy[msg.sender] = true;
        script.signCount = script.signCount.add(1);

        emit ScriptSigned(scriptAddress, msg.sender);

        if (checkQuorum(script.signCount)) {
            script.state = ScriptState.Approved;
            emit ScriptApproved(scriptAddress);
        }
    }

    function execute(address scriptAddress) public returns (bool result) {
        // only allow execute to signers to avoid someone set an approved script failed by calling it with low gaslimit
        require(isSigner[msg.sender], "sender must be signer");
        Script storage script = scripts[scriptAddress];
        require(script.state == ScriptState.Approved, "script state must be Approved");

        // passing scriptAddress to allow called script access its own public fx-s if needed
        if (scriptAddress.delegatecall.gas(gasleft() - 23000)
            (abi.encodeWithSignature("execute(address)", scriptAddress))) {
            script.state = ScriptState.Done;
            result = true;
        } else {
            script.state = ScriptState.Failed;
            result = false;
        }
        emit ScriptExecuted(scriptAddress, result);
    }

    function cancelScript(address scriptAddress) public {
        require(msg.sender == address(this), "only callable via MultiSig");
        Script storage script = scripts[scriptAddress];
        require(script.state == ScriptState.Approved || script.state == ScriptState.New,
                "script state must be New or Approved");

        script.state = ScriptState.Cancelled;

        emit ScriptCancelled(scriptAddress);
    }

    /* requires quorum so it's callable only via a script executed by this contract */
    function addSigners(address[] signers) public {
        require(msg.sender == address(this), "only callable via MultiSig");
        for (uint i= 0; i < signers.length; i++) {
            if (!isSigner[signers[i]]) {
                require(signers[i] != address(0), "new signer must not be 0x0");
                activeSignersCount++;
                allSigners.push(signers[i]);
                isSigner[signers[i]] = true;
                emit SignerAdded(signers[i]);
            }
        }
    }

    /* requires quorum so it's callable only via a script executed by this contract */
    function removeSigners(address[] signers) public {
        require(msg.sender == address(this), "only callable via MultiSig");
        for (uint i= 0; i < signers.length; i++) {
            if (isSigner[signers[i]]) {
                require(activeSignersCount > 1, "must not remove last signer");
                activeSignersCount--;
                isSigner[signers[i]] = false;
                emit SignerRemoved(signers[i]);
            }
        }
    }

    /* implement it in derived contract */
    function checkQuorum(uint signersCount) internal view returns(bool isQuorum);

    function getAllSignersCount() view external returns (uint allSignersCount) {
        return allSigners.length;
    }

    // UI helper fx - Returns signers from offset as [signer id (index in allSigners), address as uint, isActive 0 or 1]
    function getSigners(uint offset, uint16 chunkSize)
    external view returns(uint[3][]) {
        uint limit = SafeMath.min(offset.add(chunkSize), allSigners.length);
        uint[3][] memory response = new uint[3][](limit.sub(offset));
        for (uint i = offset; i < limit; i++) {
            address signerAddress = allSigners[i];
            response[i - offset] = [i, uint(signerAddress), isSigner[signerAddress] ? 1 : 0];
        }
        return response;
    }

    function getScriptsCount() view external returns (uint scriptsCount) {
        return scriptAddresses.length;
    }

    // UI helper fx - Returns scripts from offset as
    //  [scriptId (index in scriptAddresses[]), address as uint, state, signCount]
    function getScripts(uint offset, uint16 chunkSize)
    external view returns(uint[4][]) {
        uint limit = SafeMath.min(offset.add(chunkSize), scriptAddresses.length);
        uint[4][] memory response = new uint[4][](limit.sub(offset));
        for (uint i = offset; i < limit; i++) {
            address scriptAddress = scriptAddresses[i];
            response[i - offset] = [i, uint(scriptAddress),
                uint(scripts[scriptAddress].state), scripts[scriptAddress].signCount];
        }
        return response;
    }
}

// File: contracts/StabilityBoardProxy.sol

/* allows tx to execute if 50% +1 vote of active signers signed */
pragma solidity 0.4.24;



contract StabilityBoardProxy is MultiSig {

    function checkQuorum(uint signersCount) internal view returns(bool isQuorum) {
        isQuorum = signersCount > activeSignersCount / 2 ;
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"chunkSize","type":"uint16"}],"name":"getSigners","outputs":[{"name":"","type":"uint256[3][]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"offset","type":"uint256"},{"name":"chunkSize","type":"uint16"}],"name":"getScripts","outputs":[{"name":"","type":"uint256[4][]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"activeSignersCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"scriptAddress","type":"address"}],"name":"cancelScript","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"scriptAddress","type":"address"}],"name":"execute","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isSigner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"signers","type":"address[]"}],"name":"removeSigners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getScriptsCount","outputs":[{"name":"scriptsCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"scriptAddresses","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"scripts","outputs":[{"name":"state","type":"uint8"},{"name":"signCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllSignersCount","outputs":[{"name":"allSignersCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"allSigners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"signers","type":"address[]"}],"name":"addSigners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"scriptAddress","type":"address"}],"name":"sign","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"signer","type":"address"}],"name":"SignerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"signer","type":"address"}],"name":"SignerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"scriptAddress","type":"address"},{"indexed":false,"name":"signer","type":"address"}],"name":"ScriptSigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"scriptAddress","type":"address"}],"name":"ScriptApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"scriptAddress","type":"address"}],"name":"ScriptCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"scriptAddress","type":"address"},{"indexed":false,"name":"result","type":"bool"}],"name":"ScriptExecuted","type":"event"}]

608060405260016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060013390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060016002819055507f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2433604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1611da38061013b6000396000f3006080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680625e885e146100d4578063072bdbb814610187578063124279a71461023a578063278a5e7c146102655780634b64e492146102a85780637df73e27146103035780638d361e431461035e578063918f644e146103c457806392cf9d45146103ef578063bbd7a3c71461045c578063c06d7744146104c8578063cff6bc21146104f3578063e8906a2d14610560578063f71be837146105c6575b600080fd5b3480156100e057600080fd5b5061010d60048036038101908080359060200190929190803561ffff169060200190929190505050610609565b60405180806020018281038252838181518152602001915080516000925b8184101561017657828490602001906020020151600360200280838360005b8381101561016557808201518184015260208101905061014a565b50505050905001926001019261012b565b925050509250505060405180910390f35b34801561019357600080fd5b506101c060048036038101908080359060200190929190803561ffff169060200190929190505050610795565b60405180806020018281038252838181518152602001915080516000925b8184101561022957828490602001906020020151600460200280838360005b838110156102185780820151818401526020810190506101fd565b5050505090500192600101926101de565b925050509250505060405180910390f35b34801561024657600080fd5b5061024f610967565b6040518082815260200191505060405180910390f35b34801561027157600080fd5b506102a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061096d565b005b3480156102b457600080fd5b506102e9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bd7565b604051808215151515815260200191505060405180910390f35b34801561030f57600080fd5b50610344600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f92565b604051808215151515815260200191505060405180910390f35b34801561036a57600080fd5b506103c260048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610fb2565b005b3480156103d057600080fd5b506103d9611254565b6040518082815260200191505060405180910390f35b3480156103fb57600080fd5b5061041a60048036038101908080359060200190929190505050611261565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046857600080fd5b5061049d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129f565b604051808360048111156104ad57fe5b60ff1681526020018281526020019250505060405180910390f35b3480156104d457600080fd5b506104dd6112d0565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b5061051e600480360381019080803590602001909291905050506112dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056c57600080fd5b506105c46004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061131b565b005b3480156105d257600080fd5b50610607600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061167c565b005b60606000606060008061063761062c8761ffff1689611bf090919063ffffffff16565b600180549050611c7a565b935061064c8785611c9390919063ffffffff16565b60405190808252806020026020018201604052801561068557816020015b610672611d31565b81526020019060019003908161066a5790505b5092508691505b83821015610788576001828154811015156106a357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506060604051908101604052808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610755576000610758565b60015b60ff168152508388840381518110151561076e57fe5b90602001906020020181905250818060010192505061068c565b8294505050505092915050565b6060600060606000806107c36107b88761ffff1689611bf090919063ffffffff16565b600480549050611c7a565b93506107d88785611c9390919063ffffffff16565b60405190808252806020026020018201604052801561081157816020015b6107fe611d54565b8152602001906001900390816107f65790505b5092508691505b8382101561095a5760048281548110151561082f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506080604051908101604052808381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660048111156108e557fe5b8152602001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548152508388840381518110151561094057fe5b906020019060200201819052508180600101925050610818565b8294505050505092915050565b60025481565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6f6e6c792063616c6c61626c6520766961204d756c746953696700000000000081525060200191505060405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060016004811115610a6057fe5b8160000160009054906101000a900460ff166004811115610a7d57fe5b1480610ab0575060006004811115610a9157fe5b8160000160009054906101000a900460ff166004811115610aae57fe5b145b1515610b4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f736372697074207374617465206d757374206265204e6577206f72204170707281526020017f6f7665640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60038160000160006101000a81548160ff02191690836004811115610b6b57fe5b02179055507f7b746b5db15daca4abb0c3d0538b240af9c0ee2408555a7672b9486276e089e682604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515610c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f73656e646572206d757374206265207369676e6572000000000000000000000081525060200191505060405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060016004811115610ce857fe5b8160000160009054906101000a900460ff166004811115610d0557fe5b141515610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f736372697074207374617465206d75737420626520417070726f76656400000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166159d85a0384604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f4b64e492000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405180828051906020019080838360005b83811015610e7d578082015181840152602081019050610e62565b50505050905090810190601f168015610eaa5780820380516001836020036101000a031916815260200191505b509150506000604051808303818686f49250505015610ef25760028160000160006101000a81548160ff02191690836004811115610ee457fe5b021790555060019150610f1d565b60048160000160006101000a81548160ff02191690836004811115610f1357fe5b0217905550600091505b7f75b84c89903cc67892fc4622e0a18e89fcdecc18d738c9461efa458b1c07653c8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a150919050565b60006020528060005260406000206000915054906101000a900460ff1681565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6f6e6c792063616c6c61626c6520766961204d756c746953696700000000000081525060200191505060405180910390fd5b600090505b815181101561125057600080838381518110151561107657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611243576001600254111515611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d757374206e6f742072656d6f7665206c617374207369676e6572000000000081525060200191505060405180910390fd5b600260008154809291906001900391905055506000806000848481518110151561116d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b82828151811015156111f757fe5b90602001906020020151604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b808060010191505061105c565b5050565b6000600480549050905090565b60048181548110151561127057fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b6000600180549050905090565b6001818154811015156112ec57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6f6e6c792063616c6c61626c6520766961204d756c746953696700000000000081525060200191505060405180910390fd5b600090505b81518110156116785760008083838151811015156113df57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561166b57600073ffffffffffffffffffffffffffffffffffffffff16828281518110151561145d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16141515156114f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6e6577207369676e6572206d757374206e6f742062652030783000000000000081525060200191505060405180910390fd5b6002600081548092919060010191905055506001828281518110151561151557fe5b9060200190602002015190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001600080848481518110151561159557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24828281518110151561161f57fe5b90602001906020020151604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b80806001019150506113c5565b5050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561173e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f73656e646572206d757374206265207369676e6572000000000000000000000081525060200191505060405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506001600481111561178c57fe5b8160000160009054906101000a900460ff1660048111156117a957fe5b14806117dc5750600060048111156117bd57fe5b8160000160009054906101000a900460ff1660048111156117da57fe5b145b1515611876576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f736372697074207374617465206d757374206265204e6577206f72204170707281526020017f6f7665640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f736372697074206d757374206e6f74206265207369676e65642062792073696781526020017f6e6572207965740000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000816003018054905014156119d75760048290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b806003013390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ab160018260010154611bf090919063ffffffff16565b81600101819055507f0160e036639c0c4048d3a89442ca3eaa8913bb8248f1022470abaf1c751ee03c8233604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1611b5d8160010154611d18565b15611bec5760018160000160006101000a81548160ff02191690836004811115611b8357fe5b02179055507ff74bfc10a1aa03b44f2227324325cd000707b7729af27ab7789e2aa30ee731dd82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b5050565b6000808284019050838110151515611c70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f616464206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000818310611c895781611c8b565b825b905092915050565b6000828211151515611d0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f73756220756e646572666c6f770000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b600060028054811515611d2757fe5b0482119050919050565b606060405190810160405280600390602082028038833980820191505090505090565b6080604051908101604052806004906020820280388339808201915050905050905600a165627a7a723058209cd7e5cf88ae91840f5fb12ba2ad5ca780e0e5d9cf317c6e3150a9e5781171c10029

Deployed Bytecode

0x6080604052600436106100cf576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680625e885e146100d4578063072bdbb814610187578063124279a71461023a578063278a5e7c146102655780634b64e492146102a85780637df73e27146103035780638d361e431461035e578063918f644e146103c457806392cf9d45146103ef578063bbd7a3c71461045c578063c06d7744146104c8578063cff6bc21146104f3578063e8906a2d14610560578063f71be837146105c6575b600080fd5b3480156100e057600080fd5b5061010d60048036038101908080359060200190929190803561ffff169060200190929190505050610609565b60405180806020018281038252838181518152602001915080516000925b8184101561017657828490602001906020020151600360200280838360005b8381101561016557808201518184015260208101905061014a565b50505050905001926001019261012b565b925050509250505060405180910390f35b34801561019357600080fd5b506101c060048036038101908080359060200190929190803561ffff169060200190929190505050610795565b60405180806020018281038252838181518152602001915080516000925b8184101561022957828490602001906020020151600460200280838360005b838110156102185780820151818401526020810190506101fd565b5050505090500192600101926101de565b925050509250505060405180910390f35b34801561024657600080fd5b5061024f610967565b6040518082815260200191505060405180910390f35b34801561027157600080fd5b506102a6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061096d565b005b3480156102b457600080fd5b506102e9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bd7565b604051808215151515815260200191505060405180910390f35b34801561030f57600080fd5b50610344600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f92565b604051808215151515815260200191505060405180910390f35b34801561036a57600080fd5b506103c260048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610fb2565b005b3480156103d057600080fd5b506103d9611254565b6040518082815260200191505060405180910390f35b3480156103fb57600080fd5b5061041a60048036038101908080359060200190929190505050611261565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046857600080fd5b5061049d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129f565b604051808360048111156104ad57fe5b60ff1681526020018281526020019250505060405180910390f35b3480156104d457600080fd5b506104dd6112d0565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b5061051e600480360381019080803590602001909291905050506112dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056c57600080fd5b506105c46004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061131b565b005b3480156105d257600080fd5b50610607600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061167c565b005b60606000606060008061063761062c8761ffff1689611bf090919063ffffffff16565b600180549050611c7a565b935061064c8785611c9390919063ffffffff16565b60405190808252806020026020018201604052801561068557816020015b610672611d31565b81526020019060019003908161066a5790505b5092508691505b83821015610788576001828154811015156106a357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506060604051908101604052808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020016000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610755576000610758565b60015b60ff168152508388840381518110151561076e57fe5b90602001906020020181905250818060010192505061068c565b8294505050505092915050565b6060600060606000806107c36107b88761ffff1689611bf090919063ffffffff16565b600480549050611c7a565b93506107d88785611c9390919063ffffffff16565b60405190808252806020026020018201604052801561081157816020015b6107fe611d54565b8152602001906001900390816107f65790505b5092508691505b8382101561095a5760048281548110151561082f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506080604051908101604052808381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1660048111156108e557fe5b8152602001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548152508388840381518110151561094057fe5b906020019060200201819052508180600101925050610818565b8294505050505092915050565b60025481565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6f6e6c792063616c6c61626c6520766961204d756c746953696700000000000081525060200191505060405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060016004811115610a6057fe5b8160000160009054906101000a900460ff166004811115610a7d57fe5b1480610ab0575060006004811115610a9157fe5b8160000160009054906101000a900460ff166004811115610aae57fe5b145b1515610b4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f736372697074207374617465206d757374206265204e6577206f72204170707281526020017f6f7665640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60038160000160006101000a81548160ff02191690836004811115610b6b57fe5b02179055507f7b746b5db15daca4abb0c3d0538b240af9c0ee2408555a7672b9486276e089e682604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515610c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f73656e646572206d757374206265207369676e6572000000000000000000000081525060200191505060405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060016004811115610ce857fe5b8160000160009054906101000a900460ff166004811115610d0557fe5b141515610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f736372697074207374617465206d75737420626520417070726f76656400000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166159d85a0384604051602401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040527f4b64e492000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405180828051906020019080838360005b83811015610e7d578082015181840152602081019050610e62565b50505050905090810190601f168015610eaa5780820380516001836020036101000a031916815260200191505b509150506000604051808303818686f49250505015610ef25760028160000160006101000a81548160ff02191690836004811115610ee457fe5b021790555060019150610f1d565b60048160000160006101000a81548160ff02191690836004811115610f1357fe5b0217905550600091505b7f75b84c89903cc67892fc4622e0a18e89fcdecc18d738c9461efa458b1c07653c8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a150919050565b60006020528060005260406000206000915054906101000a900460ff1681565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6f6e6c792063616c6c61626c6520766961204d756c746953696700000000000081525060200191505060405180910390fd5b600090505b815181101561125057600080838381518110151561107657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611243576001600254111515611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d757374206e6f742072656d6f7665206c617374207369676e6572000000000081525060200191505060405180910390fd5b600260008154809291906001900391905055506000806000848481518110151561116d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b82828151811015156111f757fe5b90602001906020020151604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b808060010191505061105c565b5050565b6000600480549050905090565b60048181548110151561127057fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b6000600180549050905090565b6001818154811015156112ec57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6f6e6c792063616c6c61626c6520766961204d756c746953696700000000000081525060200191505060405180910390fd5b600090505b81518110156116785760008083838151811015156113df57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561166b57600073ffffffffffffffffffffffffffffffffffffffff16828281518110151561145d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16141515156114f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6e6577207369676e6572206d757374206e6f742062652030783000000000000081525060200191505060405180910390fd5b6002600081548092919060010191905055506001828281518110151561151557fe5b9060200190602002015190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001600080848481518110151561159557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24828281518110151561161f57fe5b90602001906020020151604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b80806001019150506113c5565b5050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561173e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f73656e646572206d757374206265207369676e6572000000000000000000000081525060200191505060405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506001600481111561178c57fe5b8160000160009054906101000a900460ff1660048111156117a957fe5b14806117dc5750600060048111156117bd57fe5b8160000160009054906101000a900460ff1660048111156117da57fe5b145b1515611876576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f736372697074207374617465206d757374206265204e6577206f72204170707281526020017f6f7665640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515611960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f736372697074206d757374206e6f74206265207369676e65642062792073696781526020017f6e6572207965740000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000816003018054905014156119d75760048290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b806003013390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060018160020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ab160018260010154611bf090919063ffffffff16565b81600101819055507f0160e036639c0c4048d3a89442ca3eaa8913bb8248f1022470abaf1c751ee03c8233604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1611b5d8160010154611d18565b15611bec5760018160000160006101000a81548160ff02191690836004811115611b8357fe5b02179055507ff74bfc10a1aa03b44f2227324325cd000707b7729af27ab7789e2aa30ee731dd82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b5050565b6000808284019050838110151515611c70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f616464206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000818310611c895781611c8b565b825b905092915050565b6000828211151515611d0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f73756220756e646572666c6f770000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b600060028054811515611d2757fe5b0482119050919050565b606060405190810160405280600390602082028038833980820191505090505090565b6080604051908101604052806004906020820280388339808201915050905050905600a165627a7a723058209cd7e5cf88ae91840f5fb12ba2ad5ca780e0e5d9cf317c6e3150a9e5781171c10029

Swarm Source

bzzr://9cd7e5cf88ae91840f5fb12ba2ad5ca780e0e5d9cf317c6e3150a9e5781171c1

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.