Contract 0xFE5986E06210aC1eCC1aDCafc0cc7f8D63B3F977 1

Contract Overview

Balance:
0 Ether
Txn Hash
Method
Block
From
To
Value
0x44b4b0791e7bb896993a89001df204c755c5a6068fef5951ae9f21f4040d6a9c0x60a0604096703142021-11-19 16:03:07315 days 5 hrs ago0x2a61d3ba5030ef471c74f612962c7367eca3a62d IN  Create: IncreaseNodeOperatorStakingLimit0 Ether0.000506371.00000001
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IncreaseNodeOperatorStakingLimit

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2021-11-19
*/

// SPDX-License-Identifier: GPL-3.0
// File: contracts/libraries/EVMScriptCreator.sol

// SPDX-FileCopyrightText: 2021 Lido <[email protected]>

pragma solidity ^0.8.4;

/// @author psirex
/// @notice Contains methods for convenient creation
/// of EVMScripts in EVMScript factories contracts
library EVMScriptCreator {
    // Id of default CallsScript Aragon's executor.
    bytes4 private constant SPEC_ID = hex"00000001";

    /// @notice Encodes one method call as EVMScript
    function createEVMScript(
        address _to,
        bytes4 _methodId,
        bytes memory _evmScriptCallData
    ) internal pure returns (bytes memory _commands) {
        return
            abi.encodePacked(
                SPEC_ID,
                _to,
                uint32(_evmScriptCallData.length) + 4,
                _methodId,
                _evmScriptCallData
            );
    }

    /// @notice Encodes multiple calls of the same method on one contract as EVMScript
    function createEVMScript(
        address _to,
        bytes4 _methodId,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        for (uint256 i = 0; i < _evmScriptCallData.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to,
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodId,
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }

    /// @notice Encodes multiple calls to different methods within the same contract as EVMScript
    function createEVMScript(
        address _to,
        bytes4[] memory _methodIds,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        require(_methodIds.length == _evmScriptCallData.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < _methodIds.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to,
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodIds[i],
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }

    /// @notice Encodes multiple calls to different contracts as EVMScript
    function createEVMScript(
        address[] memory _to,
        bytes4[] memory _methodIds,
        bytes[] memory _evmScriptCallData
    ) internal pure returns (bytes memory _evmScript) {
        require(_to.length == _methodIds.length, "LENGTH_MISMATCH");
        require(_to.length == _evmScriptCallData.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < _to.length; ++i) {
            _evmScript = bytes.concat(
                _evmScript,
                abi.encodePacked(
                    _to[i],
                    uint32(_evmScriptCallData[i].length) + 4,
                    _methodIds[i],
                    _evmScriptCallData[i]
                )
            );
        }
        _evmScript = bytes.concat(SPEC_ID, _evmScript);
    }
}

// File: contracts/interfaces/IEVMScriptFactory.sol

// SPDX-FileCopyrightText: 2021 Lido <[email protected]>

pragma solidity ^0.8.4;

/// @author psirex
/// @notice Interface which every EVMScript factory used in EasyTrack contract has to implement
interface IEVMScriptFactory {
    function createEVMScript(address _creator, bytes memory _evmScriptCallData)
        external
        returns (bytes memory);
}

// File: contracts/EVMScriptFactories/IncreaseNodeOperatorStakingLimit.sol

// SPDX-FileCopyrightText: 2021 Lido <[email protected]>

pragma solidity ^0.8.4;



interface INodeOperatorsRegistry {
    function getNodeOperator(uint256 _id, bool _fullInfo)
        external
        view
        returns (
            bool active,
            string memory name,
            address rewardAddress,
            uint64 stakingLimit,
            uint64 stoppedValidators,
            uint64 totalSigningKeys,
            uint64 usedSigningKeys
        );

    function setNodeOperatorStakingLimit(uint256 _id, uint64 _stakingLimit) external;
}

/// @author psirex
/// @notice Creates EVMScript to increase staking limit for node operator
contract IncreaseNodeOperatorStakingLimit is IEVMScriptFactory {
    struct NodeOperatorData {
        uint256 id;
        bool active;
        address rewardAddress;
        uint256 stakingLimit;
        uint256 totalSigningKeys;
    }

    // -------------
    // ERRORS
    // -------------

    string private constant ERROR_NODE_OPERATOR_DISABLED = "NODE_OPERATOR_DISABLED";
    string private constant ERROR_CALLER_IS_NOT_NODE_OPERATOR = "CALLER_IS_NOT_NODE_OPERATOR";
    string private constant ERROR_STAKING_LIMIT_TOO_LOW = "STAKING_LIMIT_TOO_LOW";
    string private constant ERROR_NOT_ENOUGH_SIGNING_KEYS = "NOT_ENOUGH_SIGNING_KEYS";

    // -------------
    // VARIABLES
    // -------------

    /// @notice Address of NodeOperatorsRegistry contract
    INodeOperatorsRegistry public immutable nodeOperatorsRegistry;

    // -------------
    // CONSTRUCTOR
    // -------------

    constructor(address _nodeOperatorsRegistry) {
        nodeOperatorsRegistry = INodeOperatorsRegistry(_nodeOperatorsRegistry);
    }

    // -------------
    // EXTERNAL METHODS
    // -------------

    /// @notice Creates EVMScript to increase staking limit for node operator
    /// @param _creator Address who creates EVMScript
    /// @param _evmScriptCallData Encoded tuple: (uint256 _nodeOperatorId, uint256 _stakingLimit) where
    /// _nodeOperatorId - id of node operator in NodeOperatorsRegistry
    /// _stakingLimit - new staking limit
    function createEVMScript(address _creator, bytes memory _evmScriptCallData)
        external
        view
        override
        returns (bytes memory)
    {
        _validateCreatorAndEVMScriptCallData(_creator, _evmScriptCallData);
        return
            EVMScriptCreator.createEVMScript(
                address(nodeOperatorsRegistry),
                nodeOperatorsRegistry.setNodeOperatorStakingLimit.selector,
                _evmScriptCallData
            );
    }

    /// @notice Decodes call data used by createEVMScript method
    /// @param _evmScriptCallData Encoded tuple: (uint256 _nodeOperatorId, uint256 _stakingLimit) where
    /// _nodeOperatorId - id of node operator in NodeOperatorsRegistry
    /// _stakingLimit - new staking limit
    /// @return _nodeOperatorId Id of node operator in NodeOperatorsRegistry
    /// @return _stakingLimit New staking limit
    function decodeEVMScriptCallData(bytes memory _evmScriptCallData)
        external
        pure
        returns (uint256 _nodeOperatorId, uint256 _stakingLimit)
    {
        return _decodeEVMScriptCallData(_evmScriptCallData);
    }

    // ------------------
    // PRIVATE METHODS
    // ------------------

    function _decodeEVMScriptCallData(bytes memory _evmScriptCallData)
        private
        pure
        returns (uint256 _nodeOperatorId, uint256 _stakingLimit)
    {
        (_nodeOperatorId, _stakingLimit) = abi.decode(_evmScriptCallData, (uint256, uint256));
    }

    function _validateCreatorAndEVMScriptCallData(address _creator, bytes memory _evmScriptCallData)
        private
        view
    {
        (uint256 _nodeOperatorId, uint256 _stakingLimit) =
            _decodeEVMScriptCallData(_evmScriptCallData);
        NodeOperatorData memory nodeOperatorData = _getNodeOperatorData(_nodeOperatorId);
        require(nodeOperatorData.rewardAddress == _creator, ERROR_CALLER_IS_NOT_NODE_OPERATOR);
        require(nodeOperatorData.active, ERROR_NODE_OPERATOR_DISABLED);
        require(nodeOperatorData.stakingLimit < _stakingLimit, ERROR_STAKING_LIMIT_TOO_LOW);
        require(nodeOperatorData.totalSigningKeys >= _stakingLimit, ERROR_NOT_ENOUGH_SIGNING_KEYS);
    }

    function _getNodeOperatorData(uint256 _nodeOperatorId)
        private
        view
        returns (NodeOperatorData memory _nodeOperatorData)
    {
        (bool active, , address rewardAddress, uint64 stakingLimit, , uint64 totalSigningKeys, ) =
            nodeOperatorsRegistry.getNodeOperator(_nodeOperatorId, false);

        _nodeOperatorData.id = _nodeOperatorId;
        _nodeOperatorData.active = active;
        _nodeOperatorData.rewardAddress = rewardAddress;
        _nodeOperatorData.stakingLimit = stakingLimit;
        _nodeOperatorData.totalSigningKeys = totalSigningKeys;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_nodeOperatorsRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"createEVMScript","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"decodeEVMScriptCallData","outputs":[{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"_stakingLimit","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nodeOperatorsRegistry","outputs":[{"internalType":"contract INodeOperatorsRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a060405234801561001057600080fd5b506040516108cb3803806108cb83398101604081905261002f91610044565b60601b6001600160601b031916608052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160601c61082d61009e60003960008181604b0152818160f8015261039b015261082d6000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063227242b514610046578063ecf7c6901461008a578063fea21c9c146100b2575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61009d610098366004610609565b6100d2565b60408051928352602083019190915201610081565b6100c56100c03660046104d5565b6100e7565b60405161008191906106f7565b6000806100de8361012c565b91509150915091565b60606100f3838361014d565b6101257f000000000000000000000000000000000000000000000000000000000000000063ae962acf60e01b846102ec565b9392505050565b600080828060200190518101906101439190610646565b9094909350915050565b6000806101598361012c565b91509150600061016883610330565b9050846001600160a01b031681604001516001600160a01b0316146040518060400160405280601b81526020017f43414c4c45525f49535f4e4f545f4e4f44455f4f50455241544f520000000000815250906101e05760405162461bcd60e51b81526004016101d791906106f7565b60405180910390fd5b508060200151604051806040016040528060168152602001751393d11157d3d41154905513d497d11254d05093115160521b815250906102335760405162461bcd60e51b81526004016101d791906106f7565b5081816060015110604051806040016040528060158152602001745354414b494e475f4c494d49545f544f4f5f4c4f5760581b815250906102875760405162461bcd60e51b81526004016101d791906106f7565b5081816080015110156040518060400160405280601781526020017f4e4f545f454e4f5547485f5349474e494e475f4b455953000000000000000000815250906102e45760405162461bcd60e51b81526004016101d791906106f7565b505050505050565b6060600160e01b84835160046103029190610763565b8585604051602001610318959493929190610696565b60405160208183030381529060405290509392505050565b61036d6040518060a001604052806000815260200160001515815260200160006001600160a01b0316815260200160008152602001600081525090565b604051632695a60f60e21b815260048101839052600060248201819052908190819081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a56983c9060440160006040518083038186803b1580156103dd57600080fd5b505afa1580156103f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104199190810190610525565b509a8a525092151560208901526001600160a01b031660408801525067ffffffffffffffff9081166060870152909516608085015250919392505050565b8051610462816107df565b919050565b600082601f83011261047857600080fd5b813561048b6104868261073b565b61070a565b8181528460208386010111156104a057600080fd5b816020850160208301376000918101602001919091529392505050565b805167ffffffffffffffff8116811461046257600080fd5b600080604083850312156104e857600080fd5b82356104f3816107df565b9150602083013567ffffffffffffffff81111561050f57600080fd5b61051b85828601610467565b9150509250929050565b600080600080600080600060e0888a03121561054057600080fd5b8751801515811461055057600080fd5b602089015190975067ffffffffffffffff81111561056d57600080fd5b8801601f81018a1361057e57600080fd5b805161058c6104868261073b565b8181528b60208385010111156105a157600080fd5b6105b2826020830160208601610799565b97506105c391505060408901610457565b94506105d1606089016104bd565b93506105df608089016104bd565b92506105ed60a089016104bd565b91506105fb60c089016104bd565b905092959891949750929550565b60006020828403121561061b57600080fd5b813567ffffffffffffffff81111561063257600080fd5b61063e84828501610467565b949350505050565b6000806040838503121561065957600080fd5b505080516020909101519092909150565b60008151808452610682816020860160208601610799565b601f01601f19169290920160200192915050565b6001600160e01b03198681168252606086901b6bffffffffffffffffffffffff1916600483015260e085901b811660188301528316601c82015281516000906106e6816020808601908701610799565b919091016020019695505050505050565b602081526000610125602083018461066a565b604051601f8201601f1916810167ffffffffffffffff81118282101715610733576107336107c9565b604052919050565b600067ffffffffffffffff821115610755576107556107c9565b50601f01601f191660200190565b600063ffffffff80831681851680830382111561079057634e487b7160e01b600052601160045260246000fd5b01949350505050565b60005b838110156107b457818101518382015260200161079c565b838111156107c3576000848401525b50505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146107f457600080fd5b5056fea2646970667358221220d4dbd9fd56df0df9f7586c43a0c97395c1c0da1a9e1512a8e99ad25fdaa94e4064736f6c634300080600330000000000000000000000007899ef901ed9b331baf7759c15d2e8728e8c2a2c

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

0000000000000000000000007899ef901ed9b331baf7759c15d2e8728e8c2a2c

-----Decoded View---------------
Arg [0] : _nodeOperatorsRegistry (address): 0x7899EF901Ed9B331bAf7759c15D2e8728e8c2a2C

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007899ef901ed9b331baf7759c15d2e8728e8c2a2c


Deployed ByteCode Sourcemap

4482:4347:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5273:61;;;;;;;;-1:-1:-1;;;;;4394:32:1;;;4376:51;;4364:2;4349:18;5273:61:0;;;;;;;;6885:239;;;;;;:::i;:::-;;:::i;:::-;;;;5099:25:1;;;5155:2;5140:18;;5133:34;;;;5072:18;6885:239:0;5054:119:1;5975:489:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6885:239::-;7001:23;7026:21;7072:44;7097:18;7072:24;:44::i;:::-;7065:51;;;;6885:239;;;:::o;5975:489::-;6119:12;6149:66;6186:8;6196:18;6149:36;:66::i;:::-;6246:210;6305:21;-1:-1:-1;;;6423:18:0;6246:32;:210::i;:::-;6226:230;5975:489;-1:-1:-1;;;5975:489:0:o;7212:273::-;7328:23;7353:21;7438:18;7427:50;;;;;;;;;;;;:::i;:::-;7392:85;;;;-1:-1:-1;7212:273:0;-1:-1:-1;;7212:273:0:o;7493:716::-;7638:23;7663:21;7701:44;7726:18;7701:24;:44::i;:::-;7637:108;;;;7756:40;7799:37;7820:15;7799:20;:37::i;:::-;7756:80;;7889:8;-1:-1:-1;;;;;7855:42:0;:16;:30;;;-1:-1:-1;;;;;7855:42:0;;7899:33;;;;;;;;;;;;;;;;;7847:86;;;;;-1:-1:-1;;;7847:86:0;;;;;;;;:::i;:::-;;;;;;;;;;7952:16;:23;;;7977:28;;;;;;;;;;;;;-1:-1:-1;;;7977:28:0;;;7944:62;;;;;-1:-1:-1;;;7944:62:0;;;;;;;;:::i;:::-;;8057:13;8025:16;:29;;;:45;8072:27;;;;;;;;;;;;;-1:-1:-1;;;8072:27:0;;;8017:83;;;;;-1:-1:-1;;;8017:83:0;;;;;;;;:::i;:::-;;8156:13;8119:16;:33;;;:50;;8171:29;;;;;;;;;;;;;;;;;8111:90;;;;;-1:-1:-1;;;8111:90:0;;;;;;;;:::i;:::-;;7626:583;;;7493:716;;:::o;493:409::-;639:22;-1:-1:-1;;;755:3:0;784:18;:25;813:1;777:37;;;;:::i;:::-;833:9;861:18;694:200;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;674:220;;493:409;;;;;:::o;8217:609::-;8321:41;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8321:41:0;8484:61;;-1:-1:-1;;;8484:61:0;;;;;4830:25:1;;;8381:11:0;4871:18:1;;;4864:50;;;8381:11:0;;;;;;;-1:-1:-1;;;;;8484:21:0;:37;;;;4803:18:1;;8484:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8484:61:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8558:38:0;;;-1:-1:-1;8607:33:0;;;:24;;;:33;-1:-1:-1;;;;;8651:47:0;:31;;;:47;-1:-1:-1;8709:45:0;;;;:30;;;:45;8765:53;;;:34;;;:53;-1:-1:-1;8558:17:0;;8217:609;-1:-1:-1;;;8217:609:0:o;14:138:1:-;93:13;;115:31;93:13;115:31;:::i;:::-;74:78;;;:::o;157:462::-;199:5;252:3;245:4;237:6;233:17;229:27;219:2;;270:1;267;260:12;219:2;306:6;293:20;337:48;353:31;381:2;353:31;:::i;:::-;337:48;:::i;:::-;410:2;401:7;394:19;456:3;449:4;444:2;436:6;432:15;428:26;425:35;422:2;;;473:1;470;463:12;422:2;538;531:4;523:6;519:17;512:4;503:7;499:18;486:55;586:1;561:16;;;579:4;557:27;550:38;;;;565:7;209:410;-1:-1:-1;;;209:410:1:o;624:175::-;702:13;;755:18;744:30;;734:41;;724:2;;789:1;786;779:12;804:455;881:6;889;942:2;930:9;921:7;917:23;913:32;910:2;;;958:1;955;948:12;910:2;997:9;984:23;1016:31;1041:5;1016:31;:::i;:::-;1066:5;-1:-1:-1;1122:2:1;1107:18;;1094:32;1149:18;1138:30;;1135:2;;;1181:1;1178;1171:12;1135:2;1204:49;1245:7;1236:6;1225:9;1221:22;1204:49;:::i;:::-;1194:59;;;900:359;;;;;:::o;1264:1210::-;1391:6;1399;1407;1415;1423;1431;1439;1492:3;1480:9;1471:7;1467:23;1463:33;1460:2;;;1509:1;1506;1499:12;1460:2;1541:9;1535:16;1594:5;1587:13;1580:21;1573:5;1570:32;1560:2;;1616:1;1613;1606:12;1560:2;1688;1673:18;;1667:25;1639:5;;-1:-1:-1;1715:18:1;1704:30;;1701:2;;;1747:1;1744;1737:12;1701:2;1770:22;;1823:4;1815:13;;1811:27;-1:-1:-1;1801:2:1;;1852:1;1849;1842:12;1801:2;1881;1875:9;1906:48;1922:31;1950:2;1922:31;:::i;1906:48::-;1977:2;1970:5;1963:17;2017:7;2012:2;2007;2003;1999:11;1995:20;1992:33;1989:2;;;2038:1;2035;2028:12;1989:2;2051:54;2102:2;2097;2090:5;2086:14;2081:2;2077;2073:11;2051:54;:::i;:::-;2124:5;-1:-1:-1;2148:49:1;;-1:-1:-1;;2193:2:1;2178:18;;2148:49;:::i;:::-;2138:59;;2216:48;2260:2;2249:9;2245:18;2216:48;:::i;:::-;2206:58;;2283:49;2327:3;2316:9;2312:19;2283:49;:::i;:::-;2273:59;;2351:49;2395:3;2384:9;2380:19;2351:49;:::i;:::-;2341:59;;2419:49;2463:3;2452:9;2448:19;2419:49;:::i;:::-;2409:59;;1450:1024;;;;;;;;;;:::o;2479:320::-;2547:6;2600:2;2588:9;2579:7;2575:23;2571:32;2568:2;;;2616:1;2613;2606:12;2568:2;2656:9;2643:23;2689:18;2681:6;2678:30;2675:2;;;2721:1;2718;2711:12;2675:2;2744:49;2785:7;2776:6;2765:9;2761:22;2744:49;:::i;:::-;2734:59;2558:241;-1:-1:-1;;;;2558:241:1:o;2804:245::-;2883:6;2891;2944:2;2932:9;2923:7;2919:23;2915:32;2912:2;;;2960:1;2957;2950:12;2912:2;-1:-1:-1;;2983:16:1;;3039:2;3024:18;;;3018:25;2983:16;;3018:25;;-1:-1:-1;2902:147:1:o;3054:257::-;3095:3;3133:5;3127:12;3160:6;3155:3;3148:19;3176:63;3232:6;3225:4;3220:3;3216:14;3209:4;3202:5;3198:16;3176:63;:::i;:::-;3293:2;3272:15;-1:-1:-1;;3268:29:1;3259:39;;;;3300:4;3255:50;;3103:208;-1:-1:-1;;3103:208:1:o;3316:657::-;-1:-1:-1;;;;;;3620:15:1;;;3608:28;;3673:2;3669:15;;;-1:-1:-1;;3665:53:1;3661:1;3652:11;;3645:74;3583:3;3753:16;;;3749:25;;3744:2;3735:12;;3728:47;3805:15;;3800:2;3791:12;;3784:37;3844:13;;3551:3;;3866:60;3844:13;3914:2;3905:12;;;;3888:15;;3866:60;:::i;:::-;3946:16;;;;3964:2;3942:25;;3559:414;-1:-1:-1;;;;;;3559:414:1:o;3978:217::-;4125:2;4114:9;4107:21;4088:4;4145:44;4185:2;4174:9;4170:18;4162:6;4145:44;:::i;5178:275::-;5249:2;5243:9;5314:2;5295:13;;-1:-1:-1;;5291:27:1;5279:40;;5349:18;5334:34;;5370:22;;;5331:62;5328:2;;;5396:18;;:::i;:::-;5432:2;5425:22;5223:230;;-1:-1:-1;5223:230:1:o;5458:186::-;5506:4;5539:18;5531:6;5528:30;5525:2;;;5561:18;;:::i;:::-;-1:-1:-1;5627:2:1;5606:15;-1:-1:-1;;5602:29:1;5633:4;5598:40;;5515:129::o;5649:325::-;5688:3;5716:10;5753:2;5750:1;5746:10;5783:2;5780:1;5776:10;5814:3;5810:2;5806:12;5801:3;5798:21;5795:2;;;5861:10;5856:3;5852:20;5849:1;5842:31;5896:4;5893:1;5886:15;5924:4;5921:1;5914:15;5795:2;5955:13;;5696:278;-1:-1:-1;;;;5696:278:1:o;5979:258::-;6051:1;6061:113;6075:6;6072:1;6069:13;6061:113;;;6151:11;;;6145:18;6132:11;;;6125:39;6097:2;6090:10;6061:113;;;6192:6;6189:1;6186:13;6183:2;;;6227:1;6218:6;6213:3;6209:16;6202:27;6183:2;;6032:205;;;:::o;6242:127::-;6303:10;6298:3;6294:20;6291:1;6284:31;6334:4;6331:1;6324:15;6358:4;6355:1;6348:15;6374:131;-1:-1:-1;;;;;6449:31:1;;6439:42;;6429:2;;6495:1;6492;6485:12;6429:2;6419:86;:::o

Swarm Source

ipfs://d4dbd9fd56df0df9f7586c43a0c97395c1c0da1a9e1512a8e99ad25fdaa94e40
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

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.