Code Monkey home page Code Monkey logo

godwoken-web3's People

Contributors

bitrocks avatar classicalliu avatar dependabot[bot] avatar flouse avatar floustar avatar i-am-sam-codes avatar jjyr avatar keith-cy avatar keroro520 avatar kuzirashi avatar magicalne avatar retricsu avatar zeroqn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

godwoken-web3's Issues

v1: simplify Web3 configuration

  • deprecate COMPATIBLE_CHAIN_ID
    fetch COMPATIBLE_CHAIN_ID from RollupConfig

  • deprecate DEFAULT_FROM_ADDRESS and DEFAULT_FROM_ID
    scan Godwoken accounts and get the first EOA account as DEFAUT_RROM_ID

  • try to get other configs from Godwoken RPC and simplify the configurations in Web3.env

  • provide unsatisfy chain config info #194


  • new configs:
    • MINIMAL_GAS_PRICE for a Polyjuice transaction -> avoid DDoS
    • MINIMAL_FEE for a Godwoken transaction -> avoid DDoS

Refs

[v1] eth_getTransactionByBlockNumberAndIndex return Internal error

env:https://godwoken-testnet-web3-v1-rpc.ckbapp.dev

overflow larger than 64 bits

godwoken

guopenglin@MacBook-Pro-2-086b godwoken-kicker % curl --location --request POST 'https://godwoken-testnet-web3-v1-rpc.ckbapp.dev' \
--header 'Content-Type: application/json' \
--data-raw '{
        "jsonrpc":"2.0",
        "method":"eth_getTransactionByBlockNumberAndIndex",
        "params":["0xffffffffffffffff", "0x0"],
        "id":1
}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"header not found"}}

eth

guopenglin@MacBook-Pro-2-086b godwoken-kicker % curl --location --request POST 'https://mainnet.infura.io/v3/719d739434254b88ac95d53e2b6ac997' \
--header 'Content-Type: application/json' \
--data-raw '{
        "jsonrpc":"2.0",
        "method":"eth_getTransactionByBlockNumberAndIndex",
        "params":["0xffffffffffffffff", "0x0"],
        "id":1
}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32602,"message":"invalid argument 0: block number larger than int64"}}

overflow larger than int64

godwoken

guopenglin@MacBook-Pro-2-086b godwoken-kicker % curl --location --request POST 'https://godwoken-testnet-web3-v1-rpc.ckbapp.dev' \
--header 'Content-Type: application/json' \
--data-raw '{
        "jsonrpc":"2.0",
        "method":"eth_getTransactionByBlockNumberAndIndex",
        "params":["0xffffffffffffffffff", "0x0"],
        "id":1
}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32603,"message":"Internal error"}}

guopenglin@MacBook-Pro-2-086b godwoken-kicker % curl --location --request POST 'https://godwoken-testnet-web3-v1-rpc.ckbapp.dev' \
--header 'Content-Type: application/json' \
--data-raw '{
        "jsonrpc":"2.0",
        "method":"eth_getTransactionByBlockNumberAndIndex",
        "params":["0xff", "0xffffffffffffff"],
        "id":1
}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32603,"message":"Internal error"}}

eth

guopenglin@MacBook-Pro-2-086b godwoken-kicker % curl --location --request POST 'https://mainnet.infura.io/v3/719d739434254b88ac95d53e2b6ac997' \
--header 'Content-Type: application/json' \
--data-raw '{
        "jsonrpc":"2.0",
        "method":"eth_getTransactionByBlockNumberAndIndex",
        "params":["0xffffffffffffffffff", "0x0"],
        "id":1
}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32602,"message":"invalid argument 0: hex number \u003e 64 bits"}

Multi-layer cross-contract calls are inconsistent with other blockchain platforms

env: https://github.com/RetricSu/godwoken-kicker.git
branch: compatibility-changes
commit: 76430974cc0b8f88e2bca659725cb8664d3b78d2
solodity code

pragma solidity ^0.6.10;


contract CrossCallTest{

    CrossCall cc;
    CrossCall cc1;

    constructor () public {
        cc = new CrossCall();
        cc1 = new CrossCall();
        cc.setOtherAddress(address(cc1));
        cc1.setOtherAddress(address(cc));
    }
    event throwTestResult(uint256 idx,bool result,bytes bts);

    function call_throwTest_1() public {
        cc.modType(1);
        bytes memory  bb;
        try cc.throwTest() returns(bool result){
            // emit throwTestResult(0,true,bb);
            require(false,"cc.throwTest() returns(bool result)");
        } catch Error(string memory bt1){
            // emit throwTestResult(1,true,bytes(bt1));
            require(false,"cc.throwTest() returns(bool result)");
        }catch(bytes memory bt2){
            emit throwTestResult(2,false,bt2);
        }
    }

    function call_throwTest_2() public {
        cc.modType(2);
        bytes memory  bb;
        try cc.throwTest() returns(bool result){
            // emit throwTestResult(0,true,bb);
            require(false,"cc.throwTest() returns(bool result)");
        } catch Error(string memory bt1){
            // emit throwTestResult(1,true,bytes(bt1));
            require(keccak256(bytes(bt1)) == keccak256("require throw test"),"require throw test");
        }catch(bytes memory bt2){
            require(false,"cc.throwTest(2) returns(bool result)");
        }
    }

    function call_throwTest_3() public {
        cc.modType(3);
        bytes memory  bb;
        try cc.throwTest() returns(bool result){
            // emit throwTestResult(0,true,bb);
            require(result == true,"cc.throwTest(3) returns(bool result)");
        } catch Error(string memory bt1){
            // emit throwTestResult(1,true,bytes(bt1));
            require(keccak256(bytes(bt1)) == keccak256("require throw test"),"require throw test");

        }catch(bytes memory bt2){
            require(false,"cc.throwTest(2) returns(bool result)");
        }
    }

    function call_throwTest_4() public {
        cc.modType(4);
        bytes memory  bb;
        try cc.throwTest() returns(bool result){
            // emit throwTestResult(0,true,bb);
            require(false,"exec failed");
        } catch Error(string memory bt1){
            // emit throwTestResult(1,true,bytes(bt1));
            require(keccak256(bytes(bt1)) == keccak256("require throw test"),"chatch 1");

        }catch(bytes memory bt2){
            // require(false,"cc.throwTest(4) catch 2");
        }
    }

    function call_throwTest_5() public {
        cc.modType(5);
        bytes memory  bb;
        try cc.throwTest() returns(bool result){
            // emit throwTestResult(0,true,bb);
            require(true,"exec failed");
        } catch Error(string memory bt1){
            // emit throwTestResult(1,true,bytes(bt1));
            require(keccak256(bytes(bt1)) == keccak256("require throw test"),"chatch 1");

        }catch(bytes memory bt2){
            require(false,"cc.throwTest(5) catch 2");
        }
    }

    function call_1() public returns(bool){
        uint256 beginSize = cc1.getType1();
        cc.callTestFunc(address(cc1),500000000,0,"addModType()");
        require(cc1.getType1() == beginSize+1,"addModType failed");
        return true;
    }

    function call_stack(uint stackSize) public returns(uint256){
        return cc.call_stack(stackSize-1)+stackSize;
    }


    function call_out_of_gas() public returns(bool){
        uint256 beginSize = cc1.getType1();
        try cc.callTestFunc(address(cc1),5,0,"addModType()") returns(bool result,bytes memory bts){
            require(!result,"can't do this");
        }catch{}
        require(cc1.getType1() == beginSize,"addModType failed");
        return true;
    }


    function call_delegatecallFunc() public returns(bool){
        uint256 beginSize = cc.getType1();
        cc.delegatecallFunc(address(cc1),500000000,"addModType()");
        require(cc.getType1() == beginSize+1,"addModType failed");
        return true;
    }





    function call_staticcallFunc() public returns(bool){
        uint256 beginSize = cc.getType1();
        uint256 cc1BeginSize = cc1.getType1();
        try cc.staticcallFunc(address(cc1),500000000,"addModType()") returns(bool result){
            require(!result,"exec must failed");

        }catch {

        }
        require(cc1.getType1() == beginSize,"type must not mod ");
        require(cc.getType1() == beginSize,"type must not mod ");
        return true;
    }




    function call_throwTest(uint idx) public{
        cc.modType(idx);
        bytes memory  bb;
        try cc.throwTest() returns(bool result){

            emit throwTestResult(0,true,bb);

        }catch Error(string memory bt1 ) {
            // This is executed in case
            // revert was called inside getData
            // and a reason string was provided.
            require(keccak256(bytes(bt1)) == keccak256("require throw test"),"require throw test");
            emit throwTestResult(1,true,bytes(bt1));

        }  catch (bytes memory bt2) {
            // This is executed in case revert() was used.
            emit throwTestResult(2,false,bt2);
        }

    }


}
contract CrossCall{

    address payable otherAddress;

    function setOtherAddress(address payable addr) public {
        otherAddress = addr;
    }
    event typeModMsg(uint256);
    uint256 public  type1;

    function getType1() public returns(uint256){
        return type1;
    }

    function callTestFunc(address addr,uint256 useGas,uint valuedata,string memory  func) public payable returns (bool,bytes memory){
        return  addr.call{value:valuedata,gas:useGas}(abi.encodeWithSignature(func));
    }


    function call_stack(uint stackSize) public returns(uint256){
        CrossCall cc = CrossCall(otherAddress);
        if(stackSize<=0){
            return 1;
        }
        try cc.call_stack(stackSize-1) returns(uint256 num){
            return num+stackSize;
        }catch {
            return cc.call_stack{gas:100000}(stackSize-1);
        }
    }

    //todo add callcode
    // function callcodeFunc(address addr,uint256 useGas,uint valuedata,string memory func) public payable returns (bool,bytes memory){
    // return addr.callcode.value(valuedata).gas(useGas)(bytes4(keccak256(func)));
    // return  addr.callcode{value:valuedata,gas:useGas}(abi.encodeWithSignature(func));
    // }

    function delegatecallFunc(address addr,uint256 useGas,string memory func) public payable returns (bool,bytes memory){
        // return addr.delegatecall.gas(useGas)(bytes4(keccak256(func)));
        return  addr.delegatecall{gas:useGas}(abi.encodeWithSignature(func));

    }

    function staticcallFunc(address addr,uint256 useGas,string memory func)public payable returns (bool){
        bool success;
        bytes4 sig = bytes4(keccak256(bytes(func)));

        assembly{
            let x := mload(0x40)   //Find empty storage location using "free memory pointer"
            mstore(x,sig) //Place signature at begining of empty storage

            success := staticcall(
            useGas, //5k gas
            addr, //To addr
            x,    // Inputs are at location x
            0x40, //Inputs size two padded, so 68 bytes
            x,    //Store output over input
            0x00) //Output is 32 bytes long        }

        }
        return success;
    }

    uint public test_count=1;

    function callTest(address addr,uint256 useGas,uint valuedata) public payable returns (bool){
        // return addr.call.value(valuedata).gas(useGas)(bytes4(keccak256("test()")));
        (bool successed,) =  addr.call{value:valuedata,gas:useGas}(abi.encodeWithSignature("test()"));
        return successed;
    }

    function newTest(bool isThrow) public returns(bool){
        A a = new A(isThrow);
        return true;
    }


    receive() external payable{

    }

    // function() payable{}

    function getType() public view returns(uint256) {
        return type1;
    }

    function addModType()public returns(bool){
        type1+=1;
        emit typeModMsg(type1);
    }

    function modType(uint256 intdata) public returns(uint256){
        type1 = intdata;
        emit typeModMsg(type1);

        return type1;
    }
    function throwTest() public payable returns(bool){
        RollBackContract contract1 = new RollBackContract();
        if(type1 == 1){
            contract1.assertThrow();
        }
        if(type1 == 2){
            contract1.requiteThrow();
        }
        if(type1 == 3){
            contract1.blanceNotEnough();
        }
        if(type1 == 4){
            contract1.invalOpCode();
        }
        if(type1 == 5){
            contract1.stop();
        }
        return true;
    }

}


contract RollBackContract{
    event time(uint256);

    constructor() public  payable {
        A a = new A(true);
    }
    function new_throw(uint256 idx) public payable{

        A a = new A(false);
        a.test(msg.sender,address(this));

        check_throw(idx);
    }

    function suicide_throw(uint256 idx) public returns(bool){
        A a = new A(true);
        a.test1(msg.sender);
        check_throw(idx);
        return true;
    }

    function check_throw(uint256 idx) internal{
        // time(now);
        if(idx%10 > 7){
            assert(false);
        }
        if(idx%10<2){
            require(false,"time is too smill");
        }
    }

    function assertThrow() public payable{
        emit time(100);
        assert(false);
    }

    function requiteThrow() public payable{
        emit time(100);
        require(false,"require throw test");

    }

    function blanceNotEnough() public payable returns(bool){
        return msg.sender.send(10);
    }

    function invalOpCode() public payable{

        assembly{ invalid() }

    }
    function stop() public payable{
        assembly{ stop() }
    }



}
contract A{
    event logKV(address key,address value);
    mapping(address => address) hashMap;
    bool isThrow;
    constructor(bool isThrow) public payable{
        logKV(msg.sender,msg.sender);
        isThrow = isThrow;
        require(isThrow,"time is too smill");

    }

    function test(address key,address value) public returns(address){
        hashMap[key] = value;
        logKV(key,value);
        return value;
    }

    function test1(address addr) public{
        selfdestruct(payable(addr));
    }



}
  1. deploy CrossCallTest
  2. invoke call_stack(5)
 Error: transaction failed [ See: https://links.ethers.org/v5-errors-CALL_EXCEPTION ] (transactionHash="0xe8f5331987afde47ebbb7cf9fd77d1fd8b758fed21b42c2bdac1524ae021444c", transaction={"hash":"0xe8f5331987afde47ebbb7cf9fd77d1fd8b758fed21b42c2bdac1524ae021444c","type":0,"accessList":null,"blockHash":"0xea252193bf3205ea5b7675a5bea342f359b5952845098e3ec6e4751d077ae1d2","blockNumber":411,"transactionIndex":0,"confirmations":1,"from":"0x0000000000000000000000000000000000000000","gasPrice":{"type":"BigNumber","hex":"0x01"},"gasLimit":{"type":"BigNumber","hex":"0x3c7d"},"to":null,"value":{"type":"BigNumber","hex":"0x00"},"nonce":0,"data":"0x","r":"0x0000000000000000000000000000000000000000000000000000000000000000","s":"0x0000000000000000000000000000000000000000000000000000000000000000","v":0,"creates":"0xBd770416a3345F91E4B34576cb804a576fa48EB1","chainId":0}, receipt={"to":null,"from":"0x0000000000000000000000000000000000000000","contractAddress":null,"transactionIndex":0,"gasUsed":{"type":"BigNumber","hex":"0x3c7d"},"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","blockHash":"0xea252193bf3205ea5b7675a5bea342f359b5952845098e3ec6e4751d077ae1d2","transactionHash":"0xe8f5331987afde47ebbb7cf9fd77d1fd8b758fed21b42c2bdac1524ae021444c","logs":[],"blockNumber":411,"confirmations":1,"cumulativeGasUsed":{"type":"BigNumber","hex":"0x3c7d"},"status":0,"type":0,"byzantium":true}, code=CALL_EXCEPTION, version=providers/5.6.1)
      at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:261:28)
      at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:273:20)
      at EthersProviderWrapper.<anonymous> (node_modules/@ethersproject/providers/src.ts/base-provider.ts:1523:24)
      at step (node_modules/@ethersproject/providers/lib/base-provider.js:48:23)
      at Object.next (node_modules/@ethersproject/providers/lib/base-provider.js:29:53)
      at fulfilled (node_modules/@ethersproject/providers/lib/base-provider.js:20:58)
      at processTicksAndRejections (node:internal/process/task_queues:96:5)

  1. invoke call_stack(100)
