Latest 25 transactions from a total of 75714 transactions

TxHash Age From To Value [TxFee]
0xacd38b4ff5ad74ebf6d97374bfafec40d039fc0d0e81e87d60ec83a5d034658510 mins ago0xcb04aae925218094863809ec0289a8fdccfd68cf  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xaac5c9da96121fba12c44331aac5360bba7628fcadfcf5bc490c471bd00a737c10 mins ago0xb8c228a842390595751b1a09a2c4ffaccf12c44b  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.00034164
0x4be58db32e344527576fae338831377887dab909dd07f41ca662da798e3c59d111 mins ago0x234ae33713afde52de9aa9203fb6696531edc74f  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xaa5d54253fc7235aa8087031d72a20b8f46424d84f9b58c2ba1dfb198ee5cc6f11 mins ago0x234ae33713afde52de9aa9203fb6696531edc74f  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379307
0xd06e2e4fc6847036e2589b49ae014a59d78bc9b02ffcc712748e663676fef53711 mins ago0xaec1f213677de24842a96e72fe6efbcbc2b77ca5  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x488d984edcf05dbfa7d8110edf19c801379480925f1babed492affd730deb6d911 mins ago0x34d950db8e9345a638ba0bee9945d56c9f7728ee  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xe83812186b7f18832dab1dd4954e3225bf41a2b41af8ccd2dad309c4eaa6dc9012 mins ago0x3ebe227e9fd42bb97b9a950e4a731d8975263812  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x0f3baa164d3873ee79432f22df78ba4a93ed9ebb2bb9a8ebafb96c58cdc3cce012 mins ago0xb8c228a842390595751b1a09a2c4ffaccf12c44b  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xecebc88765fbe7ebc5a25ecea3608034617f41cbfaa52e528f51f4bdd2c7175912 mins ago0xac3e1e84e3b7a0a83d36feba984a836c768fcb72  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xdd1ca01858bb954c73a6fa1306a7cabada399c70bf8bd288d72cdda059fc085d12 mins ago0x921f2cf348b8b45d6cd5eaf139d30303e6b9646f  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xfc400d82909d5f81affb9208add6350d81d2855138fbbe8e1556d3133a95899813 mins ago0xc98a4df797f0b8155ef38c4701588cbed21a1b26  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379307
0xfc11527e75d78ae8cd02ddc60dc1e0c973672f0fbc978a647151829d40d2e36913 mins ago0x234ae33713afde52de9aa9203fb6696531edc74f  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x290d2dc62c758bfb19a80bf314e64c164e2b4dc0bb6110e10d789a4bd9dd191913 mins ago0xec96405d35c3cadfd3e0bda90c66b74b159d4156  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379307
0x2f19550f9d28d474e681f73dfd9412f17bd7bc1c4de6f51700f6136c8d7b8cd714 mins ago0x5a3582d7c8fc97c194168342f9a347e8d41b4038  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x6917d50f6ec94cc08c196975f7ad1e39297c58a3a9ce1f8485d2af8c9cee533415 mins ago0x234ae33713afde52de9aa9203fb6696531edc74f  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xf18be664f2f741e5cad2a2a492c2d3c15e19de16f337208271cddba4c949f65215 mins ago0xaec1f213677de24842a96e72fe6efbcbc2b77ca5  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xb6b3ac1d6b09e3af7b3c4bc0a712a551baa229ce3d070d1cd874c3974094207b15 mins ago0x5a3582d7c8fc97c194168342f9a347e8d41b4038  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x4daeecb5da8e836dcef72420d36c257cc9fa81bb2a48844bd40149d87daa38fa15 mins ago0xc98a4df797f0b8155ef38c4701588cbed21a1b26  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x44167e21ccc7946313a390ce4f0483ac98bd1c3c17417884cf62abe5376f666b16 mins ago0xc1a3aab78a6dc3e5cbeec059a2727a66f4bc7088  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379307
0x16b0300bf646ff734ccf9efa34aba2a1d57b3775c8f3cdbbfec36d3740294aad16 mins ago0xac3e1e84e3b7a0a83d36feba984a836c768fcb72  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x7bbdeaee34f4a0d89d5011635b5a41d9a18a1d5ce4f616282dbc6b10c4ed864e16 mins ago0x0a65d5dccc87ecb21bc4b24c16a3c01e0cdd42ac  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x45e391e8c813d017c231ad5fed4d84fb7025d290d510fb0ad098fe887bcca65917 mins ago0x234ae33713afde52de9aa9203fb6696531edc74f  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x80d54e9a0f1183240ef5fd86a5b2256c51ac7d878c9e493dc19b24ea0022580017 mins ago0xb8c228a842390595751b1a09a2c4ffaccf12c44b  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0xbe3224d434579a713f539fed54228a1fa7bbad8c48719aecc885023d0859574b17 mins ago0xac3e1e84e3b7a0a83d36feba984a836c768fcb72  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379371
0x1c03693d9fb70b735fb4f776115da36b46fd9347bc98fa65c985d7efadacfb1217 mins ago0x6ca3ee1386f7c05d886211a6378f49bdf9c7ee88  IN   0x13a59ba5aaa130482ec11d9e4ba8bb688b1c38a40 Ether0.000379307
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Contract Source Code Verified (Exact Match)
Contract Name: DOSProxy
Compiler Text: v0.4.25+commit.59dbf8f1
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity >= 0.4.24;