ProviderError: Cannot read property 'last_log' of undefined
      at HttpProvider.request (node_modules/hardhat/src/internal/core/providers/http.ts:74:19)
      at LocalAccountsProvider.request (node_modules/hardhat/src/internal/core/providers/accounts.ts:188:34)
      at processTicksAndRejections (node:internal/process/task_queues:96:5)
      at EthersProviderWrapper.send (node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)

expected
invoke success

actions
hardhat local net:https://github.com/gpBlockchain/gw-evm-opcode-test/runs/5733029647
godwoken net : https://github.com/gpBlockchain/gw-evm-opcode-test/runs/5733665185?check_suite_focus=true

Reproduce the problem

1.fork https://github.com/gpBlockchain/gw-evm-opcode-test.git
2. exec actions
image

Add Token to Wallet "can't find backend for script_hash H256

env: commit bbf09f464f4e07bfefd24fe0f54c5cf1c2d6eeb0 compatibility-changes

15:24:15 0|gw-web3  | rawL2Transaction: {
15:24:15 0|gw-web3  |   "from_id": "0x5",
15:24:15 0|gw-web3  |   "to_id": "0x151",
15:24:15 0|gw-web3  |   "nonce": "0x0",
15:24:15 0|gw-web3  |   "args": "0xffffff504f4c5900000000010000000001000000000000000000000000000000000000000000000000000000000000002400000070a082310000000000000000000000000c1efcca2bcb65a532274f3ef24c044ef4ab6d73"
15:24:15 0|gw-web3  | }
15:24:15 0|gw-web3  | Call gw rpc "gw_execute_raw_l2transaction" error: JSONRPCError: server error {"code":0,"message":"can't find backend for script_hash H256([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"}
15:24:15 0|gw-web3  | [error]  JSONRPC Server Error: [bound call] RpcError: Cannot read property 'last_log' of undefined RpcError: Cannot read property 'last_log' of undefined
15:24:15 0|gw-web3  |     at Eth.call (/godwoken-web3/packages/api-server/lib/methods/modules/eth.js:331:19)
15:24:15 0|gw-web3  |     at runMicrotasks (<anonymous>)
15:24:15 0|gw-web3  |     at processTicksAndRejections (internal/process/task_queues.js:95:5)
15:24:15 0|gw-web3  |     at async Eth.call (/godwoken-web3/packages/api-server/lib/methods/validator.js:28:20)
15:24:15 0|gw-web3  |     at async Server.methods.<computed> (/godwoken-web3/packages/api-server/lib/methods/index.js:49:36)

Steps to reproduce Using E2E—— Add Token to Wallet

v1(testnet): What is working web3-indexer config?

What is correct web3-indexer-config.toml for Godwoken Testnet v1?

I'm using (https://github.com/Kuzirashi/nervos-godwoken-testnet-node/blob/feat/testnet-v1/testnet/config/web3-indexer-config.toml):

compatible_chain_id=1984
l2_sudt_type_script_hash="0xe3e86ae888b3df3328842d11708b8ac30a7385c9f60d67f64efec65b7129e78e"
polyjuice_type_script_hash="0x8755bcc380e3494b6a2ca9657d16fd2254f7570731c4b87867ed8b747b1b3457"
rollup_type_hash="0x4940246f168f4106429dc641add3381a44b5eef61e7754142f594e986671a575"
eth_account_lock_hash="0x10571f91073fdc3cdef4ddad96b4204dd30d6355f3dda9a6d7fc0fa0326408da"
tron_account_lock_hash="0x7e19e979f77305cdd61e39258b747809297ece6ab4d579ee38de8bce85d52124"
godwoken_rpc_url="http://godwoken:8119"
pg_url="postgres://user:password@postgres:5432/lumos"
ws_rpc_url="ws://godwoken:8120"

But I get error:

$ docker-compose logs -f web3-indexer
Attaching to testnet_web3-indexer_1
web3-indexer_1                         | [2022-03-19T20:09:27Z ERROR gw_web3_indexer::ws_client] websocket disconnected, will retry after 3s: WebSocketError: I/O failure
web3-indexer_1                         | [2022-03-19T20:09:27Z INFO  gw_web3_indexer::runner] Sync block 0
web3-indexer_1                         | [2022-03-19T20:09:30Z ERROR gw_web3_indexer::ws_client] websocket disconnected, will retry after 3s: WebSocketError: I/O failure
web3-indexer_1                         | [2022-03-19T20:09:30Z INFO  gw_web3_indexer::runner] Sync block 1
web3-indexer_1                         | [2022-03-19T20:09:30Z INFO  gw_web3_indexer::runner] Sync block 2
web3-indexer_1                         | [2022-03-19T20:09:30Z INFO  gw_web3_indexer::runner] Sync block 3
web3-indexer_1                         | [2022-03-19T20:09:30Z INFO  gw_web3_indexer::runner] Sync block 4
web3-indexer_1                         | [2022-03-19T20:09:30Z INFO  gw_web3_indexer::runner] Sync block 5
web3-indexer_1                         | [2022-03-19T20:09:30Z INFO  gw_web3_indexer::runner] Sync block 6
web3-indexer_1                         | [2022-03-19T20:09:30Z INFO  gw_web3_indexer::runner] Sync block 7
web3-indexer_1                         | Error: Can't get script by script_hash: H256([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
testnet_web3-indexer_1 exited with code 1

I restarted the service, it synced more but the error comes back:

Error: Can't get script by script_hash: H256([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

Full configuration: Kuzirashi/nervos-godwoken-testnet-node#3

cc @RetricSu @Flouse @classicalliu

[V1] WaitForTransaction not working for 1 confirmation

When i make a chain of calls example

  1. Approve the ERC20 token i want to deposit
  2. Deposit the ERC20 token

each call return ContractTransaction. i can wait for the transaction to be mined by using method wait
wait method call under the hood WaitForTransaction from ethers.
wait method accept number of confirmations -> 1 confirmation is 1 block
Default implementation of ethers js provider 1 confirmation. So when we call wait without parameters it should wait 1 block
image

ethers call eth_getTransactionReceipt

image

I wonder if Godwoken return receipt when transaction is pending? (it should return null)

image

and confirmation is calculate as currentBlockNumber on BlockChain - blockNumber of receipt + 1

image

The problem is when i set it up as 1 confirmation It doesn't wait and MetaMask queue the calls which leads to crash of request number 2 because i have to approve my ERC20 token

I solved this problem by setting up confirmations to 2 but there is a drawback. Now when action is done inside MetaMask is still wait 1 block and after that i can run next method in my case deposit

on ENV blockchain 1 confirmation should wait until the transaction is mined and when MetaMask show that operation is completed we should go to next action

eth_getFilterChanges query filterId from eth_newFilter inconsistent with other chains

env:https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/

eth_getFilterChanges query filterId from eth_newFilter ,response logs only latest block num,and logs order not same as the hardhat
step:

  1. filterId = send(eth_newFilter,[])
  2. Keep sending transactions containing log to increase block height
  3. response = send(eth_getFilterChanges,filterId)
  4. check response

code

            let BeginBlkNum = await ethers.provider.getBlockNumber();
            const filterId = await ethers.provider.send("eth_newFilter", [{}]);
            await sendTxToAddBlockNum(ethers.provider,3)
            const logs = await ethers.provider.send("eth_getFilterChanges", [filterId]);
            let endBlkNum = await ethers.provider.getBlockNumber();

            console.log("logs:",logs)
            console.log("begin blkNum:",BeginBlkNum.toString())
            console.log("end blkNum:",endBlkNum.toString())

            for (let i = 0; i < logs.length; i++) {
                console.log("blockNumber:",BigNumber.from(logs[i].blockNumber.toString()).toString(),"blkIdx:",logs[i].transactionIndex,"logIndex:",logs[i].logIndex)
            }

async function sendTxToAddBlockNum(provider, blockNum) {

    let endNum = await provider.getBlockNumber() + blockNum;
    let currentNum = await provider.getBlockNumber();
    console.log("currentNum:",currentNum," end:",endNum)
    while (currentNum < endNum) {

        await sendRandomTx(provider)
        currentNum = await provider.getBlockNumber();
        console.log("currentNum:",currentNum," end:",endNum)
    }
    console.log("curren block num:",endNum)
}


async function sendRandomTx(provider){

    //send log tx
    try {
        await provider.send("eth_sendTransaction", [{
            "data": "0x60806040527f82d627ada1235e696c62b3c7b3472cc1c8d6960898ef528f60ca8000bcbbcbfd600160405162000036919062000055565b60405180910390a162000090565b6200004f816200007c565b82525050565b60006020820190506200006c600083018462000044565b92915050565b6000819050919050565b6000620000898262000072565b9050919050565b6159c580620000a06000396000f3fe60806040526004361061002d5760003560e01c80632bc6e683146100435780636c3bbd111461005a57610034565b3661003457005b34801561004057600080fd5b50005b34801561004f57600080fd5b50610058610083565b005b34801561006657600080fd5b50610081600480360381019061007c9190612dec565b612542565b005b7f2267aefac5af610051a1420ece2966621852e059c5a2a8aa31ce55bb0e3b555e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff806040516100d29190613aba565b60405180910390a17f2267aefac5af610051a1420ece2966621852e059c5a2a8aa31ce55bb0e3b555e607f60405161010a9190613aba565b60405180910390a17fe39db033ae4ccb3b51c6197f92c0a29dad887a71f7f26e032280ab6a4f4ea80060006040516101429190613e1a565b60405180910390a17fe39db033ae4ccb3b51c6197f92c0a29dad887a71f7f26e032280ab6a4f4ea80060ff60405161017a9190613e1a565b60405180910390a17f2267aefac5af610051a1420ece2966621852e059c5a2a8aa31ce55bb0e3b555e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff806040516101d19190613aba565b60405180910390a17f2267aefac5af610051a1420ece2966621852e059c5a2a8aa31ce55bb0e3b555e607f6040516102099190613aba565b60405180910390a17fe39db033ae4ccb3b51c6197f92c0a29dad887a71f7f26e032280ab6a4f4ea80060006040516102419190613e1a565b60405180910390a17fe39db033ae4ccb3b51c6197f92c0a29dad887a71f7f26e032280ab6a4f4ea80060ff6040516102799190613e1a565b60405180910390a17f070ce88a6ce1a8855527f7c015b38895a0167b595c76cb1e610ebb2fbcc1cd9f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80006040516102d09190613883565b60405180910390a17f070ce88a6ce1a8855527f7c015b38895a0167b595c76cb1e610ebb2fbcc1cd9f617fff6040516103099190613883565b60405180910390a17ff752be3804265f4a34e93a946393e264e01f7632e19b70168e18c2cc82baf9a960006040516103419190613be3565b60405180910390a17ff752be3804265f4a34e93a946393e264e01f7632e19b70168e18c2cc82baf9a961ffff60405161037a9190613be3565b60405180910390a17f857ad569e1fd593b615806d0115eca10227a408427caf36e4003046f07f6b0617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000006040516103d191906139ac565b60405180910390a17f857ad569e1fd593b615806d0115eca10227a408427caf36e4003046f07f6b061627fffff60405161040b91906139ac565b60405180910390a17f8a700458ab3ad06c3f0bd20407230093d0a0fe3c749a6f188803e31928065e8660006040516104439190613d0c565b60405180910390a17f8a700458ab3ad06c3f0bd20407230093d0a0fe3c749a6f188803e31928065e8662ffffff60405161047d9190613d0c565b60405180910390a17f092b29bb19d8b8e8c13a43671b38c553754ef16c728eef7b7d06486c8a13383c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000006040516104d491906139e2565b60405180910390a17f092b29bb19d8b8e8c13a43671b38c553754ef16c728eef7b7d06486c8a13383c637fffffff60405161050f91906139e2565b60405180910390a17fb8175cbe300af7df3e29543198a1b41bcba6daa22b99e76a21ca62bfc231260f60006040516105479190613d42565b60405180910390a17fb8175cbe300af7df3e29543198a1b41bcba6daa22b99e76a21ca62bfc231260f63ffffffff6040516105829190613d42565b60405180910390a17fe12c1db4f04103b275cb84a2ba35a5ce00745ef1ccb9aeda0bb66955c2e7b3fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000006040516105d991906139fd565b60405180910390a17fe12c1db4f04103b275cb84a2ba35a5ce00745ef1ccb9aeda0bb66955c2e7b3fe647fffffffff60405161061591906139fd565b60405180910390a17f7ddc8d28df6e28fc9ffd391871093b92362b636d7d3fbabbded431ab295dc727600060405161064d9190613d5d565b60405180910390a17f7ddc8d28df6e28fc9ffd391871093b92362b636d7d3fbabbded431ab295dc72764ffffffffff6040516106899190613d5d565b60405180910390a17fcedf44c599ccdb61476915830196faf3738191ddaa1136a56731b6804836deb07fffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000006040516106e09190613a18565b60405180910390a17fcedf44c599ccdb61476915830196faf3738191ddaa1136a56731b6804836deb0657fffffffffff60405161071d9190613a18565b60405180910390a17f53e387047290039a1cd8b0b9407cd083c86c632acd909c4921a42f3f9763bf6560006040516107559190613d78565b60405180910390a17f53e387047290039a1cd8b0b9407cd083c86c632acd909c4921a42f3f9763bf6565ffffffffffff6040516107929190613d78565b60405180910390a17f2e59e9225b9c8459a106dd525a63cec81ed231a3751bc112b633c9624c27e5967fffffffffffffffffffffffffffffffffffffffffffffffffff800000000000006040516107e99190613a33565b60405180910390a17f2e59e9225b9c8459a106dd525a63cec81ed231a3751bc112b633c9624c27e596667fffffffffffff6040516108279190613a33565b60405180910390a17fc6837b046cd6ab97e401e33d67b234ae393d10d8d9b2b07df2a1c8b77b7d92b9600060405161085f9190613d93565b60405180910390a17fc6837b046cd6ab97e401e33d67b234ae393d10d8d9b2b07df2a1c8b77b7d92b966ffffffffffffff60405161089d9190613d93565b60405180910390a17fc8b24ebcfdbf8221a00e3a7c0d9bcae0ca1cdca4d3abe02aea2f691eada891ee7fffffffffffffffffffffffffffffffffffffffffffffffff80000000000000006040516108f49190613a4e565b60405180910390a17fc8b24ebcfdbf8221a00e3a7c0d9bcae0ca1cdca4d3abe02aea2f691eada891ee677fffffffffffffff6040516109339190613a4e565b60405180910390a17fa6885ec77ae25f433724e0862913791b377dc1a5d0b54c479d5d0bd2ddee5147600060405161096b9190613dae565b60405180910390a17fa6885ec77ae25f433724e0862913791b377dc1a5d0b54c479d5d0bd2ddee514767ffffffffffffffff6040516109aa9190613dae565b60405180910390a17f1541e9e23da3e77c13b7a8b5a63504034aed992b5f8e1b709ddbab67ca98b7007fffffffffffffffffffffffffffffffffffffffffffffff800000000000000000604051610a019190613a69565b60405180910390a17f1541e9e23da3e77c13b7a8b5a63504034aed992b5f8e1b709ddbab67ca98b700687fffffffffffffffff604051610a419190613a69565b60405180910390a17f38acf574c9a09195276114f803e1b14aa5fa35fe5ba5608e1541e67cb34ca2916000604051610a799190613dc9565b60405180910390a17f38acf574c9a09195276114f803e1b14aa5fa35fe5ba5608e1541e67cb34ca29168ffffffffffffffffff604051610ab99190613dc9565b60405180910390a17fc0a8b99072e6786b1aae4a7707ee08f52ba70589ec4ff38bd2bc25228b3b47b47fffffffffffffffffffffffffffffffffffffffffffff80000000000000000000604051610b109190613a84565b60405180910390a17fc0a8b99072e6786b1aae4a7707ee08f52ba70589ec4ff38bd2bc25228b3b47b4697fffffffffffffffffff604051610b519190613a84565b60405180910390a17f54a033948e529800065b9e031719d2d8dfbd1ca5be2a416bfced0a77c1c68b7b6000604051610b899190613de4565b60405180910390a17f54a033948e529800065b9e031719d2d8dfbd1ca5be2a416bfced0a77c1c68b7b69ffffffffffffffffffff604051610bca9190613de4565b60405180910390a17faca9be1db7ecae1c9221213817a11119347b1fcd5b7054b0a839e180e96426fb7fffffffffffffffffffffffffffffffffffffffffff8000000000000000000000604051610c219190613a9f565b60405180910390a17faca9be1db7ecae1c9221213817a11119347b1fcd5b7054b0a839e180e96426fb6a7fffffffffffffffffffff604051610c639190613a9f565b60405180910390a17f0d9cd5f49d03cf1d5d963d27581418ab678c801958745fbc5c24b7e387b1b0346000604051610c9b9190613dff565b60405180910390a17f0d9cd5f49d03cf1d5d963d27581418ab678c801958745fbc5c24b7e387b1b0346affffffffffffffffffffff604051610cdd9190613dff565b60405180910390a17f43d5b38b495e25d12c3ec118a731113a2fe6c4be36ad771430a17414f5bb050d7fffffffffffffffffffffffffffffffffffffffff800000000000000000000000604051610d349190613ad5565b60405180910390a17f43d5b38b495e25d12c3ec118a731113a2fe6c4be36ad771430a17414f5bb050d6b7fffffffffffffffffffffff604051610d779190613ad5565b60405180910390a17fe0d2d5db80ea5781647a555fec42c258c02ce29873b57a5cd01d52c6ef0ce9096000604051610daf9190613e35565b60405180910390a17fe0d2d5db80ea5781647a555fec42c258c02ce29873b57a5cd01d52c6ef0ce9096bffffffffffffffffffffffff604051610df29190613e35565b60405180910390a17ff034428006dbcc87f3a1d3b9d3e273b360e85780be5d220f02119447812b6eab7fffffffffffffffffffffffffffffffffffffff80000000000000000000000000604051610e499190613790565b60405180910390a17ff034428006dbcc87f3a1d3b9d3e273b360e85780be5d220f02119447812b6eab6c7fffffffffffffffffffffffff604051610e8d9190613790565b60405180910390a17fa19592a973e151339eb1a757809fcb0ea22de35ee8bd3605153758b57781dbf36000604051610ec59190613af0565b60405180910390a17fa19592a973e151339eb1a757809fcb0ea22de35ee8bd3605153758b57781dbf36cffffffffffffffffffffffffff604051610f099190613af0565b60405180910390a17f5d5c555f8950a05c47ba8e4092f135b6c6e3f73513485f83a4d8864aab6d9d407fffffffffffffffffffffffffffffffffffff8000000000000000000000000000604051610f6091906137ab565b60405180910390a17f5d5c555f8950a05c47ba8e4092f135b6c6e3f73513485f83a4d8864aab6d9d406d7fffffffffffffffffffffffffff604051610fa591906137ab565b60405180910390a17f0dd8250699d7092f1d9729f4e382ccc5b667b95f7cb926b8a0b0c67f624414f06000604051610fdd9190613b0b565b60405180910390a17f0dd8250699d7092f1d9729f4e382ccc5b667b95f7cb926b8a0b0c67f624414f06dffffffffffffffffffffffffffff6040516110229190613b0b565b60405180910390a17f4638caa21c44a8c6e236bc52dacb4694bb26e7edb8c699bf2f4997337c3d28297fffffffffffffffffffffffffffffffffff80000000000000000000000000000060405161107991906137c6565b60405180910390a17f4638caa21c44a8c6e236bc52dacb4694bb26e7edb8c699bf2f4997337c3d28296e7fffffffffffffffffffffffffffff6040516110bf91906137c6565b60405180910390a17f39e8b45dcba3fd0dd610cd4ecdaee851adda527e0c3a860ef6e3bf464d27cb3560006040516110f79190613b26565b60405180910390a17f39e8b45dcba3fd0dd610cd4ecdaee851adda527e0c3a860ef6e3bf464d27cb356effffffffffffffffffffffffffffff60405161113d9190613b26565b60405180910390a17f83c7fd9fdbaafbb19c0a635aba684084f43e4e981deb72d4efc5d67024a2ecf07fffffffffffffffffffffffffffffffff8000000000000000000000000000000060405161119491906137e1565b60405180910390a17f83c7fd9fdbaafbb19c0a635aba684084f43e4e981deb72d4efc5d67024a2ecf06f7fffffffffffffffffffffffffffffff6040516111db91906137e1565b60405180910390a17f9494f80c3bd288ceda4ba59d5420de2915ac7033420e39fa489374d10a5b5c5160006040516112139190613b41565b60405180910390a17f9494f80c3bd288ceda4ba59d5420de2915ac7033420e39fa489374d10a5b5c516fffffffffffffffffffffffffffffffff60405161125a9190613b41565b60405180910390a17f3722459e9340c4d3c2b030cc576da7bc6c616b10312d5943911490a718c563837fffffffffffffffffffffffffffffff80000000000000000000000000000000006040516112b191906137fc565b60405180910390a17f3722459e9340c4d3c2b030cc576da7bc6c616b10312d5943911490a718c56383707fffffffffffffffffffffffffffffffff6040516112f991906137fc565b60405180910390a17fd3a66a9ce40975b3cbf04788f78e1d94f391609664da1027a4159c443a939ec360006040516113319190613b5c565b60405180910390a17fd3a66a9ce40975b3cbf04788f78e1d94f391609664da1027a4159c443a939ec370ffffffffffffffffffffffffffffffffff6040516113799190613b5c565b60405180910390a17f8c3a0ce2f84759544fb0b728ae0a4fcb8a7a3788754151db7471fabe89507cae7fffffffffffffffffffffffffffff8000000000000000000000000000000000006040516113d09190613817565b60405180910390a17f8c3a0ce2f84759544fb0b728ae0a4fcb8a7a3788754151db7471fabe89507cae717fffffffffffffffffffffffffffffffffff6040516114199190613817565b60405180910390a17feeaafd5eee4ac69d67d3cf1f97f38be53b693d38a867fc9b3507ed57a2b39aa460006040516114519190613b77565b60405180910390a17feeaafd5eee4ac69d67d3cf1f97f38be53b693d38a867fc9b3507ed57a2b39aa471ffffffffffffffffffffffffffffffffffff60405161149a9190613b77565b60405180910390a17f78a68a479cb591a6b4029ea35c8f54e03b0a2b42397f34229fe0326e60f025007fffffffffffffffffffffffffff800000000000000000000000000000000000006040516114f19190613832565b60405180910390a17f78a68a479cb591a6b4029ea35c8f54e03b0a2b42397f34229fe0326e60f02500727fffffffffffffffffffffffffffffffffffff60405161153b9190613832565b60405180910390a17f1908734f8f577e175ceeb0378b4ab0a85631146c37f6d056386f07baa230e6bd60006040516115739190613b92565b60405180910390a17f1908734f8f577e175ceeb0378b4ab0a85631146c37f6d056386f07baa230e6bd72ffffffffffffffffffffffffffffffffffffff6040516115bd9190613b92565b60405180910390a17f7efaccc30071c33b5992bd2db0c76cb93ab0419a0d1acde98ae419eed4bd99007fffffffffffffffffffffffff8000000000000000000000000000000000000000604051611614919061384d565b60405180910390a17f7efaccc30071c33b5992bd2db0c76cb93ab0419a0d1acde98ae419eed4bd9900737fffffffffffffffffffffffffffffffffffffff60405161165f919061384d565b60405180910390a17f96d2bf576cbdfcf98903aaeedb3924b02c221abf7fd079a7ba1a4b48e3a963fc60006040516116979190613bad565b60405180910390a17f96d2bf576cbdfcf98903aaeedb3924b02c221abf7fd079a7ba1a4b48e3a963fc73ffffffffffffffffffffffffffffffffffffffff6040516116e29190613bad565b60405180910390a17fab7d8f86967868baef531383428e0aed4f2456e1470d8ab6c45d0b12aa95476d7fffffffffffffffffffffff8000000000000000000000000000000000000000006040516117399190613868565b60405180910390a17fab7d8f86967868baef531383428e0aed4f2456e1470d8ab6c45d0b12aa95476d747fffffffffffffffffffffffffffffffffffffffff6040516117859190613868565b60405180910390a17f3c22029c3be883bbd51ee824e752259e7da3d02ed46360756cf05e4df84e734160006040516117bd9190613bc8565b60405180910390a17f3c22029c3be883bbd51ee824e752259e7da3d02ed46360756cf05e4df84e734174ffffffffffffffffffffffffffffffffffffffffff6040516118099190613bc8565b60405180910390a17fd527924b6859052f692c5471150d2054b71c332683e79f3ad379af47f28b0cd57fffffffffffffffffffff80000000000000000000000000000000000000000000604051611860919061389e565b60405180910390a17fd527924b6859052f692c5471150d2054b71c332683e79f3ad379af47f28b0cd5757fffffffffffffffffffffffffffffffffffffffffff6040516118ad919061389e565b60405180910390a17f8136618d5884ad827ed0b57f2db546dc09c92f5d5b731fc0c55238ee5a02f5c760006040516118e59190613bfe565b60405180910390a17f8136618d5884ad827ed0b57f2db546dc09c92f5d5b731fc0c55238ee5a02f5c775ffffffffffffffffffffffffffffffffffffffffffff6040516119329190613bfe565b60405180910390a17f0cb49d26a0e9827234760769785d8d813ddbfa26932e2575fe6ffd3f8a69828b7fffffffffffffffffff800000000000000000000000000000000000000000000060405161198991906138b9565b60405180910390a17f0cb49d26a0e9827234760769785d8d813ddbfa26932e2575fe6ffd3f8a69828b767fffffffffffffffffffffffffffffffffffffffffffff6040516119d791906138b9565b60405180910390a17ff300cb178334be46c9ceaedd160696532282928ad127a9d7dfc39fd7093db2c46000604051611a0f9190613c19565b60405180910390a17ff300cb178334be46c9ceaedd160696532282928ad127a9d7dfc39fd7093db2c476ffffffffffffffffffffffffffffffffffffffffffffff604051611a5d9190613c19565b60405180910390a17f25fe83151e1689cec4269c4962accd513fb5475738c4565770c03e4157b9cf3d7fffffffffffffffff800000000000000000000000000000000000000000000000604051611ab491906138d4565b60405180910390a17f25fe83151e1689cec4269c4962accd513fb5475738c4565770c03e4157b9cf3d777fffffffffffffffffffffffffffffffffffffffffffffff604051611b0391906138d4565b60405180910390a17f64a81847bcd1d270e1668e475a62d56b8a8cbf533826316e184081107595e35c6000604051611b3b9190613c34565b60405180910390a17f64a81847bcd1d270e1668e475a62d56b8a8cbf533826316e184081107595e35c77ffffffffffffffffffffffffffffffffffffffffffffffff604051611b8a9190613c34565b60405180910390a17fc4bbd7e624e7731461c8d0dc29cbaabad8d9616c12fc76f3c77d72bd6afece217fffffffffffffff80000000000000000000000000000000000000000000000000604051611be191906138ef565b60405180910390a17fc4bbd7e624e7731461c8d0dc29cbaabad8d9616c12fc76f3c77d72bd6afece21787fffffffffffffffffffffffffffffffffffffffffffffffff604051611c3191906138ef565b60405180910390a17ffa98b1f9e97901ad85689f57bc12d448e99382c3b5299aa91526e357cd98ca066000604051611c699190613c4f565b60405180910390a17ffa98b1f9e97901ad85689f57bc12d448e99382c3b5299aa91526e357cd98ca0678ffffffffffffffffffffffffffffffffffffffffffffffffff604051611cb99190613c4f565b60405180910390a17fc29d0ffd468220a32a645c4a5f2295d5ab3328073d4ab09d206cc2154f963f1d7fffffffffffff8000000000000000000000000000000000000000000000000000604051611d10919061390a565b60405180910390a17fc29d0ffd468220a32a645c4a5f2295d5ab3328073d4ab09d206cc2154f963f1d797fffffffffffffffffffffffffffffffffffffffffffffffffff604051611d61919061390a565b60405180910390a17fab651f9501ae2880e18f1100a48d882e23cce986d86f4495b32ee4f396f258086000604051611d999190613c6a565b60405180910390a17fab651f9501ae2880e18f1100a48d882e23cce986d86f4495b32ee4f396f2580879ffffffffffffffffffffffffffffffffffffffffffffffffffff604051611dea9190613c6a565b60405180910390a17fea250c3374edfe6e160ab4c5137553730c08a1317da252f2827463a6dce7ef077fffffffffff800000000000000000000000000000000000000000000000000000604051611e419190613925565b60405180910390a17fea250c3374edfe6e160ab4c5137553730c08a1317da252f2827463a6dce7ef077a7fffffffffffffffffffffffffffffffffffffffffffffffffffff604051611e939190613925565b60405180910390a17fe7086bd7119dfb24016e6a6cde729f9bd295d7bfa25ca2483a3e9793bc1c19ce6000604051611ecb9190613c85565b60405180910390a17fe7086bd7119dfb24016e6a6cde729f9bd295d7bfa25ca2483a3e9793bc1c19ce7affffffffffffffffffffffffffffffffffffffffffffffffffffff604051611f1d9190613c85565b60405180910390a17f44bd67aa0b0e1492abee89902956d05c912cb59a1e2538781ffcda7e13365b447fffffffff80000000000000000000000000000000000000000000000000000000604051611f749190613940565b60405180910390a17f44bd67aa0b0e1492abee89902956d05c912cb59a1e2538781ffcda7e13365b447b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff604051611fc79190613940565b60405180910390a17f067f65f2ac46ad2f63fbc39ba62226d4aa64838b5b4f64777180f9f54db563c66000604051611fff9190613ca0565b60405180910390a17f067f65f2ac46ad2f63fbc39ba62226d4aa64838b5b4f64777180f9f54db563c67bffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516120529190613ca0565b60405180910390a17f0321a1ee57fc1eced5318abf7d2b3ec0708ff5b2d46048e98aa4542b8c1d7bb77fffffff80000000000000000000000000000000000000000000000000000000006040516120a9919061395b565b60405180910390a17f0321a1ee57fc1eced5318abf7d2b3ec0708ff5b2d46048e98aa4542b8c1d7bb77c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516120fd919061395b565b60405180910390a17fb2b4b2cd73ef08d7fcb9debddab85bb07d9c7bf3b74ca60489a441cfa240a1aa60006040516121359190613cbb565b60405180910390a17fb2b4b2cd73ef08d7fcb9debddab85bb07d9c7bf3b74ca60489a441cfa240a1aa7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516121899190613cbb565b60405180910390a17f9d7d79cb4ad2bff4c89235f60373f0b7cb84381cacb3a53ce497bacdd4693e8b7fffff8000000000000000000000000000000000000000000000000000000000006040516121e09190613976565b60405180910390a17f9d7d79cb4ad2bff4c89235f60373f0b7cb84381cacb3a53ce497bacdd4693e8b7d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516122359190613976565b60405180910390a17fcb91913339b903c0831f14bfb95a32a56396044eda28dec586463c10c66ace04600060405161226d9190613cd6565b60405180910390a17fcb91913339b903c0831f14bfb95a32a56396044eda28dec586463c10c66ace047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516122c29190613cd6565b60405180910390a17fe8f0143859114e86c9d0e7f81304bdb6f8fffce52e759d7fff484fb8be09052c7fff800000000000000000000000000000000000000000000000000000000000006040516123199190613991565b60405180910390a17fe8f0143859114e86c9d0e7f81304bdb6f8fffce52e759d7fff484fb8be09052c7e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60405161236f9190613991565b60405180910390a17e65b96199e9d64a5e0efeaaedce8a55d50b3fa144722996f9896e810758466460006040516123a69190613cf1565b60405180910390a17e65b96199e9d64a5e0efeaaedce8a55d50b3fa144722996f9896e81075846647effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516123fb9190613cf1565b60405180910390a17f7a85d688e553401d74214c12b1f0616553b1af01fb5c50ca50c757d23abde76f7f800000000000000000000000000000000000000000000000000000000000000060405161245291906139c7565b60405180910390a17f7a85d688e553401d74214c12b1f0616553b1af01fb5c50ca50c757d23abde76f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516124a991906139c7565b60405180910390a17fe4fcd3f982103a3661e399095fce5f74fc3211aaa51a7fa2564735c2334d8ba260006040516124e19190613d27565b60405180910390a17fe4fcd3f982103a3661e399095fce5f74fc3211aaa51a7fa2564735c2334d8ba27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040516125389190613d27565b60405180910390a1565b7faaead702cddd44ca1d804a0cec9ea870ab4035319d20cda8b5e30195af738ab48161256d9061493b565b60405161257a919061351c565b60405180910390a17f6c0ee3c4349a63e4f0b57d90cb019f12ac018c67734e946ab5cf176eef0848be816125ad90614da8565b6040516125ba9190613645565b60405180910390a17febf3cd6c5eed06292abf11861c0b4b0b0921f3be0e4316ab43ca8c9fe8f3a4e6816125ed90615215565b6040516125fa91906136b1565b60405180910390a17f705bfeb7ebe2870a9f06c71774b0677ab28318e4d7e4b097fab05a559170ead48161262d906153b1565b60405161263a91906136cc565b60405180910390a17f96d2b9918c0c377cf62b201d4bc4a3edcb63c87acc5f50b48f3e782a7589154e8161266d90615418565b60405161267a91906136e7565b60405180910390a17f60bd17cf1e1a61ac63df94312037d428004fdb87113b73e0077a938e206f43f5816126ad9061547f565b6040516126ba9190613702565b60405180910390a17f4f829a5fa4485af253c2daf60fb988268461fd4806c788f0e9174928cfe6b940816126ed906154e6565b6040516126fa919061371d565b60405180910390a17f14829a98ecb68612c2581e51138306a35d47295af3a343682a2c1a2f31d265918161272d9061554d565b60405161273a9190613738565b60405180910390a17fc88148e8d790e3e8ea74714c50601a2540aeadd5857a542a4eb933f6815f20d38161276d906155b4565b60405161277a9190613753565b60405180910390a17f121309f4285edd3c5b449ab3ab64e710222fe06183f1accacdbdec809d109055816127ad906149a2565b6040516127ba919061340e565b60405180910390a17f4cf363db3d453c5944061b63602cb4faf7b1985beedb6404f7f4ecc595cc6434816127ed90614a09565b6040516127fa9190613429565b60405180910390a17fef43ef3b51139cc1018a705e0068ed61802ad08fa8aae2bbd7fb7693207945948161282d90614a70565b60405161283a9190613444565b60405180910390a17f26032e823340e8f514ab508e96a28c073f3275d6bc73f36acca89d8f3a2f76b38161286d90614ad7565b60405161287a919061345f565b60405180910390a17f4043c44378c5e165a7a15fd034b3fe65c049c1644bba8b9602b99ecf87c74dac816128ad90614b3e565b6040516128ba919061347a565b60405180910390a17ff0e47a87cb9054462cef1cf528ebe900f71fd28b6675335243e7cb3dcd039d45816128ed90614ba5565b6040516128fa9190613495565b60405180910390a17f857154572a2177f064626e32f3d4a9881b08d900713ca23252726e5b89a9798d8161292d90614c0c565b60405161293a91906134b0565b60405180910390a17f8a11c9c8c03711e8a2c5d608b8d3dfa354b6d59cc9051feaa20cd91c4012bb558161296d90614c73565b60405161297a91906134cb565b60405180910390a17f4dd05669239b3424dc756c026bc09bece902a7ea6e935ee89bf610f76a0eb524816129ad90614cda565b6040516129ba91906134e6565b60405180910390a17f7c22d9ee358645e97d6276f52344ee4b242f83b487637f4cbe3f388df0e66d49816129ed90614d41565b6040516129fa9190613501565b60405180910390a17f3043161ce410fc234d2223c6573ded2aff58b9ef0f56091a22ede4db2e3c3f9381612a2d90614e0f565b604051612a3a9190613537565b60405180910390a17f050f35d370f8e57156397749a0b1548ba9731f669b22dec5fc2380362fb719ec81612a6d90614e76565b604051612a7a9190613552565b60405180910390a17f9af9a4ecab0ef4d99f3e152cecaaad1d39c8c966b4eb19c972e885717e20bbbb81612aad90614edd565b604051612aba919061356d565b60405180910390a17f56c50cb367acaded29acac1360aca317f3cf42564d325d3db565692c381f0f1181612aed90614f44565b604051612afa9190613588565b60405180910390a17f2991b83f6c9ae4df4119d0e4a7619f497d245d6c90d4b8ccd9a91ca242fd81a081612b2d90614fab565b604051612b3a91906135a3565b60405180910390a17f8d7827e5807ca8e7057274e877ccd878345813c5e38f86762ef963635182c98f81612b6d90615012565b604051612b7a91906135be565b60405180910390a17f4547dc0708632cbee3101392926d0e331b8e06a42ccfe7229f845d71a3e927bf81612bad90615079565b604051612bba91906135d9565b60405180910390a17fec8a7c0ac418c7d30cda3b44e091c2d2f6915344d6321d9eff166db9f60bcf1b81612bed906150e0565b604051612bfa91906135f4565b60405180910390a17f4a48834577f576fd1016cf65be5d1a3e316a8cc9d1db1821b7c225056729c9d581612c2d90615147565b604051612c3a919061360f565b60405180910390a17f0353d3234760658b04facb4296df6fc3fc968f60972807abd801269724e3f8dc81612c6d906151ae565b604051612c7a919061362a565b60405180910390a17fcf54bebce27f1b93470fbe2f40dc939bc3d77af699c84b133bfc1df8671d9f6481612cad9061527c565b604051612cba9190613660565b60405180910390a17f200ff370b668f478081863ff355f75204713d29ce42840aa655871d22421407a81612ced906152e3565b604051612cfa919061367b565b60405180910390a17f60cbabd0adedeb7f4dc41024a3bef125a9991d9ffd0f3b991ee3d1e47c4f821081612d2d9061534a565b604051612d3a9190613696565b60405180910390a17f3d122886b19e2e552decf3cefc4e3d84c610a48693b6c86548984c27db8aa04781604051612d71919061376e565b60405180910390a150565b6000612d8f612d8a84613e75565b613e50565b905082815260208101848484011115612dab57612daa615962565b5b612db684828561561b565b509392505050565b600082601f830112612dd357612dd261595d565b5b8135612de3848260208601612d7c565b91505092915050565b600060208284031215612e0257612e0161596c565b5b600082013567ffffffffffffffff811115612e2057612e1f615967565b5b612e2c84828501612dbe565b91505092915050565b612e3e81613efe565b82525050565b612e4d81613f2a565b82525050565b612e5c81613f56565b82525050565b612e6b81613f82565b82525050565b612e7a81613fae565b82525050565b612e8981613fda565b82525050565b612e9881614006565b82525050565b612ea781614032565b82525050565b612eb68161405e565b82525050565b612ec58161408a565b82525050565b612ed481613ed2565b82525050565b612ee3816140e2565b82525050565b612ef28161410e565b82525050565b612f018161413a565b82525050565b612f1081614166565b82525050565b612f1f81614192565b82525050565b612f2e816141be565b82525050565b612f3d816141ea565b82525050565b612f4c81614216565b82525050565b612f5b81614242565b82525050565b612f6a8161426e565b82525050565b612f79816140b6565b82525050565b612f88816142c6565b82525050565b612f97816142f2565b82525050565b612fa68161431e565b82525050565b612fb58161429a565b82525050565b612fc481614328565b82525050565b612fd381614354565b82525050565b612fe281614380565b82525050565b612ff1816143ac565b82525050565b613000816143d8565b82525050565b61300f81614404565b82525050565b600061302082613eb6565b61302a8185613ec1565b935061303a81856020860161562a565b61304381615971565b840191505092915050565b61305781614430565b82525050565b6130668161443d565b82525050565b6130758161444a565b82525050565b61308481614457565b82525050565b61309381614464565b82525050565b6130a281614471565b82525050565b6130b18161447e565b82525050565b6130c081614498565b82525050565b6130cf816144a5565b82525050565b6130de8161448b565b82525050565b6130ed816144b2565b82525050565b6130fc816144bf565b82525050565b61310b816144cc565b82525050565b61311a816144d9565b82525050565b613129816144e6565b82525050565b613138816144f3565b82525050565b61314781614500565b82525050565b6131568161450d565b82525050565b61316581614527565b82525050565b61317481614534565b82525050565b6131838161451a565b82525050565b61319281614541565b82525050565b6131a18161454b565b82525050565b6131b081614558565b82525050565b6131bf81614565565b82525050565b6131ce81614572565b82525050565b6131dd8161457f565b82525050565b6131ec8161458c565b82525050565b6131fb816145a6565b82525050565b61320a816145b3565b82525050565b61321981614599565b82525050565b613228816145c0565b82525050565b613237816145cd565b82525050565b613246816145e6565b82525050565b61325581614600565b82525050565b6132648161461b565b82525050565b61327381614637565b82525050565b61328281614654565b82525050565b61329181614672565b82525050565b6132a08161469f565b82525050565b6132af816146bf565b82525050565b6132be81614691565b82525050565b6132cd816146e0565b82525050565b6132dc81614702565b82525050565b6132eb81614725565b82525050565b6132fa81614749565b82525050565b6133098161476e565b82525050565b61331881614794565b82525050565b613327816147bb565b82525050565b613336816147e3565b82525050565b6133458161481b565b82525050565b61335481614845565b82525050565b6133638161480c565b82525050565b61337281614870565b82525050565b6133818161487a565b82525050565b6133908161488a565b82525050565b61339f8161489b565b82525050565b6133ae816148ad565b82525050565b6133bd816148c0565b82525050565b6133cc816148d4565b82525050565b6133db816148f6565b82525050565b6133ea8161490c565b82525050565b6133f9816148e9565b82525050565b61340881614923565b82525050565b60006020820190506134236000830184612e35565b92915050565b600060208201905061343e6000830184612e44565b92915050565b60006020820190506134596000830184612e53565b92915050565b60006020820190506134746000830184612e62565b92915050565b600060208201905061348f6000830184612e71565b92915050565b60006020820190506134aa6000830184612e80565b92915050565b60006020820190506134c56000830184612e8f565b92915050565b60006020820190506134e06000830184612e9e565b92915050565b60006020820190506134fb6000830184612ead565b92915050565b60006020820190506135166000830184612ebc565b92915050565b60006020820190506135316000830184612ecb565b92915050565b600060208201905061354c6000830184612eda565b92915050565b60006020820190506135676000830184612ee9565b92915050565b60006020820190506135826000830184612ef8565b92915050565b600060208201905061359d6000830184612f07565b92915050565b60006020820190506135b86000830184612f16565b92915050565b60006020820190506135d36000830184612f25565b92915050565b60006020820190506135ee6000830184612f34565b92915050565b60006020820190506136096000830184612f43565b92915050565b60006020820190506136246000830184612f52565b92915050565b600060208201905061363f6000830184612f61565b92915050565b600060208201905061365a6000830184612f70565b92915050565b60006020820190506136756000830184612f7f565b92915050565b60006020820190506136906000830184612f8e565b92915050565b60006020820190506136ab6000830184612f9d565b92915050565b60006020820190506136c66000830184612fac565b92915050565b60006020820190506136e16000830184612fbb565b92915050565b60006020820190506136fc6000830184612fca565b92915050565b60006020820190506137176000830184612fd9565b92915050565b60006020820190506137326000830184612fe8565b92915050565b600060208201905061374d6000830184612ff7565b92915050565b60006020820190506137686000830184613006565b92915050565b600060208201905081810360008301526137888184613015565b905092915050565b60006020820190506137a5600083018461304e565b92915050565b60006020820190506137c0600083018461305d565b92915050565b60006020820190506137db600083018461306c565b92915050565b60006020820190506137f6600083018461307b565b92915050565b6000602082019050613811600083018461308a565b92915050565b600060208201905061382c6000830184613099565b92915050565b600060208201905061384760008301846130a8565b92915050565b600060208201905061386260008301846130b7565b92915050565b600060208201905061387d60008301846130c6565b92915050565b600060208201905061389860008301846130d5565b92915050565b60006020820190506138b360008301846130e4565b92915050565b60006020820190506138ce60008301846130f3565b92915050565b60006020820190506138e96000830184613102565b92915050565b60006020820190506139046000830184613111565b92915050565b600060208201905061391f6000830184613120565b92915050565b600060208201905061393a600083018461312f565b92915050565b6000602082019050613955600083018461313e565b92915050565b6000602082019050613970600083018461314d565b92915050565b600060208201905061398b600083018461315c565b92915050565b60006020820190506139a6600083018461316b565b92915050565b60006020820190506139c1600083018461317a565b92915050565b60006020820190506139dc6000830184613189565b92915050565b60006020820190506139f76000830184613198565b92915050565b6000602082019050613a1260008301846131a7565b92915050565b6000602082019050613a2d60008301846131b6565b92915050565b6000602082019050613a4860008301846131c5565b92915050565b6000602082019050613a6360008301846131d4565b92915050565b6000602082019050613a7e60008301846131e3565b92915050565b6000602082019050613a9960008301846131f2565b92915050565b6000602082019050613ab46000830184613201565b92915050565b6000602082019050613acf6000830184613210565b92915050565b6000602082019050613aea600083018461321f565b92915050565b6000602082019050613b05600083018461322e565b92915050565b6000602082019050613b20600083018461323d565b92915050565b6000602082019050613b3b600083018461324c565b92915050565b6000602082019050613b56600083018461325b565b92915050565b6000602082019050613b71600083018461326a565b92915050565b6000602082019050613b8c6000830184613279565b92915050565b6000602082019050613ba76000830184613288565b92915050565b6000602082019050613bc26000830184613297565b92915050565b6000602082019050613bdd60008301846132a6565b92915050565b6000602082019050613bf860008301846132b5565b92915050565b6000602082019050613c1360008301846132c4565b92915050565b6000602082019050613c2e60008301846132d3565b92915050565b6000602082019050613c4960008301846132e2565b92915050565b6000602082019050613c6460008301846132f1565b92915050565b6000602082019050613c7f6000830184613300565b92915050565b6000602082019050613c9a600083018461330f565b92915050565b6000602082019050613cb5600083018461331e565b92915050565b6000602082019050613cd0600083018461332d565b92915050565b6000602082019050613ceb600083018461333c565b92915050565b6000602082019050613d06600083018461334b565b92915050565b6000602082019050613d21600083018461335a565b92915050565b6000602082019050613d3c6000830184613369565b92915050565b6000602082019050613d576000830184613378565b92915050565b6000602082019050613d726000830184613387565b92915050565b6000602082019050613d8d6000830184613396565b92915050565b6000602082019050613da860008301846133a5565b92915050565b6000602082019050613dc360008301846133b4565b92915050565b6000602082019050613dde60008301846133c3565b92915050565b6000602082019050613df960008301846133d2565b92915050565b6000602082019050613e1460008301846133e1565b92915050565b6000602082019050613e2f60008301846133f0565b92915050565b6000602082019050613e4a60008301846133ff565b92915050565b6000613e5a613e6b565b9050613e66828261565d565b919050565b6000604051905090565b600067ffffffffffffffff821115613e9057613e8f61568e565b5b613e9982615971565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffff0000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffff00000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffff000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffff0000000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffff00000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffff000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffff00000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffff000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffff0000000000000000000000000082169050919050565b60007fffff00000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffff000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082169050919050565b60007fffffff000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000082169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082169050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffff00000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffff000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffff0000000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b60007fffffffffffffffffff000000000000000000000000000000000000000000000082169050919050565b600081600c0b9050919050565b600081600d0b9050919050565b600081600e0b9050919050565b600081600f0b9050919050565b60008160100b9050919050565b60008160110b9050919050565b60008160120b9050919050565b60008160010b9050919050565b60008160130b9050919050565b60008160140b9050919050565b60008160150b9050919050565b60008160160b9050919050565b60008160170b9050919050565b60008160180b9050919050565b60008160190b9050919050565b600081601a0b9050919050565b600081601b0b9050919050565b600081601c0b9050919050565b60008160020b9050919050565b600081601d0b9050919050565b600081601e0b9050919050565b6000819050919050565b60008160030b9050919050565b60008160040b9050919050565b60008160050b9050919050565b60008160060b9050919050565b60008160070b9050919050565b60008160080b9050919050565b60008160000b9050919050565b60008160090b9050919050565b600081600a0b9050919050565b600081600b0b9050919050565b60006cffffffffffffffffffffffffff82169050919050565b60006dffffffffffffffffffffffffffff82169050919050565b60006effffffffffffffffffffffffffffff82169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600070ffffffffffffffffffffffffffffffffff82169050919050565b600071ffffffffffffffffffffffffffffffffffff82169050919050565b600072ffffffffffffffffffffffffffffffffffffff82169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600074ffffffffffffffffffffffffffffffffffffffffff82169050919050565b600075ffffffffffffffffffffffffffffffffffffffffffff82169050919050565b600076ffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b600078ffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b600079ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b60007affffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b60007cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b60007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b60007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600064ffffffffff82169050919050565b600065ffffffffffff82169050919050565b600066ffffffffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600068ffffffffffffffffff82169050919050565b600060ff82169050919050565b600069ffffffffffffffffffff82169050919050565b60006affffffffffffffffffffff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b600061494682613eb6565b8261495084613ea6565b905061495b816156bd565b9250600182101561499b576149967fff0000000000000000000000000000000000000000000000000000000000000083600103600802615982565b831692505b5050919050565b60006149ad82613eb6565b826149b784613ea6565b90506149c2816156d2565b9250600a821015614a02576149fd7fffffffffffffffffffff0000000000000000000000000000000000000000000083600a03600802615982565b831692505b5050919050565b6000614a1482613eb6565b82614a1e84613ea6565b9050614a29816156e7565b9250600b821015614a6957614a647fffffffffffffffffffffff00000000000000000000000000000000000000000083600b03600802615982565b831692505b5050919050565b6000614a7b82613eb6565b82614a8584613ea6565b9050614a90816156fc565b9250600c821015614ad057614acb7fffffffffffffffffffffffff000000000000000000000000000000000000000083600c03600802615982565b831692505b5050919050565b6000614ae282613eb6565b82614aec84613ea6565b9050614af781615711565b9250600d821015614b3757614b327fffffffffffffffffffffffffff0000000000000000000000000000000000000083600d03600802615982565b831692505b5050919050565b6000614b4982613eb6565b82614b5384613ea6565b9050614b5e81615726565b9250600e821015614b9e57614b997fffffffffffffffffffffffffffff00000000000000000000000000000000000083600e03600802615982565b831692505b5050919050565b6000614bb082613eb6565b82614bba84613ea6565b9050614bc58161573b565b9250600f821015614c0557614c007fffffffffffffffffffffffffffffff000000000000000000000000000000000083600f03600802615982565b831692505b5050919050565b6000614c1782613eb6565b82614c2184613ea6565b9050614c2c81615750565b92506010821015614c6c57614c677fffffffffffffffffffffffffffffffff0000000000000000000000000000000083601003600802615982565b831692505b5050919050565b6000614c7e82613eb6565b82614c8884613ea6565b9050614c9381615765565b92506011821015614cd357614cce7fffffffffffffffffffffffffffffffffff00000000000000000000000000000083601103600802615982565b831692505b5050919050565b6000614ce582613eb6565b82614cef84613ea6565b9050614cfa8161577a565b92506012821015614d3a57614d357fffffffffffffffffffffffffffffffffffff000000000000000000000000000083601203600802615982565b831692505b5050919050565b6000614d4c82613eb6565b82614d5684613ea6565b9050614d618161578f565b92506013821015614da157614d9c7fffffffffffffffffffffffffffffffffffffff0000000000000000000000000083601303600802615982565b831692505b5050919050565b6000614db382613eb6565b82614dbd84613ea6565b9050614dc8816157a4565b92506002821015614e0857614e037fffff00000000000000000000000000000000000000000000000000000000000083600203600802615982565b831692505b5050919050565b6000614e1a82613eb6565b82614e2484613ea6565b9050614e2f816157b9565b92506014821015614e6f57614e6a7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802615982565b831692505b5050919050565b6000614e8182613eb6565b82614e8b84613ea6565b9050614e96816157ce565b92506015821015614ed657614ed17fffffffffffffffffffffffffffffffffffffffffff000000000000000000000083601503600802615982565b831692505b5050919050565b6000614ee882613eb6565b82614ef284613ea6565b9050614efd816157e3565b92506016821015614f3d57614f387fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000083601603600802615982565b831692505b5050919050565b6000614f4f82613eb6565b82614f5984613ea6565b9050614f64816157f8565b92506017821015614fa457614f9f7fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000083601703600802615982565b831692505b5050919050565b6000614fb682613eb6565b82614fc084613ea6565b9050614fcb8161580d565b9250601882101561500b576150067fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000083601803600802615982565b831692505b5050919050565b600061501d82613eb6565b8261502784613ea6565b905061503281615822565b925060198210156150725761506d7fffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000083601903600802615982565b831692505b5050919050565b600061508482613eb6565b8261508e84613ea6565b905061509981615837565b9250601a8210156150d9576150d47fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000083601a03600802615982565b831692505b5050919050565b60006150eb82613eb6565b826150f584613ea6565b90506151008161584c565b9250601b8210156151405761513b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000083601b03600802615982565b831692505b5050919050565b600061515282613eb6565b8261515c84613ea6565b905061516781615861565b9250601c8210156151a7576151a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000083601c03600802615982565b831692505b5050919050565b60006151b982613eb6565b826151c384613ea6565b90506151ce81615876565b9250601d82101561520e576152097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083601d03600802615982565b831692505b5050919050565b600061522082613eb6565b8261522a84613ea6565b90506152358161588b565b92506003821015615275576152707fffffff000000000000000000000000000000000000000000000000000000000083600303600802615982565b831692505b5050919050565b600061528782613eb6565b8261529184613ea6565b905061529c816158a0565b9250601e8210156152dc576152d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000083601e03600802615982565b831692505b5050919050565b60006152ee82613eb6565b826152f884613ea6565b9050615303816158b5565b9250601f8210156153435761533e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083601f03600802615982565b831692505b5050919050565b600061535582613eb6565b8261535f84613ea6565b905061536a816158ca565b925060208210156153aa576153a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802615982565b831692505b5050919050565b60006153bc82613eb6565b826153c684613ea6565b90506153d1816158df565b925060048210156154115761540c7fffffffff0000000000000000000000000000000000000000000000000000000083600403600802615982565b831692505b5050919050565b600061542382613eb6565b8261542d84613ea6565b9050615438816158f4565b92506005821015615478576154737fffffffffff00000000000000000000000000000000000000000000000000000083600503600802615982565b831692505b5050919050565b600061548a82613eb6565b8261549484613ea6565b905061549f81615909565b925060068210156154df576154da7fffffffffffff000000000000000000000000000000000000000000000000000083600603600802615982565b831692505b5050919050565b60006154f182613eb6565b826154fb84613ea6565b90506155068161591e565b92506007821015615546576155417fffffffffffffff0000000000000000000000000000000000000000000000000083600703600802615982565b831692505b5050919050565b600061555882613eb6565b8261556284613ea6565b905061556d81615933565b925060088210156155ad576155a87fffffffffffffffff00000000000000000000000000000000000000000000000083600803600802615982565b831692505b5050919050565b60006155bf82613eb6565b826155c984613ea6565b90506155d481615948565b925060098210156156145761560f7fffffffffffffffffff000000000000000000000000000000000000000000000083600903600802615982565b831692505b5050919050565b82818337600083830152505050565b60005b8381101561564857808201518184015260208101905061562d565b83811115615657576000848401525b50505050565b61566682615971565b810181811067ffffffffffffffff821117156156855761568461568e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006156c98251613ed2565b80915050919050565b60006156de8251613efe565b80915050919050565b60006156f38251613f2a565b80915050919050565b60006157088251613f56565b80915050919050565b600061571d8251613f82565b80915050919050565b60006157328251613fae565b80915050919050565b60006157478251613fda565b80915050919050565b600061575c8251614006565b80915050919050565b60006157718251614032565b80915050919050565b6000615786825161405e565b80915050919050565b600061579b825161408a565b80915050919050565b60006157b082516140b6565b80915050919050565b60006157c582516140e2565b80915050919050565b60006157da825161410e565b80915050919050565b60006157ef825161413a565b80915050919050565b60006158048251614166565b80915050919050565b60006158198251614192565b80915050919050565b600061582e82516141be565b80915050919050565b600061584382516141ea565b80915050919050565b60006158588251614216565b80915050919050565b600061586d8251614242565b80915050919050565b6000615882825161426e565b80915050919050565b6000615897825161429a565b80915050919050565b60006158ac82516142c6565b80915050919050565b60006158c182516142f2565b80915050919050565b60006158d6825161431e565b80915050919050565b60006158eb8251614328565b80915050919050565b60006159008251614354565b80915050919050565b60006159158251614380565b80915050919050565b600061592a82516143ac565b80915050919050565b600061593f82516143d8565b80915050919050565b60006159548251614404565b80915050919050565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b600082821b90509291505056fea2646970667358221220392470399a9d621890e80cb746ed5966370d2748a25811bbe33b0ecf649bbfe064736f6c63430008060033"
        }]);
    }catch (e){
        console.log(e.toString())
    }
}