library BN256 {
    struct G1Point {
        uint x;
        uint y;
    }

    struct G2Point {
        uint[2] x;
        uint[2] y;
    }

    function P1() internal pure returns (G1Point memory) {
        return G1Point(1, 2);
    }

    function P2() internal pure returns (G2Point memory) {
        return G2Point(
            [11559732032986387107991004021392285783925812861821192530917403151452391805634,
            10857046999023057135944570762232829481370756359578518086990519993285655852781],

            [4082367875863433681332203403145435568316851327593401208105741076214120093531,
            8495653923123431417604973247489272438418190587263600148770280649306958101930]
        );
    }

    function pointAdd(G1Point memory p1, G1Point memory p2) internal returns (G1Point memory r) {
        uint[4] memory input;
        input[0] = p1.x;
        input[1] = p1.y;
        input[2] = p2.x;
        input[3] = p2.y;
        assembly {
            if iszero(call(sub(gas, 2000), 0x6, 0, input, 0x80, r, 0x40)) {
                revert(0, 0)
            }
        }
    }

    function scalarMul(G1Point memory p, uint s) internal returns (G1Point memory r) {
        uint[3] memory input;
        input[0] = p.x;
        input[1] = p.y;
        input[2] = s;
        assembly {
            if iszero(call(sub(gas, 2000), 0x7, 0, input, 0x60, r, 0x40)) {
                revert(0, 0)
            }
        }
    }

    function hashToG1(bytes memory data) internal returns (G1Point memory) {
        uint256 h = uint256(keccak256(data));
        return scalarMul(P1(), h);
    }

    // @return the result of computing the pairing check
    // check passes if e(p1[0], p2[0]) *  .... * e(p1[n], p2[n]) == 1
    function pairingCheck(G1Point[] memory p1, G2Point[] memory p2) internal returns (bool) {
        require(p1.length == p2.length);
        uint elements = p1.length;
        uint inputSize = elements * 6;
        uint[] memory input = new uint[](inputSize);

        for (uint i = 0; i < elements; i++)
        {
            input[i * 6 + 0] = p1[i].x;
            input[i * 6 + 1] = p1[i].y;
            input[i * 6 + 2] = p2[i].x[0];
            input[i * 6 + 3] = p2[i].x[1];
            input[i * 6 + 4] = p2[i].y[0];
            input[i * 6 + 5] = p2[i].y[1];
        }

        uint[1] memory out;
        bool success;
        assembly {
            success := call(
                sub(gas, 2000),
                0x8,
                0,
                add(input, 0x20),
                mul(inputSize, 0x20),
                out, 0x20
            )
        }
        return success && (out[0] != 0);
    }
}

contract UserContractInterface {
    // Query callback.
    function __callback__(uint, bytes memory) public;
    // Random number callback.
    function __callback__(uint, uint) public;
}