godwoken response

begin blkNum: 79681
end blkNum: 79684
=====eth_getFilterChanges==========
blockNumber: 79684 blkIdx: 0x10 logIndex: 0x4
blockNumber: 79684 blkIdx: 0x10 logIndex: 0x3
blockNumber: 79684 blkIdx: 0x10 logIndex: 0x2
blockNumber: 79684 blkIdx: 0x10 logIndex: 0x1
blockNumber: 79684 blkIdx: 0x10 logIndex: 0x0
blockNumber: 79684 blkIdx: 0xf logIndex: 0x4
blockNumber: 79684 blkIdx: 0xf logIndex: 0x3
blockNumber: 79684 blkIdx: 0xf logIndex: 0x2
blockNumber: 79684 blkIdx: 0xf logIndex: 0x1
blockNumber: 79684 blkIdx: 0xf logIndex: 0x0
blockNumber: 79684 blkIdx: 0xe logIndex: 0x4
blockNumber: 79684 blkIdx: 0xe logIndex: 0x3
blockNumber: 79684 blkIdx: 0xe logIndex: 0x2
blockNumber: 79684 blkIdx: 0xe logIndex: 0x1
blockNumber: 79684 blkIdx: 0xe logIndex: 0x0
blockNumber: 79684 blkIdx: 0xd logIndex: 0x0
blockNumber: 79684 blkIdx: 0xc logIndex: 0x4
blockNumber: 79684 blkIdx: 0xc logIndex: 0x3
blockNumber: 79684 blkIdx: 0xc logIndex: 0x2
blockNumber: 79684 blkIdx: 0xc logIndex: 0x1
blockNumber: 79684 blkIdx: 0xc logIndex: 0x0
blockNumber: 79684 blkIdx: 0xb logIndex: 0x0
blockNumber: 79684 blkIdx: 0xa logIndex: 0x4
blockNumber: 79684 blkIdx: 0xa logIndex: 0x3
blockNumber: 79684 blkIdx: 0xa logIndex: 0x2
blockNumber: 79684 blkIdx: 0xa logIndex: 0x1
blockNumber: 79684 blkIdx: 0xa logIndex: 0x0
blockNumber: 79684 blkIdx: 0x9 logIndex: 0x4
blockNumber: 79684 blkIdx: 0x9 logIndex: 0x3
blockNumber: 79684 blkIdx: 0x9 logIndex: 0x2
blockNumber: 79684 blkIdx: 0x9 logIndex: 0x1
blockNumber: 79684 blkIdx: 0x9 logIndex: 0x0
blockNumber: 79684 blkIdx: 0x8 logIndex: 0x0
blockNumber: 79684 blkIdx: 0x7 logIndex: 0x4
blockNumber: 79684 blkIdx: 0x7 logIndex: 0x3
blockNumber: 79684 blkIdx: 0x7 logIndex: 0x2
blockNumber: 79684 blkIdx: 0x7 logIndex: 0x1
blockNumber: 79684 blkIdx: 0x7 logIndex: 0x0
blockNumber: 79684 blkIdx: 0x6 logIndex: 0x0
blockNumber: 79684 blkIdx: 0x5 logIndex: 0x4
blockNumber: 79684 blkIdx: 0x5 logIndex: 0x3
blockNumber: 79684 blkIdx: 0x5 logIndex: 0x2
blockNumber: 79684 blkIdx: 0x5 logIndex: 0x1
blockNumber: 79684 blkIdx: 0x5 logIndex: 0x0
blockNumber: 79684 blkIdx: 0x4 logIndex: 0x4
blockNumber: 79684 blkIdx: 0x4 logIndex: 0x3
blockNumber: 79684 blkIdx: 0x4 logIndex: 0x2
blockNumber: 79684 blkIdx: 0x4 logIndex: 0x1
blockNumber: 79684 blkIdx: 0x4 logIndex: 0x0
blockNumber: 79684 blkIdx: 0x2 logIndex: 0x4
blockNumber: 79684 blkIdx: 0x2 logIndex: 0x3
blockNumber: 79684 blkIdx: 0x2 logIndex: 0x2
blockNumber: 79684 blkIdx: 0x2 logIndex: 0x1
blockNumber: 79684 blkIdx: 0x2 logIndex: 0x0
blockNumber: 79684 blkIdx: 0x0 logIndex: 0x4
blockNumber: 79684 blkIdx: 0x0 logIndex: 0x3
blockNumber: 79684 blkIdx: 0x0 logIndex: 0x2
blockNumber: 79684 blkIdx: 0x0 logIndex: 0x1
blockNumber: 79684 blkIdx: 0x0 logIndex: 0x0

hardhat local response

begin blkNum: 0
end blkNum: 3
=====eth_getFilterChanges==========
blockNumber: 1 blkIdx: 0x0 logIndex: 0x0
blockNumber: 1 blkIdx: 0x0 logIndex: 0x1
blockNumber: 1 blkIdx: 0x0 logIndex: 0x2
blockNumber: 1 blkIdx: 0x0 logIndex: 0x3
blockNumber: 1 blkIdx: 0x0 logIndex: 0x4
blockNumber: 2 blkIdx: 0x0 logIndex: 0x0
blockNumber: 2 blkIdx: 0x0 logIndex: 0x1
blockNumber: 2 blkIdx: 0x0 logIndex: 0x2
blockNumber: 2 blkIdx: 0x0 logIndex: 0x3
blockNumber: 2 blkIdx: 0x0 logIndex: 0x4
blockNumber: 3 blkIdx: 0x0 logIndex: 0x0
blockNumber: 3 blkIdx: 0x0 logIndex: 0x1
blockNumber: 3 blkIdx: 0x0 logIndex: 0x2
blockNumber: 3 blkIdx: 0x0 logIndex: 0x3
blockNumber: 3 blkIdx: 0x0 logIndex: 0x4

bsc test response

begin blkNum: 18355459
end blkNum: 18355462
=====eth_getFilterChanges==========
blockNumber: 18355460 blkIdx: 0x0 logIndex: 0x0
blockNumber: 18355460 blkIdx: 0x0 logIndex: 0x1
blockNumber: 18355460 blkIdx: 0x1 logIndex: 0x2
blockNumber: 18355460 blkIdx: 0x1 logIndex: 0x3
blockNumber: 18355460 blkIdx: 0x1 logIndex: 0x4
blockNumber: 18355460 blkIdx: 0x1 logIndex: 0x5
blockNumber: 18355460 blkIdx: 0x2 logIndex: 0x6
blockNumber: 18355460 blkIdx: 0x2 logIndex: 0x7
blockNumber: 18355460 blkIdx: 0x3 logIndex: 0x8
blockNumber: 18355460 blkIdx: 0x3 logIndex: 0x9
blockNumber: 18355460 blkIdx: 0x3 logIndex: 0xa
blockNumber: 18355460 blkIdx: 0x3 logIndex: 0xb
blockNumber: 18355460 blkIdx: 0x3 logIndex: 0xc
blockNumber: 18355460 blkIdx: 0x3 logIndex: 0xd
blockNumber: 18355460 blkIdx: 0x3 logIndex: 0xe
blockNumber: 18355460 blkIdx: 0x3 logIndex: 0xf
blockNumber: 18355460 blkIdx: 0x5 logIndex: 0x10
blockNumber: 18355460 blkIdx: 0x6 logIndex: 0x11
blockNumber: 18355460 blkIdx: 0x6 logIndex: 0x12
blockNumber: 18355460 blkIdx: 0x7 logIndex: 0x13
blockNumber: 18355460 blkIdx: 0x8 logIndex: 0x14
blockNumber: 18355460 blkIdx: 0xb logIndex: 0x15
blockNumber: 18355460 blkIdx: 0xb logIndex: 0x16
blockNumber: 18355460 blkIdx: 0xd logIndex: 0x17
blockNumber: 18355460 blkIdx: 0xd logIndex: 0x18
blockNumber: 18355460 blkIdx: 0xd logIndex: 0x19
blockNumber: 18355460 blkIdx: 0xd logIndex: 0x1a
blockNumber: 18355460 blkIdx: 0xd logIndex: 0x1b
blockNumber: 18355460 blkIdx: 0xe logIndex: 0x1c
blockNumber: 18355460 blkIdx: 0xe logIndex: 0x1d
blockNumber: 18355460 blkIdx: 0xe logIndex: 0x1e
blockNumber: 18355460 blkIdx: 0xe logIndex: 0x1f
blockNumber: 18355460 blkIdx: 0xe logIndex: 0x20
blockNumber: 18355460 blkIdx: 0xe logIndex: 0x21
blockNumber: 18355460 blkIdx: 0xe logIndex: 0x22
blockNumber: 18355460 blkIdx: 0xf logIndex: 0x23
blockNumber: 18355460 blkIdx: 0xf logIndex: 0x24
blockNumber: 18355460 blkIdx: 0x10 logIndex: 0x25
blockNumber: 18355460 blkIdx: 0x10 logIndex: 0x26
blockNumber: 18355461 blkIdx: 0x1 logIndex: 0x0
blockNumber: 18355461 blkIdx: 0x2 logIndex: 0x1
blockNumber: 18355461 blkIdx: 0x2 logIndex: 0x2
blockNumber: 18355461 blkIdx: 0x2 logIndex: 0x3
blockNumber: 18355461 blkIdx: 0x2 logIndex: 0x4
blockNumber: 18355461 blkIdx: 0x2 logIndex: 0x5
blockNumber: 18355461 blkIdx: 0x2 logIndex: 0x6
blockNumber: 18355461 blkIdx: 0x4 logIndex: 0x7
blockNumber: 18355461 blkIdx: 0x4 logIndex: 0x8
blockNumber: 18355461 blkIdx: 0x4 logIndex: 0x9
blockNumber: 18355461 blkIdx: 0x6 logIndex: 0xa
blockNumber: 18355461 blkIdx: 0x9 logIndex: 0xb
blockNumber: 18355461 blkIdx: 0xa logIndex: 0xc
blockNumber: 18355461 blkIdx: 0xb logIndex: 0xd
blockNumber: 18355461 blkIdx: 0xb logIndex: 0xe
blockNumber: 18355462 blkIdx: 0x0 logIndex: 0x0
blockNumber: 18355462 blkIdx: 0x1 logIndex: 0x1
blockNumber: 18355462 blkIdx: 0x4 logIndex: 0x2
blockNumber: 18355462 blkIdx: 0x4 logIndex: 0x3
blockNumber: 18355462 blkIdx: 0x4 logIndex: 0x4
blockNumber: 18355462 blkIdx: 0x5 logIndex: 0x5
blockNumber: 18355462 blkIdx: 0x5 logIndex: 0x6
blockNumber: 18355462 blkIdx: 0x6 logIndex: 0x7
blockNumber: 18355462 blkIdx: 0x7 logIndex: 0x8
blockNumber: 18355462 blkIdx: 0x8 logIndex: 0x9
blockNumber: 18355462 blkIdx: 0x8 logIndex: 0xa

expected

1. The log order should be the same as the hardhat
2. More than just the latest block log 

What is the type of this transaction?

I don't know how to parse the args.

``
curl https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -X POST -H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","method":"gw_get_transaction","params": ["0x718ef966e73ffa27a2c94ca7d0367d415b5ca4fbc94fc7ef137e25d9f7653639"],"id":1}'


`{"jsonrpc":"2.0","id":1,"result":{"transaction":{"raw":{"from_id":"0x2e8","to_id":"0x4","nonce":"0x3e","args":"0x020000004f2548c2e3e8776ec3fc272f69c18c866ea435d7cc7f53ef92550e7273d2a7920000000000000000"},"signature":"0x8a8faa8fc45e3669f0ab01a8ca63191ba3022cb94d45dc11e11f6672a86ebc4a071f06e1b657408ab6e92986b558f3451c126acf3d94d6389e604903566e88f201","hash":"0x718ef966e73ffa27a2c94ca7d0367d415b5ca4fbc94fc7ef137e25d9f7653639"},"status":"committed"}}%   `

v1: to id missing

env: docker image:ghcr.io/nervosnetwork/godwoken-web3-prebuilds:compatibility-breaking-changes-1a52afb

Errors that occur when calling the rpc interface frequently
image

Confused by `difficulty` and `totalDifficulty` returned from `getBlock` apis

I was trying to fetch block info via eth_getBlockByHash as follow

curl http://localhost:3000 -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params": ["0x0e8bd807e9f73520a71b12e97430a78127b3a646eeee91345eb4f9e8397774a3",false],"id":1}'

and the response was

{"jsonrpc":"2.0","id":1,"result":{"number":"0x3efce","hash":"0x0e8bd807e9f73520a71b12e97430a78127b3a646eeee91345eb4f9e8397774a3","parentHash":"0x9be8c5dea8287afe5e41eaafefda9406bacb4c1a2e0dec6b234a4eeb9d255181","gasLimit":"0xbebc20","gasUsed":"0x0","miner":"0x68f5cea51fa6fcfdcc10f6cddcafa13bf6717436","size":"0x144","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","transactions":[],"timestamp":"0x61f0e5cc","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000000","stateRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","sha3Uncles":"0x0000000000000000000000000000000000000000000000000000000000000000","receiptsRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","transactionsRoot":"0x0000000000000000000000000000000000000000000000000000000000000000","uncles":[],"difficulty":"0x8e1bc9bf04000","totalDifficulty":"0x8e1bc9bf04000","extraData":"0x"}}

There were two fields about difficulty in the response, difficulty and totalDifficulty.

I was confused by them since they had the same value while they should have different values, totalDifficulty should be an accumulation of difficulty, now they seemed to be dummy values of 0x8e1bc9bf04000

I'd like to know why they are both 0x8e1bc9bf04000 and if they are meaningful.

v1: Truffle deploy: Cannot convert 0x-4 to a BigInt.

Demo repository: https://github.com/DeadGamesInc/nervos-testing

Result:

"OblivionBasicNft" -- Cannot convert 0x-4 to a BigInt.

at C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\deployer\src\deployment.js:365:1
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at Migration._deploy (C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\migrate\Migration.js:75:1)
at Migration._load (C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\migrate\Migration.js:61:1)
at Migration.run (C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\migrate\Migration.js:218:1)
at Object.runMigrations (C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\migrate\index.js:150:1)
at Object.runFrom (C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\migrate\index.js:110:1)
at runMigrations (C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\core\lib\commands\migrate.js:253:1)
at Object.run (C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\core\lib\commands\migrate.js:223:1)
at Command.run (C:\Users\barry\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\core\lib\command.js:167:1)

v1(testnet): eth_call "from id not found"

Request:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":2145843671,"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x69ac4f2dd9b244bae7a725f3971e2907152ac6ab","data":"0x399542e90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001800000000000000000000000003f160092f4a833b70bc1bb76603dedc01bf02c790000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002470a08231000000000000000000000000d173313a51f8fc37bcf67569b463abd89d81844f0000000000000000000000000000000000000000000000000000000000000000000000000000000069ac4f2dd9b244bae7a725f3971e2907152ac6ab000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000040f28c97d0000000000000000000000000000000000000000000000000000000000000000000000000000000069ac4f2dd9b244bae7a725f3971e2907152ac6ab000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000244d2301cc000000000000000000000000d173313a51f8fc37bcf67569b463abd89d81844f00000000000000000000000000000000000000000000000000000000"},"0x31d5"]}' https://godwoken-testnet-web3-v1-rpc.ckbapp.dev

Result:

{"jsonrpc":"2.0","id":2145843671,"error":{"code":-32099,"message":"from id not found!"}}

Context: Trying to deploy SushiSwap interface on Godwoken Testnet v1.
image

Illegal transaction failed_reason show only partial information

env: https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/
query illegal transaction's Receipt ,failed reason not fully displayed

step

  1. send illegal transaction
  2. query response by send eth_getTransactionReceipt
  3. query eth_call response
  4. query eth_estimateGas

transaction code

function testERCTransferFailed() public {
        require(false, "ERC20: transfer amount exceeds balance");
    }

response

eth_getTransactionReceipt

jsonRpcRequest: {
  jsonrpc: '2.0',
  method: 'eth_getTransactionReceipt',
  params: [
    '0x6a5fe6b03b0b866ed7887f629433dacf35ab7b88557d89a60b6edd25396b2344'
  ],
  id: 22
}
jsonRpcResponse: {
  jsonrpc: '2.0',
  id: 22,
  result: {
    transactionHash: '0x6a5fe6b03b0b866ed7887f629433dacf35ab7b88557d89a60b6edd25396b2344',
    blockHash: '0xd8f8fe9d79c9b04e75a41f0606198b797356466cdaef42325791af45407f0d56',
    blockNumber: '0x13dcf',
    transactionIndex: '0x0',
    gasUsed: '0xf26',
    cumulativeGasUsed: '0xf26',
    logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
    logs: [],
    contractAddress: null,
    status: '0x0',
    from: '0x0000000000000000000000000000000000000000',
    to: null,
    failed_reason: {
      status_code: '0x2',
      status_type: 'REVERT',
      message: 'ERC20: transfer amount exceeds b'
    }
  }
}

eth_estimateGas

jsonRpcRequest: {
  jsonrpc: '2.0',
  method: 'eth_estimateGas',
  params: [
    {
      to: '0xdf02807eEBE70CeC5c3F81358702937024CFf9F8',
      data: '0xac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000041945df7b00000000000000000000000000000000000000000000000000000000',
      from: '0x0c1efcca2bcb65a532274f3ef24c044ef4ab6d73'
    },
    'latest'
  ],
  id: 17
}
jsonRpcResponse: { jsonrpc: '2.0', id: 17, result: '0xf26' }

eth_call

jsonRpcRequest: {
  jsonrpc: '2.0',
  method: 'eth_call',
  params: [
    {
      to: '0xd93A07eE498b45501C8079FEa8e774942787112A',
      data: '0xac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000041945df7b00000000000000000000000000000000000000000000000000000000',
      from: '0x0c1efcca2bcb65a532274f3ef24c044ef4ab6d73'
    },
    'latest'
  ],
  id: 17
}
jsonRpcResponse: {
  jsonrpc: '2.0',
  id: 17,
  error: {
    code: -32099,
    message: 'revert: ERC20: transfer amount exceeds balance',
    data: {"failed_reason":{"status_code":"0x2","status_type":"REVERT","message":"ERC20: transfer amount exceeds balance"}
  }
}

expected

  1. eth_getTransactionReceipt's response :ERC20: transfer amount exceeds balance
  2. eth_estimateGas's response:ERC20: transfer amount exceeds balance (May be Fixed, but for sync to v1)

Split hexadecimal types with core types

Implementation of RPC interface:

// RPC interfaces accept string parameters
async function method(rawParam1: string, rawParam2: string) -> Promise<T> {
    // Try to convert string types to core type
    const param1 = await toParam1(rawParam1).catch((error)=> { return Promise(InvalidParam { index: 1, error }) });

    // Use core types and return core types
    const result: CoreResultType = do_something(param1);

    const hexadecimalResult = result.toJsonValue();
    return hexadecimalResult;
}

async function toParam1(raw: string) -> Promise<Param1> {
    ...
    if <error detected> {
        throw new Error(...)
    }

    return param1;
}

Layer1 Deposit didn't create a account in Layer2

https://explorer.nervos.org/aggron/transaction/0xd4e2f997a9c6c7b8ab05fb43ba835e70919833954e31870891ae72000991b8a4
output index: 0 , we parse the args and get a script_hash is : 0x28fc0c5c7b7710c27a44812ab4fb383f83a8552414de40b6c055bb74710c8395


curl https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method":"gw_get_account_id_by_script_hash", "params": ["0x28fc0c5c7b7710c27a44812ab4fb383f83a8552414de40b6c055bb74710c8395"], "id": 1}'
{"jsonrpc":"2.0","id":1,"result":null}%          

Request gw rpc "gw_execute_raw_l2transaction" error message: JSONRPCError

env: docker image: ghcr.io/nervosnetwork/godwoken-web3-prebuilds:compatibility-breaking-changes-1a52afb

solidity code:

    function ass(uint256 b2, uint256 cc1, uint256 cc2) public view returns (bytes memory a, bytes memory b){
        assembly {
            a := mload(0x40)
            b := add(a, b2)
            codecopy(a, cc1, cc2)
        }
    }

invoke ass(33,4,32);
other blockchain return

0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040

error code:
[https://github.com/Dawn-githap/gw-hardhat-test.git](url)

error message:

11:40:11 0|gw-web3 | request.method: eth_call
11:40:11 0|gw-web3 | fromId: 2
11:40:11 0|gw-web3 | rawL2Transaction: {
11:40:11 0|gw-web3 | "from_id": "0x2",
11:40:11 0|gw-web3 | "to_id": "0x40",
11:40:11 0|gw-web3 | "nonce": "0x0",
11:40:11 0|gw-web3 | "args": "0xffffff504f4c59000000000100000000010000000000000000000000000000000000000000000000000000000000000004000000e08c3988"
11:40:11 0|gw-web3 | }
11:40:11 0|gw-web3 | Call gw rpc "gw_execute_raw_l2transaction" error: JSONRPCError: server error {"code":-32600,"message":"invalid exit code 50","data":{"tx_hash":"0xe17c2fe31c9d74a391237cd21f8fdca062a5c2f012cb3330f491b2d128222e27","block_number":"0x194","return_data":"0x","last_log":{"account_id":"0x40","service_flag":"0x2","data":"0x6a950100000000006a95010000000000000000000000000000000000000000000000000000000000"}}}
11:40:11 0|gw-web3 | [error] JSONRPC Server Error: [bound call] RpcError: success: RpcError: success:
11:40:11 0|gw-web3 | at Eth.call (/godwoken-web3/packages/api-server/lib/methods/modules/eth.js:331:19)
11:40:11 0|gw-web3 | at runMicrotasks ()
11:40:11 0|gw-web3 | at processTicksAndRejections (internal/process/task_queues.js:95:5)
11:40:11 0|gw-web3 | at async Eth.call (/godwoken-web3/packages/api-server/lib/methods/validator.js:28:20)
11:40:11 0|gw-web3 | at async Server.methods. (/godwoken-web3/packages/api-server/lib/methods/index.js:49:36)

v1: TxHash from contract interaction returns null

Can confirm some strange things here:
TxHash from contract interaction returns null

context:

const method =
      deployedContractInst.methods.transfer(
        '0x66452d81a51411F8d4CE1eeF004377eEB52bf65a',
        10
      )

const transaction = {
      nonce: await web3.eth.getTransactionCount(account.address),
      from: account.address,
      gas: 1000000000000002,
      gasPrice: '100',
      to: method._parent._address,
      data: method.encodeABI(),
    }

// account - web3's Account (from private key)
const { rawTransaction } = await account.signTransaction(transaction)

const txReceipt = await web3.eth.sendSignedTransaction(rawTransaction)

{
    "jsonrpc": "2.0",
    "id": 17,
    "method": "eth_sendRawTransaction",
    "params": ["0xf8b68204606487038d7ea4c680029486e026e9a8b1cb2d64aeaba75547ab4c44b1f1c38405f5e100b844a9059cbb00000000000000000000000066452d81a51411f8d4ce1eef004377eeb52bf65a000000000000000000000000000000000000000000000000000000000000000a87062bb600000030a01939820fd0257795f5f44c3dce96c65013487c1cd2b5cea11088a7cbf903abfba0678647d4d04c83c62d043e5c4b3a1a9e8ac11f3deb9de14f6025c5ca0d33073d"]
}

{
    "jsonrpc": "2.0",
    "id": 17,
    "result": "0x28ca43cba508d28b53e78b1342207d5e3b9d39553614ecd465314b84f54bc239"
}

gw_get_transaction_receipt also returns null

I'm expecting that all is fine because balanceOf(account.address) is gotten

image

Originally posted by @dxnght in #208 (comment)

eth_call should support zero (optional) "from" address

curl -X POST --data '{"jsonrpc":"2.0","id":73,"method":"eth_call","params":[{"data":"0xdd62ed3e00000000000000000000000029b563951ed0eb9ae5c49692266e1fbc81445cfe000000000000000000000000c01d5b3170c9cd146ab8ccbc210ce39e2892f48c","from":"0x0000000000000000000000000000000000000000","to":"0x696f8499f7cafdba66582d619d628f86ee95e5ba"},"latest"]}
' https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -H "Content-Type: application/json"

returns error:

{"jsonrpc":"2.0","id":73,"error":{"code":-32099,"message":"zero address 0x0000000000000000000000000000000000000000 has no valid account_id!"}}

However per the JSON-RPC spec the "from" address can be zero.

v1:[gasLimit] gasLimit has no upper limit

Users can send a transaction with a particularly high gasLimit
env:https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/
query tx

curl --location --request POST 'https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/' \
--header 'Content-Type: application/json' \
--data-raw '{
        "jsonrpc":"2.0",
        "method":"eth_getTransactionByHash",
        "params":[
                "0x8ff215fad0381271fd86af95a2ecb804e291ae798407feb92229351833513245"
        ],
        "id":1
}'

tx's gasLimit is :0xffffffffff

{"jsonrpc":"2.0","id":1,"result":{"hash":"0x8ff215fad0381271fd86af95a2ecb804e291ae798407feb92229351833513245","blockHash":"0xf381633206f00645f550724c44c9c5be3ef8f348e6e217e7d57f5136c6ca15f3","blockNumber":"0x11259","transactionIndex":"0x0","from":"0x0c1efcca2bcb65a532274f3ef24c044ef4ab6d73","to":null,"gas":"0xffffffffff","gasPrice":"0x1","input":"0x6080604052348015600f57600080fd5b50604e80601d6000396000f3fe608060405236600a57005b348015601557600080fd5b5000fea2646970667358221220d7b4ccf3d12a6e7bab69e20026217bb626e44f1a748c2f3d13f3edab6054661b64736f6c634300060c0033","nonce":"0x1d1","value":"0x0","v":"0x0","r":"0x1dfeecf3184ba7a3ec705e8af2f11978cdc475f36615113fd6c0eb0b93abea1f","s":"0x686f0492323f09430b7419dea2c188832f4efc5d75057630b0c7650f0289932b"}}

expected: Failed to send transaction, like a hardhat: Transaction gas limit is 1099511627775 and exceeds block gas limit of 30000000

[v1]eth_getFilterChanges query filterId from eth_newBlockFilter inconsistent with other chains

env:https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/
code

            const filterId = await ethers.provider.send("eth_newBlockFilter");
            for (let i = 0; i < 5; i++) {
                console.log("----------")
                const txs = await ethers.provider.send("eth_getFilterChanges", [filterId]);
                console.log("eth_getFilterChanges: ",i,":",txs.length)
            }

godwoken

----------
eth_getFilterChanges:  0 : 79301
----------
eth_getFilterChanges:  1 : 0
----------
eth_getFilterChanges:  2 : 0
----------
eth_getFilterChanges:  3 : 0
----------
eth_getFilterChanges:  4 : 0

local

----------
eth_getFilterChanges:  0 : 0
----------
eth_getFilterChanges:  1 : 0
----------
eth_getFilterChanges:  2 : 0
----------
eth_getFilterChanges:  3 : 0
----------
eth_getFilterChanges:  4 : 0

bsc

----------
eth_getFilterChanges:  0 : 0
----------
eth_getFilterChanges:  1 : 0
----------
eth_getFilterChanges:  2 : 0
----------
eth_getFilterChanges:  3 : 0
----------
eth_getFilterChanges:  4 : 0

eth mainnet

----------
eth_getFilterChanges:  0 : 0
----------
eth_getFilterChanges:  1 : 0
----------
eth_getFilterChanges:  2 : 0
----------
eth_getFilterChanges:  3 : 1
----------
eth_getFilterChanges:  4 : 0

expected

 godwoken  eth_getFilterChanges:  0 : 79301 => eth_getFilterChanges:  0 : 0

eth_getLogs not working correctly

When i try to run this query on godwoken testnet v1
curl -v -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],"fromBlock":"0x90b3","toBlock":"0x90b4"}],"id":74}' https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/ | jq
I receive a event without topics. I shouldn't receive any events without topic if i put inside params a topic hash

eth_getStorageAt difference in behaviour versus Ethereum

eth_getStorageAt

Problem

Godwoken-web3 should add support for passing second argument to eth_getStorageAt with leading hex number zeros, eg. 0x01. Ethereum node accepts such arguments. Godwoken-web3 throws error "invalid argument 1: hex number with leading zero digits".

Context

The problem has been found while trying to deploy Gnosis Safe on Godwoken Testnet while running https://github.com/gnosis/safe-transaction-service. This issue results in critical error when trying to get deployed multisig wallet information:

worker_1     | 2022-01-23 13:19:41,160 [INFO] [a2d9a772/index_new_proxies_task] Task safe_transaction_service.history.tasks.index_new_proxies_task[a2d9a772-9c3e-42df-9d95-892ddb80ec98] succeeded in 0.7130728999982239s: 0
web_1        | 2022-01-23 13:19:41,467 [DEBUG] [MainProcess] Getting response HTTP. URI: http://godwoken-testnet-web3-rpc.ckbapp.dev, Method: eth_getStorageAt, Response: {'jsonrpc': '2.0', 'id': 4, 'error': {'code': -32602, 'message': 'invalid argument 1: hex number with leading zero digits'}}
web_1        | 2022-01-23 13:19:41,467 MT::GET::api/v1/safes/<str:address>/::711::422::/api/v1/safes/0x87C80d26CD4c8963BB963c69a224356f4138c4F4/

Related gnosis.py code: https://github.com/gnosis/gnosis-py/blob/3cba9a59a82b587478941ee80f4e0d431644bb45/gnosis/safe/safe.py#L912

Ethereum

Request:

curl --location --request POST 'https://rinkeby-light.eth.linkpool.io/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "jsonrpc": "2.0",
    "method": "eth_getStorageAt",
    "params": [
        "0x74a3dbd5831f45CD0F3002Bb87a59B7C15b1B5E6",
        "0x01",
        "latest"
    ],
    "id": 0
}'

Result:

{"jsonrpc":"2.0","id":0,"result":"0x0000000000000000000000000000000000000000000000000000000000000000"}

Godwoken

Request:

curl --location --request POST 'http://godwoken-testnet-web3-rpc.ckbapp.dev' \
--header 'Content-Type: application/json' \
--data-raw '{
    "jsonrpc": "2.0",
    "method": "eth_getStorageAt",
    "params": [
        "0x017644909870358fd2aFb96cfeB789978962A429",
        "0x01",
        "latest"
    ],
    "id": 0
}'

Result:

{"jsonrpc":"2.0","id":0,"error":{"code":-32602,"message":"invalid argument 1: hex number with leading zero digits"}}

cc @classicalliu @RetricSu

v1:[eth_newFilter] The error message is not as friendly as other blockchain platforms

godwoken

curl -X POST --data '{"jsonrpc":"2.0",  "method":"eth_newFilter",  "params":[{"topics":["0x12341234"]}],  "id":73}' https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -H "Content-Type: application/json"

result

{"jsonrpc":"2.0","id":73,"error":{"code":-32602,"message":"invalid argument 0: invalid argument"}}                        

eth

{"jsonrpc":"2.0","id":73,"error":{"code":-32602,"message":"invalid argument 0: hex has invalid length 4 after decoding; expected 32 for topic"}}

MetaMask shows failed transactions as pending

When sending a transaction on Godwoken Testnet v1 that fails the transaction shows as "pending" in MetaMask and when you try to send another transaction it will give you problem about wrong nonce.

Because of this after failed transaction on Godwoken Testnet v1 MetaMask is stuck.

The workaround is to go to Settings > Advanced and click Reset Account in MetaMask.

I debugged MetaMask extension in Firefox and it seems after sending transaction:

  1. MetaMask is waiting for new block
  2. After new block is mined MetaMask tries to get transaction receipt

Eg. it's sending such request:

{"id":7536123498664,"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["METAMASK_TX_HASH"]}

MetaMask frozen after sendRawTransaction with transaction that will revert:
image

Trying to send new transaction:
image

MetaMask - RPC Error: [ethjs-query] while formatting outputs from RPC '{"value":{"code":-32603,"data":{"code":-32602,"message":"JSONRPCError: server error {\"code\":-32001,\"message\":\"invalid nonce of account 181 expected 262, actual 263\"}"}}}' 

sendRawTransaction calling "artificialRevert" method:

pragma solidity >=0.8.0;

contract SimpleStorage {
  uint storedData;

  constructor() payable {
    storedData = 123;
  }

  function set(uint x) public payable {
    storedData = x;
  }

  function get() public view returns (uint) {
    return storedData;
  }

  function artificialRevert() public {
    require(true == false, "artificial revert");
    storedData = 777777;
  }
}

MetaMask request on Godwoken Testnet v1:

{"id":844131868751,"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0xf86d82010601830f4240943f972ac67435ceb1304daaef77d97586eb7c54428084862d6eba87062bb60000002fa01ee7a2d1fa062686247578cb06146b5ad67810d5b2627d41e8e61bbdbc38b99ba06aece96800a91479b088fab5dab913033eeb523b067be79056ee5910c3685849"]}

response:

{"jsonrpc":"2.0","id":844131868751,"result":"0x7c943614e021a30e17b62053a6fd31aaa3eff1e00f4bd3262f3c1c5662375ded"}

Tx id of failing transaction can't be found on Godwoken Explorer: https://v1.aggron.gwscan.com/tx/0x7c943614e021a30e17b62053a6fd31aaa3eff1e00f4bd3262f3c1c5662375ded

MetaMask also can't find it, it's asking for transaction receipt but doesn't receive it. Request:

{"id":4337304758587,"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x7c943614e021a30e17b62053a6fd31aaa3eff1e00f4bd3262f3c1c5662375ded"]}

Response:

{"jsonrpc":"2.0","id":4337304758587,"result":null}

Are failed transaction by design not included in Godwoken Chain and it means that this problem with MetaMask is permanent and we should recommend users to reset their accounts?

eth_getTransactioniReceipt return null

curl https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -X POST -H "Content-Type: application/json" \             
  -d '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params": ["0xf6cbd7ee5d8b8a3c4109729a3ec9044bb22703c6febc1dfe179a78e092ccd6bf"],"id":1}'
{"jsonrpc":"2.0","id":1,"result":null}%                                

updated:
I test some of txs's eth_getTransactioniReceipt rpc, and all of them return null

Godowken v1: refactor `getChainInfo` RPC

Currently, the infos form getChainInfo RPC are not enough.

curl https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"poly_getChainInfo","params": [],"id":1}'

"result": {
    "rollupScriptHash": "0xfa3afe76deb7a9642831360df07c7a1483c96eb69b28501450b364cf8cb2ff2e",
    "rollupConfigHash": null,
    "ethAccountLockTypeHash": "0x6ac8027edfd86557a0b02fb8b9dce9ffc2bb2ac0b2f0352f74912bb546dc374c",
    "polyjuiceContractTypeHash": "0x848753a2b16c63682c7de4e6cc7167890ff3f821d61328f45386d91ece54373e",
    "polyjuiceCreatorId": "5",
    "chainId": "868450977185797"
}

Expected result

  • the configurations required by Godwoken Explorer
  • (optional) the configurations required to run a Godwoken readonly node

v1(testnet): eth_getLogs range: [0...0] fails with "invalid params!" while working on Rinkeby

This issue is blocking subgraph (graph-node) use:
image

Godwoken Testnet V1

Request:

curl --location --request POST 'https://godwoken-testnet-web3-v1-rpc.ckbapp.dev' \
--header 'Content-Type: application/json' \
--data-raw '{
    "jsonrpc": "2.0",
    "method": "eth_getLogs",
    "params": [
        {
            "fromBlock": "0x0",
            "toBlock": "0x0",
            "address": "0xe17c6fb261e01a6724b1465f08aab4ff415f96e3"
        }
    ],
    "id": 0
}'

Result (wrong):

{
    "jsonrpc": "2.0",
    "id": 0,
    "error": {
        "code": -32099,
        "message": "invalid params!"
    }
}

Rinkeby

Request:

curl --location --request POST 'https://rinkeby-light.eth.linkpool.io' \
--header 'Content-Type: application/json' \
--header 'Cookie: AWSALB=e9Ib3fUnRPG5/yckPYuOEk85X9MeTR8lBNMVOISoLviqgR1jD+U41y99K4HVvZZO7IliCOv1ijWdp5m064jGDa9VDhM2j8reOzpUuNZ5HsVM9D5msRW/ffy/7jgX; AWSALBCORS=e9Ib3fUnRPG5/yckPYuOEk85X9MeTR8lBNMVOISoLviqgR1jD+U41y99K4HVvZZO7IliCOv1ijWdp5m064jGDa9VDhM2j8reOzpUuNZ5HsVM9D5msRW/ffy/7jgX' \
--data-raw '{
    "jsonrpc": "2.0",
    "method": "eth_getLogs",
    "params": [
        {
            "fromBlock": "0x0",
            "toBlock": "0x0",
            "address": "0xe17c6fb261e01a6724b1465f08aab4ff415f96e3"
        }
    ],
    "id": 0
}'

Result (correct, no error):

{"jsonrpc":"2.0","id":0,"result":[]}

cc @classicalliu @Flouse @RetricSu

Godwoken v1: eth_call -> RpcError: to id missing!

web3_1               | 15:28:41 0|gw-web3  | request.method: eth_call
web3_1               | 15:28:41 0|gw-web3  | fromId: 2
web3_1               | 15:28:41 0|gw-web3  | [error]  JSONRPC Server Error: [bound call] RpcError: to id missing! RpcError: to id missing!
web3_1               | 15:28:41 0|gw-web3  |     at Eth.call (/godwoken-web3/packages/api-server/lib/methods/modules/eth.js:331:19)
web3_1               | 15:28:41 0|gw-web3  |     at processTicksAndRejections (internal/process/task_queues.js:95:5)
web3_1               | 15:28:41 0|gw-web3  |     at async Eth.call (/godwoken-web3/packages/api-server/lib/methods/validator.js:28:20)
web3_1               | 15:28:41 0|gw-web3  |     at async Server.methods.<computed> (/godwoken-web3/packages/api-server/lib/methods/index.js:49:36)
  • eth_address -> gw_script_hash -> gw_account_id

transaction 's data is 0x will exec failed

env: https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/
test code

 it("to has fallback func,data is 0x", async ()=>{
            let contract = await fallbackAndReceiveContract.deploy();
            await contract.deployed()
            console.log("address:",contract.address)
            let tx = await ethers.provider.send("eth_sendTransaction", [{
                "to":contract.address,
                "data": null,
            }]);
            let response = await getTxReceipt(ethers.provider, tx, 10)
            console.log("response:",response)
        }).timeout(50000)

other chain exec succ
image
godwoken exec result
image

Godwoken v1 Web3 RPC: eth_getBlockByNumber -> Internal error

> curl https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/ -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params": ["0x0",false],"id":1}' 

{"jsonrpc":"2.0","id":1,"error":{"code":-32603,"message":"Internal error"}}

Godwoken v0 mainnet: "Cannot read property 'last_log' of undefined"

Request

curl 'https://mainnet.godwoken.io/rpc' \
 -H 'content-type: application/json' \
 --data-raw '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{"to":"0xa2b619769edcaeb7feb19e214f2f6556ea61ca3f","from":"0x4b51bf8ed2c13d1104c0d22aa1c5c215d218b93b","value":"0x6fc23ac00","data":"0x"}],"id":1}'

Result:

{"jsonrpc":"2.0","id":1,"error":{"code":-32099,"message":"Cannot read property 'last_log' of undefined"}}

The error code for "to address is not a valid contract" is 0

The RPC gw_execute_raw_l2transaction returns error without error code for "to address is not a valid contract":

$ echo '{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "gw_execute_raw_l2transaction",
    "params": ["0x5c00000014000000180000001c0000002000000004000000140000001300000038000000ffffff504f4c590000a0724e18090000000000000000000000000000000000000000000000000000000000000000000004000000d504ea1d"]
}' \
| tr -d '\n' \
| curl -H 'content-type: application/json' -d @- \
http://localhost:8024
{"jsonrpc":"2.0","id":2,"error":{"code":0,"message":"to address is not a valid contract."}}

v1: no log in transaction receipt

when i transfer token to my contract, it will call receive function and emit logs. the problem is there isn't log in transaction receipt

image
image

Godwoken v1: RPC return internal error

curl https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method":"gw_get_block_by_number", "params": ["0xcb"], "id": 1}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32603,"message":"Internal error"}}
curl https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method":"gw_get_tip_block_hash", "params": [], "id": 1}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32603,"message":"Internal error"}}

deploy contract failed

env: https://github.com/RetricSu/godwoken-kicker.git
branch: compatibility-changes
commit: 76430974cc0b8f88e2bca659725cb8664d3b78d2
solodity code

pragma solidity ^0.6.10;

contract CrossCallBugTest{

    CrossCall1 cc;
    CrossCall1 cc1;

    constructor () public {
        cc = new CrossCall1();
        cc1 = new CrossCall1();
        cc.setOtherAddress(address(cc1));
        cc1.setOtherAddress(address(cc));
    }

    function call_stack(uint stackSize) public returns(uint256){
        return cc.call_stack(stackSize-1)+stackSize;
    }

}

contract CrossCall1{

    address  otherAddress;

    function setOtherAddress(address addr) public {
        otherAddress = addr;
    }

    function call_stack(uint stackSize) public returns(uint256){
        CrossCall1 cc = CrossCall1(otherAddress);
        if(stackSize<=0){
            return 1;
        }
        try cc.call_stack(stackSize-1) returns(uint256 num){
            return num+stackSize;
        }catch {
            return cc.call_stack{gas:100000}(stackSize-1);
        }
    }

}
  1. deploy CrossCallBugTest contract failed
    expected: deploy success

actions

hardhat local net: https://github.com/gpBlockchain/gw-evm-opcode-test/runs/5733544282
gw net:https://github.com/gpBlockchain/gw-evm-opcode-test/runs/5733642755?check_suite_focus=true

Reproduce the problem

  1. fork https://github.com/gpBlockchain/gw-evm-opcode-test.git
  2. exec actions

image

v1:duplicate key value violates unique constraint "blocks_pkey"

env: ghcr.io/nervosnetwork/godwoken-web3-indexer-prebuilds:compatibility-breaking-changes-1a52afb
Use hardhat to send contract transactions frequently, and the gw-web3-indexer reports an error when synchronizing data, causing the process to exit abnormally
image
image
There are also some exception logs, I don't know if it is a problem
image

eth_getFilterChanges query filterId from eth_newPendingTransactionFilter inconsistent with other chains

env:https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/

code

let  filterId = await ethers.provider.send("eth_newPendingTransactionFilter",[]);
await sendTxCount(ethers.provider,10)
let logs = await ethers.provider.send("eth_getFilterChanges", [filterId]);
console.log(logs);

result

godwoken

send successful: 10
[]

hardhat

send successful: 10
[
  '0x1aac02dc1132dccfc3d685d34e202e3d2a28bb8b7f5234f7309570365d948e9a',
  '0x3c0636d6123fdd93fe5a8ea69d957438daf23f7bed0d33896dead31b63d18523',
  '0x13fa0ea1c7fa0e688c9108f52b31cbd2c172bcd16a07e79eb5aa2a5490529c9e',
  '0xfb49e663281b73bd08a1c5b9ccc3bb2c3f6e330d529cb40cfcfa0fc0a38e995c',
  '0x43a46279323e1ac835ab1f0f2f35cc6d10b195da1d8dac7f76ccdf27075add4f',
  '0x82f25d175826c5306bc53cc2bf6cc2bd102d1e011862cff1a69f9c0ef5f0c5a6',
  '0xc1cf5dbd1d6e5df6341cf0ff9ff54300de8eeb4d38d138e624c774711c795fdf',
  '0xe1b1c580a618adf8a8150d704eebc3e9a6e3312200f244b55bf711ee2fde48b4',
  '0x1dfea99dbdf040b0f182f856ca8f23b2df5a0aeb17139e8a113d14b7c869044f',
  '0xeee0fa0653596bb24ddaa205e4d057418a8f0c99e719d1215adeab02edfb73b6'
]

About `ETH Address Registry` Layer2 Contract

解析608区块数据的时候有这么一种交易{"raw":{"from_id":"0x2","to_id":"0x4","nonce":"0x2","args":"0x03000000380000000c00000030000000010000006e45d598f56e7d81eaf1f918fe8178e18cfdf9fef0ef7cb75bfac5b5ea69c1b40000000000000000"}

之前处理v0 的时候没遇到过,请问这种是什么类型的交易?如何解析?

Originally posted by @zmcNotafraid in #184 (comment)

1051 block can't fetch from rpc

curl https://godwoken-testnet-web3-v1-rpc.ckbapp.dev -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method":"gw_get_block_by_number", "params": ["0x41b"], "id": 1}'
{"jsonrpc":"2.0","id":1,"error":{"code":-32603,"message":"Internal error"}}

getTransactionCount occasionally returns the wrong number of transactions

env: https://godwoken-testnet-web3-v1-rpc.ckbapp.dev/
One thread keeps sending transactions, and one thread keeps sending getTransactionCount,getTransactionCount occasionally returns the wrong number of transactions

code

async function getTxCount(provider,address){
    while (true) {
        let count =  provider.getTransactionCount(address,"pending")
        let blkNum = provider.getBlockNumber();
        console.log("address:",address,"nonce:",await count,",blockNum:",await blkNum)
    }
}

response

address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2300 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2300 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2300 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2301 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2301 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2301 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2301 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2302 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2302 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2302 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2302 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2303 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2303 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2303 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2303 ,blockNum: 81114
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2303 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2303 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2303 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2303 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2286 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2286 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2286 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2286 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2286 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2286 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2299 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2304 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2304 ,blockNum: 81115
address: Promise { '0x0C1EfCCa2Bcb65A532274f3eF24c044EF4ab6D73' } nonce: 2304 ,blockNum: 81115

expexted

send Send non-illegal transactions,getTransactionCount only increase not decrease

v1: Check the Hashes of transactions from `eth_getBlockByHash` RPC

Found strange behaviour during call of transaction with my deployed erc20 contract.

curl -X POST http://localhost:8024 -H "Content-Type: application/json" --data '{"id":"test","jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0xead2460ef616968a9c1f6d1c044f6853a688dab303b5e78af4e46109829071ce"]}' | json_pp
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2324  100  2178  100   146   708k  48666 --:--:-- --:--:-- --:--:--  756k
{
   "id" : "test",
   "jsonrpc" : "2.0",
   "result" : {
      "blockHash" : "0x66d4b69be1e3bcd83f73bd1248a42a9027e5897be7fa36cd72b39662fd55ade9",
      "blockNumber" : "0x3c",
      "contractAddress" : "0xc4f4892f743e935c8bb7ce5d639f3d44d2297837",
      "cumulativeGasUsed" : "0x26060",
      "from" : "0x6daf63d8411d6e23552658e3cfb48416a6a2ca78",
      "gasUsed" : "0x1bad1",
      "logs" : [
         {
            "address" : "0xc4f4892f743e935c8bb7ce5d639f3d44d2297837",
            "blockHash" : "0x66d4b69be1e3bcd83f73bd1248a42a9027e5897be7fa36cd72b39662fd55ade9",
            "blockNumber" : "0x3c",
            "data" : "0x0000000000000000000000000000000000000000000000000000000000000000",
            "logIndex" : "0x0",
            "removed" : false,
            "topics" : [
               "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
               "0x0000000000000000000000000000000000000000000000000000000000000000",
               "0x0000000000000000000000006daf63d8411d6e23552658e3cfb48416a6a2ca78"
            ],
            "transactionHash" : "0xead2460ef616968a9c1f6d1c044f6853a688dab303b5e78af4e46109829071ce",
            "transactionIndex" : "0x2"
         },
         {
            "address" : "0xc4f4892f743e935c8bb7ce5d639f3d44d2297837",
            "blockHash" : "0x66d4b69be1e3bcd83f73bd1248a42a9027e5897be7fa36cd72b39662fd55ade9",
            "blockNumber" : "0x3c",
            "data" : "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000",
            "logIndex" : "0x1",
            "removed" : false,
            "topics" : [
               "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
               "0x0000000000000000000000000000000000000000000000000000000000000000",
               "0x0000000000000000000000006daf63d8411d6e23552658e3cfb48416a6a2ca78"
            ],
            "transactionHash" : "0xead2460ef616968a9c1f6d1c044f6853a688dab303b5e78af4e46109829071ce",
            "transactionIndex" : "0x2"
         }
      ],
      "logsBloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "status" : "0x1",
      "to" : null,
      "transactionHash" : "0x7ee60cc2918eb544d73f2b0c0777b787ad9984f0eb9ae50a5c0224f9069a76c3",
      "transactionIndex" : "0x2"
   }
}

As u could see, the block hash is 0x66d4b69be1e3bcd83f73bd1248a42a9027e5897be7fa36cd72b39662fd55ade9. When I trying to get info about transactions:

curl -X POST http://localhost:8024 -H "Content-Type: application/json" --data '{"id":"test","jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0x66d4b69be1e3bcd83f73bd1248a42a9027e5897be7fa36cd72b39662fd55ade9", false]}' | json_pp
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1786  100  1640  100   146   533k  48666 --:--:-- --:--:-- --:--:--  581k
{
   "id" : "test",
   "jsonrpc" : "2.0",
   "result" : {
      "difficulty" : "0x8e1bc9bf04000",
      "extraData" : "0x",
      "gasLimit" : "0x2f877",
      "gasUsed" : "0x26060",
      "hash" : "0x66d4b69be1e3bcd83f73bd1248a42a9027e5897be7fa36cd72b39662fd55ade9",
      "logsBloom" : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "miner" : "0xd2c9a40cb17acfeb23baba8de2766e4b90b1e875",
      "mixHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "nonce" : "0x0000000000000000",
      "number" : "0x3c",
      "parentHash" : "0xdf63c6d7edd8fc64d1815721aaf0df9eb1bf2545cd4c676c002f6f8846d8a047",
      "receiptsRoot" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "sha3Uncles" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "size" : "0x194",
      "stateRoot" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp" : "0x6225f4d9",
      "totalDifficulty" : "0x8e1bc9bf04000",
      "transactions" : [
         "0x03679e972faa0c17a52ed57bd8d2016b14606e0e4fd6f9acca00eaa572c4a193",
         "0xed073329c52def93bd77491a6cefac15665813c5201c1719ae8de486da9c5172",
         "0x7ee60cc2918eb544d73f2b0c0777b787ad9984f0eb9ae50a5c0224f9069a76c3"
      ],
      "transactionsRoot" : "0x0000000000000000000000000000000000000000000000000000000000000000",
      "uncles" : []
   }
}

I am not see my tx with hash - 0xead2460ef616968a9c1f6d1c044f6853a688dab303b5e78af4e46109829071ce. Also weird why tx has another hash in response and I do not see the logsBloom (while I have a two events).

Update: After some minutes 10-15, all my transaction dissapeared:

curl -X POST http://localhost:8024 -H "Content-Type: application/json" --data '{"id":"test","jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0xead2460ef616968a9c1f6d1c044f6853a688dab303b5e78af4e46109829071ce"]}' | json_pp
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   189  100    43  100   146  21500  73000 --:--:-- --:--:-- --:--:-- 94500
{
   "id" : "test",
   "jsonrpc" : "2.0",
   "result" : null
}

SOme logs from truffle:

1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x7d5daead202b72a7d4af2cc91d40c6d3e1b26f280b177c70f9f34b9775934234
   > Blocks: 0            Seconds: 0
   > contract address:    0x72C5A334E94DdCE3C71548A93512Ada93FBCe667
   > block number:        58
   > block timestamp:     1646654616
   > account:             0x6DaF63D8411D6E23552658E3cFb48416A6A2CA78
   > balance:             0.000000039999978926
   > gas used:            21074 (0x5252)
   > gas price:           0.000000001 gwei
   > value sent:          0 ETH
   > total cost:          0.000000000000021074 ETH

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:     0.000000000000021074 ETH


2_deploy_ico.js
===============

   Deploying 'SigmaToken'
   ----------------------
   > transaction hash:    0xead2460ef616968a9c1f6d1c044f6853a688dab303b5e78af4e46109829071ce
   > Blocks: 0            Seconds: 0
   > contract address:    0xC4f4892f743e935C8bb7Ce5d639F3d44D2297837
   > block number:        59
   > block timestamp:     1646654648
   > account:             0x6DaF63D8411D6E23552658E3cFb48416A6A2CA78
   > balance:             0.000000039999844256
   > gas used:            113361 (0x1bad1)
   > gas price:           0.000000001 gwei
   > value sent:          0 ETH
   > total cost:          0.000000000000113361 ETH

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:     0.000000000000113361 ETH

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.