contract DOSProxy {
    using BN256 for *;

    struct PendingRequest {
        uint requestId;
        BN256.G2Point handledGroup;
        // User contract issued the query.
        address callbackAddr;
    }

    uint requestIdSeed;
    uint groupSize;
    uint[] nodeId;
    // calling requestId => PendingQuery metadata
    mapping(uint => PendingRequest) PendingRequests;
    // Note: Make atomic changes to group metadata below.
    BN256.G2Point[] groupPubKeys;
    // groupIdentifier => isExisted
    mapping(bytes32 => bool) groups;
    //publicKey => publicKey appearance
    mapping(bytes32 => uint) pubKeyCounter;
    // Note: Make atomic changes to randomness metadata below.
    uint public lastUpdatedBlock;
    uint public lastRandomness;
    BN256.G2Point lastHandledGroup;
    uint8 constant TrafficSystemRandom = 0;
    uint8 constant TrafficUserRandom = 1;
    uint8 constant TrafficUserQuery = 2;

    event LogUrl(
        uint queryId,
        uint timeout,
        string dataSource,
        string selector,
        uint randomness,
        // Log G2Point struct directly is an experimental feature, use with care.
        uint[4] dispatchedGroup
    );
    event LogRequestUserRandom(
        uint requestId,
        uint lastSystemRandomness,
        uint userSeed,
        uint[4] dispatchedGroup
    );
    event LogNonSupportedType(string invalidSelector);
    event LogNonContractCall(address from);
    event LogCallbackTriggeredFor(address callbackAddr);
    event LogRequestFromNonExistentUC();
    event LogUpdateRandom(uint lastRandomness, uint[4] dispatchedGroup);
    event LogValidationResult(
        uint8 trafficType,
        uint trafficId,
        bytes message,
        uint[2] signature,
        uint[4] pubKey,
        bool pass,
        uint8 version
    );
    event LogInsufficientGroupNumber();
    event LogGrouping(uint[] NodeId);
    event LogPublicKeyAccepted(uint x1, uint x2, uint y1, uint y2);

    // whitelist state variables used only for alpha release.
    // Index starting from 1.
    address[22] whitelists;
    // whitelisted address => index in whitelists.
    mapping(address => uint) isWhitelisted;
    bool public whitelistInitialized = false;
    event WhitelistAddressTransferred(address previous, address curr);

    modifier onlyWhitelisted {
        uint idx = isWhitelisted[msg.sender];
        require(idx != 0 && whitelists[idx] == msg.sender, "Not whitelisted!");
        _;
    }

    function initWhitelist(address[21] memory addresses) public {
        require(!whitelistInitialized, "Whitelist already initialized!");

        for (uint idx = 0; idx < 21; idx++) {
            whitelists[idx+1] = addresses[idx];
            isWhitelisted[addresses[idx]] = idx+1;
        }
        whitelistInitialized = true;
    }

    function getWhitelistAddress(uint idx) public view returns (address) {
        require(idx > 0 && idx <= 21, "Index out of range");
        return whitelists[idx];
    }

    function transferWhitelistAddress(address newWhitelistedAddr)
        public
        onlyWhitelisted
    {
        require(newWhitelistedAddr != address(0x0) && newWhitelistedAddr != msg.sender);

        emit WhitelistAddressTransferred(msg.sender, newWhitelistedAddr);
        whitelists[isWhitelisted[msg.sender]] = newWhitelistedAddr;
    }

    function getCodeSize(address addr) internal view returns (uint size) {
        assembly {
            size := extcodesize(addr)
        }
    }

    // Returns query id.
    // TODO: restrict query from subscribed/paid calling contracts.
    function query(
        address from,
        uint timeout,
        string memory dataSource,
        string memory selector
    )
        public
        returns (uint)
    {
        if (getCodeSize(from) > 0) {
            bytes memory bs = bytes(selector);
            // '': Return whole raw response;
            // Starts with '$': response format is parsed as json.
            // Starts with '/': response format is parsed as xml/html.
            if (bs.length == 0 || bs[0] == '$' || bs[0] == '/') {
                uint queryId = uint(keccak256(abi.encodePacked(
                    ++requestIdSeed, from, timeout, dataSource, selector)));
                uint idx = lastRandomness % groupPubKeys.length;
                PendingRequests[queryId] =
                    PendingRequest(queryId, groupPubKeys[idx], from);
                emit LogUrl(
                    queryId,
                    timeout,
                    dataSource,
                    selector,
                    lastRandomness,
                    getGroupPubKey(idx)
                );
                return queryId;
            } else {
                emit LogNonSupportedType(selector);
                return 0x0;
            }
        } else {
            // Skip if @from is not contract address.
            emit LogNonContractCall(from);
            return 0x0;
        }
    }

    // Request a new user-level random number.
    function requestRandom(address from, uint8 mode, uint userSeed)
        public
        returns (uint)
    {
        // fast mode
        if (mode == 0) {
            return uint(keccak256(abi.encodePacked(
                ++requestIdSeed,lastRandomness, userSeed)));
        } else if (mode == 1) {
            // safe mode
            // TODO: restrict request from paid calling contract address.
            uint requestId = uint(keccak256(abi.encodePacked(
                ++requestIdSeed, from, userSeed)));
            uint idx = lastRandomness % groupPubKeys.length;
            PendingRequests[requestId] =
                PendingRequest(requestId, groupPubKeys[idx], from);
            // sign(requestId ||lastSystemRandomness || userSeed) with
            // selected group
            emit LogRequestUserRandom(
                requestId,
                lastRandomness,
                userSeed,
                getGroupPubKey(idx)
            );
            return requestId;
        } else {
            revert("Non-supported random request");
        }
    }

    // Random submitter validation + group signature verification.
    function validateAndVerify(
        uint8 trafficType,
        uint trafficId,
        bytes memory data,
        BN256.G1Point memory signature,
        BN256.G2Point memory grpPubKey,
        uint8 version
    )
        internal
        onlyWhitelisted
        returns (bool)
    {
        // Validation
        // TODO
        // 1. Check msg.sender from registered and staked node operator.
        // 2. Check msg.sender is a member in Group(grpPubKey).
        // Clients actually signs (data || addr(selected_submitter)).
        // TODO: Sync and change to sign ( sha256(data) || address )
        bytes memory message = abi.encodePacked(data, msg.sender);

        // Verification
        BN256.G1Point[] memory p1 = new BN256.G1Point[](2);
        BN256.G2Point[] memory p2 = new BN256.G2Point[](2);
        // The signature has already been applied neg() function offchainly to
        // fit requirement of pairingCheck function
        p1[0] = signature;
        p1[1] = BN256.hashToG1(message);
        p2[0] = BN256.P2();
        p2[1] = grpPubKey;
        bool passVerify = BN256.pairingCheck(p1, p2);
        emit LogValidationResult(
            trafficType,
            trafficId,
            message,
            [signature.x, signature.y],
            [grpPubKey.x[0], grpPubKey.x[1], grpPubKey.y[0], grpPubKey.y[1]],
            passVerify,
            version
        );
        return passVerify;
    }

    function triggerCallback(
        uint requestId,
        uint8 trafficType,
        bytes memory result,
        uint[2] memory sig,
        uint8 version
    )
        public
    {
        if (!validateAndVerify(
                trafficType,
                requestId,
                result,
                BN256.G1Point(sig[0], sig[1]),
                PendingRequests[requestId].handledGroup,
                version))
        {
            return;
        }

        address ucAddr = PendingRequests[requestId].callbackAddr;
        if (ucAddr == address(0x0)) {
            emit LogRequestFromNonExistentUC();
            return;
        }

        emit LogCallbackTriggeredFor(ucAddr);
        delete PendingRequests[requestId];
        if (trafficType == TrafficUserQuery) {
            UserContractInterface(ucAddr).__callback__(requestId, result);
        } else if (trafficType == TrafficUserRandom) {
            // Safe random number is the collectively signed threshold signature
            // of the message (requestId || lastRandomness || userSeed ||
            // selected sender in group).
            UserContractInterface(ucAddr).__callback__(
                requestId, uint(keccak256(abi.encodePacked(sig[0], sig[1]))));
        } else {
            revert("Unsupported traffic type");
        }
    }

    function toBytes(uint x) internal pure returns (bytes memory b) {
        b = new bytes(32);
        assembly { mstore(add(b, 32), x) }
    }

    // System-level secure distributed random number generator.
    function updateRandomness(uint[2] memory sig) public {
        if (!validateAndVerify(
                TrafficSystemRandom,
                lastRandomness,
                toBytes(lastRandomness),
                BN256.G1Point(sig[0], sig[1]),
                lastHandledGroup,
                0))
        {
            return;
        }
        // Update new randomness = sha3(collectively signed group signature)
        lastRandomness = uint(keccak256(abi.encodePacked(sig[0], sig[1])));
        lastUpdatedBlock = block.number - 1;
        uint idx = lastRandomness % groupPubKeys.length;
        lastHandledGroup = groupPubKeys[idx];
        // Signal selected off-chain clients to collectively generate a new
        // system level random number for next round.
        emit LogUpdateRandom(lastRandomness, getGroupPubKey(idx));
    }

    // For alpha. To trigger first random number after grouping has done
    // or timeout.
    function fireRandom() public onlyWhitelisted {
        lastRandomness = uint(keccak256(abi.encode(blockhash(block.number - 1))));
        lastUpdatedBlock = block.number - 1;
        uint idx = lastRandomness % groupPubKeys.length;
        lastHandledGroup = groupPubKeys[idx];
        // Signal off-chain clients
        emit LogUpdateRandom(lastRandomness, getGroupPubKey(idx));
    }

    function handleTimeout() public onlyWhitelisted {
        uint currentBlockNumber = block.number - 1;
        if (currentBlockNumber - lastUpdatedBlock > 5) {
            fireRandom();
        }
    }

    function setPublicKey(uint x1, uint x2, uint y1, uint y2)
        public
        onlyWhitelisted
    {
        bytes32 groupId = keccak256(abi.encodePacked(x1, x2, y1, y2));
        require(!groups[groupId], "group has already registered");

        pubKeyCounter[groupId] = pubKeyCounter[groupId] + 1;
        if (pubKeyCounter[groupId] > groupSize / 2) {
            groupPubKeys.push(BN256.G2Point([x1, x2], [y1, y2]));
            groups[groupId] = true;
            delete(pubKeyCounter[groupId]);
            emit LogPublicKeyAccepted(x1, x2, y1, y2);
        }
    }

    function getGroupPubKey(uint idx) public view returns (uint[4] memory) {
        require(idx < groupPubKeys.length, "group index out of range");

        return [
            groupPubKeys[idx].x[0], groupPubKeys[idx].x[1],
            groupPubKeys[idx].y[0], groupPubKeys[idx].y[1]
        ];
    }

    function uploadNodeId(uint id) public onlyWhitelisted {
        nodeId.push(id);
        if (nodeId.length >= groupSize) {
            grouping(groupSize);
        }
    }

    function grouping(uint size) public onlyWhitelisted {
        groupSize = size;
        uint[] memory toBeGrouped = new uint[](size);
        if (nodeId.length < size) {
            emit LogInsufficientGroupNumber();
            return;
        }
        for (uint i = 0; i < size; i++) {
            toBeGrouped[i] = nodeId[nodeId.length - 1];
            nodeId.length--;
        }
        emit LogGrouping(toBeGrouped);
    }

    function resetContract() public onlyWhitelisted {
        nodeId.length = 0;
        groupPubKeys.length = 0;
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"sig","type":"uint256[2]"}],"name":"updateRandomness","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"mode","type":"uint8"},{"name":"userSeed","type":"uint256"}],"name":"requestRandom","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getWhitelistAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"x1","type":"uint256"},{"name":"x2","type":"uint256"},{"name":"y1","type":"uint256"},{"name":"y2","type":"uint256"}],"name":"setPublicKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getGroupPubKey","outputs":[{"name":"","type":"uint256[4]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"resetContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"timeout","type":"uint256"},{"name":"dataSource","type":"string"},{"name":"selector","type":"string"}],"name":"query","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"requestId","type":"uint256"},{"name":"trafficType","type":"uint8"},{"name":"result","type":"bytes"},{"name":"sig","type":"uint256[2]"},{"name":"version","type":"uint8"}],"name":"triggerCallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"fireRandom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"size","type":"uint256"}],"name":"grouping","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[21]"}],"name":"initWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastRandomness","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newWhitelistedAddr","type":"address"}],"name":"transferWhitelistAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"uploadNodeId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdatedBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"handleTimeout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"queryId","type":"uint256"},{"indexed":false,"name":"timeout","type":"uint256"},{"indexed":false,"name":"dataSource","type":"string"},{"indexed":false,"name":"selector","type":"string"},{"indexed":false,"name":"randomness","type":"uint256"},{"indexed":false,"name":"dispatchedGroup","type":"uint256[4]"}],"name":"LogUrl","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"requestId","type":"uint256"},{"indexed":false,"name":"lastSystemRandomness","type":"uint256"},{"indexed":false,"name":"userSeed","type":"uint256"},{"indexed":false,"name":"dispatchedGroup","type":"uint256[4]"}],"name":"LogRequestUserRandom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"invalidSelector","type":"string"}],"name":"LogNonSupportedType","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"}],"name":"LogNonContractCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"callbackAddr","type":"address"}],"name":"LogCallbackTriggeredFor","type":"event"},{"anonymous":false,"inputs":[],"name":"LogRequestFromNonExistentUC","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"lastRandomness","type":"uint256"},{"indexed":false,"name":"dispatchedGroup","type":"uint256[4]"}],"name":"LogUpdateRandom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"trafficType","type":"uint8"},{"indexed":false,"name":"trafficId","type":"uint256"},{"indexed":false,"name":"message","type":"bytes"},{"indexed":false,"name":"signature","type":"uint256[2]"},{"indexed":false,"name":"pubKey","type":"uint256[4]"},{"indexed":false,"name":"pass","type":"bool"},{"indexed":false,"name":"version","type":"uint8"}],"name":"LogValidationResult","type":"event"},{"anonymous":false,"inputs":[],"name":"LogInsufficientGroupNumber","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"NodeId","type":"uint256[]"}],"name":"LogGrouping","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"x1","type":"uint256"},{"indexed":false,"name":"x2","type":"uint256"},{"indexed":false,"name":"y1","type":"uint256"},{"indexed":false,"name":"y2","type":"uint256"}],"name":"LogPublicKeyAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previous","type":"address"},{"indexed":false,"name":"curr","type":"address"}],"name":"WhitelistAddressTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526024805460ff1916905534801561001a57600080fd5b506129178061002a6000396000f3006080604052600436106100f05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166309ac86d381146100f55780631bf8205714610137578063565853af146101735780636786ebdb146101a757806379a924c5146101d057806392021653146101f1578063b181a8fc14610241578063b7fb8fd714610256578063d7d9860f146102fd578063ea5cba1314610388578063eab14fe61461039d578063f13a9626146103b5578063f2a3072d146103fa578063f879d59e1461040f578063f89a15f714610430578063f90ce5ba14610448578063fcfafeb61461045d575b600080fd5b34801561010157600080fd5b5060408051808201825261013591369160049160449190839060029083908390808284375093965061047295505050505050565b005b34801561014357600080fd5b50610161600160a060020a036004351660ff60243516604435610678565b60408051918252519081900360200190f35b34801561017f57600080fd5b5061018b6004356109fe565b60408051600160a060020a039092168252519081900360200190f35b3480156101b357600080fd5b506101bc610a84565b604080519115158252519081900360200190f35b3480156101dc57600080fd5b50610135600435602435604435606435610a8d565b3480156101fd57600080fd5b50610209600435610d31565b6040518082608080838360005b8381101561022e578181015183820152602001610216565b5050505090500191505060405180910390f35b34801561024d57600080fd5b50610135610e3e565b34801561026257600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610161948235600160a060020a031694602480359536959460649492019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610ed29650505050505050565b34801561030957600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610135948235946024803560ff16953695946064949201919081908401838280828437505060408051808201825295989796818101969550935060029250849150839080828437509396505050913560ff1692506114a0915050565b34801561039457600080fd5b50610135611896565b3480156103a957600080fd5b50610135600435611a1b565b3480156103c157600080fd5b50604080516102a08181019092526101359136916004916102a491908390601590839083908082843750939650611bdf95505050505050565b34801561040657600080fd5b50610161611ce6565b34801561041b57600080fd5b50610135600160a060020a0360043516611cec565b34801561043c57600080fd5b50610135600435611e23565b34801561045457600080fd5b50610161611ee6565b34801561046957600080fd5b50610135611eec565b60006105156000600854610487600854611f80565b604080518082018252875181526020808901519082015281516080810180845291929091600991839190820190839060029082845b8154815260200190600101908083116104bc57505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116104f2575050505050815250506000611fab565b151561052057610674565b8151602080840151604080518084019490945283810191909152805180840382018152606090930190819052825190918291908401908083835b602083106105795780518252601f19909201916020918201910161055a565b5181516000196020949094036101000a84019081169019919091161790526040519390910183900390922060088190554390920160075550600454925090508115156105c157fe5b0690506004818154811015156105d357fe5b6000918252602090912060049091020160096105f1818360026126ff565b50610604600282810190848101906126ff565b509050507f53efa859df0bc08bb5328b1c341f3fd0dfe6bc6032794520dedab0581a8b9d7e60085461063583610d31565b6040518281526020810182608080838360005b83811015610660578181015183820152602001610648565b505050509050019250505060405180910390a15b5050565b6000808060ff85161515610728576000808154600101919050819055600854856040516020018084815260200183815260200182815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106106f45780518252601f1990920191602091820191016106d5565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095506109f592505050565b8460ff16600114156109a5576000805460010190819055604080516020808201939093526c01000000000000000000000000600160a060020a038a160281830152605480820188905282518083039091018152607490910191829052805190928291908401908083835b602083106107b15780518252601f199092019160209182019101610792565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060045460085491965093509150508115156107f157fe5b06905060606040519081016040528083815260200160048381548110151561081557fe5b6000918252602090912060408051608081018083529093600402909201918391820190839060029082845b81548152602001906001019080831161084057505050918352505060408051808201918290526020909201919060028481019182845b81548152602001906001019080831161087657505050919092525050508152600160a060020a038816602091820152600084815260038252604090208251815590820151805160018301906108ce908290600261273a565b5060208201516108e4906002808401919061273a565b505050604091909101516005909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790556008547f2360a8896e2f161ae820a150126e008bdb1b69f37460481dfee46a5fd04c0fd09083908661094e85610d31565b6040518085815260200184815260200183815260200182600460200280838360005b83811015610988578181015183820152602001610970565b5050505090500194505050505060405180910390a18192506109f5565b6040805160e560020a62461bcd02815260206004820152601c60248201527f4e6f6e2d737570706f727465642072616e646f6d207265717565737400000000604482015290519081900360640190fd5b50509392505050565b60008082118015610a10575060158211155b1515610a66576040805160e560020a62461bcd02815260206004820152601260248201527f496e646578206f7574206f662072616e67650000000000000000000000000000604482015290519081900360640190fd5b600d8260168110610a7357fe5b0154600160a060020a031692915050565b60245460ff1681565b336000908152602360205260408120548015801590610ac2575033600d8260168110610ab557fe5b0154600160a060020a0316145b1515610b06576040805160e560020a62461bcd02815260206004820152601060248201526000805160206128cc833981519152604482015290519081900360640190fd5b85858585604051602001808581526020018481526020018381526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b60208310610b6d5780518252601f199092019160209182019101610b4e565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008181526005909252929020549195505060ff16159150610c039050576040805160e560020a62461bcd02815260206004820152601c60248201527f67726f75702068617320616c7265616479207265676973746572656400000000604482015290519081900360640190fd5b6000828152600660205260409020805460019081019182905554600290041015610d29576040805160808101825280820188815260608201889052815281518083019092528582526020828101869052810191909152600480546001810180835560008390528351909392919091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190610ca2908290600261273a565b506020820151610cb8906002808401919061273a565b5050506000838152600560209081526040808320805460ff19166001179055600682528083209290925581518981529081018890528082018790526060810186905290517f5bf077aca7c3c2ae9ca6ebd7da84490edf523227621a171c3c2656b3d45e92fe92509081900360800190a15b505050505050565b610d39612768565b6004548210610d92576040805160e560020a62461bcd02815260206004820152601860248201527f67726f757020696e646578206f7574206f662072616e67650000000000000000604482015290519081900360640190fd5b608060405190810160405280600484815481101515610dad57fe5b60009182526020822060049091020101548152602001600484815481101515610dd257fe5b60009182526020909120600490910201600101548152602001600484815481101515610dfa57fe5b60009182526020822060026004909202010101548152602001600484815481101515610e2257fe5b6000918252602090912060036004909202010154905292915050565b336000908152602360205260409020548015801590610e73575033600d8260168110610e6657fe5b0154600160a060020a0316145b1515610eb7576040805160e560020a62461bcd02815260206004820152601060248201526000805160206128cc833981519152604482015290519081900360640190fd5b6000610ec4600282612787565b5060006106746004826127b0565b600060606000806000610ee489612352565b11156114545784518593501580610f5d5750826000815181101515610f0557fe5b90602001015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f2400000000000000000000000000000000000000000000000000000000000000145b80610fca5750826000815181101515610f7257fe5b90602001015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f2f00000000000000000000000000000000000000000000000000000000000000145b156113b2576000808154600101919050819055888888886040516020018086815260200185600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140184815260200183805190602001908083835b602083106110465780518252601f199092019160209182019101611027565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061108e5780518252601f19909201916020918201910161106f565b6001836020036101000a038019825116818451168082178552505050505050905001955050505050506040516020818303038152906040526040518082805190602001908083835b602083106110f55780518252601f1990920191602091820191016110d6565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600454600854919650935091505081151561113557fe5b06905060606040519081016040528083815260200160048381548110151561115957fe5b6000918252602090912060408051608081018083529093600402909201918391820190839060029082845b81548152602001906001019080831161118457505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116111ba57505050919092525050508152600160a060020a038a1660209182015260008481526003825260409020825181559082015180516001830190611212908290600261273a565b506020820151611228906002808401919061273a565b50505060408201518160050160006101000a815481600160a060020a030219169083600160a060020a031602179055509050507f46ff2d61a5f6d1003044f504417f20609a6fd05bea36d0c8c33b9412683863ae8288888860085461128c87610d31565b60405180878152602001868152602001806020018060200185815260200184600460200280838360005b838110156112ce5781810151838201526020016112b6565b50505050905001838103835287818151815260200191508051906020019080838360005b8381101561130a5781810151838201526020016112f2565b50505050905090810190601f1680156113375780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561136a578181015183820152602001611352565b50505050905090810190601f1680156113975780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a1819350611495565b7f70714cf695ae953ee67221716a4b4dc9e944909fd2b66f07e790a49d9ac29b41856040518080602001828103825283818151815260200191508051906020019080838360005b838110156114115781810151838201526020016113f9565b50505050905090810190601f16801561143e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a160009350611495565b60408051600160a060020a038a16815290517f6cea43bb3db7220931a7c8ac633e65cbc8e7ba129f2ed84db2e71bc0adb73bb59181900360200190a1600093505b505050949350505050565b600061156085878660408051908101604052808860006002811015156114c257fe5b602090810291909101518252898101519181019190915260008c815260039091526040908190208151608081018084529092600190920191839190820190839060029082845b81548152602001906001019080831161150857505050918352505060408051808201918290526020909201919060028481019182845b81548152602001906001019080831161153e5750505050508152505087611fab565b151561156b57610d29565b50600085815260036020526040902060050154600160a060020a03168015156115bc576040517f40d87958cd48e8b698a94f35390a9020a9127528227647da089cc6bfd7931f4290600090a1610d29565b60408051600160a060020a038316815290517f065d5d7c942a87321bf774d2780cfd4928766b9f04dc6728ab8b4490ef5edaf09181900360200190a1600086815260036020526040812081815590600182018161161982826127dc565b6116276002830160006127dc565b505050600501805473ffffffffffffffffffffffffffffffffffffffff1916905560ff85166002141561173b57604080517f6d1129770000000000000000000000000000000000000000000000000000000081526004810188815260248201928352865160448301528651600160a060020a03851693636d112977938b938a9390929160640190602085019080838360005b838110156116d15781810151838201526020016116b9565b50505050905090810190601f1680156116fe5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561171e57600080fd5b505af1158015611732573d6000803e3d6000fd5b50505050610d29565b60ff85166001141561184657600160a060020a0381166318a1908d878560006020020151866001602002015160405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106117bc5780518252601f19909201916020918201910161179d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600190046040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b15801561171e57600080fd5b6040805160e560020a62461bcd02815260206004820152601860248201527f556e737570706f72746564207472616666696320747970650000000000000000604482015290519081900360640190fd5b3360009081526023602052604081205480158015906118cb575033600d82601681106118be57fe5b0154600160a060020a0316145b151561190f576040805160e560020a62461bcd02815260206004820152601060248201526000805160206128cc833981519152604482015290519081900360640190fd5b6040805160001943014060208083019190915282518083038201815291830192839052815191929182918401908083835b6020831061195f5780518252601f199092019160209182019101611940565b5181516000196020949094036101000a84019081169019919091161790526040519390910183900390922060088190554390920160075550600454925090508115156119a757fe5b0691506004828154811015156119b957fe5b6000918252602090912060049091020160096119d7818360026126ff565b506119ea600282810190848101906126ff565b509050507f53efa859df0bc08bb5328b1c341f3fd0dfe6bc6032794520dedab0581a8b9d7e60085461063584610d31565b33600090815260236020526040812054606091908015801590611a54575033600d8260168110611a4757fe5b0154600160a060020a0316145b1515611a98576040805160e560020a62461bcd02815260206004820152601060248201526000805160206128cc833981519152604482015290519081900360640190fd5b6001849055604080518581526020808702820101909152848015611ac6578160200160208202803883390190505b50600254909350841115611b02576040517f08a70ba288e836bee6c9b4aea7482ee5ff8f63c5ad9d2533d9cf0ced64adc26290600090a1611bd9565b600091505b83821015611b6357600280546000198101908110611b2157fe5b90600052602060002001548383815181101515611b3a57fe5b602090810290910101526002805490611b57906000198301612787565b50600190910190611b07565b7f5f30b698cceb472bcb5a80c4acc8c52ea45ea704f5aeeb2527d2d4c95f793dd7836040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015611bc5578181015183820152602001611bad565b505050509050019250505060405180910390a15b50505050565b60245460009060ff1615611c3d576040805160e560020a62461bcd02815260206004820152601e60248201527f57686974656c69737420616c726561647920696e697469616c697a6564210000604482015290519081900360640190fd5b5060005b6015811015611cd557818160158110611c5657fe5b6020020151600d6001830160168110611c6b57fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556001810160236000848460158110611cab57fe5b60209081029190910151600160a060020a0316825281019190915260400160002055600101611c41565b50506024805460ff19166001179055565b60085481565b336000908152602360205260409020548015801590611d21575033600d8260168110611d1457fe5b0154600160a060020a0316145b1515611d65576040805160e560020a62461bcd02815260206004820152601060248201526000805160206128cc833981519152604482015290519081900360640190fd5b600160a060020a03821615801590611d865750600160a060020a0382163314155b1515611d9157600080fd5b60408051338152600160a060020a038416602082015281517ff3aa0b55b04020369096a7510cae47a1845da41a17f491a666da539a4870a8a3929181900390910190a1336000908152602360205260409020548290600d9060168110611df357fe5b01805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b336000908152602360205260409020548015801590611e58575033600d8260168110611e4b57fe5b0154600160a060020a0316145b1515611e9c576040805160e560020a62461bcd02815260206004820152601060248201526000805160206128cc833981519152604482015290519081900360640190fd5b600280546001818101835560008390527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018490555490541061067457610674600154611a1b565b60075481565b336000908152602360205260408120548015801590611f21575033600d8260168110611f1457fe5b0154600160a060020a0316145b1515611f65576040805160e560020a62461bcd02815260206004820152601060248201526000805160206128cc833981519152604482015290519081900360640190fd5b60014303915060056007548303111561067457610674611896565b6040805160208082528183019092526060918082016104008038833950505060208101929092525090565b336000908152602360205260408120546060908190819084908015801590611fe9575033600d8260168110611fdc57fe5b0154600160a060020a0316145b151561202d576040805160e560020a62461bcd02815260206004820152601060248201526000805160206128cc833981519152604482015290519081900360640190fd5b89336040516020018083805190602001908083835b602083106120615780518252601f199092019160209182019101612042565b5181516020939093036101000a6000190180199091169216919091179052600160a060020a03949094166c01000000000000000000000000029190930190815260408051808303600b1901815260026014840181815260748501909352909a50909450925060340190505b6120d46127ea565b8152602001906001900390816120cc57505060408051600280825260608201909252919550602082015b612106612801565b8152602001906001900390816120fe5790505092508884600081518110151561212b57fe5b6020908102909101015261213e85612356565b84600181518110151561214d57fe5b6020908102909101015261215f6123db565b83600081518110151561216e57fe5b60209081029091010152825188908490600190811061218957fe5b6020908102909101015261219d848461249c565b6040805180820182528b5181526020808d0151908201528151608081019092528a519294507f64aadf054f27a7be255dfa28adc882136f901e2cb99b3ad8ff40554ee0b2d1dd928f928f928a92909190819060006020908102919091015182528f519101906001602002015181526020018e60200151600060028110151561222157fe5b602002015181526020018e60200151600160028110151561223e57fe5b6020020151815250878d604051808860ff1660ff1681526020018781526020018060200186600260200280838360005b8381101561228657818101518382015260200161226e565b5050505090500185600460200280838360005b838110156122b1578181015183820152602001612299565b50505050905001841515151581526020018360ff1660ff168152602001828103825287818151815260200191508051906020019080838360005b838110156123035781810151838201526020016122eb565b50505050905090810190601f1680156123305780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a1509a9950505050505050505050565b3b90565b61235e6127ea565b6000826040518082805190602001908083835b602083106123905780518252601f199092019160209182019101612371565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206001900490506123d46123ce612698565b826126b9565b9392505050565b6123e3612801565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b82527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6020838101919091528101919091525b90565b6000806000606060006124ad612827565b86518851600091146124be57600080fd5b88519550856006029450846040519080825280602002602001820160405280156124f2578160200160208202803883390190505b509350600092505b8583101561266757888381518110151561251057fe5b6020908102909101015151845185906006860290811061252c57fe5b60209081029091010152885189908490811061254457fe5b9060200190602002015160200151848460060260010181518110151561256657fe5b60209081029091010152875188908490811061257e57fe5b60209081029190910101515151845185906002600687020190811061259f57fe5b6020908102909101015287518890849081106125b757fe5b60209081029190910181015151015184518590600360068702019081106125da57fe5b6020908102909101015287518890849081106125f257fe5b602090810291909101810151015151845185906004600687020190811061261557fe5b60209081029091010152875188908490811061262d57fe5b6020908102919091018101518101510151845185906005600687020190811061265257fe5b602090810290910101526001909201916124fa565b6020826020870260208701600060086107d05a03f1905080801561268b5750815115155b9998505050505050505050565b6126a06127ea565b5060408051808201909152600181526002602082015290565b6126c16127ea565b6126c9612846565b8351815260208085015190820152604080820184905282606083600060076107d05a03f115156126f857600080fd5b5092915050565b826002810192821561272a579182015b8281111561272a57825482559160010191906001019061270f565b50612736929150612865565b5090565b826002810192821561272a579160200282015b8281111561272a57825182559160200191906001019061274d565b6080604051908101604052806004906020820280388339509192915050565b8154818355818111156127ab576000838152602090206127ab918101908301612865565b505050565b8154818355818111156127ab576004028160040283600052602060002091820191016127ab919061287f565b506000815560010160009055565b604080518082019091526000808252602082015290565b6080604051908101604052806128156128b0565b81526020016128226128b0565b905290565b6020604051908101604052806001906020820280388339509192915050565b6060604051908101604052806003906020820280388339509192915050565b61249991905b80821115612736576000815560010161286b565b61249991905b8082111561273657600061289982826127dc565b6128a76002830160006127dc565b50600401612885565b6040805180820182529060029082908038833950919291505056004e6f742077686974656c69737465642100000000000000000000000000000000a165627a7a7230582041a10d6c7faf59e716ca3dca1cdc50bb0031e6852b2357165c62eb8594377daa0029

   Swarm Source:
bzzr://41a10d6c7faf59e716ca3dca1cdc50bb0031e6852b2357165c62eb8594377daa

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward