From 855c35cb885330e82b4308dc593e4db50d90644a Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Wed, 14 Dec 2022 01:12:52 -0500 Subject: [PATCH 1/4] Move eth functions out of api --- api/api_full.go | 49 +-- api/docgen/docgen.go | 9 +- api/mocks/mock_full.go | 89 +++--- api/proxy_gen.go | 214 ++++++------- build/openrpc/full.json.gz | Bin 31071 -> 31082 bytes chain/consensus/filcns/filecoin.go | 4 +- {api => chain/eth}/eth_transactions.go | 2 +- {api => chain/eth}/eth_transactions_test.go | 2 +- {api => chain/eth}/eth_types.go | 43 +-- {api => chain/eth}/eth_types_test.go | 2 +- {api => chain/eth}/rlp.go | 2 +- {api => chain/eth}/rlp_test.go | 2 +- chain/messagepool/messagepool.go | 5 +- node/impl/full/dummy.go | 64 ++-- node/impl/full/eth.go | 337 +++++++++++--------- 15 files changed, 414 insertions(+), 410 deletions(-) rename {api => chain/eth}/eth_transactions.go (99%) rename {api => chain/eth}/eth_transactions_test.go (99%) rename {api => chain/eth}/eth_types.go (88%) rename {api => chain/eth}/eth_types_test.go (99%) rename {api => chain/eth}/rlp.go (99%) rename {api => chain/eth}/rlp_test.go (99%) diff --git a/api/api_full.go b/api/api_full.go index 93ee6f43d..17f0e166f 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -30,6 +30,7 @@ import ( "github.com/filecoin-project/lotus/chain/actors/builtin" lminer "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/actors/builtin/power" + "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/repo/imports" @@ -763,37 +764,37 @@ type FullNode interface { // These methods are used for Ethereum-compatible JSON-RPC calls // // EthAccounts will always return [] since we don't expect Lotus to manage private keys - EthAccounts(ctx context.Context) ([]EthAddress, error) //perm:read + EthAccounts(ctx context.Context) ([]eth.EthAddress, error) //perm:read // EthBlockNumber returns the height of the latest (heaviest) TipSet - EthBlockNumber(ctx context.Context) (EthUint64, error) //perm:read + EthBlockNumber(ctx context.Context) (eth.EthUint64, error) //perm:read // EthGetBlockTransactionCountByNumber returns the number of messages in the TipSet - EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum EthUint64) (EthUint64, error) //perm:read + EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum eth.EthUint64) (eth.EthUint64, error) //perm:read // EthGetBlockTransactionCountByHash returns the number of messages in the TipSet - EthGetBlockTransactionCountByHash(ctx context.Context, blkHash EthHash) (EthUint64, error) //perm:read + EthGetBlockTransactionCountByHash(ctx context.Context, blkHash eth.EthHash) (eth.EthUint64, error) //perm:read - EthGetBlockByHash(ctx context.Context, blkHash EthHash, fullTxInfo bool) (EthBlock, error) //perm:read - EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (EthBlock, error) //perm:read - EthGetTransactionByHash(ctx context.Context, txHash *EthHash) (*EthTx, error) //perm:read - EthGetTransactionCount(ctx context.Context, sender EthAddress, blkOpt string) (EthUint64, error) //perm:read - EthGetTransactionReceipt(ctx context.Context, txHash EthHash) (*EthTxReceipt, error) //perm:read - EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash EthHash, txIndex EthUint64) (EthTx, error) //perm:read - EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum EthUint64, txIndex EthUint64) (EthTx, error) //perm:read + EthGetBlockByHash(ctx context.Context, blkHash eth.EthHash, fullTxInfo bool) (eth.EthBlock, error) //perm:read + EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) //perm:read + EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) //perm:read + EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkOpt string) (eth.EthUint64, error) //perm:read + EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*eth.EthTxReceipt, error) //perm:read + EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) //perm:read + EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) //perm:read - EthGetCode(ctx context.Context, address EthAddress, blkOpt string) (EthBytes, error) //perm:read - EthGetStorageAt(ctx context.Context, address EthAddress, position EthBytes, blkParam string) (EthBytes, error) //perm:read - EthGetBalance(ctx context.Context, address EthAddress, blkParam string) (EthBigInt, error) //perm:read - EthChainId(ctx context.Context) (EthUint64, error) //perm:read - NetVersion(ctx context.Context) (string, error) //perm:read - NetListening(ctx context.Context) (bool, error) //perm:read - EthProtocolVersion(ctx context.Context) (EthUint64, error) //perm:read - EthGasPrice(ctx context.Context) (EthBigInt, error) //perm:read - EthFeeHistory(ctx context.Context, blkCount EthUint64, newestBlk string, rewardPercentiles []float64) (EthFeeHistory, error) //perm:read + EthGetCode(ctx context.Context, address eth.EthAddress, blkOpt string) (eth.EthBytes, error) //perm:read + EthGetStorageAt(ctx context.Context, address eth.EthAddress, position eth.EthBytes, blkParam string) (eth.EthBytes, error) //perm:read + EthGetBalance(ctx context.Context, address eth.EthAddress, blkParam string) (eth.EthBigInt, error) //perm:read + EthChainId(ctx context.Context) (eth.EthUint64, error) //perm:read + NetVersion(ctx context.Context) (string, error) //perm:read + NetListening(ctx context.Context) (bool, error) //perm:read + EthProtocolVersion(ctx context.Context) (eth.EthUint64, error) //perm:read + EthGasPrice(ctx context.Context) (eth.EthBigInt, error) //perm:read + EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, newestBlk string, rewardPercentiles []float64) (eth.EthFeeHistory, error) //perm:read - EthMaxPriorityFeePerGas(ctx context.Context) (EthBigInt, error) //perm:read - EthEstimateGas(ctx context.Context, tx EthCall) (EthUint64, error) //perm:read - EthCall(ctx context.Context, tx EthCall, blkParam string) (EthBytes, error) //perm:read + EthMaxPriorityFeePerGas(ctx context.Context) (eth.EthBigInt, error) //perm:read + EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.EthUint64, error) //perm:read + EthCall(ctx context.Context, tx eth.EthCall, blkParam string) (eth.EthBytes, error) //perm:read - EthSendRawTransaction(ctx context.Context, rawTx EthBytes) (EthHash, error) //perm:read + EthSendRawTransaction(ctx context.Context, rawTx eth.EthBytes) (eth.EthHash, error) //perm:read // CreateBackup creates node backup onder the specified file name. The // method requires that the lotus daemon is running with the diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 3ef5c879c..68decb616 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -42,6 +42,7 @@ import ( apitypes "github.com/filecoin-project/lotus/api/types" "github.com/filecoin-project/lotus/api/v0api" "github.com/filecoin-project/lotus/build" + "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/repo/imports" @@ -369,16 +370,16 @@ func init() { }, }) - ethint := api.EthUint64(5) + ethint := eth.EthUint64(5) addExample(ethint) addExample(ðint) - ethaddr, _ := api.EthAddressFromHex("0x5CbEeCF99d3fDB3f25E309Cc264f240bb0664031") + ethaddr, _ := eth.EthAddressFromHex("0x5CbEeCF99d3fDB3f25E309Cc264f240bb0664031") addExample(ðaddr) - ethhash, _ := api.NewEthHashFromCid(c) + ethhash, _ := eth.NewEthHashFromCid(c) addExample(ðhash) - ethFeeHistoryReward := [][]api.EthBigInt{} + ethFeeHistoryReward := [][]eth.EthBigInt{} addExample(ðFeeHistoryReward) addExample(&uuid.UUID{}) } diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index 6ae62728b..0522ef382 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -36,6 +36,7 @@ import ( api "github.com/filecoin-project/lotus/api" apitypes "github.com/filecoin-project/lotus/api/types" miner0 "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + eth "github.com/filecoin-project/lotus/chain/eth" types "github.com/filecoin-project/lotus/chain/types" alerting "github.com/filecoin-project/lotus/journal/alerting" dtypes "github.com/filecoin-project/lotus/node/modules/dtypes" @@ -922,10 +923,10 @@ func (mr *MockFullNodeMockRecorder) Discover(arg0 interface{}) *gomock.Call { } // EthAccounts mocks base method. -func (m *MockFullNode) EthAccounts(arg0 context.Context) ([]api.EthAddress, error) { +func (m *MockFullNode) EthAccounts(arg0 context.Context) ([]eth.EthAddress, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthAccounts", arg0) - ret0, _ := ret[0].([]api.EthAddress) + ret0, _ := ret[0].([]eth.EthAddress) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -937,10 +938,10 @@ func (mr *MockFullNodeMockRecorder) EthAccounts(arg0 interface{}) *gomock.Call { } // EthBlockNumber mocks base method. -func (m *MockFullNode) EthBlockNumber(arg0 context.Context) (api.EthUint64, error) { +func (m *MockFullNode) EthBlockNumber(arg0 context.Context) (eth.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthBlockNumber", arg0) - ret0, _ := ret[0].(api.EthUint64) + ret0, _ := ret[0].(eth.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -952,10 +953,10 @@ func (mr *MockFullNodeMockRecorder) EthBlockNumber(arg0 interface{}) *gomock.Cal } // EthCall mocks base method. -func (m *MockFullNode) EthCall(arg0 context.Context, arg1 api.EthCall, arg2 string) (api.EthBytes, error) { +func (m *MockFullNode) EthCall(arg0 context.Context, arg1 eth.EthCall, arg2 string) (eth.EthBytes, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthCall", arg0, arg1, arg2) - ret0, _ := ret[0].(api.EthBytes) + ret0, _ := ret[0].(eth.EthBytes) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -967,10 +968,10 @@ func (mr *MockFullNodeMockRecorder) EthCall(arg0, arg1, arg2 interface{}) *gomoc } // EthChainId mocks base method. -func (m *MockFullNode) EthChainId(arg0 context.Context) (api.EthUint64, error) { +func (m *MockFullNode) EthChainId(arg0 context.Context) (eth.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthChainId", arg0) - ret0, _ := ret[0].(api.EthUint64) + ret0, _ := ret[0].(eth.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -982,10 +983,10 @@ func (mr *MockFullNodeMockRecorder) EthChainId(arg0 interface{}) *gomock.Call { } // EthEstimateGas mocks base method. -func (m *MockFullNode) EthEstimateGas(arg0 context.Context, arg1 api.EthCall) (api.EthUint64, error) { +func (m *MockFullNode) EthEstimateGas(arg0 context.Context, arg1 eth.EthCall) (eth.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthEstimateGas", arg0, arg1) - ret0, _ := ret[0].(api.EthUint64) + ret0, _ := ret[0].(eth.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -997,10 +998,10 @@ func (mr *MockFullNodeMockRecorder) EthEstimateGas(arg0, arg1 interface{}) *gomo } // EthFeeHistory mocks base method. -func (m *MockFullNode) EthFeeHistory(arg0 context.Context, arg1 api.EthUint64, arg2 string, arg3 []float64) (api.EthFeeHistory, error) { +func (m *MockFullNode) EthFeeHistory(arg0 context.Context, arg1 eth.EthUint64, arg2 string, arg3 []float64) (eth.EthFeeHistory, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthFeeHistory", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(api.EthFeeHistory) + ret0, _ := ret[0].(eth.EthFeeHistory) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1012,10 +1013,10 @@ func (mr *MockFullNodeMockRecorder) EthFeeHistory(arg0, arg1, arg2, arg3 interfa } // EthGasPrice mocks base method. -func (m *MockFullNode) EthGasPrice(arg0 context.Context) (api.EthBigInt, error) { +func (m *MockFullNode) EthGasPrice(arg0 context.Context) (eth.EthBigInt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGasPrice", arg0) - ret0, _ := ret[0].(api.EthBigInt) + ret0, _ := ret[0].(eth.EthBigInt) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1027,10 +1028,10 @@ func (mr *MockFullNodeMockRecorder) EthGasPrice(arg0 interface{}) *gomock.Call { } // EthGetBalance mocks base method. -func (m *MockFullNode) EthGetBalance(arg0 context.Context, arg1 api.EthAddress, arg2 string) (api.EthBigInt, error) { +func (m *MockFullNode) EthGetBalance(arg0 context.Context, arg1 eth.EthAddress, arg2 string) (eth.EthBigInt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBalance", arg0, arg1, arg2) - ret0, _ := ret[0].(api.EthBigInt) + ret0, _ := ret[0].(eth.EthBigInt) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1042,10 +1043,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBalance(arg0, arg1, arg2 interface{}) } // EthGetBlockByHash mocks base method. -func (m *MockFullNode) EthGetBlockByHash(arg0 context.Context, arg1 api.EthHash, arg2 bool) (api.EthBlock, error) { +func (m *MockFullNode) EthGetBlockByHash(arg0 context.Context, arg1 eth.EthHash, arg2 bool) (eth.EthBlock, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBlockByHash", arg0, arg1, arg2) - ret0, _ := ret[0].(api.EthBlock) + ret0, _ := ret[0].(eth.EthBlock) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1057,10 +1058,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBlockByHash(arg0, arg1, arg2 interface } // EthGetBlockByNumber mocks base method. -func (m *MockFullNode) EthGetBlockByNumber(arg0 context.Context, arg1 string, arg2 bool) (api.EthBlock, error) { +func (m *MockFullNode) EthGetBlockByNumber(arg0 context.Context, arg1 string, arg2 bool) (eth.EthBlock, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBlockByNumber", arg0, arg1, arg2) - ret0, _ := ret[0].(api.EthBlock) + ret0, _ := ret[0].(eth.EthBlock) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1072,10 +1073,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBlockByNumber(arg0, arg1, arg2 interfa } // EthGetBlockTransactionCountByHash mocks base method. -func (m *MockFullNode) EthGetBlockTransactionCountByHash(arg0 context.Context, arg1 api.EthHash) (api.EthUint64, error) { +func (m *MockFullNode) EthGetBlockTransactionCountByHash(arg0 context.Context, arg1 eth.EthHash) (eth.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBlockTransactionCountByHash", arg0, arg1) - ret0, _ := ret[0].(api.EthUint64) + ret0, _ := ret[0].(eth.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1087,10 +1088,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBlockTransactionCountByHash(arg0, arg1 } // EthGetBlockTransactionCountByNumber mocks base method. -func (m *MockFullNode) EthGetBlockTransactionCountByNumber(arg0 context.Context, arg1 api.EthUint64) (api.EthUint64, error) { +func (m *MockFullNode) EthGetBlockTransactionCountByNumber(arg0 context.Context, arg1 eth.EthUint64) (eth.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBlockTransactionCountByNumber", arg0, arg1) - ret0, _ := ret[0].(api.EthUint64) + ret0, _ := ret[0].(eth.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1102,10 +1103,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBlockTransactionCountByNumber(arg0, ar } // EthGetCode mocks base method. -func (m *MockFullNode) EthGetCode(arg0 context.Context, arg1 api.EthAddress, arg2 string) (api.EthBytes, error) { +func (m *MockFullNode) EthGetCode(arg0 context.Context, arg1 eth.EthAddress, arg2 string) (eth.EthBytes, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetCode", arg0, arg1, arg2) - ret0, _ := ret[0].(api.EthBytes) + ret0, _ := ret[0].(eth.EthBytes) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1117,10 +1118,10 @@ func (mr *MockFullNodeMockRecorder) EthGetCode(arg0, arg1, arg2 interface{}) *go } // EthGetStorageAt mocks base method. -func (m *MockFullNode) EthGetStorageAt(arg0 context.Context, arg1 api.EthAddress, arg2 api.EthBytes, arg3 string) (api.EthBytes, error) { +func (m *MockFullNode) EthGetStorageAt(arg0 context.Context, arg1 eth.EthAddress, arg2 eth.EthBytes, arg3 string) (eth.EthBytes, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetStorageAt", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(api.EthBytes) + ret0, _ := ret[0].(eth.EthBytes) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1132,10 +1133,10 @@ func (mr *MockFullNodeMockRecorder) EthGetStorageAt(arg0, arg1, arg2, arg3 inter } // EthGetTransactionByBlockHashAndIndex mocks base method. -func (m *MockFullNode) EthGetTransactionByBlockHashAndIndex(arg0 context.Context, arg1 api.EthHash, arg2 api.EthUint64) (api.EthTx, error) { +func (m *MockFullNode) EthGetTransactionByBlockHashAndIndex(arg0 context.Context, arg1 eth.EthHash, arg2 eth.EthUint64) (eth.EthTx, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionByBlockHashAndIndex", arg0, arg1, arg2) - ret0, _ := ret[0].(api.EthTx) + ret0, _ := ret[0].(eth.EthTx) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1147,10 +1148,10 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionByBlockHashAndIndex(arg0, a } // EthGetTransactionByBlockNumberAndIndex mocks base method. -func (m *MockFullNode) EthGetTransactionByBlockNumberAndIndex(arg0 context.Context, arg1, arg2 api.EthUint64) (api.EthTx, error) { +func (m *MockFullNode) EthGetTransactionByBlockNumberAndIndex(arg0 context.Context, arg1, arg2 eth.EthUint64) (eth.EthTx, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionByBlockNumberAndIndex", arg0, arg1, arg2) - ret0, _ := ret[0].(api.EthTx) + ret0, _ := ret[0].(eth.EthTx) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1162,10 +1163,10 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionByBlockNumberAndIndex(arg0, } // EthGetTransactionByHash mocks base method. -func (m *MockFullNode) EthGetTransactionByHash(arg0 context.Context, arg1 *api.EthHash) (*api.EthTx, error) { +func (m *MockFullNode) EthGetTransactionByHash(arg0 context.Context, arg1 *eth.EthHash) (*eth.EthTx, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionByHash", arg0, arg1) - ret0, _ := ret[0].(*api.EthTx) + ret0, _ := ret[0].(*eth.EthTx) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1177,10 +1178,10 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionByHash(arg0, arg1 interface } // EthGetTransactionCount mocks base method. -func (m *MockFullNode) EthGetTransactionCount(arg0 context.Context, arg1 api.EthAddress, arg2 string) (api.EthUint64, error) { +func (m *MockFullNode) EthGetTransactionCount(arg0 context.Context, arg1 eth.EthAddress, arg2 string) (eth.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionCount", arg0, arg1, arg2) - ret0, _ := ret[0].(api.EthUint64) + ret0, _ := ret[0].(eth.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1192,10 +1193,10 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionCount(arg0, arg1, arg2 inte } // EthGetTransactionReceipt mocks base method. -func (m *MockFullNode) EthGetTransactionReceipt(arg0 context.Context, arg1 api.EthHash) (*api.EthTxReceipt, error) { +func (m *MockFullNode) EthGetTransactionReceipt(arg0 context.Context, arg1 eth.EthHash) (*eth.EthTxReceipt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionReceipt", arg0, arg1) - ret0, _ := ret[0].(*api.EthTxReceipt) + ret0, _ := ret[0].(*eth.EthTxReceipt) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1207,10 +1208,10 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionReceipt(arg0, arg1 interfac } // EthMaxPriorityFeePerGas mocks base method. -func (m *MockFullNode) EthMaxPriorityFeePerGas(arg0 context.Context) (api.EthBigInt, error) { +func (m *MockFullNode) EthMaxPriorityFeePerGas(arg0 context.Context) (eth.EthBigInt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthMaxPriorityFeePerGas", arg0) - ret0, _ := ret[0].(api.EthBigInt) + ret0, _ := ret[0].(eth.EthBigInt) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1222,10 +1223,10 @@ func (mr *MockFullNodeMockRecorder) EthMaxPriorityFeePerGas(arg0 interface{}) *g } // EthProtocolVersion mocks base method. -func (m *MockFullNode) EthProtocolVersion(arg0 context.Context) (api.EthUint64, error) { +func (m *MockFullNode) EthProtocolVersion(arg0 context.Context) (eth.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthProtocolVersion", arg0) - ret0, _ := ret[0].(api.EthUint64) + ret0, _ := ret[0].(eth.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1237,10 +1238,10 @@ func (mr *MockFullNodeMockRecorder) EthProtocolVersion(arg0 interface{}) *gomock } // EthSendRawTransaction mocks base method. -func (m *MockFullNode) EthSendRawTransaction(arg0 context.Context, arg1 api.EthBytes) (api.EthHash, error) { +func (m *MockFullNode) EthSendRawTransaction(arg0 context.Context, arg1 eth.EthBytes) (eth.EthHash, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthSendRawTransaction", arg0, arg1) - ret0, _ := ret[0].(api.EthHash) + ret0, _ := ret[0].(eth.EthHash) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 7d0efb3fd..b1c7a6d78 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -35,9 +35,9 @@ import ( apitypes "github.com/filecoin-project/lotus/api/types" "github.com/filecoin-project/lotus/chain/actors/builtin" lminer "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/journal/alerting" - _ "github.com/filecoin-project/lotus/lib/sigs/delegated" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/repo/imports" "github.com/filecoin-project/lotus/storage/pipeline/sealiface" @@ -219,49 +219,49 @@ type FullNodeStruct struct { CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"` - EthAccounts func(p0 context.Context) ([]EthAddress, error) `perm:"read"` + EthAccounts func(p0 context.Context) ([]eth.EthAddress, error) `perm:"read"` - EthBlockNumber func(p0 context.Context) (EthUint64, error) `perm:"read"` + EthBlockNumber func(p0 context.Context) (eth.EthUint64, error) `perm:"read"` - EthCall func(p0 context.Context, p1 EthCall, p2 string) (EthBytes, error) `perm:"read"` + EthCall func(p0 context.Context, p1 eth.EthCall, p2 string) (eth.EthBytes, error) `perm:"read"` - EthChainId func(p0 context.Context) (EthUint64, error) `perm:"read"` + EthChainId func(p0 context.Context) (eth.EthUint64, error) `perm:"read"` - EthEstimateGas func(p0 context.Context, p1 EthCall) (EthUint64, error) `perm:"read"` + EthEstimateGas func(p0 context.Context, p1 eth.EthCall) (eth.EthUint64, error) `perm:"read"` - EthFeeHistory func(p0 context.Context, p1 EthUint64, p2 string, p3 []float64) (EthFeeHistory, error) `perm:"read"` + EthFeeHistory func(p0 context.Context, p1 eth.EthUint64, p2 string, p3 []float64) (eth.EthFeeHistory, error) `perm:"read"` - EthGasPrice func(p0 context.Context) (EthBigInt, error) `perm:"read"` + EthGasPrice func(p0 context.Context) (eth.EthBigInt, error) `perm:"read"` - EthGetBalance func(p0 context.Context, p1 EthAddress, p2 string) (EthBigInt, error) `perm:"read"` + EthGetBalance func(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBigInt, error) `perm:"read"` - EthGetBlockByHash func(p0 context.Context, p1 EthHash, p2 bool) (EthBlock, error) `perm:"read"` + EthGetBlockByHash func(p0 context.Context, p1 eth.EthHash, p2 bool) (eth.EthBlock, error) `perm:"read"` - EthGetBlockByNumber func(p0 context.Context, p1 string, p2 bool) (EthBlock, error) `perm:"read"` + EthGetBlockByNumber func(p0 context.Context, p1 string, p2 bool) (eth.EthBlock, error) `perm:"read"` - EthGetBlockTransactionCountByHash func(p0 context.Context, p1 EthHash) (EthUint64, error) `perm:"read"` + EthGetBlockTransactionCountByHash func(p0 context.Context, p1 eth.EthHash) (eth.EthUint64, error) `perm:"read"` - EthGetBlockTransactionCountByNumber func(p0 context.Context, p1 EthUint64) (EthUint64, error) `perm:"read"` + EthGetBlockTransactionCountByNumber func(p0 context.Context, p1 eth.EthUint64) (eth.EthUint64, error) `perm:"read"` - EthGetCode func(p0 context.Context, p1 EthAddress, p2 string) (EthBytes, error) `perm:"read"` + EthGetCode func(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBytes, error) `perm:"read"` - EthGetStorageAt func(p0 context.Context, p1 EthAddress, p2 EthBytes, p3 string) (EthBytes, error) `perm:"read"` + EthGetStorageAt func(p0 context.Context, p1 eth.EthAddress, p2 eth.EthBytes, p3 string) (eth.EthBytes, error) `perm:"read"` - EthGetTransactionByBlockHashAndIndex func(p0 context.Context, p1 EthHash, p2 EthUint64) (EthTx, error) `perm:"read"` + EthGetTransactionByBlockHashAndIndex func(p0 context.Context, p1 eth.EthHash, p2 eth.EthUint64) (eth.EthTx, error) `perm:"read"` - EthGetTransactionByBlockNumberAndIndex func(p0 context.Context, p1 EthUint64, p2 EthUint64) (EthTx, error) `perm:"read"` + EthGetTransactionByBlockNumberAndIndex func(p0 context.Context, p1 eth.EthUint64, p2 eth.EthUint64) (eth.EthTx, error) `perm:"read"` - EthGetTransactionByHash func(p0 context.Context, p1 *EthHash) (*EthTx, error) `perm:"read"` + EthGetTransactionByHash func(p0 context.Context, p1 *eth.EthHash) (*eth.EthTx, error) `perm:"read"` - EthGetTransactionCount func(p0 context.Context, p1 EthAddress, p2 string) (EthUint64, error) `perm:"read"` + EthGetTransactionCount func(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthUint64, error) `perm:"read"` - EthGetTransactionReceipt func(p0 context.Context, p1 EthHash) (*EthTxReceipt, error) `perm:"read"` + EthGetTransactionReceipt func(p0 context.Context, p1 eth.EthHash) (*eth.EthTxReceipt, error) `perm:"read"` - EthMaxPriorityFeePerGas func(p0 context.Context) (EthBigInt, error) `perm:"read"` + EthMaxPriorityFeePerGas func(p0 context.Context) (eth.EthBigInt, error) `perm:"read"` - EthProtocolVersion func(p0 context.Context) (EthUint64, error) `perm:"read"` + EthProtocolVersion func(p0 context.Context) (eth.EthUint64, error) `perm:"read"` - EthSendRawTransaction func(p0 context.Context, p1 EthBytes) (EthHash, error) `perm:"read"` + EthSendRawTransaction func(p0 context.Context, p1 eth.EthBytes) (eth.EthHash, error) `perm:"read"` GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"` @@ -1844,246 +1844,246 @@ func (s *FullNodeStub) CreateBackup(p0 context.Context, p1 string) error { return ErrNotSupported } -func (s *FullNodeStruct) EthAccounts(p0 context.Context) ([]EthAddress, error) { +func (s *FullNodeStruct) EthAccounts(p0 context.Context) ([]eth.EthAddress, error) { if s.Internal.EthAccounts == nil { - return *new([]EthAddress), ErrNotSupported + return *new([]eth.EthAddress), ErrNotSupported } return s.Internal.EthAccounts(p0) } -func (s *FullNodeStub) EthAccounts(p0 context.Context) ([]EthAddress, error) { - return *new([]EthAddress), ErrNotSupported +func (s *FullNodeStub) EthAccounts(p0 context.Context) ([]eth.EthAddress, error) { + return *new([]eth.EthAddress), ErrNotSupported } -func (s *FullNodeStruct) EthBlockNumber(p0 context.Context) (EthUint64, error) { +func (s *FullNodeStruct) EthBlockNumber(p0 context.Context) (eth.EthUint64, error) { if s.Internal.EthBlockNumber == nil { - return *new(EthUint64), ErrNotSupported + return *new(eth.EthUint64), ErrNotSupported } return s.Internal.EthBlockNumber(p0) } -func (s *FullNodeStub) EthBlockNumber(p0 context.Context) (EthUint64, error) { - return *new(EthUint64), ErrNotSupported +func (s *FullNodeStub) EthBlockNumber(p0 context.Context) (eth.EthUint64, error) { + return *new(eth.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthCall(p0 context.Context, p1 EthCall, p2 string) (EthBytes, error) { +func (s *FullNodeStruct) EthCall(p0 context.Context, p1 eth.EthCall, p2 string) (eth.EthBytes, error) { if s.Internal.EthCall == nil { - return *new(EthBytes), ErrNotSupported + return *new(eth.EthBytes), ErrNotSupported } return s.Internal.EthCall(p0, p1, p2) } -func (s *FullNodeStub) EthCall(p0 context.Context, p1 EthCall, p2 string) (EthBytes, error) { - return *new(EthBytes), ErrNotSupported +func (s *FullNodeStub) EthCall(p0 context.Context, p1 eth.EthCall, p2 string) (eth.EthBytes, error) { + return *new(eth.EthBytes), ErrNotSupported } -func (s *FullNodeStruct) EthChainId(p0 context.Context) (EthUint64, error) { +func (s *FullNodeStruct) EthChainId(p0 context.Context) (eth.EthUint64, error) { if s.Internal.EthChainId == nil { - return *new(EthUint64), ErrNotSupported + return *new(eth.EthUint64), ErrNotSupported } return s.Internal.EthChainId(p0) } -func (s *FullNodeStub) EthChainId(p0 context.Context) (EthUint64, error) { - return *new(EthUint64), ErrNotSupported +func (s *FullNodeStub) EthChainId(p0 context.Context) (eth.EthUint64, error) { + return *new(eth.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthEstimateGas(p0 context.Context, p1 EthCall) (EthUint64, error) { +func (s *FullNodeStruct) EthEstimateGas(p0 context.Context, p1 eth.EthCall) (eth.EthUint64, error) { if s.Internal.EthEstimateGas == nil { - return *new(EthUint64), ErrNotSupported + return *new(eth.EthUint64), ErrNotSupported } return s.Internal.EthEstimateGas(p0, p1) } -func (s *FullNodeStub) EthEstimateGas(p0 context.Context, p1 EthCall) (EthUint64, error) { - return *new(EthUint64), ErrNotSupported +func (s *FullNodeStub) EthEstimateGas(p0 context.Context, p1 eth.EthCall) (eth.EthUint64, error) { + return *new(eth.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthFeeHistory(p0 context.Context, p1 EthUint64, p2 string, p3 []float64) (EthFeeHistory, error) { +func (s *FullNodeStruct) EthFeeHistory(p0 context.Context, p1 eth.EthUint64, p2 string, p3 []float64) (eth.EthFeeHistory, error) { if s.Internal.EthFeeHistory == nil { - return *new(EthFeeHistory), ErrNotSupported + return *new(eth.EthFeeHistory), ErrNotSupported } return s.Internal.EthFeeHistory(p0, p1, p2, p3) } -func (s *FullNodeStub) EthFeeHistory(p0 context.Context, p1 EthUint64, p2 string, p3 []float64) (EthFeeHistory, error) { - return *new(EthFeeHistory), ErrNotSupported +func (s *FullNodeStub) EthFeeHistory(p0 context.Context, p1 eth.EthUint64, p2 string, p3 []float64) (eth.EthFeeHistory, error) { + return *new(eth.EthFeeHistory), ErrNotSupported } -func (s *FullNodeStruct) EthGasPrice(p0 context.Context) (EthBigInt, error) { +func (s *FullNodeStruct) EthGasPrice(p0 context.Context) (eth.EthBigInt, error) { if s.Internal.EthGasPrice == nil { - return *new(EthBigInt), ErrNotSupported + return *new(eth.EthBigInt), ErrNotSupported } return s.Internal.EthGasPrice(p0) } -func (s *FullNodeStub) EthGasPrice(p0 context.Context) (EthBigInt, error) { - return *new(EthBigInt), ErrNotSupported +func (s *FullNodeStub) EthGasPrice(p0 context.Context) (eth.EthBigInt, error) { + return *new(eth.EthBigInt), ErrNotSupported } -func (s *FullNodeStruct) EthGetBalance(p0 context.Context, p1 EthAddress, p2 string) (EthBigInt, error) { +func (s *FullNodeStruct) EthGetBalance(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBigInt, error) { if s.Internal.EthGetBalance == nil { - return *new(EthBigInt), ErrNotSupported + return *new(eth.EthBigInt), ErrNotSupported } return s.Internal.EthGetBalance(p0, p1, p2) } -func (s *FullNodeStub) EthGetBalance(p0 context.Context, p1 EthAddress, p2 string) (EthBigInt, error) { - return *new(EthBigInt), ErrNotSupported +func (s *FullNodeStub) EthGetBalance(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBigInt, error) { + return *new(eth.EthBigInt), ErrNotSupported } -func (s *FullNodeStruct) EthGetBlockByHash(p0 context.Context, p1 EthHash, p2 bool) (EthBlock, error) { +func (s *FullNodeStruct) EthGetBlockByHash(p0 context.Context, p1 eth.EthHash, p2 bool) (eth.EthBlock, error) { if s.Internal.EthGetBlockByHash == nil { - return *new(EthBlock), ErrNotSupported + return *new(eth.EthBlock), ErrNotSupported } return s.Internal.EthGetBlockByHash(p0, p1, p2) } -func (s *FullNodeStub) EthGetBlockByHash(p0 context.Context, p1 EthHash, p2 bool) (EthBlock, error) { - return *new(EthBlock), ErrNotSupported +func (s *FullNodeStub) EthGetBlockByHash(p0 context.Context, p1 eth.EthHash, p2 bool) (eth.EthBlock, error) { + return *new(eth.EthBlock), ErrNotSupported } -func (s *FullNodeStruct) EthGetBlockByNumber(p0 context.Context, p1 string, p2 bool) (EthBlock, error) { +func (s *FullNodeStruct) EthGetBlockByNumber(p0 context.Context, p1 string, p2 bool) (eth.EthBlock, error) { if s.Internal.EthGetBlockByNumber == nil { - return *new(EthBlock), ErrNotSupported + return *new(eth.EthBlock), ErrNotSupported } return s.Internal.EthGetBlockByNumber(p0, p1, p2) } -func (s *FullNodeStub) EthGetBlockByNumber(p0 context.Context, p1 string, p2 bool) (EthBlock, error) { - return *new(EthBlock), ErrNotSupported +func (s *FullNodeStub) EthGetBlockByNumber(p0 context.Context, p1 string, p2 bool) (eth.EthBlock, error) { + return *new(eth.EthBlock), ErrNotSupported } -func (s *FullNodeStruct) EthGetBlockTransactionCountByHash(p0 context.Context, p1 EthHash) (EthUint64, error) { +func (s *FullNodeStruct) EthGetBlockTransactionCountByHash(p0 context.Context, p1 eth.EthHash) (eth.EthUint64, error) { if s.Internal.EthGetBlockTransactionCountByHash == nil { - return *new(EthUint64), ErrNotSupported + return *new(eth.EthUint64), ErrNotSupported } return s.Internal.EthGetBlockTransactionCountByHash(p0, p1) } -func (s *FullNodeStub) EthGetBlockTransactionCountByHash(p0 context.Context, p1 EthHash) (EthUint64, error) { - return *new(EthUint64), ErrNotSupported +func (s *FullNodeStub) EthGetBlockTransactionCountByHash(p0 context.Context, p1 eth.EthHash) (eth.EthUint64, error) { + return *new(eth.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthGetBlockTransactionCountByNumber(p0 context.Context, p1 EthUint64) (EthUint64, error) { +func (s *FullNodeStruct) EthGetBlockTransactionCountByNumber(p0 context.Context, p1 eth.EthUint64) (eth.EthUint64, error) { if s.Internal.EthGetBlockTransactionCountByNumber == nil { - return *new(EthUint64), ErrNotSupported + return *new(eth.EthUint64), ErrNotSupported } return s.Internal.EthGetBlockTransactionCountByNumber(p0, p1) } -func (s *FullNodeStub) EthGetBlockTransactionCountByNumber(p0 context.Context, p1 EthUint64) (EthUint64, error) { - return *new(EthUint64), ErrNotSupported +func (s *FullNodeStub) EthGetBlockTransactionCountByNumber(p0 context.Context, p1 eth.EthUint64) (eth.EthUint64, error) { + return *new(eth.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthGetCode(p0 context.Context, p1 EthAddress, p2 string) (EthBytes, error) { +func (s *FullNodeStruct) EthGetCode(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBytes, error) { if s.Internal.EthGetCode == nil { - return *new(EthBytes), ErrNotSupported + return *new(eth.EthBytes), ErrNotSupported } return s.Internal.EthGetCode(p0, p1, p2) } -func (s *FullNodeStub) EthGetCode(p0 context.Context, p1 EthAddress, p2 string) (EthBytes, error) { - return *new(EthBytes), ErrNotSupported +func (s *FullNodeStub) EthGetCode(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBytes, error) { + return *new(eth.EthBytes), ErrNotSupported } -func (s *FullNodeStruct) EthGetStorageAt(p0 context.Context, p1 EthAddress, p2 EthBytes, p3 string) (EthBytes, error) { +func (s *FullNodeStruct) EthGetStorageAt(p0 context.Context, p1 eth.EthAddress, p2 eth.EthBytes, p3 string) (eth.EthBytes, error) { if s.Internal.EthGetStorageAt == nil { - return *new(EthBytes), ErrNotSupported + return *new(eth.EthBytes), ErrNotSupported } return s.Internal.EthGetStorageAt(p0, p1, p2, p3) } -func (s *FullNodeStub) EthGetStorageAt(p0 context.Context, p1 EthAddress, p2 EthBytes, p3 string) (EthBytes, error) { - return *new(EthBytes), ErrNotSupported +func (s *FullNodeStub) EthGetStorageAt(p0 context.Context, p1 eth.EthAddress, p2 eth.EthBytes, p3 string) (eth.EthBytes, error) { + return *new(eth.EthBytes), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionByBlockHashAndIndex(p0 context.Context, p1 EthHash, p2 EthUint64) (EthTx, error) { +func (s *FullNodeStruct) EthGetTransactionByBlockHashAndIndex(p0 context.Context, p1 eth.EthHash, p2 eth.EthUint64) (eth.EthTx, error) { if s.Internal.EthGetTransactionByBlockHashAndIndex == nil { - return *new(EthTx), ErrNotSupported + return *new(eth.EthTx), ErrNotSupported } return s.Internal.EthGetTransactionByBlockHashAndIndex(p0, p1, p2) } -func (s *FullNodeStub) EthGetTransactionByBlockHashAndIndex(p0 context.Context, p1 EthHash, p2 EthUint64) (EthTx, error) { - return *new(EthTx), ErrNotSupported +func (s *FullNodeStub) EthGetTransactionByBlockHashAndIndex(p0 context.Context, p1 eth.EthHash, p2 eth.EthUint64) (eth.EthTx, error) { + return *new(eth.EthTx), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionByBlockNumberAndIndex(p0 context.Context, p1 EthUint64, p2 EthUint64) (EthTx, error) { +func (s *FullNodeStruct) EthGetTransactionByBlockNumberAndIndex(p0 context.Context, p1 eth.EthUint64, p2 eth.EthUint64) (eth.EthTx, error) { if s.Internal.EthGetTransactionByBlockNumberAndIndex == nil { - return *new(EthTx), ErrNotSupported + return *new(eth.EthTx), ErrNotSupported } return s.Internal.EthGetTransactionByBlockNumberAndIndex(p0, p1, p2) } -func (s *FullNodeStub) EthGetTransactionByBlockNumberAndIndex(p0 context.Context, p1 EthUint64, p2 EthUint64) (EthTx, error) { - return *new(EthTx), ErrNotSupported +func (s *FullNodeStub) EthGetTransactionByBlockNumberAndIndex(p0 context.Context, p1 eth.EthUint64, p2 eth.EthUint64) (eth.EthTx, error) { + return *new(eth.EthTx), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionByHash(p0 context.Context, p1 *EthHash) (*EthTx, error) { +func (s *FullNodeStruct) EthGetTransactionByHash(p0 context.Context, p1 *eth.EthHash) (*eth.EthTx, error) { if s.Internal.EthGetTransactionByHash == nil { return nil, ErrNotSupported } return s.Internal.EthGetTransactionByHash(p0, p1) } -func (s *FullNodeStub) EthGetTransactionByHash(p0 context.Context, p1 *EthHash) (*EthTx, error) { +func (s *FullNodeStub) EthGetTransactionByHash(p0 context.Context, p1 *eth.EthHash) (*eth.EthTx, error) { return nil, ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionCount(p0 context.Context, p1 EthAddress, p2 string) (EthUint64, error) { +func (s *FullNodeStruct) EthGetTransactionCount(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthUint64, error) { if s.Internal.EthGetTransactionCount == nil { - return *new(EthUint64), ErrNotSupported + return *new(eth.EthUint64), ErrNotSupported } return s.Internal.EthGetTransactionCount(p0, p1, p2) } -func (s *FullNodeStub) EthGetTransactionCount(p0 context.Context, p1 EthAddress, p2 string) (EthUint64, error) { - return *new(EthUint64), ErrNotSupported +func (s *FullNodeStub) EthGetTransactionCount(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthUint64, error) { + return *new(eth.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionReceipt(p0 context.Context, p1 EthHash) (*EthTxReceipt, error) { +func (s *FullNodeStruct) EthGetTransactionReceipt(p0 context.Context, p1 eth.EthHash) (*eth.EthTxReceipt, error) { if s.Internal.EthGetTransactionReceipt == nil { return nil, ErrNotSupported } return s.Internal.EthGetTransactionReceipt(p0, p1) } -func (s *FullNodeStub) EthGetTransactionReceipt(p0 context.Context, p1 EthHash) (*EthTxReceipt, error) { +func (s *FullNodeStub) EthGetTransactionReceipt(p0 context.Context, p1 eth.EthHash) (*eth.EthTxReceipt, error) { return nil, ErrNotSupported } -func (s *FullNodeStruct) EthMaxPriorityFeePerGas(p0 context.Context) (EthBigInt, error) { +func (s *FullNodeStruct) EthMaxPriorityFeePerGas(p0 context.Context) (eth.EthBigInt, error) { if s.Internal.EthMaxPriorityFeePerGas == nil { - return *new(EthBigInt), ErrNotSupported + return *new(eth.EthBigInt), ErrNotSupported } return s.Internal.EthMaxPriorityFeePerGas(p0) } -func (s *FullNodeStub) EthMaxPriorityFeePerGas(p0 context.Context) (EthBigInt, error) { - return *new(EthBigInt), ErrNotSupported +func (s *FullNodeStub) EthMaxPriorityFeePerGas(p0 context.Context) (eth.EthBigInt, error) { + return *new(eth.EthBigInt), ErrNotSupported } -func (s *FullNodeStruct) EthProtocolVersion(p0 context.Context) (EthUint64, error) { +func (s *FullNodeStruct) EthProtocolVersion(p0 context.Context) (eth.EthUint64, error) { if s.Internal.EthProtocolVersion == nil { - return *new(EthUint64), ErrNotSupported + return *new(eth.EthUint64), ErrNotSupported } return s.Internal.EthProtocolVersion(p0) } -func (s *FullNodeStub) EthProtocolVersion(p0 context.Context) (EthUint64, error) { - return *new(EthUint64), ErrNotSupported +func (s *FullNodeStub) EthProtocolVersion(p0 context.Context) (eth.EthUint64, error) { + return *new(eth.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthSendRawTransaction(p0 context.Context, p1 EthBytes) (EthHash, error) { +func (s *FullNodeStruct) EthSendRawTransaction(p0 context.Context, p1 eth.EthBytes) (eth.EthHash, error) { if s.Internal.EthSendRawTransaction == nil { - return *new(EthHash), ErrNotSupported + return *new(eth.EthHash), ErrNotSupported } return s.Internal.EthSendRawTransaction(p0, p1) } -func (s *FullNodeStub) EthSendRawTransaction(p0 context.Context, p1 EthBytes) (EthHash, error) { - return *new(EthHash), ErrNotSupported +func (s *FullNodeStub) EthSendRawTransaction(p0 context.Context, p1 eth.EthBytes) (eth.EthHash, error) { + return *new(eth.EthHash), ErrNotSupported } func (s *FullNodeStruct) GasEstimateFeeCap(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) { diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 76cee3b6a7aff4af721efa86197c1f601692d1a5..c2437754646b00a9cf9ddbf5bdc60322eb5773c6 100644 GIT binary patch delta 23642 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 xb8QA!Hc5M5V&!&r>d|wfBjc?4W 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 diff --git a/chain/consensus/filcns/filecoin.go b/chain/consensus/filcns/filecoin.go index 570410052..c2cc3aa83 100644 --- a/chain/consensus/filcns/filecoin.go +++ b/chain/consensus/filcns/filecoin.go @@ -28,7 +28,6 @@ import ( blockadt "github.com/filecoin-project/specs-actors/actors/util/adt" "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" - "github.com/filecoin-project/lotus/api" bstore "github.com/filecoin-project/lotus/blockstore" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain" @@ -36,6 +35,7 @@ import ( "github.com/filecoin-project/lotus/chain/actors/builtin/power" "github.com/filecoin-project/lotus/chain/beacon" "github.com/filecoin-project/lotus/chain/consensus" + "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/rand" "github.com/filecoin-project/lotus/chain/state" "github.com/filecoin-project/lotus/chain/stmgr" @@ -577,7 +577,7 @@ func (filec *FilecoinEC) checkBlockMessages(ctx context.Context, b *types.FullBl digest := m.Message.Cid().Bytes() if m.Signature.Type == crypto.SigTypeDelegated { - txArgs, err := api.NewEthTxArgsFromMessage(&m.Message) + txArgs, err := eth.NewEthTxArgsFromMessage(&m.Message) if err != nil { return err } diff --git a/api/eth_transactions.go b/chain/eth/eth_transactions.go similarity index 99% rename from api/eth_transactions.go rename to chain/eth/eth_transactions.go index ee2b083ce..da294e95c 100644 --- a/api/eth_transactions.go +++ b/chain/eth/eth_transactions.go @@ -1,4 +1,4 @@ -package api +package eth import ( "bytes" diff --git a/api/eth_transactions_test.go b/chain/eth/eth_transactions_test.go similarity index 99% rename from api/eth_transactions_test.go rename to chain/eth/eth_transactions_test.go index e7dd6ba1e..1bb93c230 100644 --- a/api/eth_transactions_test.go +++ b/chain/eth/eth_transactions_test.go @@ -1,4 +1,4 @@ -package api +package eth import ( "bytes" diff --git a/api/eth_types.go b/chain/eth/eth_types.go similarity index 88% rename from api/eth_types.go rename to chain/eth/eth_types.go index ffce16756..242de0d84 100644 --- a/api/eth_types.go +++ b/chain/eth/eth_types.go @@ -1,4 +1,4 @@ -package api +package eth import ( "bytes" @@ -18,7 +18,6 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/big" builtintypes "github.com/filecoin-project/go-state-types/builtin" - "github.com/filecoin-project/go-state-types/builtin/v10/eam" "github.com/filecoin-project/lotus/build" ) @@ -198,46 +197,6 @@ type EthTxReceipt struct { Logs []string `json:"logs"` } -func NewEthTxReceipt(tx EthTx, lookup *MsgLookup, replay *InvocResult) (EthTxReceipt, error) { - receipt := EthTxReceipt{ - TransactionHash: tx.Hash, - TransactionIndex: tx.TransactionIndex, - BlockHash: tx.BlockHash, - BlockNumber: tx.BlockNumber, - From: tx.From, - To: tx.To, - StateRoot: EmptyEthHash, - LogsBloom: []byte{0}, - Logs: []string{}, - } - - if receipt.To == nil && lookup.Receipt.ExitCode.IsSuccess() { - // Create and Create2 return the same things. - var ret eam.CreateReturn - if err := ret.UnmarshalCBOR(bytes.NewReader(lookup.Receipt.Return)); err != nil { - return EthTxReceipt{}, xerrors.Errorf("failed to parse contract creation result: %w", err) - } - addr := EthAddress(ret.EthAddress) - receipt.ContractAddress = &addr - } - - if lookup.Receipt.ExitCode.IsSuccess() { - receipt.Status = 1 - } - if lookup.Receipt.ExitCode.IsError() { - receipt.Status = 0 - } - - receipt.GasUsed = EthUint64(lookup.Receipt.GasUsed) - - // TODO: handle CumulativeGasUsed - receipt.CumulativeGasUsed = EmptyEthInt - - effectiveGasPrice := big.Div(replay.GasCost.TotalCost, big.NewInt(lookup.Receipt.GasUsed)) - receipt.EffectiveGasPrice = EthBigInt(effectiveGasPrice) - return receipt, nil -} - const ( EthAddressLength = 20 EthHashLength = 32 diff --git a/api/eth_types_test.go b/chain/eth/eth_types_test.go similarity index 99% rename from api/eth_types_test.go rename to chain/eth/eth_types_test.go index d3c16d434..1725be444 100644 --- a/api/eth_types_test.go +++ b/chain/eth/eth_types_test.go @@ -1,5 +1,5 @@ // stm: #unit -package api +package eth import ( "strings" diff --git a/api/rlp.go b/chain/eth/rlp.go similarity index 99% rename from api/rlp.go rename to chain/eth/rlp.go index 1a0b06a80..637b11e2b 100644 --- a/api/rlp.go +++ b/chain/eth/rlp.go @@ -1,4 +1,4 @@ -package api +package eth import ( "bytes" diff --git a/api/rlp_test.go b/chain/eth/rlp_test.go similarity index 99% rename from api/rlp_test.go rename to chain/eth/rlp_test.go index fae14c782..2cb4afdeb 100644 --- a/api/rlp_test.go +++ b/chain/eth/rlp_test.go @@ -1,4 +1,4 @@ -package api +package eth import ( "encoding/hex" diff --git a/chain/messagepool/messagepool.go b/chain/messagepool/messagepool.go index 93f6977b1..c64813078 100644 --- a/chain/messagepool/messagepool.go +++ b/chain/messagepool/messagepool.go @@ -34,6 +34,7 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" + "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/stmgr" "github.com/filecoin-project/lotus/chain/store" "github.com/filecoin-project/lotus/chain/types" @@ -776,7 +777,7 @@ func sigCacheKey(m *types.SignedMessage) (string, error) { case crypto.SigTypeSecp256k1: return string(m.Cid().Bytes()), nil case crypto.SigTypeDelegated: - txArgs, err := api.NewEthTxArgsFromMessage(&m.Message) + txArgs, err := eth.NewEthTxArgsFromMessage(&m.Message) if err != nil { return "", err } @@ -803,7 +804,7 @@ func (mp *MessagePool) VerifyMsgSig(m *types.SignedMessage) error { } if m.Signature.Type == crypto.SigTypeDelegated { - txArgs, err := api.NewEthTxArgsFromMessage(&m.Message) + txArgs, err := eth.NewEthTxArgsFromMessage(&m.Message) if err != nil { return err } diff --git a/node/impl/full/dummy.go b/node/impl/full/dummy.go index a46690340..912b50402 100644 --- a/node/impl/full/dummy.go +++ b/node/impl/full/dummy.go @@ -4,74 +4,74 @@ import ( "context" "errors" - "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/chain/eth" ) var ErrImplementMe = errors.New("Not implemented yet") type EthModuleDummy struct{} -func (e *EthModuleDummy) EthBlockNumber(ctx context.Context) (api.EthUint64, error) { +func (e *EthModuleDummy) EthBlockNumber(ctx context.Context) (eth.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthAccounts(ctx context.Context) ([]api.EthAddress, error) { +func (e *EthModuleDummy) EthAccounts(ctx context.Context) ([]eth.EthAddress, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum api.EthUint64) (api.EthUint64, error) { +func (e *EthModuleDummy) EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum eth.EthUint64) (eth.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthGetBlockTransactionCountByHash(ctx context.Context, blkHash api.EthHash) (api.EthUint64, error) { +func (e *EthModuleDummy) EthGetBlockTransactionCountByHash(ctx context.Context, blkHash eth.EthHash) (eth.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthGetBlockByHash(ctx context.Context, blkHash api.EthHash, fullTxInfo bool) (api.EthBlock, error) { - return api.EthBlock{}, ErrImplementMe +func (e *EthModuleDummy) EthGetBlockByHash(ctx context.Context, blkHash eth.EthHash, fullTxInfo bool) (eth.EthBlock, error) { + return eth.EthBlock{}, ErrImplementMe } -func (e *EthModuleDummy) EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (api.EthBlock, error) { - return api.EthBlock{}, ErrImplementMe +func (e *EthModuleDummy) EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) { + return eth.EthBlock{}, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionByHash(ctx context.Context, txHash *api.EthHash) (*api.EthTx, error) { +func (e *EthModuleDummy) EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionCount(ctx context.Context, sender api.EthAddress, blkOpt string) (api.EthUint64, error) { +func (e *EthModuleDummy) EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkOpt string) (eth.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionReceipt(ctx context.Context, txHash api.EthHash) (*api.EthTxReceipt, error) { +func (e *EthModuleDummy) EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*eth.EthTxReceipt, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash api.EthHash, txIndex api.EthUint64) (api.EthTx, error) { - return api.EthTx{}, ErrImplementMe +func (e *EthModuleDummy) EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) { + return eth.EthTx{}, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum api.EthUint64, txIndex api.EthUint64) (api.EthTx, error) { - return api.EthTx{}, ErrImplementMe +func (e *EthModuleDummy) EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) { + return eth.EthTx{}, ErrImplementMe } -func (e *EthModuleDummy) EthGetCode(ctx context.Context, address api.EthAddress, blkOpt string) (api.EthBytes, error) { +func (e *EthModuleDummy) EthGetCode(ctx context.Context, address eth.EthAddress, blkOpt string) (eth.EthBytes, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetStorageAt(ctx context.Context, address api.EthAddress, position api.EthBytes, blkParam string) (api.EthBytes, error) { +func (e *EthModuleDummy) EthGetStorageAt(ctx context.Context, address eth.EthAddress, position eth.EthBytes, blkParam string) (eth.EthBytes, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetBalance(ctx context.Context, address api.EthAddress, blkParam string) (api.EthBigInt, error) { - return api.EthBigIntZero, ErrImplementMe +func (e *EthModuleDummy) EthGetBalance(ctx context.Context, address eth.EthAddress, blkParam string) (eth.EthBigInt, error) { + return eth.EthBigIntZero, ErrImplementMe } -func (e *EthModuleDummy) EthFeeHistory(ctx context.Context, blkCount api.EthUint64, newestBlk string, rewardPercentiles []float64) (api.EthFeeHistory, error) { - return api.EthFeeHistory{}, ErrImplementMe +func (e *EthModuleDummy) EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, newestBlk string, rewardPercentiles []float64) (eth.EthFeeHistory, error) { + return eth.EthFeeHistory{}, ErrImplementMe } -func (e *EthModuleDummy) EthChainId(ctx context.Context) (api.EthUint64, error) { +func (e *EthModuleDummy) EthChainId(ctx context.Context) (eth.EthUint64, error) { return 0, ErrImplementMe } @@ -83,26 +83,26 @@ func (e *EthModuleDummy) NetListening(ctx context.Context) (bool, error) { return false, ErrImplementMe } -func (e *EthModuleDummy) EthProtocolVersion(ctx context.Context) (api.EthUint64, error) { +func (e *EthModuleDummy) EthProtocolVersion(ctx context.Context) (eth.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthGasPrice(ctx context.Context) (api.EthBigInt, error) { - return api.EthBigIntZero, ErrImplementMe +func (e *EthModuleDummy) EthGasPrice(ctx context.Context) (eth.EthBigInt, error) { + return eth.EthBigIntZero, ErrImplementMe } -func (e *EthModuleDummy) EthEstimateGas(ctx context.Context, tx api.EthCall) (api.EthUint64, error) { +func (e *EthModuleDummy) EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthCall(ctx context.Context, tx api.EthCall, blkParam string) (api.EthBytes, error) { +func (e *EthModuleDummy) EthCall(ctx context.Context, tx eth.EthCall, blkParam string) (eth.EthBytes, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthMaxPriorityFeePerGas(ctx context.Context) (api.EthBigInt, error) { - return api.EthBigIntZero, ErrImplementMe +func (e *EthModuleDummy) EthMaxPriorityFeePerGas(ctx context.Context) (eth.EthBigInt, error) { + return eth.EthBigIntZero, ErrImplementMe } -func (e *EthModuleDummy) EthSendRawTransaction(ctx context.Context, rawTx api.EthBytes) (api.EthHash, error) { - return api.EthHash{}, ErrImplementMe +func (e *EthModuleDummy) EthSendRawTransaction(ctx context.Context, rawTx eth.EthBytes) (eth.EthHash, error) { + return eth.EthHash{}, ErrImplementMe } diff --git a/node/impl/full/eth.go b/node/impl/full/eth.go index 2c9572dc4..136c3bdbc 100644 --- a/node/impl/full/eth.go +++ b/node/impl/full/eth.go @@ -22,6 +22,7 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/messagepool" "github.com/filecoin-project/lotus/chain/stmgr" "github.com/filecoin-project/lotus/chain/store" @@ -30,30 +31,30 @@ import ( ) type EthModuleAPI interface { - EthBlockNumber(ctx context.Context) (api.EthUint64, error) - EthAccounts(ctx context.Context) ([]api.EthAddress, error) - EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum api.EthUint64) (api.EthUint64, error) - EthGetBlockTransactionCountByHash(ctx context.Context, blkHash api.EthHash) (api.EthUint64, error) - EthGetBlockByHash(ctx context.Context, blkHash api.EthHash, fullTxInfo bool) (api.EthBlock, error) - EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (api.EthBlock, error) - EthGetTransactionByHash(ctx context.Context, txHash *api.EthHash) (*api.EthTx, error) - EthGetTransactionCount(ctx context.Context, sender api.EthAddress, blkOpt string) (api.EthUint64, error) - EthGetTransactionReceipt(ctx context.Context, txHash api.EthHash) (*api.EthTxReceipt, error) - EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash api.EthHash, txIndex api.EthUint64) (api.EthTx, error) - EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum api.EthUint64, txIndex api.EthUint64) (api.EthTx, error) - EthGetCode(ctx context.Context, address api.EthAddress, blkOpt string) (api.EthBytes, error) - EthGetStorageAt(ctx context.Context, address api.EthAddress, position api.EthBytes, blkParam string) (api.EthBytes, error) - EthGetBalance(ctx context.Context, address api.EthAddress, blkParam string) (api.EthBigInt, error) - EthFeeHistory(ctx context.Context, blkCount api.EthUint64, newestBlk string, rewardPercentiles []float64) (api.EthFeeHistory, error) - EthChainId(ctx context.Context) (api.EthUint64, error) + EthBlockNumber(ctx context.Context) (eth.EthUint64, error) + EthAccounts(ctx context.Context) ([]eth.EthAddress, error) + EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum eth.EthUint64) (eth.EthUint64, error) + EthGetBlockTransactionCountByHash(ctx context.Context, blkHash eth.EthHash) (eth.EthUint64, error) + EthGetBlockByHash(ctx context.Context, blkHash eth.EthHash, fullTxInfo bool) (eth.EthBlock, error) + EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) + EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) + EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkOpt string) (eth.EthUint64, error) + EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*eth.EthTxReceipt, error) + EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) + EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) + EthGetCode(ctx context.Context, address eth.EthAddress, blkOpt string) (eth.EthBytes, error) + EthGetStorageAt(ctx context.Context, address eth.EthAddress, position eth.EthBytes, blkParam string) (eth.EthBytes, error) + EthGetBalance(ctx context.Context, address eth.EthAddress, blkParam string) (eth.EthBigInt, error) + EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, newestBlk string, rewardPercentiles []float64) (eth.EthFeeHistory, error) + EthChainId(ctx context.Context) (eth.EthUint64, error) NetVersion(ctx context.Context) (string, error) NetListening(ctx context.Context) (bool, error) - EthProtocolVersion(ctx context.Context) (api.EthUint64, error) - EthGasPrice(ctx context.Context) (api.EthBigInt, error) - EthEstimateGas(ctx context.Context, tx api.EthCall) (api.EthUint64, error) - EthCall(ctx context.Context, tx api.EthCall, blkParam string) (api.EthBytes, error) - EthMaxPriorityFeePerGas(ctx context.Context) (api.EthBigInt, error) - EthSendRawTransaction(ctx context.Context, rawTx api.EthBytes) (api.EthHash, error) + EthProtocolVersion(ctx context.Context) (eth.EthUint64, error) + EthGasPrice(ctx context.Context) (eth.EthBigInt, error) + EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.EthUint64, error) + EthCall(ctx context.Context, tx eth.EthCall, blkParam string) (eth.EthBytes, error) + EthMaxPriorityFeePerGas(ctx context.Context) (eth.EthBigInt, error) + EthSendRawTransaction(ctx context.Context, rawTx eth.EthBytes) (eth.EthHash, error) } var _ EthModuleAPI = *new(api.FullNode) @@ -87,14 +88,14 @@ func (a *EthModule) StateNetworkName(ctx context.Context) (dtypes.NetworkName, e return stmgr.GetNetworkName(ctx, a.StateManager, a.Chain.GetHeaviestTipSet().ParentState()) } -func (a *EthModule) EthBlockNumber(context.Context) (api.EthUint64, error) { +func (a *EthModule) EthBlockNumber(context.Context) (eth.EthUint64, error) { height := a.Chain.GetHeaviestTipSet().Height() - return api.EthUint64(height), nil + return eth.EthUint64(height), nil } -func (a *EthModule) EthAccounts(context.Context) ([]api.EthAddress, error) { +func (a *EthModule) EthAccounts(context.Context) ([]eth.EthAddress, error) { // The lotus node is not expected to hold manage accounts, so we'll always return an empty array - return []api.EthAddress{}, nil + return []eth.EthAddress{}, nil } func (a *EthModule) countTipsetMsgs(ctx context.Context, ts *types.TipSet) (int, error) { @@ -111,54 +112,54 @@ func (a *EthModule) countTipsetMsgs(ctx context.Context, ts *types.TipSet) (int, return count, nil } -func (a *EthModule) EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum api.EthUint64) (api.EthUint64, error) { +func (a *EthModule) EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum eth.EthUint64) (eth.EthUint64, error) { ts, err := a.Chain.GetTipsetByHeight(ctx, abi.ChainEpoch(blkNum), nil, false) if err != nil { - return api.EthUint64(0), xerrors.Errorf("error loading tipset %s: %w", ts, err) + return eth.EthUint64(0), xerrors.Errorf("error loading tipset %s: %w", ts, err) } count, err := a.countTipsetMsgs(ctx, ts) - return api.EthUint64(count), err + return eth.EthUint64(count), err } -func (a *EthModule) EthGetBlockTransactionCountByHash(ctx context.Context, blkHash api.EthHash) (api.EthUint64, error) { +func (a *EthModule) EthGetBlockTransactionCountByHash(ctx context.Context, blkHash eth.EthHash) (eth.EthUint64, error) { ts, err := a.Chain.GetTipSetByCid(ctx, blkHash.ToCid()) if err != nil { - return api.EthUint64(0), xerrors.Errorf("error loading tipset %s: %w", ts, err) + return eth.EthUint64(0), xerrors.Errorf("error loading tipset %s: %w", ts, err) } count, err := a.countTipsetMsgs(ctx, ts) - return api.EthUint64(count), err + return eth.EthUint64(count), err } -func (a *EthModule) EthGetBlockByHash(ctx context.Context, blkHash api.EthHash, fullTxInfo bool) (api.EthBlock, error) { +func (a *EthModule) EthGetBlockByHash(ctx context.Context, blkHash eth.EthHash, fullTxInfo bool) (eth.EthBlock, error) { ts, err := a.Chain.GetTipSetByCid(ctx, blkHash.ToCid()) if err != nil { - return api.EthBlock{}, xerrors.Errorf("error loading tipset %s: %w", ts, err) + return eth.EthBlock{}, xerrors.Errorf("error loading tipset %s: %w", ts, err) } return a.newEthBlockFromFilecoinTipSet(ctx, ts, fullTxInfo) } -func (a *EthModule) EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (api.EthBlock, error) { - typ, num, err := api.ParseBlkNumOption(blkNum) +func (a *EthModule) EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) { + typ, num, err := eth.ParseBlkNumOption(blkNum) if err != nil { - return api.EthBlock{}, fmt.Errorf("cannot parse block number: %v", err) + return eth.EthBlock{}, fmt.Errorf("cannot parse block number: %v", err) } switch typ { - case api.BlkNumLatest: - num = api.EthUint64(a.Chain.GetHeaviestTipSet().Height()) - 1 - case api.BlkNumPending: - num = api.EthUint64(a.Chain.GetHeaviestTipSet().Height()) + case eth.BlkNumLatest: + num = eth.EthUint64(a.Chain.GetHeaviestTipSet().Height()) - 1 + case eth.BlkNumPending: + num = eth.EthUint64(a.Chain.GetHeaviestTipSet().Height()) } ts, err := a.Chain.GetTipsetByHeight(ctx, abi.ChainEpoch(num), nil, false) if err != nil { - return api.EthBlock{}, xerrors.Errorf("error loading tipset %s: %w", ts, err) + return eth.EthBlock{}, xerrors.Errorf("error loading tipset %s: %w", ts, err) } return a.newEthBlockFromFilecoinTipSet(ctx, ts, fullTxInfo) } -func (a *EthModule) EthGetTransactionByHash(ctx context.Context, txHash *api.EthHash) (*api.EthTx, error) { +func (a *EthModule) EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) { // Ethereum's behavior is to return null when the txHash is invalid, so we use nil to check if txHash is valid if txHash == nil { return nil, nil @@ -178,19 +179,19 @@ func (a *EthModule) EthGetTransactionByHash(ctx context.Context, txHash *api.Eth return &tx, nil } -func (a *EthModule) EthGetTransactionCount(ctx context.Context, sender api.EthAddress, blkParam string) (api.EthUint64, error) { +func (a *EthModule) EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkParam string) (eth.EthUint64, error) { addr, err := sender.ToFilecoinAddress() if err != nil { - return api.EthUint64(0), nil + return eth.EthUint64(0), nil } nonce, err := a.Mpool.GetNonce(ctx, addr, types.EmptyTSK) if err != nil { - return api.EthUint64(0), nil + return eth.EthUint64(0), nil } - return api.EthUint64(nonce), nil + return eth.EthUint64(nonce), nil } -func (a *EthModule) EthGetTransactionReceipt(ctx context.Context, txHash api.EthHash) (*api.EthTxReceipt, error) { +func (a *EthModule) EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*eth.EthTxReceipt, error) { cid := txHash.ToCid() msgLookup, err := a.StateAPI.StateSearchMsg(ctx, types.EmptyTSK, cid, api.LookbackNoLimit, true) @@ -208,23 +209,23 @@ func (a *EthModule) EthGetTransactionReceipt(ctx context.Context, txHash api.Eth return nil, nil } - receipt, err := api.NewEthTxReceipt(tx, msgLookup, replay) + receipt, err := NewEthTxReceipt(tx, msgLookup, replay) if err != nil { return nil, nil } return &receipt, nil } -func (a *EthModule) EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash api.EthHash, txIndex api.EthUint64) (api.EthTx, error) { - return api.EthTx{}, nil +func (a *EthModule) EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) { + return eth.EthTx{}, nil } -func (a *EthModule) EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum api.EthUint64, txIndex api.EthUint64) (api.EthTx, error) { - return api.EthTx{}, nil +func (a *EthModule) EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) { + return eth.EthTx{}, nil } // EthGetCode returns string value of the compiled bytecode -func (a *EthModule) EthGetCode(ctx context.Context, ethAddr api.EthAddress, blkOpt string) (api.EthBytes, error) { +func (a *EthModule) EthGetCode(ctx context.Context, ethAddr eth.EthAddress, blkOpt string) (eth.EthBytes, error) { to, err := ethAddr.ToFilecoinAddress() if err != nil { return nil, xerrors.Errorf("cannot get Filecoin address: %w", err) @@ -288,7 +289,7 @@ func (a *EthModule) EthGetCode(ctx context.Context, ethAddr api.EthAddress, blkO return blk.RawData(), nil } -func (a *EthModule) EthGetStorageAt(ctx context.Context, ethAddr api.EthAddress, position api.EthBytes, blkParam string) (api.EthBytes, error) { +func (a *EthModule) EthGetStorageAt(ctx context.Context, ethAddr eth.EthAddress, position eth.EthBytes, blkParam string) (eth.EthBytes, error) { l := len(position) if l > 32 { return nil, fmt.Errorf("supplied storage key is too long") @@ -362,35 +363,35 @@ func (a *EthModule) EthGetStorageAt(ctx context.Context, ethAddr api.EthAddress, return res.MsgRct.Return, nil } -func (a *EthModule) EthGetBalance(ctx context.Context, address api.EthAddress, blkParam string) (api.EthBigInt, error) { +func (a *EthModule) EthGetBalance(ctx context.Context, address eth.EthAddress, blkParam string) (eth.EthBigInt, error) { filAddr, err := address.ToFilecoinAddress() if err != nil { - return api.EthBigInt{}, err + return eth.EthBigInt{}, err } actor, err := a.StateGetActor(ctx, filAddr, types.EmptyTSK) if xerrors.Is(err, types.ErrActorNotFound) { - return api.EthBigIntZero, nil + return eth.EthBigIntZero, nil } else if err != nil { - return api.EthBigInt{}, err + return eth.EthBigInt{}, err } - return api.EthBigInt{Int: actor.Balance.Int}, nil + return eth.EthBigInt{Int: actor.Balance.Int}, nil } -func (a *EthModule) EthChainId(ctx context.Context) (api.EthUint64, error) { - return api.EthUint64(build.Eip155ChainId), nil +func (a *EthModule) EthChainId(ctx context.Context) (eth.EthUint64, error) { + return eth.EthUint64(build.Eip155ChainId), nil } -func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount api.EthUint64, newestBlkNum string, rewardPercentiles []float64) (api.EthFeeHistory, error) { +func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, newestBlkNum string, rewardPercentiles []float64) (eth.EthFeeHistory, error) { if blkCount > 1024 { - return api.EthFeeHistory{}, fmt.Errorf("block count should be smaller than 1024") + return eth.EthFeeHistory{}, fmt.Errorf("block count should be smaller than 1024") } newestBlkHeight := uint64(a.Chain.GetHeaviestTipSet().Height()) // TODO https://github.com/filecoin-project/ref-fvm/issues/1016 - var blkNum api.EthUint64 + var blkNum eth.EthUint64 err := blkNum.UnmarshalJSON([]byte(`"` + newestBlkNum + `"`)) if err == nil && uint64(blkNum) < newestBlkHeight { newestBlkHeight = uint64(blkNum) @@ -405,13 +406,13 @@ func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount api.EthUint64, n ts, err := a.Chain.GetTipsetByHeight(ctx, abi.ChainEpoch(newestBlkHeight), nil, false) if err != nil { - return api.EthFeeHistory{}, fmt.Errorf("cannot load find block height: %v", newestBlkHeight) + return eth.EthFeeHistory{}, fmt.Errorf("cannot load find block height: %v", newestBlkHeight) } // FIXME: baseFeePerGas should include the next block after the newest of the returned range, because this // can be inferred from the newest block. we use the newest block's baseFeePerGas for now but need to fix it // In other words, due to deferred execution, we might not be returning the most useful value here for the client. - baseFeeArray := []api.EthBigInt{api.EthBigInt(ts.Blocks()[0].ParentBaseFee)} + baseFeeArray := []eth.EthBigInt{eth.EthBigInt(ts.Blocks()[0].ParentBaseFee)} gasUsedRatioArray := []float64{} for ts.Height() >= abi.ChainEpoch(oldestBlkHeight) { @@ -419,17 +420,17 @@ func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount api.EthUint64, n // totalize gas used in the tipset. block, err := a.newEthBlockFromFilecoinTipSet(ctx, ts, false) if err != nil { - return api.EthFeeHistory{}, fmt.Errorf("cannot create eth block: %v", err) + return eth.EthFeeHistory{}, fmt.Errorf("cannot create eth block: %v", err) } // both arrays should be reversed at the end - baseFeeArray = append(baseFeeArray, api.EthBigInt(ts.Blocks()[0].ParentBaseFee)) + baseFeeArray = append(baseFeeArray, eth.EthBigInt(ts.Blocks()[0].ParentBaseFee)) gasUsedRatioArray = append(gasUsedRatioArray, float64(block.GasUsed)/float64(build.BlockGasLimit)) parentTsKey := ts.Parents() ts, err = a.Chain.LoadTipSet(ctx, parentTsKey) if err != nil { - return api.EthFeeHistory{}, fmt.Errorf("cannot load tipset key: %v", parentTsKey) + return eth.EthFeeHistory{}, fmt.Errorf("cannot load tipset key: %v", parentTsKey) } } @@ -442,7 +443,7 @@ func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount api.EthUint64, n gasUsedRatioArray[i], gasUsedRatioArray[j] = gasUsedRatioArray[j], gasUsedRatioArray[i] } - return api.EthFeeHistory{ + return eth.EthFeeHistory{ OldestBlock: oldestBlkHeight, BaseFeePerGas: baseFeeArray, GasUsedRatio: gasUsedRatioArray, @@ -462,20 +463,20 @@ func (a *EthModule) NetListening(ctx context.Context) (bool, error) { return true, nil } -func (a *EthModule) EthProtocolVersion(ctx context.Context) (api.EthUint64, error) { +func (a *EthModule) EthProtocolVersion(ctx context.Context) (eth.EthUint64, error) { height := a.Chain.GetHeaviestTipSet().Height() - return api.EthUint64(a.StateManager.GetNetworkVersion(ctx, height)), nil + return eth.EthUint64(a.StateManager.GetNetworkVersion(ctx, height)), nil } -func (a *EthModule) EthMaxPriorityFeePerGas(ctx context.Context) (api.EthBigInt, error) { +func (a *EthModule) EthMaxPriorityFeePerGas(ctx context.Context) (eth.EthBigInt, error) { gasPremium, err := a.GasAPI.GasEstimateGasPremium(ctx, 0, builtin.SystemActorAddr, 10000, types.EmptyTSK) if err != nil { - return api.EthBigInt(big.Zero()), err + return eth.EthBigInt(big.Zero()), err } - return api.EthBigInt(gasPremium), nil + return eth.EthBigInt(gasPremium), nil } -func (a *EthModule) EthGasPrice(ctx context.Context) (api.EthBigInt, error) { +func (a *EthModule) EthGasPrice(ctx context.Context) (eth.EthBigInt, error) { // According to Geth's implementation, eth_gasPrice should return base + tip // Ref: https://github.com/ethereum/pm/issues/328#issuecomment-853234014 @@ -484,22 +485,22 @@ func (a *EthModule) EthGasPrice(ctx context.Context) (api.EthBigInt, error) { premium, err := a.EthMaxPriorityFeePerGas(ctx) if err != nil { - return api.EthBigInt(big.Zero()), nil + return eth.EthBigInt(big.Zero()), nil } gasPrice := big.Add(baseFee, big.Int(premium)) - return api.EthBigInt(gasPrice), nil + return eth.EthBigInt(gasPrice), nil } -func (a *EthModule) EthSendRawTransaction(ctx context.Context, rawTx api.EthBytes) (api.EthHash, error) { - txArgs, err := api.ParseEthTxArgs(rawTx) +func (a *EthModule) EthSendRawTransaction(ctx context.Context, rawTx eth.EthBytes) (eth.EthHash, error) { + txArgs, err := eth.ParseEthTxArgs(rawTx) if err != nil { - return api.EmptyEthHash, err + return eth.EmptyEthHash, err } smsg, err := txArgs.ToSignedMessage() if err != nil { - return api.EmptyEthHash, err + return eth.EmptyEthHash, err } _, err = a.StateAPI.StateGetActor(ctx, smsg.Message.To, types.EmptyTSK) @@ -511,17 +512,17 @@ func (a *EthModule) EthSendRawTransaction(ctx context.Context, rawTx api.EthByte cid, err := a.MpoolAPI.MpoolPush(ctx, smsg) if err != nil { - return api.EmptyEthHash, err + return eth.EmptyEthHash, err } - return api.NewEthHashFromCid(cid) + return eth.NewEthHashFromCid(cid) } -func (a *EthModule) ethCallToFilecoinMessage(ctx context.Context, tx api.EthCall) (*types.Message, error) { +func (a *EthModule) ethCallToFilecoinMessage(ctx context.Context, tx eth.EthCall) (*types.Message, error) { var err error var from address.Address if tx.From == nil { // Send from the filecoin "system" address. - from, err = (api.EthAddress{}).ToFilecoinAddress() + from, err = (eth.EthAddress{}).ToFilecoinAddress() if err != nil { return nil, fmt.Errorf("failed to construct the ethereum system address: %w", err) } @@ -611,10 +612,10 @@ func (a *EthModule) applyMessage(ctx context.Context, msg *types.Message) (res * return res, nil } -func (a *EthModule) EthEstimateGas(ctx context.Context, tx api.EthCall) (api.EthUint64, error) { +func (a *EthModule) EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.EthUint64, error) { msg, err := a.ethCallToFilecoinMessage(ctx, tx) if err != nil { - return api.EthUint64(0), err + return eth.EthUint64(0), err } // Set the gas limit to the zero sentinel value, which makes @@ -623,13 +624,13 @@ func (a *EthModule) EthEstimateGas(ctx context.Context, tx api.EthCall) (api.Eth msg, err = a.GasAPI.GasEstimateMessageGas(ctx, msg, nil, types.EmptyTSK) if err != nil { - return api.EthUint64(0), err + return eth.EthUint64(0), err } - return api.EthUint64(msg.GasLimit), nil + return eth.EthUint64(msg.GasLimit), nil } -func (a *EthModule) EthCall(ctx context.Context, tx api.EthCall, blkParam string) (api.EthBytes, error) { +func (a *EthModule) EthCall(ctx context.Context, tx eth.EthCall, blkParam string) (eth.EthBytes, error) { msg, err := a.ethCallToFilecoinMessage(ctx, tx) if err != nil { return nil, err @@ -642,38 +643,38 @@ func (a *EthModule) EthCall(ctx context.Context, tx api.EthCall, blkParam string if len(invokeResult.MsgRct.Return) > 0 { return cbg.ReadByteArray(bytes.NewReader(invokeResult.MsgRct.Return), uint64(len(invokeResult.MsgRct.Return))) } - return api.EthBytes{}, nil + return eth.EthBytes{}, nil } -func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types.TipSet, fullTxInfo bool) (api.EthBlock, error) { +func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types.TipSet, fullTxInfo bool) (eth.EthBlock, error) { parent, err := a.Chain.LoadTipSet(ctx, ts.Parents()) if err != nil { - return api.EthBlock{}, err + return eth.EthBlock{}, err } parentKeyCid, err := parent.Key().Cid() if err != nil { - return api.EthBlock{}, err + return eth.EthBlock{}, err } - parentBlkHash, err := api.NewEthHashFromCid(parentKeyCid) + parentBlkHash, err := eth.NewEthHashFromCid(parentKeyCid) if err != nil { - return api.EthBlock{}, err + return eth.EthBlock{}, err } blkCid, err := ts.Key().Cid() if err != nil { - return api.EthBlock{}, err + return eth.EthBlock{}, err } - blkHash, err := api.NewEthHashFromCid(blkCid) + blkHash, err := eth.NewEthHashFromCid(blkCid) if err != nil { - return api.EthBlock{}, err + return eth.EthBlock{}, err } blkMsgs, err := a.Chain.BlockMsgsForTipset(ctx, ts) if err != nil { - return api.EthBlock{}, xerrors.Errorf("error loading messages for tipset: %v: %w", ts, err) + return eth.EthBlock{}, xerrors.Errorf("error loading messages for tipset: %v: %w", ts, err) } - block := api.NewEthBlock() + block := eth.NewEthBlock() // this seems to be a very expensive way to get gasUsed of the block. may need to find an efficient way to do it gasUsed := int64(0) @@ -681,20 +682,20 @@ func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types for _, msg := range append(blkMsg.BlsMessages, blkMsg.SecpkMessages...) { msgLookup, err := a.StateAPI.StateSearchMsg(ctx, types.EmptyTSK, msg.Cid(), api.LookbackNoLimit, true) if err != nil || msgLookup == nil { - return api.EthBlock{}, nil + return eth.EthBlock{}, nil } gasUsed += msgLookup.Receipt.GasUsed if fullTxInfo { tx, err := a.newEthTxFromFilecoinMessageLookup(ctx, msgLookup) if err != nil { - return api.EthBlock{}, nil + return eth.EthBlock{}, nil } block.Transactions = append(block.Transactions, tx) } else { - hash, err := api.NewEthHashFromCid(msg.Cid()) + hash, err := eth.NewEthHashFromCid(msg.Cid()) if err != nil { - return api.EthBlock{}, err + return eth.EthBlock{}, err } block.Transactions = append(block.Transactions, hash.String()) } @@ -702,11 +703,11 @@ func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types } block.Hash = blkHash - block.Number = api.EthUint64(ts.Height()) + block.Number = eth.EthUint64(ts.Height()) block.ParentHash = parentBlkHash - block.Timestamp = api.EthUint64(ts.Blocks()[0].Timestamp) - block.BaseFeePerGas = api.EthBigInt{Int: ts.Blocks()[0].ParentBaseFee.Int} - block.GasUsed = api.EthUint64(gasUsed) + block.Timestamp = eth.EthUint64(ts.Blocks()[0].Timestamp) + block.BaseFeePerGas = eth.EthBigInt{Int: ts.Blocks()[0].ParentBaseFee.Int} + block.GasUsed = eth.EthUint64(gasUsed) return block, nil } @@ -718,10 +719,10 @@ func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types // 3. Otherwise, we fall back to returning a masked ID Ethereum address. If the supplied address is an f0 address, we // use that ID to form the masked ID address. // 4. Otherwise, we fetch the actor's ID from the state tree and form the masked ID with it. -func (a *EthModule) lookupEthAddress(ctx context.Context, addr address.Address) (api.EthAddress, error) { +func (a *EthModule) lookupEthAddress(ctx context.Context, addr address.Address) (eth.EthAddress, error) { // Attempt to convert directly. - if ethAddr, ok, err := api.TryEthAddressFromFilecoinAddress(addr, false); err != nil { - return api.EthAddress{}, err + if ethAddr, ok, err := eth.TryEthAddressFromFilecoinAddress(addr, false); err != nil { + return eth.EthAddress{}, err } else if ok { return ethAddr, nil } @@ -729,19 +730,19 @@ func (a *EthModule) lookupEthAddress(ctx context.Context, addr address.Address) // Lookup on the target actor. actor, err := a.StateAPI.StateGetActor(ctx, addr, types.EmptyTSK) if err != nil { - return api.EthAddress{}, err + return eth.EthAddress{}, err } if actor.Address != nil { - if ethAddr, ok, err := api.TryEthAddressFromFilecoinAddress(*actor.Address, false); err != nil { - return api.EthAddress{}, err + if ethAddr, ok, err := eth.TryEthAddressFromFilecoinAddress(*actor.Address, false); err != nil { + return eth.EthAddress{}, err } else if ok { return ethAddr, nil } } // Check if we already have an ID addr, and use it if possible. - if ethAddr, ok, err := api.TryEthAddressFromFilecoinAddress(addr, true); err != nil { - return api.EthAddress{}, err + if ethAddr, ok, err := eth.TryEthAddressFromFilecoinAddress(addr, true); err != nil { + return eth.EthAddress{}, err } else if ok { return ethAddr, nil } @@ -749,42 +750,42 @@ func (a *EthModule) lookupEthAddress(ctx context.Context, addr address.Address) // Otherwise, resolve the ID addr. idAddr, err := a.StateAPI.StateLookupID(ctx, addr, types.EmptyTSK) if err != nil { - return api.EthAddress{}, err + return eth.EthAddress{}, err } - return api.EthAddressFromFilecoinAddress(idAddr) + return eth.EthAddressFromFilecoinAddress(idAddr) } -func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLookup *api.MsgLookup) (api.EthTx, error) { +func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLookup *api.MsgLookup) (eth.EthTx, error) { if msgLookup == nil { - return api.EthTx{}, fmt.Errorf("msg does not exist") + return eth.EthTx{}, fmt.Errorf("msg does not exist") } cid := msgLookup.Message - txHash, err := api.NewEthHashFromCid(cid) + txHash, err := eth.NewEthHashFromCid(cid) if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } ts, err := a.Chain.LoadTipSet(ctx, msgLookup.TipSet) if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } // This tx is located in the parent tipset parentTs, err := a.Chain.LoadTipSet(ctx, ts.Parents()) if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } parentTsCid, err := parentTs.Key().Cid() if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } // lookup the transactionIndex txIdx := -1 msgs, err := a.Chain.MessagesForTipset(ctx, parentTs) if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } for i, msg := range msgs { if msg.Cid() == msgLookup.Message { @@ -792,27 +793,27 @@ func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLo } } if txIdx == -1 { - return api.EthTx{}, fmt.Errorf("cannot find the msg in the tipset") + return eth.EthTx{}, fmt.Errorf("cannot find the msg in the tipset") } - blkHash, err := api.NewEthHashFromCid(parentTsCid) + blkHash, err := eth.NewEthHashFromCid(parentTsCid) if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } msg, err := a.ChainAPI.ChainGetMessage(ctx, msgLookup.Message) if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } fromEthAddr, err := a.lookupEthAddress(ctx, msg.From) if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } toEthAddr, err := a.lookupEthAddress(ctx, msg.To) if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } toAddr := &toEthAddr @@ -833,7 +834,7 @@ func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLo input = params.Initcode } if err != nil { - return api.EthTx{}, err + return eth.EthTx{}, err } } // Otherwise, try to decode as a cbor byte array. @@ -844,23 +845,63 @@ func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLo } } - tx := api.EthTx{ - ChainID: api.EthUint64(build.Eip155ChainId), + tx := eth.EthTx{ + ChainID: eth.EthUint64(build.Eip155ChainId), Hash: txHash, BlockHash: blkHash, - BlockNumber: api.EthUint64(parentTs.Height()), + BlockNumber: eth.EthUint64(parentTs.Height()), From: fromEthAddr, To: toAddr, - Value: api.EthBigInt(msg.Value), - Type: api.EthUint64(2), - TransactionIndex: api.EthUint64(txIdx), - Gas: api.EthUint64(msg.GasLimit), - MaxFeePerGas: api.EthBigInt(msg.GasFeeCap), - MaxPriorityFeePerGas: api.EthBigInt(msg.GasPremium), - V: api.EthBytes{}, - R: api.EthBytes{}, - S: api.EthBytes{}, + Value: eth.EthBigInt(msg.Value), + Type: eth.EthUint64(2), + TransactionIndex: eth.EthUint64(txIdx), + Gas: eth.EthUint64(msg.GasLimit), + MaxFeePerGas: eth.EthBigInt(msg.GasFeeCap), + MaxPriorityFeePerGas: eth.EthBigInt(msg.GasPremium), + V: eth.EthBytes{}, + R: eth.EthBytes{}, + S: eth.EthBytes{}, Input: input, } return tx, nil } + +func NewEthTxReceipt(tx eth.EthTx, lookup *api.MsgLookup, replay *api.InvocResult) (eth.EthTxReceipt, error) { + receipt := eth.EthTxReceipt{ + TransactionHash: tx.Hash, + TransactionIndex: tx.TransactionIndex, + BlockHash: tx.BlockHash, + BlockNumber: tx.BlockNumber, + From: tx.From, + To: tx.To, + StateRoot: eth.EmptyEthHash, + LogsBloom: []byte{0}, + Logs: []string{}, + } + + if receipt.To == nil && lookup.Receipt.ExitCode.IsSuccess() { + // Create and Create2 return the same things. + var ret eam.CreateReturn + if err := ret.UnmarshalCBOR(bytes.NewReader(lookup.Receipt.Return)); err != nil { + return eth.EthTxReceipt{}, xerrors.Errorf("failed to parse contract creation result: %w", err) + } + addr := eth.EthAddress(ret.EthAddress) + receipt.ContractAddress = &addr + } + + if lookup.Receipt.ExitCode.IsSuccess() { + receipt.Status = 1 + } + if lookup.Receipt.ExitCode.IsError() { + receipt.Status = 0 + } + + receipt.GasUsed = eth.EthUint64(lookup.Receipt.GasUsed) + + // TODO: handle CumulativeGasUsed + receipt.CumulativeGasUsed = eth.EmptyEthInt + + effectiveGasPrice := big.Div(replay.GasCost.TotalCost, big.NewInt(lookup.Receipt.GasUsed)) + receipt.EffectiveGasPrice = eth.EthBigInt(effectiveGasPrice) + return receipt, nil +} From 96bb03e1e0bb9818706467121df064966285e33c Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Wed, 14 Dec 2022 13:56:28 -0500 Subject: [PATCH 2/4] Move EthTxReceipt to api --- api/api_full.go | 21 ++++++++++++++++++++- api/mocks/mock_full.go | 4 ++-- api/proxy_gen.go | 6 +++--- build/openrpc/full.json.gz | Bin 31082 -> 31086 bytes chain/eth/eth_types.go | 19 ------------------- node/impl/full/dummy.go | 3 ++- node/impl/full/eth.go | 10 +++++----- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/api/api_full.go b/api/api_full.go index 17f0e166f..10cbc67e6 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -776,7 +776,7 @@ type FullNode interface { EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) //perm:read EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) //perm:read EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkOpt string) (eth.EthUint64, error) //perm:read - EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*eth.EthTxReceipt, error) //perm:read + EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*EthTxReceipt, error) //perm:read EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) //perm:read EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) //perm:read @@ -1289,3 +1289,22 @@ type PruneOpts struct { MovingGC bool RetainState int64 } + +type EthTxReceipt struct { + TransactionHash eth.EthHash `json:"transactionHash"` + TransactionIndex eth.EthUint64 `json:"transactionIndex"` + BlockHash eth.EthHash `json:"blockHash"` + BlockNumber eth.EthUint64 `json:"blockNumber"` + From eth.EthAddress `json:"from"` + To *eth.EthAddress `json:"to"` + // Logs + // LogsBloom + StateRoot eth.EthHash `json:"root"` + Status eth.EthUint64 `json:"status"` + ContractAddress *eth.EthAddress `json:"contractAddress"` + CumulativeGasUsed eth.EthUint64 `json:"cumulativeGasUsed"` + GasUsed eth.EthUint64 `json:"gasUsed"` + EffectiveGasPrice eth.EthBigInt `json:"effectiveGasPrice"` + LogsBloom eth.EthBytes `json:"logsBloom"` + Logs []string `json:"logs"` +} diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index 0522ef382..c43bcd932 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -1193,10 +1193,10 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionCount(arg0, arg1, arg2 inte } // EthGetTransactionReceipt mocks base method. -func (m *MockFullNode) EthGetTransactionReceipt(arg0 context.Context, arg1 eth.EthHash) (*eth.EthTxReceipt, error) { +func (m *MockFullNode) EthGetTransactionReceipt(arg0 context.Context, arg1 eth.EthHash) (*api.EthTxReceipt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionReceipt", arg0, arg1) - ret0, _ := ret[0].(*eth.EthTxReceipt) + ret0, _ := ret[0].(*api.EthTxReceipt) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/api/proxy_gen.go b/api/proxy_gen.go index b1c7a6d78..ae477f454 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -255,7 +255,7 @@ type FullNodeStruct struct { EthGetTransactionCount func(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthUint64, error) `perm:"read"` - EthGetTransactionReceipt func(p0 context.Context, p1 eth.EthHash) (*eth.EthTxReceipt, error) `perm:"read"` + EthGetTransactionReceipt func(p0 context.Context, p1 eth.EthHash) (*EthTxReceipt, error) `perm:"read"` EthMaxPriorityFeePerGas func(p0 context.Context) (eth.EthBigInt, error) `perm:"read"` @@ -2042,14 +2042,14 @@ func (s *FullNodeStub) EthGetTransactionCount(p0 context.Context, p1 eth.EthAddr return *new(eth.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionReceipt(p0 context.Context, p1 eth.EthHash) (*eth.EthTxReceipt, error) { +func (s *FullNodeStruct) EthGetTransactionReceipt(p0 context.Context, p1 eth.EthHash) (*EthTxReceipt, error) { if s.Internal.EthGetTransactionReceipt == nil { return nil, ErrNotSupported } return s.Internal.EthGetTransactionReceipt(p0, p1) } -func (s *FullNodeStub) EthGetTransactionReceipt(p0 context.Context, p1 eth.EthHash) (*eth.EthTxReceipt, error) { +func (s *FullNodeStub) EthGetTransactionReceipt(p0 context.Context, p1 eth.EthHash) (*EthTxReceipt, error) { return nil, ErrNotSupported } diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index c2437754646b00a9cf9ddbf5bdc60322eb5773c6..b512ffcfaebe8f701d94a2cf45455bb0121ca81c 100644 GIT binary patch delta 21778 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

on_wLBkO9b&=m^$rutRPxtT5tXxV4gi2QhJt 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 Date: Wed, 14 Dec 2022 14:08:38 -0500 Subject: [PATCH 3/4] Move eth types to chain/types/ethtypes --- api/api_full.go | 77 ++--- api/docgen/docgen.go | 10 +- api/mocks/mock_full.go | 81 +++--- api/proxy_gen.go | 205 ++++++------- build/openrpc/full.json.gz | Bin 31086 -> 31103 bytes build/openrpc/gateway.json.gz | Bin 4977 -> 4977 bytes build/openrpc/miner.json.gz | Bin 15754 -> 15753 bytes build/openrpc/worker.json.gz | Bin 5278 -> 5278 bytes chain/eth/eth_transactions.go | 67 ++--- chain/eth/eth_transactions_test.go | 9 +- chain/eth/rlp_test.go | 8 +- chain/{eth => types/ethtypes}/eth_types.go | 2 +- .../{eth => types/ethtypes}/eth_types_test.go | 2 +- node/impl/full/dummy.go | 59 ++-- node/impl/full/eth.go | 271 +++++++++--------- 15 files changed, 400 insertions(+), 391 deletions(-) rename chain/{eth => types/ethtypes}/eth_types.go (99%) rename chain/{eth => types/ethtypes}/eth_types_test.go (99%) diff --git a/api/api_full.go b/api/api_full.go index 10cbc67e6..aaa8dd5e7 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -32,6 +32,7 @@ import ( "github.com/filecoin-project/lotus/chain/actors/builtin/power" "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/repo/imports" ) @@ -764,37 +765,37 @@ type FullNode interface { // These methods are used for Ethereum-compatible JSON-RPC calls // // EthAccounts will always return [] since we don't expect Lotus to manage private keys - EthAccounts(ctx context.Context) ([]eth.EthAddress, error) //perm:read + EthAccounts(ctx context.Context) ([]ethtypes.EthAddress, error) //perm:read // EthBlockNumber returns the height of the latest (heaviest) TipSet - EthBlockNumber(ctx context.Context) (eth.EthUint64, error) //perm:read + EthBlockNumber(ctx context.Context) (ethtypes.EthUint64, error) //perm:read // EthGetBlockTransactionCountByNumber returns the number of messages in the TipSet - EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum eth.EthUint64) (eth.EthUint64, error) //perm:read + EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum ethtypes.EthUint64) (ethtypes.EthUint64, error) //perm:read // EthGetBlockTransactionCountByHash returns the number of messages in the TipSet - EthGetBlockTransactionCountByHash(ctx context.Context, blkHash eth.EthHash) (eth.EthUint64, error) //perm:read + EthGetBlockTransactionCountByHash(ctx context.Context, blkHash ethtypes.EthHash) (ethtypes.EthUint64, error) //perm:read - EthGetBlockByHash(ctx context.Context, blkHash eth.EthHash, fullTxInfo bool) (eth.EthBlock, error) //perm:read - EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) //perm:read - EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) //perm:read - EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkOpt string) (eth.EthUint64, error) //perm:read - EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*EthTxReceipt, error) //perm:read - EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) //perm:read - EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) //perm:read + EthGetBlockByHash(ctx context.Context, blkHash ethtypes.EthHash, fullTxInfo bool) (ethtypes.EthBlock, error) //perm:read + EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (ethtypes.EthBlock, error) //perm:read + EthGetTransactionByHash(ctx context.Context, txHash *ethtypes.EthHash) (*eth.EthTx, error) //perm:read + EthGetTransactionCount(ctx context.Context, sender ethtypes.EthAddress, blkOpt string) (ethtypes.EthUint64, error) //perm:read + EthGetTransactionReceipt(ctx context.Context, txHash ethtypes.EthHash) (*EthTxReceipt, error) //perm:read + EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash ethtypes.EthHash, txIndex ethtypes.EthUint64) (eth.EthTx, error) //perm:read + EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum ethtypes.EthUint64, txIndex ethtypes.EthUint64) (eth.EthTx, error) //perm:read - EthGetCode(ctx context.Context, address eth.EthAddress, blkOpt string) (eth.EthBytes, error) //perm:read - EthGetStorageAt(ctx context.Context, address eth.EthAddress, position eth.EthBytes, blkParam string) (eth.EthBytes, error) //perm:read - EthGetBalance(ctx context.Context, address eth.EthAddress, blkParam string) (eth.EthBigInt, error) //perm:read - EthChainId(ctx context.Context) (eth.EthUint64, error) //perm:read - NetVersion(ctx context.Context) (string, error) //perm:read - NetListening(ctx context.Context) (bool, error) //perm:read - EthProtocolVersion(ctx context.Context) (eth.EthUint64, error) //perm:read - EthGasPrice(ctx context.Context) (eth.EthBigInt, error) //perm:read - EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, newestBlk string, rewardPercentiles []float64) (eth.EthFeeHistory, error) //perm:read + EthGetCode(ctx context.Context, address ethtypes.EthAddress, blkOpt string) (ethtypes.EthBytes, error) //perm:read + EthGetStorageAt(ctx context.Context, address ethtypes.EthAddress, position ethtypes.EthBytes, blkParam string) (ethtypes.EthBytes, error) //perm:read + EthGetBalance(ctx context.Context, address ethtypes.EthAddress, blkParam string) (ethtypes.EthBigInt, error) //perm:read + EthChainId(ctx context.Context) (ethtypes.EthUint64, error) //perm:read + NetVersion(ctx context.Context) (string, error) //perm:read + NetListening(ctx context.Context) (bool, error) //perm:read + EthProtocolVersion(ctx context.Context) (ethtypes.EthUint64, error) //perm:read + EthGasPrice(ctx context.Context) (ethtypes.EthBigInt, error) //perm:read + EthFeeHistory(ctx context.Context, blkCount ethtypes.EthUint64, newestBlk string, rewardPercentiles []float64) (ethtypes.EthFeeHistory, error) //perm:read - EthMaxPriorityFeePerGas(ctx context.Context) (eth.EthBigInt, error) //perm:read - EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.EthUint64, error) //perm:read - EthCall(ctx context.Context, tx eth.EthCall, blkParam string) (eth.EthBytes, error) //perm:read + EthMaxPriorityFeePerGas(ctx context.Context) (ethtypes.EthBigInt, error) //perm:read + EthEstimateGas(ctx context.Context, tx ethtypes.EthCall) (ethtypes.EthUint64, error) //perm:read + EthCall(ctx context.Context, tx ethtypes.EthCall, blkParam string) (ethtypes.EthBytes, error) //perm:read - EthSendRawTransaction(ctx context.Context, rawTx eth.EthBytes) (eth.EthHash, error) //perm:read + EthSendRawTransaction(ctx context.Context, rawTx ethtypes.EthBytes) (ethtypes.EthHash, error) //perm:read // CreateBackup creates node backup onder the specified file name. The // method requires that the lotus daemon is running with the @@ -1291,20 +1292,20 @@ type PruneOpts struct { } type EthTxReceipt struct { - TransactionHash eth.EthHash `json:"transactionHash"` - TransactionIndex eth.EthUint64 `json:"transactionIndex"` - BlockHash eth.EthHash `json:"blockHash"` - BlockNumber eth.EthUint64 `json:"blockNumber"` - From eth.EthAddress `json:"from"` - To *eth.EthAddress `json:"to"` + TransactionHash ethtypes.EthHash `json:"transactionHash"` + TransactionIndex ethtypes.EthUint64 `json:"transactionIndex"` + BlockHash ethtypes.EthHash `json:"blockHash"` + BlockNumber ethtypes.EthUint64 `json:"blockNumber"` + From ethtypes.EthAddress `json:"from"` + To *ethtypes.EthAddress `json:"to"` // Logs // LogsBloom - StateRoot eth.EthHash `json:"root"` - Status eth.EthUint64 `json:"status"` - ContractAddress *eth.EthAddress `json:"contractAddress"` - CumulativeGasUsed eth.EthUint64 `json:"cumulativeGasUsed"` - GasUsed eth.EthUint64 `json:"gasUsed"` - EffectiveGasPrice eth.EthBigInt `json:"effectiveGasPrice"` - LogsBloom eth.EthBytes `json:"logsBloom"` - Logs []string `json:"logs"` + StateRoot ethtypes.EthHash `json:"root"` + Status ethtypes.EthUint64 `json:"status"` + ContractAddress *ethtypes.EthAddress `json:"contractAddress"` + CumulativeGasUsed ethtypes.EthUint64 `json:"cumulativeGasUsed"` + GasUsed ethtypes.EthUint64 `json:"gasUsed"` + EffectiveGasPrice ethtypes.EthBigInt `json:"effectiveGasPrice"` + LogsBloom ethtypes.EthBytes `json:"logsBloom"` + Logs []string `json:"logs"` } diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 68decb616..bff4d06eb 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -42,8 +42,8 @@ import ( apitypes "github.com/filecoin-project/lotus/api/types" "github.com/filecoin-project/lotus/api/v0api" "github.com/filecoin-project/lotus/build" - "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/repo/imports" sealing "github.com/filecoin-project/lotus/storage/pipeline" @@ -370,16 +370,16 @@ func init() { }, }) - ethint := eth.EthUint64(5) + ethint := ethtypes.EthUint64(5) addExample(ethint) addExample(ðint) - ethaddr, _ := eth.EthAddressFromHex("0x5CbEeCF99d3fDB3f25E309Cc264f240bb0664031") + ethaddr, _ := ethtypes.EthAddressFromHex("0x5CbEeCF99d3fDB3f25E309Cc264f240bb0664031") addExample(ðaddr) - ethhash, _ := eth.NewEthHashFromCid(c) + ethhash, _ := ethtypes.NewEthHashFromCid(c) addExample(ðhash) - ethFeeHistoryReward := [][]eth.EthBigInt{} + ethFeeHistoryReward := [][]ethtypes.EthBigInt{} addExample(ðFeeHistoryReward) addExample(&uuid.UUID{}) } diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index c43bcd932..a55d10326 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -38,6 +38,7 @@ import ( miner0 "github.com/filecoin-project/lotus/chain/actors/builtin/miner" eth "github.com/filecoin-project/lotus/chain/eth" types "github.com/filecoin-project/lotus/chain/types" + ethtypes "github.com/filecoin-project/lotus/chain/types/ethtypes" alerting "github.com/filecoin-project/lotus/journal/alerting" dtypes "github.com/filecoin-project/lotus/node/modules/dtypes" imports "github.com/filecoin-project/lotus/node/repo/imports" @@ -923,10 +924,10 @@ func (mr *MockFullNodeMockRecorder) Discover(arg0 interface{}) *gomock.Call { } // EthAccounts mocks base method. -func (m *MockFullNode) EthAccounts(arg0 context.Context) ([]eth.EthAddress, error) { +func (m *MockFullNode) EthAccounts(arg0 context.Context) ([]ethtypes.EthAddress, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthAccounts", arg0) - ret0, _ := ret[0].([]eth.EthAddress) + ret0, _ := ret[0].([]ethtypes.EthAddress) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -938,10 +939,10 @@ func (mr *MockFullNodeMockRecorder) EthAccounts(arg0 interface{}) *gomock.Call { } // EthBlockNumber mocks base method. -func (m *MockFullNode) EthBlockNumber(arg0 context.Context) (eth.EthUint64, error) { +func (m *MockFullNode) EthBlockNumber(arg0 context.Context) (ethtypes.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthBlockNumber", arg0) - ret0, _ := ret[0].(eth.EthUint64) + ret0, _ := ret[0].(ethtypes.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -953,10 +954,10 @@ func (mr *MockFullNodeMockRecorder) EthBlockNumber(arg0 interface{}) *gomock.Cal } // EthCall mocks base method. -func (m *MockFullNode) EthCall(arg0 context.Context, arg1 eth.EthCall, arg2 string) (eth.EthBytes, error) { +func (m *MockFullNode) EthCall(arg0 context.Context, arg1 ethtypes.EthCall, arg2 string) (ethtypes.EthBytes, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthCall", arg0, arg1, arg2) - ret0, _ := ret[0].(eth.EthBytes) + ret0, _ := ret[0].(ethtypes.EthBytes) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -968,10 +969,10 @@ func (mr *MockFullNodeMockRecorder) EthCall(arg0, arg1, arg2 interface{}) *gomoc } // EthChainId mocks base method. -func (m *MockFullNode) EthChainId(arg0 context.Context) (eth.EthUint64, error) { +func (m *MockFullNode) EthChainId(arg0 context.Context) (ethtypes.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthChainId", arg0) - ret0, _ := ret[0].(eth.EthUint64) + ret0, _ := ret[0].(ethtypes.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -983,10 +984,10 @@ func (mr *MockFullNodeMockRecorder) EthChainId(arg0 interface{}) *gomock.Call { } // EthEstimateGas mocks base method. -func (m *MockFullNode) EthEstimateGas(arg0 context.Context, arg1 eth.EthCall) (eth.EthUint64, error) { +func (m *MockFullNode) EthEstimateGas(arg0 context.Context, arg1 ethtypes.EthCall) (ethtypes.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthEstimateGas", arg0, arg1) - ret0, _ := ret[0].(eth.EthUint64) + ret0, _ := ret[0].(ethtypes.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -998,10 +999,10 @@ func (mr *MockFullNodeMockRecorder) EthEstimateGas(arg0, arg1 interface{}) *gomo } // EthFeeHistory mocks base method. -func (m *MockFullNode) EthFeeHistory(arg0 context.Context, arg1 eth.EthUint64, arg2 string, arg3 []float64) (eth.EthFeeHistory, error) { +func (m *MockFullNode) EthFeeHistory(arg0 context.Context, arg1 ethtypes.EthUint64, arg2 string, arg3 []float64) (ethtypes.EthFeeHistory, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthFeeHistory", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(eth.EthFeeHistory) + ret0, _ := ret[0].(ethtypes.EthFeeHistory) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1013,10 +1014,10 @@ func (mr *MockFullNodeMockRecorder) EthFeeHistory(arg0, arg1, arg2, arg3 interfa } // EthGasPrice mocks base method. -func (m *MockFullNode) EthGasPrice(arg0 context.Context) (eth.EthBigInt, error) { +func (m *MockFullNode) EthGasPrice(arg0 context.Context) (ethtypes.EthBigInt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGasPrice", arg0) - ret0, _ := ret[0].(eth.EthBigInt) + ret0, _ := ret[0].(ethtypes.EthBigInt) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1028,10 +1029,10 @@ func (mr *MockFullNodeMockRecorder) EthGasPrice(arg0 interface{}) *gomock.Call { } // EthGetBalance mocks base method. -func (m *MockFullNode) EthGetBalance(arg0 context.Context, arg1 eth.EthAddress, arg2 string) (eth.EthBigInt, error) { +func (m *MockFullNode) EthGetBalance(arg0 context.Context, arg1 ethtypes.EthAddress, arg2 string) (ethtypes.EthBigInt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBalance", arg0, arg1, arg2) - ret0, _ := ret[0].(eth.EthBigInt) + ret0, _ := ret[0].(ethtypes.EthBigInt) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1043,10 +1044,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBalance(arg0, arg1, arg2 interface{}) } // EthGetBlockByHash mocks base method. -func (m *MockFullNode) EthGetBlockByHash(arg0 context.Context, arg1 eth.EthHash, arg2 bool) (eth.EthBlock, error) { +func (m *MockFullNode) EthGetBlockByHash(arg0 context.Context, arg1 ethtypes.EthHash, arg2 bool) (ethtypes.EthBlock, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBlockByHash", arg0, arg1, arg2) - ret0, _ := ret[0].(eth.EthBlock) + ret0, _ := ret[0].(ethtypes.EthBlock) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1058,10 +1059,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBlockByHash(arg0, arg1, arg2 interface } // EthGetBlockByNumber mocks base method. -func (m *MockFullNode) EthGetBlockByNumber(arg0 context.Context, arg1 string, arg2 bool) (eth.EthBlock, error) { +func (m *MockFullNode) EthGetBlockByNumber(arg0 context.Context, arg1 string, arg2 bool) (ethtypes.EthBlock, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBlockByNumber", arg0, arg1, arg2) - ret0, _ := ret[0].(eth.EthBlock) + ret0, _ := ret[0].(ethtypes.EthBlock) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1073,10 +1074,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBlockByNumber(arg0, arg1, arg2 interfa } // EthGetBlockTransactionCountByHash mocks base method. -func (m *MockFullNode) EthGetBlockTransactionCountByHash(arg0 context.Context, arg1 eth.EthHash) (eth.EthUint64, error) { +func (m *MockFullNode) EthGetBlockTransactionCountByHash(arg0 context.Context, arg1 ethtypes.EthHash) (ethtypes.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBlockTransactionCountByHash", arg0, arg1) - ret0, _ := ret[0].(eth.EthUint64) + ret0, _ := ret[0].(ethtypes.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1088,10 +1089,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBlockTransactionCountByHash(arg0, arg1 } // EthGetBlockTransactionCountByNumber mocks base method. -func (m *MockFullNode) EthGetBlockTransactionCountByNumber(arg0 context.Context, arg1 eth.EthUint64) (eth.EthUint64, error) { +func (m *MockFullNode) EthGetBlockTransactionCountByNumber(arg0 context.Context, arg1 ethtypes.EthUint64) (ethtypes.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetBlockTransactionCountByNumber", arg0, arg1) - ret0, _ := ret[0].(eth.EthUint64) + ret0, _ := ret[0].(ethtypes.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1103,10 +1104,10 @@ func (mr *MockFullNodeMockRecorder) EthGetBlockTransactionCountByNumber(arg0, ar } // EthGetCode mocks base method. -func (m *MockFullNode) EthGetCode(arg0 context.Context, arg1 eth.EthAddress, arg2 string) (eth.EthBytes, error) { +func (m *MockFullNode) EthGetCode(arg0 context.Context, arg1 ethtypes.EthAddress, arg2 string) (ethtypes.EthBytes, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetCode", arg0, arg1, arg2) - ret0, _ := ret[0].(eth.EthBytes) + ret0, _ := ret[0].(ethtypes.EthBytes) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1118,10 +1119,10 @@ func (mr *MockFullNodeMockRecorder) EthGetCode(arg0, arg1, arg2 interface{}) *go } // EthGetStorageAt mocks base method. -func (m *MockFullNode) EthGetStorageAt(arg0 context.Context, arg1 eth.EthAddress, arg2 eth.EthBytes, arg3 string) (eth.EthBytes, error) { +func (m *MockFullNode) EthGetStorageAt(arg0 context.Context, arg1 ethtypes.EthAddress, arg2 ethtypes.EthBytes, arg3 string) (ethtypes.EthBytes, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetStorageAt", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(eth.EthBytes) + ret0, _ := ret[0].(ethtypes.EthBytes) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1133,7 +1134,7 @@ func (mr *MockFullNodeMockRecorder) EthGetStorageAt(arg0, arg1, arg2, arg3 inter } // EthGetTransactionByBlockHashAndIndex mocks base method. -func (m *MockFullNode) EthGetTransactionByBlockHashAndIndex(arg0 context.Context, arg1 eth.EthHash, arg2 eth.EthUint64) (eth.EthTx, error) { +func (m *MockFullNode) EthGetTransactionByBlockHashAndIndex(arg0 context.Context, arg1 ethtypes.EthHash, arg2 ethtypes.EthUint64) (eth.EthTx, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionByBlockHashAndIndex", arg0, arg1, arg2) ret0, _ := ret[0].(eth.EthTx) @@ -1148,7 +1149,7 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionByBlockHashAndIndex(arg0, a } // EthGetTransactionByBlockNumberAndIndex mocks base method. -func (m *MockFullNode) EthGetTransactionByBlockNumberAndIndex(arg0 context.Context, arg1, arg2 eth.EthUint64) (eth.EthTx, error) { +func (m *MockFullNode) EthGetTransactionByBlockNumberAndIndex(arg0 context.Context, arg1, arg2 ethtypes.EthUint64) (eth.EthTx, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionByBlockNumberAndIndex", arg0, arg1, arg2) ret0, _ := ret[0].(eth.EthTx) @@ -1163,7 +1164,7 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionByBlockNumberAndIndex(arg0, } // EthGetTransactionByHash mocks base method. -func (m *MockFullNode) EthGetTransactionByHash(arg0 context.Context, arg1 *eth.EthHash) (*eth.EthTx, error) { +func (m *MockFullNode) EthGetTransactionByHash(arg0 context.Context, arg1 *ethtypes.EthHash) (*eth.EthTx, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionByHash", arg0, arg1) ret0, _ := ret[0].(*eth.EthTx) @@ -1178,10 +1179,10 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionByHash(arg0, arg1 interface } // EthGetTransactionCount mocks base method. -func (m *MockFullNode) EthGetTransactionCount(arg0 context.Context, arg1 eth.EthAddress, arg2 string) (eth.EthUint64, error) { +func (m *MockFullNode) EthGetTransactionCount(arg0 context.Context, arg1 ethtypes.EthAddress, arg2 string) (ethtypes.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionCount", arg0, arg1, arg2) - ret0, _ := ret[0].(eth.EthUint64) + ret0, _ := ret[0].(ethtypes.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1193,7 +1194,7 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionCount(arg0, arg1, arg2 inte } // EthGetTransactionReceipt mocks base method. -func (m *MockFullNode) EthGetTransactionReceipt(arg0 context.Context, arg1 eth.EthHash) (*api.EthTxReceipt, error) { +func (m *MockFullNode) EthGetTransactionReceipt(arg0 context.Context, arg1 ethtypes.EthHash) (*api.EthTxReceipt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthGetTransactionReceipt", arg0, arg1) ret0, _ := ret[0].(*api.EthTxReceipt) @@ -1208,10 +1209,10 @@ func (mr *MockFullNodeMockRecorder) EthGetTransactionReceipt(arg0, arg1 interfac } // EthMaxPriorityFeePerGas mocks base method. -func (m *MockFullNode) EthMaxPriorityFeePerGas(arg0 context.Context) (eth.EthBigInt, error) { +func (m *MockFullNode) EthMaxPriorityFeePerGas(arg0 context.Context) (ethtypes.EthBigInt, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthMaxPriorityFeePerGas", arg0) - ret0, _ := ret[0].(eth.EthBigInt) + ret0, _ := ret[0].(ethtypes.EthBigInt) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1223,10 +1224,10 @@ func (mr *MockFullNodeMockRecorder) EthMaxPriorityFeePerGas(arg0 interface{}) *g } // EthProtocolVersion mocks base method. -func (m *MockFullNode) EthProtocolVersion(arg0 context.Context) (eth.EthUint64, error) { +func (m *MockFullNode) EthProtocolVersion(arg0 context.Context) (ethtypes.EthUint64, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthProtocolVersion", arg0) - ret0, _ := ret[0].(eth.EthUint64) + ret0, _ := ret[0].(ethtypes.EthUint64) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -1238,10 +1239,10 @@ func (mr *MockFullNodeMockRecorder) EthProtocolVersion(arg0 interface{}) *gomock } // EthSendRawTransaction mocks base method. -func (m *MockFullNode) EthSendRawTransaction(arg0 context.Context, arg1 eth.EthBytes) (eth.EthHash, error) { +func (m *MockFullNode) EthSendRawTransaction(arg0 context.Context, arg1 ethtypes.EthBytes) (ethtypes.EthHash, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "EthSendRawTransaction", arg0, arg1) - ret0, _ := ret[0].(eth.EthHash) + ret0, _ := ret[0].(ethtypes.EthHash) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/api/proxy_gen.go b/api/proxy_gen.go index ae477f454..b3c27b11a 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -37,6 +37,7 @@ import ( lminer "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/eth" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/journal/alerting" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/repo/imports" @@ -219,49 +220,49 @@ type FullNodeStruct struct { CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"` - EthAccounts func(p0 context.Context) ([]eth.EthAddress, error) `perm:"read"` + EthAccounts func(p0 context.Context) ([]ethtypes.EthAddress, error) `perm:"read"` - EthBlockNumber func(p0 context.Context) (eth.EthUint64, error) `perm:"read"` + EthBlockNumber func(p0 context.Context) (ethtypes.EthUint64, error) `perm:"read"` - EthCall func(p0 context.Context, p1 eth.EthCall, p2 string) (eth.EthBytes, error) `perm:"read"` + EthCall func(p0 context.Context, p1 ethtypes.EthCall, p2 string) (ethtypes.EthBytes, error) `perm:"read"` - EthChainId func(p0 context.Context) (eth.EthUint64, error) `perm:"read"` + EthChainId func(p0 context.Context) (ethtypes.EthUint64, error) `perm:"read"` - EthEstimateGas func(p0 context.Context, p1 eth.EthCall) (eth.EthUint64, error) `perm:"read"` + EthEstimateGas func(p0 context.Context, p1 ethtypes.EthCall) (ethtypes.EthUint64, error) `perm:"read"` - EthFeeHistory func(p0 context.Context, p1 eth.EthUint64, p2 string, p3 []float64) (eth.EthFeeHistory, error) `perm:"read"` + EthFeeHistory func(p0 context.Context, p1 ethtypes.EthUint64, p2 string, p3 []float64) (ethtypes.EthFeeHistory, error) `perm:"read"` - EthGasPrice func(p0 context.Context) (eth.EthBigInt, error) `perm:"read"` + EthGasPrice func(p0 context.Context) (ethtypes.EthBigInt, error) `perm:"read"` - EthGetBalance func(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBigInt, error) `perm:"read"` + EthGetBalance func(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthBigInt, error) `perm:"read"` - EthGetBlockByHash func(p0 context.Context, p1 eth.EthHash, p2 bool) (eth.EthBlock, error) `perm:"read"` + EthGetBlockByHash func(p0 context.Context, p1 ethtypes.EthHash, p2 bool) (ethtypes.EthBlock, error) `perm:"read"` - EthGetBlockByNumber func(p0 context.Context, p1 string, p2 bool) (eth.EthBlock, error) `perm:"read"` + EthGetBlockByNumber func(p0 context.Context, p1 string, p2 bool) (ethtypes.EthBlock, error) `perm:"read"` - EthGetBlockTransactionCountByHash func(p0 context.Context, p1 eth.EthHash) (eth.EthUint64, error) `perm:"read"` + EthGetBlockTransactionCountByHash func(p0 context.Context, p1 ethtypes.EthHash) (ethtypes.EthUint64, error) `perm:"read"` - EthGetBlockTransactionCountByNumber func(p0 context.Context, p1 eth.EthUint64) (eth.EthUint64, error) `perm:"read"` + EthGetBlockTransactionCountByNumber func(p0 context.Context, p1 ethtypes.EthUint64) (ethtypes.EthUint64, error) `perm:"read"` - EthGetCode func(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBytes, error) `perm:"read"` + EthGetCode func(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthBytes, error) `perm:"read"` - EthGetStorageAt func(p0 context.Context, p1 eth.EthAddress, p2 eth.EthBytes, p3 string) (eth.EthBytes, error) `perm:"read"` + EthGetStorageAt func(p0 context.Context, p1 ethtypes.EthAddress, p2 ethtypes.EthBytes, p3 string) (ethtypes.EthBytes, error) `perm:"read"` - EthGetTransactionByBlockHashAndIndex func(p0 context.Context, p1 eth.EthHash, p2 eth.EthUint64) (eth.EthTx, error) `perm:"read"` + EthGetTransactionByBlockHashAndIndex func(p0 context.Context, p1 ethtypes.EthHash, p2 ethtypes.EthUint64) (eth.EthTx, error) `perm:"read"` - EthGetTransactionByBlockNumberAndIndex func(p0 context.Context, p1 eth.EthUint64, p2 eth.EthUint64) (eth.EthTx, error) `perm:"read"` + EthGetTransactionByBlockNumberAndIndex func(p0 context.Context, p1 ethtypes.EthUint64, p2 ethtypes.EthUint64) (eth.EthTx, error) `perm:"read"` - EthGetTransactionByHash func(p0 context.Context, p1 *eth.EthHash) (*eth.EthTx, error) `perm:"read"` + EthGetTransactionByHash func(p0 context.Context, p1 *ethtypes.EthHash) (*eth.EthTx, error) `perm:"read"` - EthGetTransactionCount func(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthUint64, error) `perm:"read"` + EthGetTransactionCount func(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthUint64, error) `perm:"read"` - EthGetTransactionReceipt func(p0 context.Context, p1 eth.EthHash) (*EthTxReceipt, error) `perm:"read"` + EthGetTransactionReceipt func(p0 context.Context, p1 ethtypes.EthHash) (*EthTxReceipt, error) `perm:"read"` - EthMaxPriorityFeePerGas func(p0 context.Context) (eth.EthBigInt, error) `perm:"read"` + EthMaxPriorityFeePerGas func(p0 context.Context) (ethtypes.EthBigInt, error) `perm:"read"` - EthProtocolVersion func(p0 context.Context) (eth.EthUint64, error) `perm:"read"` + EthProtocolVersion func(p0 context.Context) (ethtypes.EthUint64, error) `perm:"read"` - EthSendRawTransaction func(p0 context.Context, p1 eth.EthBytes) (eth.EthHash, error) `perm:"read"` + EthSendRawTransaction func(p0 context.Context, p1 ethtypes.EthBytes) (ethtypes.EthHash, error) `perm:"read"` GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"` @@ -1844,246 +1845,246 @@ func (s *FullNodeStub) CreateBackup(p0 context.Context, p1 string) error { return ErrNotSupported } -func (s *FullNodeStruct) EthAccounts(p0 context.Context) ([]eth.EthAddress, error) { +func (s *FullNodeStruct) EthAccounts(p0 context.Context) ([]ethtypes.EthAddress, error) { if s.Internal.EthAccounts == nil { - return *new([]eth.EthAddress), ErrNotSupported + return *new([]ethtypes.EthAddress), ErrNotSupported } return s.Internal.EthAccounts(p0) } -func (s *FullNodeStub) EthAccounts(p0 context.Context) ([]eth.EthAddress, error) { - return *new([]eth.EthAddress), ErrNotSupported +func (s *FullNodeStub) EthAccounts(p0 context.Context) ([]ethtypes.EthAddress, error) { + return *new([]ethtypes.EthAddress), ErrNotSupported } -func (s *FullNodeStruct) EthBlockNumber(p0 context.Context) (eth.EthUint64, error) { +func (s *FullNodeStruct) EthBlockNumber(p0 context.Context) (ethtypes.EthUint64, error) { if s.Internal.EthBlockNumber == nil { - return *new(eth.EthUint64), ErrNotSupported + return *new(ethtypes.EthUint64), ErrNotSupported } return s.Internal.EthBlockNumber(p0) } -func (s *FullNodeStub) EthBlockNumber(p0 context.Context) (eth.EthUint64, error) { - return *new(eth.EthUint64), ErrNotSupported +func (s *FullNodeStub) EthBlockNumber(p0 context.Context) (ethtypes.EthUint64, error) { + return *new(ethtypes.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthCall(p0 context.Context, p1 eth.EthCall, p2 string) (eth.EthBytes, error) { +func (s *FullNodeStruct) EthCall(p0 context.Context, p1 ethtypes.EthCall, p2 string) (ethtypes.EthBytes, error) { if s.Internal.EthCall == nil { - return *new(eth.EthBytes), ErrNotSupported + return *new(ethtypes.EthBytes), ErrNotSupported } return s.Internal.EthCall(p0, p1, p2) } -func (s *FullNodeStub) EthCall(p0 context.Context, p1 eth.EthCall, p2 string) (eth.EthBytes, error) { - return *new(eth.EthBytes), ErrNotSupported +func (s *FullNodeStub) EthCall(p0 context.Context, p1 ethtypes.EthCall, p2 string) (ethtypes.EthBytes, error) { + return *new(ethtypes.EthBytes), ErrNotSupported } -func (s *FullNodeStruct) EthChainId(p0 context.Context) (eth.EthUint64, error) { +func (s *FullNodeStruct) EthChainId(p0 context.Context) (ethtypes.EthUint64, error) { if s.Internal.EthChainId == nil { - return *new(eth.EthUint64), ErrNotSupported + return *new(ethtypes.EthUint64), ErrNotSupported } return s.Internal.EthChainId(p0) } -func (s *FullNodeStub) EthChainId(p0 context.Context) (eth.EthUint64, error) { - return *new(eth.EthUint64), ErrNotSupported +func (s *FullNodeStub) EthChainId(p0 context.Context) (ethtypes.EthUint64, error) { + return *new(ethtypes.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthEstimateGas(p0 context.Context, p1 eth.EthCall) (eth.EthUint64, error) { +func (s *FullNodeStruct) EthEstimateGas(p0 context.Context, p1 ethtypes.EthCall) (ethtypes.EthUint64, error) { if s.Internal.EthEstimateGas == nil { - return *new(eth.EthUint64), ErrNotSupported + return *new(ethtypes.EthUint64), ErrNotSupported } return s.Internal.EthEstimateGas(p0, p1) } -func (s *FullNodeStub) EthEstimateGas(p0 context.Context, p1 eth.EthCall) (eth.EthUint64, error) { - return *new(eth.EthUint64), ErrNotSupported +func (s *FullNodeStub) EthEstimateGas(p0 context.Context, p1 ethtypes.EthCall) (ethtypes.EthUint64, error) { + return *new(ethtypes.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthFeeHistory(p0 context.Context, p1 eth.EthUint64, p2 string, p3 []float64) (eth.EthFeeHistory, error) { +func (s *FullNodeStruct) EthFeeHistory(p0 context.Context, p1 ethtypes.EthUint64, p2 string, p3 []float64) (ethtypes.EthFeeHistory, error) { if s.Internal.EthFeeHistory == nil { - return *new(eth.EthFeeHistory), ErrNotSupported + return *new(ethtypes.EthFeeHistory), ErrNotSupported } return s.Internal.EthFeeHistory(p0, p1, p2, p3) } -func (s *FullNodeStub) EthFeeHistory(p0 context.Context, p1 eth.EthUint64, p2 string, p3 []float64) (eth.EthFeeHistory, error) { - return *new(eth.EthFeeHistory), ErrNotSupported +func (s *FullNodeStub) EthFeeHistory(p0 context.Context, p1 ethtypes.EthUint64, p2 string, p3 []float64) (ethtypes.EthFeeHistory, error) { + return *new(ethtypes.EthFeeHistory), ErrNotSupported } -func (s *FullNodeStruct) EthGasPrice(p0 context.Context) (eth.EthBigInt, error) { +func (s *FullNodeStruct) EthGasPrice(p0 context.Context) (ethtypes.EthBigInt, error) { if s.Internal.EthGasPrice == nil { - return *new(eth.EthBigInt), ErrNotSupported + return *new(ethtypes.EthBigInt), ErrNotSupported } return s.Internal.EthGasPrice(p0) } -func (s *FullNodeStub) EthGasPrice(p0 context.Context) (eth.EthBigInt, error) { - return *new(eth.EthBigInt), ErrNotSupported +func (s *FullNodeStub) EthGasPrice(p0 context.Context) (ethtypes.EthBigInt, error) { + return *new(ethtypes.EthBigInt), ErrNotSupported } -func (s *FullNodeStruct) EthGetBalance(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBigInt, error) { +func (s *FullNodeStruct) EthGetBalance(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthBigInt, error) { if s.Internal.EthGetBalance == nil { - return *new(eth.EthBigInt), ErrNotSupported + return *new(ethtypes.EthBigInt), ErrNotSupported } return s.Internal.EthGetBalance(p0, p1, p2) } -func (s *FullNodeStub) EthGetBalance(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBigInt, error) { - return *new(eth.EthBigInt), ErrNotSupported +func (s *FullNodeStub) EthGetBalance(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthBigInt, error) { + return *new(ethtypes.EthBigInt), ErrNotSupported } -func (s *FullNodeStruct) EthGetBlockByHash(p0 context.Context, p1 eth.EthHash, p2 bool) (eth.EthBlock, error) { +func (s *FullNodeStruct) EthGetBlockByHash(p0 context.Context, p1 ethtypes.EthHash, p2 bool) (ethtypes.EthBlock, error) { if s.Internal.EthGetBlockByHash == nil { - return *new(eth.EthBlock), ErrNotSupported + return *new(ethtypes.EthBlock), ErrNotSupported } return s.Internal.EthGetBlockByHash(p0, p1, p2) } -func (s *FullNodeStub) EthGetBlockByHash(p0 context.Context, p1 eth.EthHash, p2 bool) (eth.EthBlock, error) { - return *new(eth.EthBlock), ErrNotSupported +func (s *FullNodeStub) EthGetBlockByHash(p0 context.Context, p1 ethtypes.EthHash, p2 bool) (ethtypes.EthBlock, error) { + return *new(ethtypes.EthBlock), ErrNotSupported } -func (s *FullNodeStruct) EthGetBlockByNumber(p0 context.Context, p1 string, p2 bool) (eth.EthBlock, error) { +func (s *FullNodeStruct) EthGetBlockByNumber(p0 context.Context, p1 string, p2 bool) (ethtypes.EthBlock, error) { if s.Internal.EthGetBlockByNumber == nil { - return *new(eth.EthBlock), ErrNotSupported + return *new(ethtypes.EthBlock), ErrNotSupported } return s.Internal.EthGetBlockByNumber(p0, p1, p2) } -func (s *FullNodeStub) EthGetBlockByNumber(p0 context.Context, p1 string, p2 bool) (eth.EthBlock, error) { - return *new(eth.EthBlock), ErrNotSupported +func (s *FullNodeStub) EthGetBlockByNumber(p0 context.Context, p1 string, p2 bool) (ethtypes.EthBlock, error) { + return *new(ethtypes.EthBlock), ErrNotSupported } -func (s *FullNodeStruct) EthGetBlockTransactionCountByHash(p0 context.Context, p1 eth.EthHash) (eth.EthUint64, error) { +func (s *FullNodeStruct) EthGetBlockTransactionCountByHash(p0 context.Context, p1 ethtypes.EthHash) (ethtypes.EthUint64, error) { if s.Internal.EthGetBlockTransactionCountByHash == nil { - return *new(eth.EthUint64), ErrNotSupported + return *new(ethtypes.EthUint64), ErrNotSupported } return s.Internal.EthGetBlockTransactionCountByHash(p0, p1) } -func (s *FullNodeStub) EthGetBlockTransactionCountByHash(p0 context.Context, p1 eth.EthHash) (eth.EthUint64, error) { - return *new(eth.EthUint64), ErrNotSupported +func (s *FullNodeStub) EthGetBlockTransactionCountByHash(p0 context.Context, p1 ethtypes.EthHash) (ethtypes.EthUint64, error) { + return *new(ethtypes.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthGetBlockTransactionCountByNumber(p0 context.Context, p1 eth.EthUint64) (eth.EthUint64, error) { +func (s *FullNodeStruct) EthGetBlockTransactionCountByNumber(p0 context.Context, p1 ethtypes.EthUint64) (ethtypes.EthUint64, error) { if s.Internal.EthGetBlockTransactionCountByNumber == nil { - return *new(eth.EthUint64), ErrNotSupported + return *new(ethtypes.EthUint64), ErrNotSupported } return s.Internal.EthGetBlockTransactionCountByNumber(p0, p1) } -func (s *FullNodeStub) EthGetBlockTransactionCountByNumber(p0 context.Context, p1 eth.EthUint64) (eth.EthUint64, error) { - return *new(eth.EthUint64), ErrNotSupported +func (s *FullNodeStub) EthGetBlockTransactionCountByNumber(p0 context.Context, p1 ethtypes.EthUint64) (ethtypes.EthUint64, error) { + return *new(ethtypes.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthGetCode(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBytes, error) { +func (s *FullNodeStruct) EthGetCode(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthBytes, error) { if s.Internal.EthGetCode == nil { - return *new(eth.EthBytes), ErrNotSupported + return *new(ethtypes.EthBytes), ErrNotSupported } return s.Internal.EthGetCode(p0, p1, p2) } -func (s *FullNodeStub) EthGetCode(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthBytes, error) { - return *new(eth.EthBytes), ErrNotSupported +func (s *FullNodeStub) EthGetCode(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthBytes, error) { + return *new(ethtypes.EthBytes), ErrNotSupported } -func (s *FullNodeStruct) EthGetStorageAt(p0 context.Context, p1 eth.EthAddress, p2 eth.EthBytes, p3 string) (eth.EthBytes, error) { +func (s *FullNodeStruct) EthGetStorageAt(p0 context.Context, p1 ethtypes.EthAddress, p2 ethtypes.EthBytes, p3 string) (ethtypes.EthBytes, error) { if s.Internal.EthGetStorageAt == nil { - return *new(eth.EthBytes), ErrNotSupported + return *new(ethtypes.EthBytes), ErrNotSupported } return s.Internal.EthGetStorageAt(p0, p1, p2, p3) } -func (s *FullNodeStub) EthGetStorageAt(p0 context.Context, p1 eth.EthAddress, p2 eth.EthBytes, p3 string) (eth.EthBytes, error) { - return *new(eth.EthBytes), ErrNotSupported +func (s *FullNodeStub) EthGetStorageAt(p0 context.Context, p1 ethtypes.EthAddress, p2 ethtypes.EthBytes, p3 string) (ethtypes.EthBytes, error) { + return *new(ethtypes.EthBytes), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionByBlockHashAndIndex(p0 context.Context, p1 eth.EthHash, p2 eth.EthUint64) (eth.EthTx, error) { +func (s *FullNodeStruct) EthGetTransactionByBlockHashAndIndex(p0 context.Context, p1 ethtypes.EthHash, p2 ethtypes.EthUint64) (eth.EthTx, error) { if s.Internal.EthGetTransactionByBlockHashAndIndex == nil { return *new(eth.EthTx), ErrNotSupported } return s.Internal.EthGetTransactionByBlockHashAndIndex(p0, p1, p2) } -func (s *FullNodeStub) EthGetTransactionByBlockHashAndIndex(p0 context.Context, p1 eth.EthHash, p2 eth.EthUint64) (eth.EthTx, error) { +func (s *FullNodeStub) EthGetTransactionByBlockHashAndIndex(p0 context.Context, p1 ethtypes.EthHash, p2 ethtypes.EthUint64) (eth.EthTx, error) { return *new(eth.EthTx), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionByBlockNumberAndIndex(p0 context.Context, p1 eth.EthUint64, p2 eth.EthUint64) (eth.EthTx, error) { +func (s *FullNodeStruct) EthGetTransactionByBlockNumberAndIndex(p0 context.Context, p1 ethtypes.EthUint64, p2 ethtypes.EthUint64) (eth.EthTx, error) { if s.Internal.EthGetTransactionByBlockNumberAndIndex == nil { return *new(eth.EthTx), ErrNotSupported } return s.Internal.EthGetTransactionByBlockNumberAndIndex(p0, p1, p2) } -func (s *FullNodeStub) EthGetTransactionByBlockNumberAndIndex(p0 context.Context, p1 eth.EthUint64, p2 eth.EthUint64) (eth.EthTx, error) { +func (s *FullNodeStub) EthGetTransactionByBlockNumberAndIndex(p0 context.Context, p1 ethtypes.EthUint64, p2 ethtypes.EthUint64) (eth.EthTx, error) { return *new(eth.EthTx), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionByHash(p0 context.Context, p1 *eth.EthHash) (*eth.EthTx, error) { +func (s *FullNodeStruct) EthGetTransactionByHash(p0 context.Context, p1 *ethtypes.EthHash) (*eth.EthTx, error) { if s.Internal.EthGetTransactionByHash == nil { return nil, ErrNotSupported } return s.Internal.EthGetTransactionByHash(p0, p1) } -func (s *FullNodeStub) EthGetTransactionByHash(p0 context.Context, p1 *eth.EthHash) (*eth.EthTx, error) { +func (s *FullNodeStub) EthGetTransactionByHash(p0 context.Context, p1 *ethtypes.EthHash) (*eth.EthTx, error) { return nil, ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionCount(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthUint64, error) { +func (s *FullNodeStruct) EthGetTransactionCount(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthUint64, error) { if s.Internal.EthGetTransactionCount == nil { - return *new(eth.EthUint64), ErrNotSupported + return *new(ethtypes.EthUint64), ErrNotSupported } return s.Internal.EthGetTransactionCount(p0, p1, p2) } -func (s *FullNodeStub) EthGetTransactionCount(p0 context.Context, p1 eth.EthAddress, p2 string) (eth.EthUint64, error) { - return *new(eth.EthUint64), ErrNotSupported +func (s *FullNodeStub) EthGetTransactionCount(p0 context.Context, p1 ethtypes.EthAddress, p2 string) (ethtypes.EthUint64, error) { + return *new(ethtypes.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthGetTransactionReceipt(p0 context.Context, p1 eth.EthHash) (*EthTxReceipt, error) { +func (s *FullNodeStruct) EthGetTransactionReceipt(p0 context.Context, p1 ethtypes.EthHash) (*EthTxReceipt, error) { if s.Internal.EthGetTransactionReceipt == nil { return nil, ErrNotSupported } return s.Internal.EthGetTransactionReceipt(p0, p1) } -func (s *FullNodeStub) EthGetTransactionReceipt(p0 context.Context, p1 eth.EthHash) (*EthTxReceipt, error) { +func (s *FullNodeStub) EthGetTransactionReceipt(p0 context.Context, p1 ethtypes.EthHash) (*EthTxReceipt, error) { return nil, ErrNotSupported } -func (s *FullNodeStruct) EthMaxPriorityFeePerGas(p0 context.Context) (eth.EthBigInt, error) { +func (s *FullNodeStruct) EthMaxPriorityFeePerGas(p0 context.Context) (ethtypes.EthBigInt, error) { if s.Internal.EthMaxPriorityFeePerGas == nil { - return *new(eth.EthBigInt), ErrNotSupported + return *new(ethtypes.EthBigInt), ErrNotSupported } return s.Internal.EthMaxPriorityFeePerGas(p0) } -func (s *FullNodeStub) EthMaxPriorityFeePerGas(p0 context.Context) (eth.EthBigInt, error) { - return *new(eth.EthBigInt), ErrNotSupported +func (s *FullNodeStub) EthMaxPriorityFeePerGas(p0 context.Context) (ethtypes.EthBigInt, error) { + return *new(ethtypes.EthBigInt), ErrNotSupported } -func (s *FullNodeStruct) EthProtocolVersion(p0 context.Context) (eth.EthUint64, error) { +func (s *FullNodeStruct) EthProtocolVersion(p0 context.Context) (ethtypes.EthUint64, error) { if s.Internal.EthProtocolVersion == nil { - return *new(eth.EthUint64), ErrNotSupported + return *new(ethtypes.EthUint64), ErrNotSupported } return s.Internal.EthProtocolVersion(p0) } -func (s *FullNodeStub) EthProtocolVersion(p0 context.Context) (eth.EthUint64, error) { - return *new(eth.EthUint64), ErrNotSupported +func (s *FullNodeStub) EthProtocolVersion(p0 context.Context) (ethtypes.EthUint64, error) { + return *new(ethtypes.EthUint64), ErrNotSupported } -func (s *FullNodeStruct) EthSendRawTransaction(p0 context.Context, p1 eth.EthBytes) (eth.EthHash, error) { +func (s *FullNodeStruct) EthSendRawTransaction(p0 context.Context, p1 ethtypes.EthBytes) (ethtypes.EthHash, error) { if s.Internal.EthSendRawTransaction == nil { - return *new(eth.EthHash), ErrNotSupported + return *new(ethtypes.EthHash), ErrNotSupported } return s.Internal.EthSendRawTransaction(p0, p1) } -func (s *FullNodeStub) EthSendRawTransaction(p0 context.Context, p1 eth.EthBytes) (eth.EthHash, error) { - return *new(eth.EthHash), ErrNotSupported +func (s *FullNodeStub) EthSendRawTransaction(p0 context.Context, p1 ethtypes.EthBytes) (ethtypes.EthHash, error) { + return *new(ethtypes.EthHash), ErrNotSupported } func (s *FullNodeStruct) GasEstimateFeeCap(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) { diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index b512ffcfaebe8f701d94a2cf45455bb0121ca81c..58c6a9943a74b495aff9dddd9634f022baba98f3 100644 GIT binary patch delta 23307 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 A`~Uy| delta 23324 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 Z{r2!o9?Aase*gdg|NklRodq@~1^}1MDZc;! diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index eec137bc78fbf129827a484ea8d7f9488fff65f1..dae3944f185af7e8caa7380d292d772c2dc43b94 100644 GIT binary patch delta 4936 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 G@c;l(naA${ delta 4936 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

Fq)K%m1!+|2ICP>v%Wgj= z3>5j`7~0UlY@;0=_O!SDMSJ4chs(%sJ$ipJ{Gpgk@!!v`cuRrK>?B~tz&qr zd?3bB^=f#z%^U$pCf05UFl;e zIKWAQFHQ)G1Fm+0lQEDV!&XhrTUH`Zs)b5c(!GNj+EPx^uCm)CFEdrr*E{4gZd-pC zO}H%pqI%53vEZhKu!uw7g?ETEjI=+8Y>A)#d?{rX^g28noeqVI z&XYL$x$8mZIyc9`{SrB0X;f?>ku@N42yA4Cr~u*S^eaXASMr)YKphh~(vfOAXpS62 z477hu&Lv>Xma>4`y)cG^n^gS%|9O88a|iJ*pn(8%kO#m)=KeMLjWTouu9nyZE5w%6 z3@WtFvBi+%VLpSdELj!Wux|p}vb_?jc{H}Y!-lQ6!s6VpHROk*;rQ@iI2}%=TRHbh zbFiXT@ruE-gYwB!&>jxHIS@p{;rrDZziXCV`cXWPU)AyA!^sAC4&x^U6F#$+dA&jd(QRP`icALja}yor3~r1iiP#7}4RBJ2rnnoz-msL-#S%Z{@nTM^93+L9s-Ax&B|E8eo)nuO zH5W}9-=b5c_$gBCj0rtpm+fDZYjQdlXG-@U5HpsX-(19c32=;hx9~;oO7PC3=1A6A z7gy>*%M~S;B~s!rX%BeEQR4e0yh|K*SybMc@XDm*e;DvsN`e)Jq5wQY0wZL~dlxFe z6`vEz1g_%v3Yp>2RoQz?tyC>0Bl=*cQ4bKwv5k_grxX7c5l|Aifh7 z$9{en1|=?*=Y5!%_zs(EKE9rp{jesO5>ao=vgD%i4uY!_0W=J{T2T=QFMtPq2R%d< zt@Y^jPHmQ@h3&f9EX@Y{?hZG1$w^qKTZ#`fGg{X^)_ezDly`s3S$eK{?qJ!g9Qf8x zFRLF5hQr(KV*%c>}94(qEn65t5 z0>d>EbRB~=GJ>rXJkCV4RA>6FRLl$6Hmuqiu@>ScM}IKnEFuC6kG|+Vz1Q#QJ^iMq zT_9*`M_&fLA%B0+({E%cL`U;Zy<~_p}uz;g6)$2b^}c5*KQ7L?t$z(x_6m)u}ZtBBkT(=$!g_V zkOG8rZU`y=6C$l$SwsAKpPU&kLE|M20lEwH^EUU14 ze#l5Rzk3lWb-3Ka|7qAf2q-CG?h1h?sw}O&F(HF*Y{-^c3A-k==u2aXgW|M1zO`@2 z5x4CemezldFX1?}6j|a8=gDG9x&x;lkn$wy zPpR-cwN#xr^p<2~3gst>82_odo2WlLJcLjm?F}Y_@!n`O>+j8=Iog|<`oU~`I2#O% z(RRY`y5x-~2SEAZOH%PZFK)p)3P$8YKCbY1Pbmn2AEhNErTFHYpTayCtUZ61hi zyW4+W@m+|50QAtwmVt6zs!P3ajGYgz^TBmKxKIgtK85FSH0-L#9p)s3{Yjl$Vk{&;}+}Rb$R4Z z&kLiRcyLJ!|Dv;cq2S@?`N!VtH8%G@e@=gdX#`&unGzxRk^}IPJ}PanVq@CcQFsZ) znaASg->6t8Xg)O$58+^MGM$X~M*ZpG-gG{Pdxvv0*XL7xf)I*at5z0RuIpY5n|3hK zr~Mh!_a^~EQT+8q zgCEa7gZ^-Mpxq>Jv8l_rqP)k%r1!Reg}d&FuTN-2`J@eWfe3tvKlph5`7^^7{tD$< z^hKL<=s?Rt7Is$|k3OD%77F+sbWv6h$CMar$3cY2n^^k^RHnn}bfU+x37)lxP_&;U zPJ;waef?l~FzQbSqZnHKNnd}T^alsSNvoKJz3G|Q4HMW62ZR1#FdiKY^f-F@P(L^v z^v8XDq=evJHinZFhLH^QObkZ}3@4+}U^LbbN23IWF@kRs!^!lZe>ggrh_%VUaJ)MV zFxf!{IM`_hnC?6S9PT&+JociRfnc)eR6{-0u>I+&st)paHS+j5b-{lVqt_{dRu#eX zlY3J5?-;o!CI3#5`(rQgoI%sHF)~mCk+1KX$Zvp98@qvmC2fFNqPH^XKN=j44krhL z!$}Oe=;NnDE-Cw`s+d(&06T?T3&#KUkZVr?G^YBt6+jzQza0h8 z(%QAK3)miVE$jidg~V4|pyHh^PewCwKxA(o$iD?|{}#zVW$}OS82Kla!fug&Oe@ekR3B3VkxfFU1v)LzX@O1) zbXwpC(*l2M;(B+ecjCW`ChDSzI^o|%6TRqYqQ^(CvaqWik+o&@wD$zgtgtMwSKIUx z_Hgii!Uys5qrH}uO!c02EdCaMa)8HlO_&Guv7`)lh3d?HFDm7kgP{aPll{9c9wVrK zOMmE>ifyebc(TB37DBPtRc1t#i&dGAk6z25+IV^j(PVY-SkYUhi=_Ojw-p+z-Vzll zw5xbkRit8WKJm3fmkFLzT#guvXAok7VHL0Ps)9sPs8s((NFAlms!WecHTZf@;zFzf z*$Ek_(mpEw3hAqbYX4c|^W?cYqqldF<*wF@pA5Cf$D7Ch7XSeN|Fz{zHdz1z0O#o0 ARR910 delta 13927 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

qKA+8b3M<_kznL2!CcSOJ`g`9TedH| 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 delta 4190 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 diff --git a/chain/eth/eth_transactions.go b/chain/eth/eth_transactions.go index da294e95c..0776ba7c7 100644 --- a/chain/eth/eth_transactions.go +++ b/chain/eth/eth_transactions.go @@ -20,47 +20,48 @@ import ( "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/chain/types/ethtypes" ) const Eip1559TxType = 2 type EthTx struct { - ChainID EthUint64 `json:"chainId"` - Nonce EthUint64 `json:"nonce"` - Hash EthHash `json:"hash"` - BlockHash EthHash `json:"blockHash"` - BlockNumber EthUint64 `json:"blockNumber"` - TransactionIndex EthUint64 `json:"transactionIndex"` - From EthAddress `json:"from"` - To *EthAddress `json:"to"` - Value EthBigInt `json:"value"` - Type EthUint64 `json:"type"` - Input EthBytes `json:"input"` - Gas EthUint64 `json:"gas"` - MaxFeePerGas EthBigInt `json:"maxFeePerGas"` - MaxPriorityFeePerGas EthBigInt `json:"maxPriorityFeePerGas"` - V EthBytes `json:"v"` - R EthBytes `json:"r"` - S EthBytes `json:"s"` + ChainID ethtypes.EthUint64 `json:"chainId"` + Nonce ethtypes.EthUint64 `json:"nonce"` + Hash ethtypes.EthHash `json:"hash"` + BlockHash ethtypes.EthHash `json:"blockHash"` + BlockNumber ethtypes.EthUint64 `json:"blockNumber"` + TransactionIndex ethtypes.EthUint64 `json:"transactionIndex"` + From ethtypes.EthAddress `json:"from"` + To *ethtypes.EthAddress `json:"to"` + Value ethtypes.EthBigInt `json:"value"` + Type ethtypes.EthUint64 `json:"type"` + Input ethtypes.EthBytes `json:"input"` + Gas ethtypes.EthUint64 `json:"gas"` + MaxFeePerGas ethtypes.EthBigInt `json:"maxFeePerGas"` + MaxPriorityFeePerGas ethtypes.EthBigInt `json:"maxPriorityFeePerGas"` + V ethtypes.EthBytes `json:"v"` + R ethtypes.EthBytes `json:"r"` + S ethtypes.EthBytes `json:"s"` } type EthTxArgs struct { - ChainID int `json:"chainId"` - Nonce int `json:"nonce"` - To *EthAddress `json:"to"` - Value big.Int `json:"value"` - MaxFeePerGas big.Int `json:"maxFeePerGas"` - MaxPriorityFeePerGas big.Int `json:"maxPriorityFeePerGas"` - GasLimit int `json:"gasLimit"` - Input []byte `json:"input"` - V []byte `json:"v"` - R []byte `json:"r"` - S []byte `json:"s"` + ChainID int `json:"chainId"` + Nonce int `json:"nonce"` + To *ethtypes.EthAddress `json:"to"` + Value big.Int `json:"value"` + MaxFeePerGas big.Int `json:"maxFeePerGas"` + MaxPriorityFeePerGas big.Int `json:"maxPriorityFeePerGas"` + GasLimit int `json:"gasLimit"` + Input []byte `json:"input"` + V []byte `json:"v"` + R []byte `json:"r"` + S []byte `json:"s"` } func NewEthTxArgsFromMessage(msg *types.Message) (EthTxArgs, error) { var ( - to *EthAddress + to *ethtypes.EthAddress decodedParams []byte paramsReader = bytes.NewReader(msg.Params) ) @@ -83,7 +84,7 @@ func NewEthTxArgsFromMessage(msg *types.Message) (EthTxArgs, error) { return EthTxArgs{}, fmt.Errorf("unsupported EAM method") } } else { - addr, err := EthAddressFromFilecoinAddress(msg.To) + addr, err := ethtypes.EthAddressFromFilecoinAddress(msg.To) if err != nil { return EthTxArgs{}, err } @@ -441,7 +442,7 @@ func formatInt(val int) ([]byte, error) { return removeLeadingZeros(buf.Bytes()), nil } -func formatEthAddr(addr *EthAddress) []byte { +func formatEthAddr(addr *ethtypes.EthAddress) []byte { if addr == nil { return nil } @@ -496,7 +497,7 @@ func parseBytes(v interface{}) ([]byte, error) { return val, nil } -func parseEthAddr(v interface{}) (*EthAddress, error) { +func parseEthAddr(v interface{}) (*ethtypes.EthAddress, error) { b, err := parseBytes(v) if err != nil { return nil, err @@ -504,7 +505,7 @@ func parseEthAddr(v interface{}) (*EthAddress, error) { if len(b) == 0 { return nil, nil } - addr, err := EthAddressFromBytes(b) + addr, err := ethtypes.EthAddressFromBytes(b) if err != nil { return nil, err } diff --git a/chain/eth/eth_transactions_test.go b/chain/eth/eth_transactions_test.go index 1bb93c230..f696bfc50 100644 --- a/chain/eth/eth_transactions_test.go +++ b/chain/eth/eth_transactions_test.go @@ -19,6 +19,7 @@ import ( crypto1 "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/lotus/chain/actors" + "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/lib/sigs" _ "github.com/filecoin-project/lotus/lib/sigs/delegated" ) @@ -26,7 +27,7 @@ import ( type TxTestcase struct { TxJSON string NosigTx string - Input EthBytes + Input ethtypes.EthBytes Output EthTxArgs } @@ -167,9 +168,9 @@ func prepareTxTestcases() ([]TxTestcase, error) { tcstr := `[{"input":"0x02f84e82013a80808080808080c080a002d9af9415b94bac9fb29efa168e800fe8390ec22dd6dd3b6848632f999e5fa6a04b0bd833d6993eb37c3b0b5f89551cbbd5412b3a1fed84ca1e94ab2b936be12b","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cb82013a80808080808080c0"},{"input":"0x02f84f82013a81c8808080808080c080a0a9177c9fc995b0f83480113a62b797a3520e6bc15d0e9c722c662c40d443b893a01eec355e019308be6acf89a55288a40ae247b6f57c0ca31545efea5954f788d5","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02cc82013a81c8808080808080c0"},{"input":"0x02f84e82013a80808080808080c080a002d9af9415b94bac9fb29efa168e800fe8390ec22dd6dd3b6848632f999e5fa6a04b0bd833d6993eb37c3b0b5f89551cbbd5412b3a1fed84ca1e94ab2b936be12b","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cb82013a80808080808080c0"},{"input":"0x02f84f82013a81c8808080808080c080a0a9177c9fc995b0f83480113a62b797a3520e6bc15d0e9c722c662c40d443b893a01eec355e019308be6acf89a55288a40ae247b6f57c0ca31545efea5954f788d5","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02cc82013a81c8808080808080c0"},{"input":"0x02f87282013a808080808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0a0ab14f6fcca6c9905f447e961f128f2c00f5a00e7b1ae18f5d4f9e024a9b7a6a06c4126378d89035f4ab6085fa9a01d92bf798cd799b9338f7818bc48bcba0c8e","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02ef82013a808080808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87382013a81c88080808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0884e063f65a2986844a9e92f9e02561789c231136976715d5afb581435359e87a044295113d06dd7b8bdf105dd412c76fbd966ef6dbe1d8ace984886296a36018c","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f082013a81c88080808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85082013a808082ea6080808080c080a02b86cbd16667f7e035bd908d250d842e7d06f888716131de27897655dce01666a055f43bf2a758e6c250a14a31d33056fcb764e0fce4fffdeb0e11d84caa5ca57b","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a808082ea6080808080c0"},{"input":"0x02f85182013a81c88082ea6080808080c001a07f1e363b3d38607f8854013e68a80750befd3ba78cc9ce116d6ef6a09359a7aea05ef2c89ffc70ef7f2eaae90a2b4b2a4ffb418108d458e1237b26469e6381fdce","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c88082ea6080808080c0"},{"input":"0x02f85082013a808082ea6080808080c080a02b86cbd16667f7e035bd908d250d842e7d06f888716131de27897655dce01666a055f43bf2a758e6c250a14a31d33056fcb764e0fce4fffdeb0e11d84caa5ca57b","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a808082ea6080808080c0"},{"input":"0x02f85182013a81c88082ea6080808080c001a07f1e363b3d38607f8854013e68a80750befd3ba78cc9ce116d6ef6a09359a7aea05ef2c89ffc70ef7f2eaae90a2b4b2a4ffb418108d458e1237b26469e6381fdce","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c88082ea6080808080c0"},{"input":"0x02f87482013a808082ea60808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0ddb915f82dd7835ad51b718abcfce007d8626019b122763063b92fa40b987248a03bd8dfd6c9b9c33affcdcd3a16b8d28ba9554ace2b5333c7d51d218f9d9ae175","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f182013a808082ea60808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87582013a81c88082ea60808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0606a3f7eeae6d8e7167d68bdd18c8d6f1dafa2aa308cc972d00c17fba8a00ed5a023ab15156103722a5b318570eed11eaa54d943f49135fae65288cb08fdb63aa1","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f282013a81c88082ea60808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85082013a8082ea608080808080c080a06ad97b54cb997b20c8c10e8aa231582470e9fb29c7b4353ad349ede58988e167a0536ca437b1e2c2346b44ac24d0c5c2bc84ef76f2fa9fb601e5120ab08172188d","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a8082ea608080808080c0"},{"input":"0x02f85182013a81c882ea608080808080c080a07765925917407579de914453373b3169a9c7bd54ffbdc2baf95d27d628782b6aa07bdb11529410353d7fcf128e47d4a11f78805bdea8317df3060f75574dd56049","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c882ea608080808080c0"},{"input":"0x02f85082013a8082ea608080808080c080a06ad97b54cb997b20c8c10e8aa231582470e9fb29c7b4353ad349ede58988e167a0536ca437b1e2c2346b44ac24d0c5c2bc84ef76f2fa9fb601e5120ab08172188d","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a8082ea608080808080c0"},{"input":"0x02f85182013a81c882ea608080808080c080a07765925917407579de914453373b3169a9c7bd54ffbdc2baf95d27d628782b6aa07bdb11529410353d7fcf128e47d4a11f78805bdea8317df3060f75574dd56049","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c882ea608080808080c0"},{"input":"0x02f87482013a8082ea6080808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0cea8956fdd5588f6ecb10da330d2b792f1f65e44ad7ce7ef8f084054c036a1f4a0429db8240b6da9dbc82286141ec5af4abcf38a3c1aabe2f918274aca59cfc315","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f182013a8082ea6080808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87582013a81c882ea6080808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0936dede60bd875866a5909ff0f6bbdfc12d3e9b171904140d745f8fb8f58dd1aa005d646d18d5abcd9dfdc448226be2b2395bb725603d548ce20e99968c7d1165b","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f282013a81c882ea6080808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85282013a8082ea6082ea6080808080c001a08d8e15db9b109df23e6a888073dfbd4ff82650072a6fabc2acb7a8077221eee6a04d6b3b42271a428998881b4a061efa181b66113dbbb68ea559bc07668b4be8e5","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a8082ea6082ea6080808080c0"},{"input":"0x02f85382013a81c882ea6082ea6080808080c080a0cf0e64a9535ae3e48045e863970f9e50b2742c641a5fe87a68ce60711e7f0d37a077ec4be433ce17b81eeccc857edde772bceaf7f1ef5dec398a0a5c514db554ab","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c882ea6082ea6080808080c0"},{"input":"0x02f85282013a8082ea6082ea6080808080c001a08d8e15db9b109df23e6a888073dfbd4ff82650072a6fabc2acb7a8077221eee6a04d6b3b42271a428998881b4a061efa181b66113dbbb68ea559bc07668b4be8e5","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a8082ea6082ea6080808080c0"},{"input":"0x02f85382013a81c882ea6082ea6080808080c080a0cf0e64a9535ae3e48045e863970f9e50b2742c641a5fe87a68ce60711e7f0d37a077ec4be433ce17b81eeccc857edde772bceaf7f1ef5dec398a0a5c514db554ab","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c882ea6082ea6080808080c0"},{"input":"0x02f87582013a8082ea6082ea60808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a087081d2d818f81fb4d6e7063e1c99b0c615166815dcfab4ada162a3bb9888f689f0d4db69544b662926e8d06d838739691ddc15c23e5bde43b39b4908248abc2","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f382013a8082ea6082ea60808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87782013a81c882ea6082ea60808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a050d9da7b09da1c7b8f8acf8a4757ef0a30e051c9f3ad2175f23f00ce1c9b830da047e0d9bb275b89be86bd3e5c711d6ec93220df5072ba363f2d49b2b1c2487235","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f482013a81c882ea6082ea60808080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85082013a80808082ea60808080c080a07b741f41b9adbaff98e97624a7910c544ca9fe9d6d4df4c72f9c6388eae73feda02206314ddfccf58fd2859b09b186c5d620b3da4629b4f5ea7182f5f20166cc17","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a80808082ea60808080c0"},{"input":"0x02f85182013a81c8808082ea60808080c080a0de264ea9a2f3130cf8b701f1e9683e7966fc11f889e2662ce019bde8b230c76ea0757eeb15f1425b63a1b30404a90e7fdd71d260144370400b90759151dc9e5c0a","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c8808082ea60808080c0"},{"input":"0x02f85082013a80808082ea60808080c080a07b741f41b9adbaff98e97624a7910c544ca9fe9d6d4df4c72f9c6388eae73feda02206314ddfccf58fd2859b09b186c5d620b3da4629b4f5ea7182f5f20166cc17","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a80808082ea60808080c0"},{"input":"0x02f85182013a81c8808082ea60808080c080a0de264ea9a2f3130cf8b701f1e9683e7966fc11f889e2662ce019bde8b230c76ea0757eeb15f1425b63a1b30404a90e7fdd71d260144370400b90759151dc9e5c0a","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c8808082ea60808080c0"},{"input":"0x02f87482013a80808082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0b88b1993c94f40aa95afdb48d12fe68872b2ad2db152a4af2e333926e57bab16a0134405c059bd7006ffde093895cb5f032bfb2ed2a2c2b1a8bc0fd404d34e397c","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f182013a80808082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87582013a81c8808082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a016bd6bdb9a4a99679bb85cfb0d17b49d635c0837589827aa95b23ccb2e6899c9a0041e3d19f409ddef0eb8b3d5197cf7f6097d7ad7c8f55bc976ded6195e27f373","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f282013a81c8808082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85282013a808082ea6082ea60808080c001a054c4ed8414c0103afb7d19ad69433cd0e9d3b988f33ace6c050795c583ffa681a06e4aa13eb0459ceeb0b25a8099ec17fa40ca7ca381191a940c68199a95e8d98d","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a808082ea6082ea60808080c0"},{"input":"0x02f85282013a81c88082ea6082ea60808080c001a0d3b7b7cd9a61dd80070781bbba5b4b84a8006715e628ea0c0f891446e524d2f89fd149593d7205b5baf322da6c1a770b402b4cd075cf476f6bdc5331c9ebb5c3","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c88082ea6082ea60808080c0"},{"input":"0x02f85282013a808082ea6082ea60808080c001a054c4ed8414c0103afb7d19ad69433cd0e9d3b988f33ace6c050795c583ffa681a06e4aa13eb0459ceeb0b25a8099ec17fa40ca7ca381191a940c68199a95e8d98d","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a808082ea6082ea60808080c0"},{"input":"0x02f85282013a81c88082ea6082ea60808080c001a0d3b7b7cd9a61dd80070781bbba5b4b84a8006715e628ea0c0f891446e524d2f89fd149593d7205b5baf322da6c1a770b402b4cd075cf476f6bdc5331c9ebb5c3","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c88082ea6082ea60808080c0"},{"input":"0x02f87682013a808082ea6082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0ca465473de19d169c5ec35304368da7d03767e8bbbdfc3e01a7b38822a3e2899a05ea2562bbd0bf90d2ee8944997129ff42618b123b7b6d3221208c34c37e6d7b2","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f382013a808082ea6082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87782013a81c88082ea6082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a025e211e1e66aa58549f12d352f1f7c4c644c0a208c0ccf48e1c0b6642ad1fadfa07275f712cf8e1f257722893c99fcd794aabf4eb2124ce2025cc404d326f69f95","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f482013a81c88082ea6082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85182013a8082ea608082ea60808080c0019fadd8e2ba459fd435d0e5ff745057e84f2ef3982952da514d1b59e12acb8639a04ee061901f178335a5498809e96e5984186e3015800ac95ae05bb17c2ad0eb2f","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a8082ea608082ea60808080c0"},{"input":"0x02f85382013a81c882ea608082ea60808080c001a05ae3f41d9ecdbf2f944f532cd63afafdcb6ea93d849925a3713af37133acacfba06f3fca48b5d91f3f7475a3b24bc9e406584dfca736a3e818506156a8a2955f77","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c882ea608082ea60808080c0"},{"input":"0x02f85182013a8082ea608082ea60808080c0019fadd8e2ba459fd435d0e5ff745057e84f2ef3982952da514d1b59e12acb8639a04ee061901f178335a5498809e96e5984186e3015800ac95ae05bb17c2ad0eb2f","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a8082ea608082ea60808080c0"},{"input":"0x02f85382013a81c882ea608082ea60808080c001a05ae3f41d9ecdbf2f944f532cd63afafdcb6ea93d849925a3713af37133acacfba06f3fca48b5d91f3f7475a3b24bc9e406584dfca736a3e818506156a8a2955f77","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c882ea608082ea60808080c0"},{"input":"0x02f87682013a8082ea608082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0df6e0b1a5df0b64974bd19cb70cfba37732beca6b172708d10b27861d2f05a7ca04d16fd21111cd6867a0a341a9355599665bf951d0a8e4bb70714ed73007c309b","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f382013a8082ea608082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87782013a81c882ea608082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a00ffa95e5be67c550de3b12b20ff369cdfc994faafc2c8bbd9fac95dc2d20e904a019ad18231fb1965b13c43f3f5a69f02c21c38fae141c8b391f598e7ed12ecbcb","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f482013a81c882ea608082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85482013a8082ea6082ea6082ea60808080c080a08f0078606ffc32decf3ee390a30f9610b8dc49cb55666a7d037325d367ef09bca0767479734098f684fca992e7237b369343b223940c7a3dcf486ae0763c2d3707","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d182013a8082ea6082ea6082ea60808080c0"},{"input":"0x02f85582013a81c882ea6082ea6082ea60808080c001a088ddf4e4ce8c4ad8b2d1b197ba41692ffd35e91feb4cb7f944019b9fd2b05fa4a04c87674f13d7ea3fa09b4a5f7d84a70206aed313136c5d2cdff65b6028e0efb2","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d282013a81c882ea6082ea6082ea60808080c0"},{"input":"0x02f85482013a8082ea6082ea6082ea60808080c080a08f0078606ffc32decf3ee390a30f9610b8dc49cb55666a7d037325d367ef09bca0767479734098f684fca992e7237b369343b223940c7a3dcf486ae0763c2d3707","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d182013a8082ea6082ea6082ea60808080c0"},{"input":"0x02f85582013a81c882ea6082ea6082ea60808080c001a088ddf4e4ce8c4ad8b2d1b197ba41692ffd35e91feb4cb7f944019b9fd2b05fa4a04c87674f13d7ea3fa09b4a5f7d84a70206aed313136c5d2cdff65b6028e0efb2","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d282013a81c882ea6082ea6082ea60808080c0"},{"input":"0x02f87882013a8082ea6082ea6082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a062385c6b319fd40197a42e418525993e08804552961eb34e3de3cdddb1e1c17aa01f846e856717054b4974814048483e8be23f7acb0382e883f8a36e527a2067cb","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f582013a8082ea6082ea6082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87982013a81c882ea6082ea6082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a091f71b17ab4d27b10ffa21aa757fa361adac0ec0084bc0ca499f5eb7b09677d5a034d9e5954f9a3e4b0f871c3045ccb11ad0e26bc6f4e32c19bc91e80931f2fd5d","output":"{\"to\":null,\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f682013a81c882ea6082ea6082ea608080a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f84e82013a80808080806480c080a0e3e8ae1c2f71c3657729422bc3d48239f877d9133c2608966ccbe899d477b2bba0272d93dbc97ee070fdc86870712795a8a87779f706b45baa1643092290258878","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cb82013a80808080806480c0"},{"input":"0x02f84f82013a81c8808080806480c080a097cb9161ea9dc2753dd6d0866d9b03b39c4cdfef2f44fa6c73fc1d5def02dee9a05e723c214ed4cc12d1df5842e422947805afe44c85e8184855174a673ce68d74","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02cc82013a81c8808080806480c0"},{"input":"0x02f84e82013a80808080806480c080a0e3e8ae1c2f71c3657729422bc3d48239f877d9133c2608966ccbe899d477b2bba0272d93dbc97ee070fdc86870712795a8a87779f706b45baa1643092290258878","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cb82013a80808080806480c0"},{"input":"0x02f84f82013a81c8808080806480c080a097cb9161ea9dc2753dd6d0866d9b03b39c4cdfef2f44fa6c73fc1d5def02dee9a05e723c214ed4cc12d1df5842e422947805afe44c85e8184855174a673ce68d74","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02cc82013a81c8808080806480c0"},{"input":"0x02f87282013a808080808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a09459bcb2fd569e48e6d854b142924b3cb5f63b774705f691238fdba4722896bda0137170a8cf29602fcf9a6ae1f692e20371f7ad6a73856e96e0b1f58535b5938c","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02ef82013a808080808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87382013a81c88080808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a09a229970bf10c22518b219419cb17688b2db26110eaef65458b54e7cfb3de4f2a07dc083b02a1e86f4c5037ecc2906e49978da216b5e40d629c5856508c5475f89","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f082013a81c88080808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85082013a808082ea6080806480c001a0ad1c4e4febc7dca2391a4a15118f7a86806c2556049ad60cfb8b056fadad3ecfa058f215be70dfa961d7072f4dc438510e9c8db0a5791caa79ff0b7b706cf316ed","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a808082ea6080806480c0"},{"input":"0x02f85182013a81c88082ea6080806480c001a0f31747ec765743a700ca8df903fc916cda923abf5b44a979db85d306f59cbde6a02e139ced4f0a12955f8b3782a7d921cc460f7bb066b65490c81f68ce7f7a50dd","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c88082ea6080806480c0"},{"input":"0x02f85082013a808082ea6080806480c001a0ad1c4e4febc7dca2391a4a15118f7a86806c2556049ad60cfb8b056fadad3ecfa058f215be70dfa961d7072f4dc438510e9c8db0a5791caa79ff0b7b706cf316ed","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a808082ea6080806480c0"},{"input":"0x02f85182013a81c88082ea6080806480c001a0f31747ec765743a700ca8df903fc916cda923abf5b44a979db85d306f59cbde6a02e139ced4f0a12955f8b3782a7d921cc460f7bb066b65490c81f68ce7f7a50dd","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c88082ea6080806480c0"},{"input":"0x02f87482013a808082ea60808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0a810714a260023b52cda70890e61f16ee4af42f46fa9e1566f470c453bd25b88a02d6a88558e5692dbd2e59bed18109d505005ae48d5e59742b408dcef5bd9e367","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f182013a808082ea60808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87582013a81c88082ea60808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0d11b1322d114f5b9f9c4b1e5231a2db2171b5608122e0317b29d4959770d7ef6a011fd8d3641694c019c62b010c37af30aa5ab41ee34d8f69b9a9f98a3c1c5d578","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f282013a81c88082ea60808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85082013a8082ea608080806480c001a0320db73af75876fedea2856c3aeeb4bb20e6514b1ed0e6c30e81723a7db3daa5a03a7fce79ffb6638b7a44aa1ef72073d6e55cca462c2fca9d85ffe2a246a5908d","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a8082ea608080806480c0"},{"input":"0x02f85182013a81c882ea608080806480c080a0dac7634fa49fc1a622bf8bb562449f712b8d611315d1a4c42437fbab9ce6db84a07b8ee93bb2e8267646b2f0cf6d833b179cea243a64c87d3404a845f2c5f2e5de","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c882ea608080806480c0"},{"input":"0x02f85082013a8082ea608080806480c001a0320db73af75876fedea2856c3aeeb4bb20e6514b1ed0e6c30e81723a7db3daa5a03a7fce79ffb6638b7a44aa1ef72073d6e55cca462c2fca9d85ffe2a246a5908d","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a8082ea608080806480c0"},{"input":"0x02f85182013a81c882ea608080806480c080a0dac7634fa49fc1a622bf8bb562449f712b8d611315d1a4c42437fbab9ce6db84a07b8ee93bb2e8267646b2f0cf6d833b179cea243a64c87d3404a845f2c5f2e5de","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c882ea608080806480c0"},{"input":"0x02f87482013a8082ea6080808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a03f00cc26a7c13191e82fe3ee79f43a3c7addeb4b3ff14c1382b5eb7dedac6745a02e994b354d3fa24bf97350f36d5177356f1c40cec2c0ff3e3c6c6620afe2a637","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f182013a8082ea6080808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87582013a81c882ea6080808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0ec35e69a3bbcf761e388401ce39cd25d7dab736bb200bb632e7d484aad96f506a05a3ee4422b29d1192434c4d3c9d64af412538f0deeeb7d1a18b931eb4af38df3","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f282013a81c882ea6080808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85282013a8082ea6082ea6080806480c080a0eddd719e0b0de7f96549dd1de6f5ef13f9fb5f9e67bdaad08545ca348058c431a0687a16c86b9068385f6175475e91907f9c37377e1a54bd4b41d088d27bc7088a","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a8082ea6082ea6080806480c0"},{"input":"0x02f85382013a81c882ea6082ea6080806480c001a0788913be6a613572ca175c16ffaddf01a167b58c32f81defd8e4de53625fc812a004c93984e30bdba3603c1f57feee0b5115a87031e0124516c251cb73ef27de10","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c882ea6082ea6080806480c0"},{"input":"0x02f85282013a8082ea6082ea6080806480c080a0eddd719e0b0de7f96549dd1de6f5ef13f9fb5f9e67bdaad08545ca348058c431a0687a16c86b9068385f6175475e91907f9c37377e1a54bd4b41d088d27bc7088a","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a8082ea6082ea6080806480c0"},{"input":"0x02f85382013a81c882ea6082ea6080806480c001a0788913be6a613572ca175c16ffaddf01a167b58c32f81defd8e4de53625fc812a004c93984e30bdba3603c1f57feee0b5115a87031e0124516c251cb73ef27de10","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c882ea6082ea6080806480c0"},{"input":"0x02f87682013a8082ea6082ea60808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a07f7f9b35e2759a1b6dc06506c1195468e29fd8b80e1ff90e3f40723a9334fed8a039cac5524d7e57b22be8c4390f8c4aedb2ce7abe8e9c6c0a3fbe90c48d754387","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f382013a8082ea6082ea60808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87782013a81c882ea6082ea60808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a07eddd29705e5e913d22de47daf6d93b20a7135f0e3ac8aa16c5b1c25efa95815a0082caa535a5e00776dcc47a19aca103f0e815fb984ecf90d3407dcc43655eece","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f482013a81c882ea6082ea60808064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85082013a80808082ea60806480c080a0f8102947aec0f244de8b3c3791a4e4214f693c3314bf50696546f5ca7c54930ca002769e82a368edbb1c9cb53d1857541c1386fcc6d0a11d3e58655025f8ce7312","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a80808082ea60806480c0"},{"input":"0x02f85182013a81c8808082ea60806480c080a0ce8df3004e424af808d77c6a11b2f0391842bbd5ac686e5b432e1e8a1f5fd1d4a00d55cc4ff21cacc2581d8756b0a8227111fdcbb030c6bbd692f775525be29902","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c8808082ea60806480c0"},{"input":"0x02f85082013a80808082ea60806480c080a0f8102947aec0f244de8b3c3791a4e4214f693c3314bf50696546f5ca7c54930ca002769e82a368edbb1c9cb53d1857541c1386fcc6d0a11d3e58655025f8ce7312","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cd82013a80808082ea60806480c0"},{"input":"0x02f85182013a81c8808082ea60806480c080a0ce8df3004e424af808d77c6a11b2f0391842bbd5ac686e5b432e1e8a1f5fd1d4a00d55cc4ff21cacc2581d8756b0a8227111fdcbb030c6bbd692f775525be29902","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ce82013a81c8808082ea60806480c0"},{"input":"0x02f87482013a80808082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a009f2b5837ed29f7b472468b9dc636f39e989796d97ca9400e35f094f234b7231a0345874d675700c4488978338d12a7c62f9d8a0096798342bff7f35e444604154","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f182013a80808082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87582013a81c8808082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a09c0580e0842bb3f50d0a28402f4a99fd6e156b978633b629c0f2cc4172252153a051f9ecab32316215af8da2abb81dcf859aec81ad75fc0e22f2c281d512333928","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f282013a81c8808082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85282013a808082ea6082ea60806480c080a0fcdad7ad0562a7129b4cc73bfb8565959feb5a8259993cd68ece3d6f6bd4f0e1a0121e6ae7e4819a865ffbacbe8ad67d5cc8634e9dbe8f5528cc8841c9d4453ccc","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a808082ea6082ea60806480c0"},{"input":"0x02f85382013a81c88082ea6082ea60806480c001a083dc862eaf257068751ac014ff021ab5a729c68fc3f665bcc3abe3d7393cb0d2a02400cc4059f66c8feaa0d717a659d763ac5d4d067a45b9571037f5d573fdd7c9","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c88082ea6082ea60806480c0"},{"input":"0x02f85282013a808082ea6082ea60806480c080a0fcdad7ad0562a7129b4cc73bfb8565959feb5a8259993cd68ece3d6f6bd4f0e1a0121e6ae7e4819a865ffbacbe8ad67d5cc8634e9dbe8f5528cc8841c9d4453ccc","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a808082ea6082ea60806480c0"},{"input":"0x02f85382013a81c88082ea6082ea60806480c001a083dc862eaf257068751ac014ff021ab5a729c68fc3f665bcc3abe3d7393cb0d2a02400cc4059f66c8feaa0d717a659d763ac5d4d067a45b9571037f5d573fdd7c9","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c88082ea6082ea60806480c0"},{"input":"0x02f87682013a808082ea6082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0a5b1529fb5158abf54d61689aeafbcf7aba86c95efa53726299c64349e8cb277a06f68a0c684c1e1ddba000a3bdd18019011ca5a01f627914445a8e8ff77d11eed","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f382013a808082ea6082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87782013a81c88082ea6082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a049bc9983635fe90f3c5ac42c4919695c2bd1bf3600e731a85e671923dab1d24da02c2140f4339ff23855d599c7c88257709fbf6a363bcd7211e6218cf1ad3936d9","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f482013a81c88082ea6082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85282013a8082ea608082ea60806480c001a03a08bf6de5d7d22ca0154c5a705bb3f5b0e3105c343eabc0307fc99bb89f91d0a021f8c7c5867ca59acd770eb06ac8c4488bd8f40c4bfd0841185ac60f8cb311de","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a8082ea608082ea60806480c0"},{"input":"0x02f85382013a81c882ea608082ea60806480c001a09449cea6b7b492b80c6ebe08588c3b3bb94f73cddcf5b60a4bdf9c10462f9264a01682ef0a841044bd58f392b252418d9dd473e08bf561632976126652f1ac1b88","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c882ea608082ea60806480c0"},{"input":"0x02f85282013a8082ea608082ea60806480c001a03a08bf6de5d7d22ca0154c5a705bb3f5b0e3105c343eabc0307fc99bb89f91d0a021f8c7c5867ca59acd770eb06ac8c4488bd8f40c4bfd0841185ac60f8cb311de","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02cf82013a8082ea608082ea60806480c0"},{"input":"0x02f85382013a81c882ea608082ea60806480c001a09449cea6b7b492b80c6ebe08588c3b3bb94f73cddcf5b60a4bdf9c10462f9264a01682ef0a841044bd58f392b252418d9dd473e08bf561632976126652f1ac1b88","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d082013a81c882ea608082ea60806480c0"},{"input":"0x02f87682013a8082ea608082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a07e9ba318f9c63d1a6b2afeccbca77eb512e85e1ac661e6fc050970449c4b2a26a0478a9c96e9d9e900dc3ae4dba33a425254ff3578af30255c1be68fe316c40119","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f382013a8082ea608082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87782013a81c882ea608082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a08c6c7c76220d18df6d45175256f1c615757a456163bcf732a605d9a063509c79a022b364054d69f91213c521ffad2d0c5c349a5808b03543d4813f8b23e342e8f3","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f482013a81c882ea608082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85482013a8082ea6082ea6082ea60806480c080a0825a042c44b472317d1387a9cf190f4d0c770a84300c299452ff5a220e2c1590a00403abbbf3b147d4895f68305b0db21be477616987d604cea0615cf6ac377a77","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d182013a8082ea6082ea6082ea60806480c0"},{"input":"0x02f85582013a81c882ea6082ea6082ea60806480c001a044bdb37e9b26c8a09c9ce61acd01f68badc063005f5dcbfd32836f5950049695a0499a9d378b97c4a5bb6ec105a00ad581b224bf227439799d0b97ea8f5faee767","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d282013a81c882ea6082ea6082ea60806480c0"},{"input":"0x02f85482013a8082ea6082ea6082ea60806480c080a0825a042c44b472317d1387a9cf190f4d0c770a84300c299452ff5a220e2c1590a00403abbbf3b147d4895f68305b0db21be477616987d604cea0615cf6ac377a77","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d182013a8082ea6082ea6082ea60806480c0"},{"input":"0x02f85582013a81c882ea6082ea6082ea60806480c001a044bdb37e9b26c8a09c9ce61acd01f68badc063005f5dcbfd32836f5950049695a0499a9d378b97c4a5bb6ec105a00ad581b224bf227439799d0b97ea8f5faee767","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d282013a81c882ea6082ea6082ea60806480c0"},{"input":"0x02f87882013a8082ea6082ea6082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0c73e7dcd11a8f1e1b59b81f5e626c898597c84dc540966dad1dbb51fcc106814a0352250cf688c74808d2939ff919cdef19a4c9c9fa61698224565ce912a20429a","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f582013a8082ea6082ea6082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87982013a81c882ea6082ea6082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a08020e129ccb7034377ea4cbb03a313997c6e9a370891de88d1d3d61c0e87e1b4a00668935ceed45538772745b760bb6471e79963e44ffce163440240b3578cd262","output":"{\"to\":null,\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f682013a81c882ea6082ea6082ea608064a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85682013a8080808080880de0b6b3a764000080c080a0f31df874009680817aea98fdd57d6a0f8d596e251b573e86d44e0b944a7913f3a03baa16757b2351cd5784c4b0213e66c2f3839e98af99f20606d8c33d9d45f661","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d382013a8080808080880de0b6b3a764000080c0"},{"input":"0x02f85782013a81c880808080880de0b6b3a764000080c001a0cf54b9a861cf6a6951b38578a73de9c51688b124b8e7dd0ee7ba10f0136e4efba003a5bf873c58a9dc269727e1ebc2b2c690ed2e7e3a64482c1f58e6b526092944","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d482013a81c880808080880de0b6b3a764000080c0"},{"input":"0x02f85682013a8080808080880de0b6b3a764000080c080a0f31df874009680817aea98fdd57d6a0f8d596e251b573e86d44e0b944a7913f3a03baa16757b2351cd5784c4b0213e66c2f3839e98af99f20606d8c33d9d45f661","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d382013a8080808080880de0b6b3a764000080c0"},{"input":"0x02f85782013a81c880808080880de0b6b3a764000080c001a0cf54b9a861cf6a6951b38578a73de9c51688b124b8e7dd0ee7ba10f0136e4efba003a5bf873c58a9dc269727e1ebc2b2c690ed2e7e3a64482c1f58e6b526092944","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d482013a81c880808080880de0b6b3a764000080c0"},{"input":"0x02f87a82013a8080808080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0907be9b9c50d1ebc3489dde0599802464a2792e6a4c3014d2d42db50f4ba3c75a02330372fe92742fce0fe28bc0583813f17640e3c5080141008b4ac803e61911a","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f782013a8080808080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87b82013a81c880808080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a09c566bb25bc5010ed9c7a5eedb662d3390bf065fcc10571125dc248d810a6731a024531646c80970757cff49228a332f238d8e3e4ce7038fd6943610f877eedff9","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83882013a81c880808080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85882013a808082ea608080880de0b6b3a764000080c001a0b7079e6b62999bc486de04bed329e79a52aa17752ba4880b996710349b40c7e1a014869354847aebbfdddc473183b9baa8584d86b2dc48ecf647ae20430f146f35","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d582013a808082ea608080880de0b6b3a764000080c0"},{"input":"0x02f85982013a81c88082ea608080880de0b6b3a764000080c080a04f4cd4dcfef7d6a5b654d9bdf8a89c4929dc32e375d199b40f5a114b9edabd45a01aabbcd6fb9b5f96597f180a70ba57e8d238995c392c96bb204879f134a12a93","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d682013a81c88082ea608080880de0b6b3a764000080c0"},{"input":"0x02f85882013a808082ea608080880de0b6b3a764000080c001a0b7079e6b62999bc486de04bed329e79a52aa17752ba4880b996710349b40c7e1a014869354847aebbfdddc473183b9baa8584d86b2dc48ecf647ae20430f146f35","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d582013a808082ea608080880de0b6b3a764000080c0"},{"input":"0x02f85982013a81c88082ea608080880de0b6b3a764000080c080a04f4cd4dcfef7d6a5b654d9bdf8a89c4929dc32e375d199b40f5a114b9edabd45a01aabbcd6fb9b5f96597f180a70ba57e8d238995c392c96bb204879f134a12a93","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d682013a81c88082ea608080880de0b6b3a764000080c0"},{"input":"0x02f87c82013a808082ea608080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a06f5262d03380227973c7507fbb1931ce3ae684521b2803d967fc67cead8734fda02801ed8fc53083936ec4bbefa3216a5241d25c8940aa16c9bc0ed51d302907b7","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83982013a808082ea608080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87d82013a81c88082ea608080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a046b8e78656538c428e14378d9e3fe1c19a3a9a96251aeb7b04fd416858ceff23a017bd04e5f3059b34c8c9a42a0ee67517bf67592c95d4b8553716808e8fde4400","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83a82013a81c88082ea608080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85882013a8082ea60808080880de0b6b3a764000080c001a0d93a26bd5294c50b7dedf5c6d7cbc5a1a5ec40d80cfb811f463788b80dc45d0fa05598f7fc9dff96717999450035d4f9b503988b616e3990a20d165cdd638be362","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d582013a8082ea60808080880de0b6b3a764000080c0"},{"input":"0x02f85982013a81c882ea60808080880de0b6b3a764000080c001a08890ab494d178516833623e2c05e7ffb600ec980b141f8b6e8733a94bf7b5289a04bc7ff419352ca8eb396d1b7b57d50bc1ec80a236a71055241bf2e7535f92901","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d682013a81c882ea60808080880de0b6b3a764000080c0"},{"input":"0x02f85882013a8082ea60808080880de0b6b3a764000080c001a0d93a26bd5294c50b7dedf5c6d7cbc5a1a5ec40d80cfb811f463788b80dc45d0fa05598f7fc9dff96717999450035d4f9b503988b616e3990a20d165cdd638be362","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d582013a8082ea60808080880de0b6b3a764000080c0"},{"input":"0x02f85982013a81c882ea60808080880de0b6b3a764000080c001a08890ab494d178516833623e2c05e7ffb600ec980b141f8b6e8733a94bf7b5289a04bc7ff419352ca8eb396d1b7b57d50bc1ec80a236a71055241bf2e7535f92901","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d682013a81c882ea60808080880de0b6b3a764000080c0"},{"input":"0x02f87c82013a8082ea60808080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0d9d52087d771d397a9e1630452cc4649671941c3486b0bb24019087b4d897769a04e2ecc1e542690cfcf341c6fce6987ac4cd8cdecdbdfd5c9521d268d2085c84e","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83982013a8082ea60808080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87d82013a81c882ea60808080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0eadf0da93be9c532794684382b7fe49093a093a8f082b79b4b9bb9ee686de274a021648c60e5dd6e4c3e102befcfdc4512a246e9d66e24fff3053545144955cb80","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83a82013a81c882ea60808080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85a82013a8082ea6082ea608080880de0b6b3a764000080c080a0ee344021ecd122a30b44535901718a9eefd06f5ecccc41c530c1e9cfe4cd1f13a07425a2aa7612bb4e5cffe400af1d162ab8cdbe185d92b1e6c166de7fa571a9f3","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d782013a8082ea6082ea608080880de0b6b3a764000080c0"},{"input":"0x02f85b82013a81c882ea6082ea608080880de0b6b3a764000080c001a0da86086e5a046a1b41dbc4b55b97ba517696db207e0a9da2e3b46af1507d17c5a07779b1c12a3dc37378985b5d7a4fcc95f1fbd0cbba522d7cc1a20d535faeb30e","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d882013a81c882ea6082ea608080880de0b6b3a764000080c0"},{"input":"0x02f85a82013a8082ea6082ea608080880de0b6b3a764000080c080a0ee344021ecd122a30b44535901718a9eefd06f5ecccc41c530c1e9cfe4cd1f13a07425a2aa7612bb4e5cffe400af1d162ab8cdbe185d92b1e6c166de7fa571a9f3","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d782013a8082ea6082ea608080880de0b6b3a764000080c0"},{"input":"0x02f85b82013a81c882ea6082ea608080880de0b6b3a764000080c001a0da86086e5a046a1b41dbc4b55b97ba517696db207e0a9da2e3b46af1507d17c5a07779b1c12a3dc37378985b5d7a4fcc95f1fbd0cbba522d7cc1a20d535faeb30e","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d882013a81c882ea6082ea608080880de0b6b3a764000080c0"},{"input":"0x02f87e82013a8082ea6082ea608080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0fc1e27c941325403a95a8adf21eb77fbc947b20a0a1dabb245ab514ef09d0171a03e014156069072bf3682e34da2719af03d784691c199beb012c71682dfda20ae","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83b82013a8082ea6082ea608080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87f82013a81c882ea6082ea608080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a03412dc4f1e4b8de363a753b08e7bed249c1e3c5a95515f5a50997ad7f3bb6c50a05fb5a87024da9009bb50337a28bd86dd448c3772ba93abba952d9c3b5fc927f3","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83c82013a81c882ea6082ea608080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85882013a80808082ea6080880de0b6b3a764000080c080a00b2cab27d46f5b18c95bcbbbbdbc128e1798e8c633f3126f8e0b4d47822899c8a00e2dfee3c9698df3dacea25569c96f927baa0e83a2dc3804c2007215ff1fd16e","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d582013a80808082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85982013a81c8808082ea6080880de0b6b3a764000080c001a098d11fdf17851c4393dcdeca863464936f901cb89b5959be1d5fbe5cf47fce64a070acf0beaedc55af8a67b637d43dd8f70b10026501f146b32ec9b413689c3018","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d682013a81c8808082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85882013a80808082ea6080880de0b6b3a764000080c080a00b2cab27d46f5b18c95bcbbbbdbc128e1798e8c633f3126f8e0b4d47822899c8a00e2dfee3c9698df3dacea25569c96f927baa0e83a2dc3804c2007215ff1fd16e","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d582013a80808082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85982013a81c8808082ea6080880de0b6b3a764000080c001a098d11fdf17851c4393dcdeca863464936f901cb89b5959be1d5fbe5cf47fce64a070acf0beaedc55af8a67b637d43dd8f70b10026501f146b32ec9b413689c3018","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d682013a81c8808082ea6080880de0b6b3a764000080c0"},{"input":"0x02f87c82013a80808082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a062d300529917ba1c03873cfdf35ef669d0e1d3f52115b305916609f1659d67c4a0111fc401c2a10f874c02c20b3e938412f9c35f24fb83b121fadb8fd107182726","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83982013a80808082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87d82013a81c8808082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a02b66e32d2b4bda0ddbfa74d8ea2f8a0267ba7019abb366e0d3f8b247b129982aa02c163d63b6e727cbd6b17add5b2f98d60b7cbe00af5b0224d809e94924a5c129","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83a82013a81c8808082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85a82013a808082ea6082ea6080880de0b6b3a764000080c001a0055ae00874a381bf2c6f1b518f318270f2c4109b2eb071fcc17d934b1faf2c81a04a2a6dd88a31a2929656581bf31d42109beb431dbc99bdea4ec0636d697b7137","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d782013a808082ea6082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85b82013a81c88082ea6082ea6080880de0b6b3a764000080c080a0ceb7acb4eccb1683ed065ed0df5b3e1e747a741449c17f4170fb4688af79169da04647dc401f5170ce6824219e4b877100a79ff252e73177bc3be6904f04457c5e","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d882013a81c88082ea6082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85a82013a808082ea6082ea6080880de0b6b3a764000080c001a0055ae00874a381bf2c6f1b518f318270f2c4109b2eb071fcc17d934b1faf2c81a04a2a6dd88a31a2929656581bf31d42109beb431dbc99bdea4ec0636d697b7137","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d782013a808082ea6082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85b82013a81c88082ea6082ea6080880de0b6b3a764000080c080a0ceb7acb4eccb1683ed065ed0df5b3e1e747a741449c17f4170fb4688af79169da04647dc401f5170ce6824219e4b877100a79ff252e73177bc3be6904f04457c5e","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d882013a81c88082ea6082ea6080880de0b6b3a764000080c0"},{"input":"0x02f87e82013a808082ea6082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a020e9ce595105ad63212d5c8e1e598d2d90347c94ca57aa8454768222b5ee91a5a019bcc3d4692a00fbf0ee91605eb2ebd7aab58f94ead5f03b005cee1e6a328a9a","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83b82013a808082ea6082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87f82013a81c88082ea6082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0203be5acf80eea1a22f151475993fdea0b429a90a7ce53554f303309ba5cbb75a05ba185145f6f072158cff4a2c63bb4e7c5ffaf3ef2029d2688c24cd238495657","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83c82013a81c88082ea6082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85a82013a8082ea608082ea6080880de0b6b3a764000080c080a02200b34117aec43fbf36c19584d3f5371662e02e06e41ab18893f6ea4eae9db7a036cfb853039002767d6b41625ffdf926ab2adec33d668b83209f609d4a64661b","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d782013a8082ea608082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85b82013a81c882ea608082ea6080880de0b6b3a764000080c001a0d5bf42725de1f608b811ad94bd96f1419606b5edc2b2885252be998e21c19e64a026b18d19b371fc68a48c0b348192956158cfc3aef4c2995a04e455193156ab9b","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d882013a81c882ea608082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85a82013a8082ea608082ea6080880de0b6b3a764000080c080a02200b34117aec43fbf36c19584d3f5371662e02e06e41ab18893f6ea4eae9db7a036cfb853039002767d6b41625ffdf926ab2adec33d668b83209f609d4a64661b","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d782013a8082ea608082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85b82013a81c882ea608082ea6080880de0b6b3a764000080c001a0d5bf42725de1f608b811ad94bd96f1419606b5edc2b2885252be998e21c19e64a026b18d19b371fc68a48c0b348192956158cfc3aef4c2995a04e455193156ab9b","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02d882013a81c882ea608082ea6080880de0b6b3a764000080c0"},{"input":"0x02f87e82013a8082ea608082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0048571da63d488ba7d100e9ef32c0b4a06ffe51354e82a40ff953c377959033da069fae6fc2a68e6f96480fbb2768ba3bdcb9c9fa5523fe3ca428ef2d377b67ed2","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83b82013a8082ea608082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87f82013a81c882ea608082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0e4bf87c6adc1f903dde3bae06b12c00d62e0b4bb8178669b9cb3f658d43059dba07f0cdef6581cbb312cceef38703b154e5744df03693423e07aa2464daf67fc28","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83c82013a81c882ea608082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f85c82013a8082ea6082ea6082ea6080880de0b6b3a764000080c001a0adb3a7c410f3a4d89792fcede5c7a5437c5fab3881d9145cdbf96ee6d4050311a066866bcc349f1e78ea7ecb8d71c649cd3e8bcf8614494c6facd5c2dd68a6352f","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d982013a8082ea6082ea6082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85d82013a81c882ea6082ea6082ea6080880de0b6b3a764000080c080a0ba51668b00de8e0355e0ab99c49377f61be25d30f7598bd798178fa500bbe262a06bba3437dea06d5a63f3122d4fa7013238e47289b5801bf18444383180484900","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02da82013a81c882ea6082ea6082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85c82013a8082ea6082ea6082ea6080880de0b6b3a764000080c001a0adb3a7c410f3a4d89792fcede5c7a5437c5fab3881d9145cdbf96ee6d4050311a066866bcc349f1e78ea7ecb8d71c649cd3e8bcf8614494c6facd5c2dd68a6352f","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02d982013a8082ea6082ea6082ea6080880de0b6b3a764000080c0"},{"input":"0x02f85d82013a81c882ea6082ea6082ea6080880de0b6b3a764000080c080a0ba51668b00de8e0355e0ab99c49377f61be25d30f7598bd798178fa500bbe262a06bba3437dea06d5a63f3122d4fa7013238e47289b5801bf18444383180484900","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02da82013a81c882ea6082ea6082ea6080880de0b6b3a764000080c0"},{"input":"0x02f88082013a8082ea6082ea6082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0a960e8dd8eafea3b38178e802b4ed9d4ef3613c9de83c96a5bb9178565bb0b90a0250e480879b64829e0ca2296c6a5f07b4d96bf2654ec70af3be447a01ca950ad","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83d82013a8082ea6082ea6082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88182013a81c882ea6082ea6082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0c5b361f372b4b9f115de0510913e11e80b22649ec6a54fdd6cd8c70abe1c4fa4a00c109e6bf278b5bc9e93f293c1ed7cdfebf315d908a7f9c1ae255e165832c37c","output":"{\"to\":null,\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f83e82013a81c882ea6082ea6082ea6080880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86282013a8080808094ff000000000000000000000000000000000003ec8080c080a0f411a73e33523b40c1a916e79e67746bd01a4a4fb4ecfa87b441375a215ddfb4a0551692c1553574fab4c227ca70cb1c121dc3a2ef82179a9c984bd7acc0880a38","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02df82013a8080808094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86382013a81c880808094ff000000000000000000000000000000000003ec8080c001a0ed75a56e365c88479bf3f60251a2dd47ae181f1a3d95724581a3f648487b4396a046628bb9734edf4b4c455f2bbd351e43c466f315272cd1927f2c55d9b52e058b","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e082013a81c880808094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86282013a8080808094ff000000000000000000000000000000000003ec8080c080a0f411a73e33523b40c1a916e79e67746bd01a4a4fb4ecfa87b441375a215ddfb4a0551692c1553574fab4c227ca70cb1c121dc3a2ef82179a9c984bd7acc0880a38","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02df82013a8080808094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86382013a81c880808094ff000000000000000000000000000000000003ec8080c001a0ed75a56e365c88479bf3f60251a2dd47ae181f1a3d95724581a3f648487b4396a046628bb9734edf4b4c455f2bbd351e43c466f315272cd1927f2c55d9b52e058b","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e082013a81c880808094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f88682013a8080808094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0706d871013403cf8b965dfa7f2be5a4d185d746da45b21d5a67c667c26d255d6a02e68a14f386aa325ce8e82d30405107d53103d038cf20e40af961ef3a3963608","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84382013a8080808094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88782013a81c880808094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0df137d0a6733354b2f2419a4ea5fe77d333deca28b2fe091d76190b51c2bae73a0232cbf9c29b8840cbf104ff77360fbf3ca4acda29b5e230636e19ac253ad92de","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84482013a81c880808094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86482013a808082ea608094ff000000000000000000000000000000000003ec8080c001a03a2880cc65e88d5320067f502a0ffda72111d01f0ebeeea9fbeb812e457aa0f9a020c08483b104dbfbbbffffedc3acdbe8245ca6daf97c0dbab843d747e587d625","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a808082ea608094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86582013a81c88082ea608094ff000000000000000000000000000000000003ec8080c001a03427daf1639de6bf1b948abeab765b0a6a9170cc6a16d263c71c859f78916b03a01bbbb824b9953b5eb9f3098b4358a7ebb78f3358866eed997de66350ae4c9475","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c88082ea608094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86482013a808082ea608094ff000000000000000000000000000000000003ec8080c001a03a2880cc65e88d5320067f502a0ffda72111d01f0ebeeea9fbeb812e457aa0f9a020c08483b104dbfbbbffffedc3acdbe8245ca6daf97c0dbab843d747e587d625","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a808082ea608094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86582013a81c88082ea608094ff000000000000000000000000000000000003ec8080c001a03427daf1639de6bf1b948abeab765b0a6a9170cc6a16d263c71c859f78916b03a01bbbb824b9953b5eb9f3098b4358a7ebb78f3358866eed997de66350ae4c9475","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c88082ea608094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f88882013a808082ea608094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0b9ebc36653a4800816f71ceacf93a1ee601a136916a3476ea9073a9a55ff026aa0647665249b12e8d1d1773b91844588ed70f65c91bc088ccb259ec0f0a24330d5","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84582013a808082ea608094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88982013a81c88082ea608094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0122dd8468dbd34e111e1a5ea1997199be633aa3bc9c1a7ee27dc3a8eda39c29da07cb99cd28ac67f55e507a8b8ef5b931c56cacf79273a4a2969a004a4b4a2864a","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84682013a81c88082ea608094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86482013a8082ea60808094ff000000000000000000000000000000000003ec8080c080a0c1d020df63cb6db76e3a27a60ba0500a3cdd30f9f47b08733009dc8d610ea29ba05cbafb4c223417526ded0b02b8eb66a73535386d0e62da0e20f3641b532aa406","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a8082ea60808094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86582013a81c882ea60808094ff000000000000000000000000000000000003ec8080c080a090e30d32c6cd3f1ba2109b6a9f1c9fffc50b96a934192edf98adc086299e410ba057db0c136436de2e907942bdaad8e0113cf576f250b336ab652ef094c260dae6","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c882ea60808094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86482013a8082ea60808094ff000000000000000000000000000000000003ec8080c080a0c1d020df63cb6db76e3a27a60ba0500a3cdd30f9f47b08733009dc8d610ea29ba05cbafb4c223417526ded0b02b8eb66a73535386d0e62da0e20f3641b532aa406","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a8082ea60808094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86582013a81c882ea60808094ff000000000000000000000000000000000003ec8080c080a090e30d32c6cd3f1ba2109b6a9f1c9fffc50b96a934192edf98adc086299e410ba057db0c136436de2e907942bdaad8e0113cf576f250b336ab652ef094c260dae6","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c882ea60808094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f88882013a8082ea60808094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a016e3f30a612fc802bb64b765325ecf78f2769b879a9acf62f07669f9723335d6a0781bb3444a73819f28233f1eebf8c3a4de288842fd73c2e05a7a7b0c288d5b25","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84582013a8082ea60808094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88982013a81c882ea60808094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0b652a447bdcdd1906ed86406ee543ee06023e4f762784c1d3aaf4c3bd85c6a17a0368ae9995e15258f14b74f937e97140a659d052d341674be0c24452257b56b30","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84682013a81c882ea60808094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86682013a8082ea6082ea608094ff000000000000000000000000000000000003ec8080c001a0b1411f337b69609a256c0e76c57ccf4af87e977c98fd2a889f29281bf623cab4a049bec0fb4773aed870bae9c1cdf1ee398c498f0b436dcd19cae588b4ecd8bdf2","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a8082ea6082ea608094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86782013a81c882ea6082ea608094ff000000000000000000000000000000000003ec8080c080a00b845fec9c96bf593c3501753764e14867d3f5d4bd02051e49329b6810d6513ea070d046e5b38c18c542594b328f02345a8f34ab05fd00db33974f914f7ae31c63","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c882ea6082ea608094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86682013a8082ea6082ea608094ff000000000000000000000000000000000003ec8080c001a0b1411f337b69609a256c0e76c57ccf4af87e977c98fd2a889f29281bf623cab4a049bec0fb4773aed870bae9c1cdf1ee398c498f0b436dcd19cae588b4ecd8bdf2","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a8082ea6082ea608094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86782013a81c882ea6082ea608094ff000000000000000000000000000000000003ec8080c080a00b845fec9c96bf593c3501753764e14867d3f5d4bd02051e49329b6810d6513ea070d046e5b38c18c542594b328f02345a8f34ab05fd00db33974f914f7ae31c63","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c882ea6082ea608094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f88a82013a8082ea6082ea608094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a02d8215d8408d2f4b83a2e68f4aad6fe5dee97d7ef6a43b02ec413ead2215ac80a0641a43cebd6905e3e324c0dd06585d5ffc9b971b519045999c48e31db7aa7f9d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84782013a8082ea6082ea608094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88a82013a81c882ea6082ea608094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0da68784e191ce0806527d389f84b5d15bed3908e1c2cc0d8f0cea7a29eb0dba39f231a0b438b7d0f0f57292c68dc174d4ee6df7add933ab4e0b3789f597a7d3b","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84882013a81c882ea6082ea608094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86482013a80808082ea6094ff000000000000000000000000000000000003ec8080c080a04c97162e2d2ab508116a23c522fd816ecd9cb091d4c288afe45c37ee3a8dde34a06ebf67ff15b74d65c276340aaebde8e6ebb8da0d3bbab43deffac8eb1e6a0630","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a80808082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86582013a81c8808082ea6094ff000000000000000000000000000000000003ec8080c080a0d503d409e667c2876ab9e420854cecce4c0092985855234be07f270bfcf3ed4aa07a40deecc8a4448d4dc0e2014b4b23ac5721409c62bffa05aee6938d8447f72d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c8808082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86482013a80808082ea6094ff000000000000000000000000000000000003ec8080c080a04c97162e2d2ab508116a23c522fd816ecd9cb091d4c288afe45c37ee3a8dde34a06ebf67ff15b74d65c276340aaebde8e6ebb8da0d3bbab43deffac8eb1e6a0630","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a80808082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86582013a81c8808082ea6094ff000000000000000000000000000000000003ec8080c080a0d503d409e667c2876ab9e420854cecce4c0092985855234be07f270bfcf3ed4aa07a40deecc8a4448d4dc0e2014b4b23ac5721409c62bffa05aee6938d8447f72d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c8808082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f88882013a80808082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a059aecc1d365ee0dc56a577d162f04c0912a5c5b62f889cff1acc706ac17a4489a017209b3ec43a10a40c5863a2b7a1ee823380ad42697a5f7d5f537c230583a4c7","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84582013a80808082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88982013a81c8808082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0dc1eb40f93e311f3f9a94d8a695db2bbb38973ce097121875885e4bc54f18152a0075da0bd405bb4f5c69034daaf8f40052b941fae5b9f3b8df218d80fb4d7ea99","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84682013a81c8808082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86682013a808082ea6082ea6094ff000000000000000000000000000000000003ec8080c080a03d392fd5e83c64554907a55204572aaeec6ffab25f2c73655c6a22344fa02a14a03b9ae94b7dc21108db6dda65125ecaff844f8f43f483bed35f32f6d5d530fe9f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a808082ea6082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86782013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec8080c001a0405e8a430ef6ad4c3403150776af08c255b6f6fbe278d194f88517733c816caca0364203b5bca7953dd863d4cf90c0a77b499ef4a3d5831c4fdf33926c31709c4f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86682013a808082ea6082ea6094ff000000000000000000000000000000000003ec8080c080a03d392fd5e83c64554907a55204572aaeec6ffab25f2c73655c6a22344fa02a14a03b9ae94b7dc21108db6dda65125ecaff844f8f43f483bed35f32f6d5d530fe9f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a808082ea6082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86782013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec8080c001a0405e8a430ef6ad4c3403150776af08c255b6f6fbe278d194f88517733c816caca0364203b5bca7953dd863d4cf90c0a77b499ef4a3d5831c4fdf33926c31709c4f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f88a82013a808082ea6082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a083cf6701aee00872946b6550c059f028f72e3052acb8cc9c25b830ace860e046a03fd969d73e995d43896659f94d3956a17da18451050349e7db6f7881f8c057d3","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84782013a808082ea6082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88b82013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0c5a545f2d94e719068d9a43b01879bcb46b56e236dd378dd26ef3b8e4ec8314aa04024b9936960b9b156405e4f3e0b6562518df8778324a927381e380b23f47fb8","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84882013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86682013a8082ea608082ea6094ff000000000000000000000000000000000003ec8080c080a0aa406ec7f4901a1777e44b975ff41603b9d46257efdc1ca904a3e7890f2b020ea03bda5c785182cfa2d9f9b7a54f194cd08b9d0f913069a4514ff21e8fa0ef3850","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a8082ea608082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86782013a81c882ea608082ea6094ff000000000000000000000000000000000003ec8080c080a089fc465c24b4bad898cf900f585eddab6d40189e8d19746da76597f86fbadf51a005732ffa2ebac36646afab9105540b543f74a5c91b441834a2b1930815c2ccc8","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c882ea608082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86682013a8082ea608082ea6094ff000000000000000000000000000000000003ec8080c080a0aa406ec7f4901a1777e44b975ff41603b9d46257efdc1ca904a3e7890f2b020ea03bda5c785182cfa2d9f9b7a54f194cd08b9d0f913069a4514ff21e8fa0ef3850","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a8082ea608082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86782013a81c882ea608082ea6094ff000000000000000000000000000000000003ec8080c080a089fc465c24b4bad898cf900f585eddab6d40189e8d19746da76597f86fbadf51a005732ffa2ebac36646afab9105540b543f74a5c91b441834a2b1930815c2ccc8","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c882ea608082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f88a82013a8082ea608082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a09d9a8ee802486b826348a76346987b3e7331d70ef0c0257ff976ceebef1141a2a07d97d14ed877c16bd932f08a67c374e773ee3337d512ff8241c8d78566a04d46","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84782013a8082ea608082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88b82013a81c882ea608082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a024ad1ec1578f51beb2b574507bda7691a486cdbc9c22add01ad4c1f686beb567a048445e0fe8945b8052e5e87139690c0615a11c52503b226cf23610c999eada40","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84882013a81c882ea608082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86882013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec8080c080a06b382fcbe48de85615ff6e2dcc0c84021beb4abc527878accd36c9c77af84ba8a06a07d34a6896b270538525cb14b0856ceb442714fa85e4c9ee36dedf638935f9","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e582013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86982013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec8080c080a0ba2586cfb3323fd0f9d7bb38bf9948758a52f156bda66f7100b789760894ad89a01e4bd2ff4eff2c391915141250313ab845401d5e2f71c23691d20a0b3c68cbd9","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e682013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86882013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec8080c080a06b382fcbe48de85615ff6e2dcc0c84021beb4abc527878accd36c9c77af84ba8a06a07d34a6896b270538525cb14b0856ceb442714fa85e4c9ee36dedf638935f9","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e582013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f86982013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec8080c080a0ba2586cfb3323fd0f9d7bb38bf9948758a52f156bda66f7100b789760894ad89a01e4bd2ff4eff2c391915141250313ab845401d5e2f71c23691d20a0b3c68cbd9","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e682013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec8080c0"},{"input":"0x02f88c82013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0f36ff02ab3e90d2de77cdb24423dc39ca5c959429db62cb5c9ed4f0c9e04703aa0476bf841b0602af44039801d4e68648971f63fc2152002b127be6d914d4fc5ca","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84982013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88d82013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a08267ae8838a8a5d9c2a761c182b5759184b7672b761278d499c1514fb6e8a495a023aa268f67da7728767e114fdec4d141bf649e0ad931117b5b325834dbf72803","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"0\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84a82013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec80a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86282013a8080808094ff000000000000000000000000000000000003ec6480c080a011ec4af7fc663080460b70ae8829f47e9cfa1814c616750d359459cbbba55563a0446e4ec9ea504d13dcbef44238e442caad366dbae1ae9408d39c6d902a5577b0","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02df82013a8080808094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86382013a81c880808094ff000000000000000000000000000000000003ec6480c001a0b80bc30bef46b3f824d1460685db875ff070f7798c3148c1fc49c01d6acc550ca0437efe7721563800e6a56ac54877a72c7860cd5e17ef4675afe989822ae87759","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e082013a81c880808094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86282013a8080808094ff000000000000000000000000000000000003ec6480c080a011ec4af7fc663080460b70ae8829f47e9cfa1814c616750d359459cbbba55563a0446e4ec9ea504d13dcbef44238e442caad366dbae1ae9408d39c6d902a5577b0","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02df82013a8080808094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86382013a81c880808094ff000000000000000000000000000000000003ec6480c001a0b80bc30bef46b3f824d1460685db875ff070f7798c3148c1fc49c01d6acc550ca0437efe7721563800e6a56ac54877a72c7860cd5e17ef4675afe989822ae87759","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e082013a81c880808094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f88682013a8080808094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a06ab9d5988105d28dd090e509c8caabaa7773fc08ec5ef3dfeae532e01938ff69a078bca296df26dd2497a49110e138a49a67a6e232a35524b041d04a10fc583651","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84382013a8080808094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88782013a81c880808094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a031d51b866a02a9966250d312ed6cb4e083f9131ad8f6bb5814074375093d7536a03f8f819c4011dd54348930b6f98f365de8060b487ada38a62a5617aab6cc6e09","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84482013a81c880808094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86482013a808082ea608094ff000000000000000000000000000000000003ec6480c001a05bda5ad44c8f9a7516226488cf2d4f53188b40352f35ea7cece8076acda26dbba015373b3b78c88b74c7cca32fd02696a248bb9bea22a09c7a4a17b9e3b629b896","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a808082ea608094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86582013a81c88082ea608094ff000000000000000000000000000000000003ec6480c080a00d92624cc3335c903077e318204929b4a8c9cd96d94690b0191f8a3bb24e937aa02f1d0315ececf46900154791a732eb8fee9efd0dc998a4e6b892d07ad657a815","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c88082ea608094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86482013a808082ea608094ff000000000000000000000000000000000003ec6480c001a05bda5ad44c8f9a7516226488cf2d4f53188b40352f35ea7cece8076acda26dbba015373b3b78c88b74c7cca32fd02696a248bb9bea22a09c7a4a17b9e3b629b896","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a808082ea608094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86582013a81c88082ea608094ff000000000000000000000000000000000003ec6480c080a00d92624cc3335c903077e318204929b4a8c9cd96d94690b0191f8a3bb24e937aa02f1d0315ececf46900154791a732eb8fee9efd0dc998a4e6b892d07ad657a815","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c88082ea608094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f88882013a808082ea608094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0def168136c0532ec148a9e200e3cc1b22f90c7bbc5d9ef25ac0c5d342e8f3784a022f94642dfc81ba321b3e09879888332fa7c25b623bead7686e3e493c0911b55","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84582013a808082ea608094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88982013a81c88082ea608094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0626f43b80260f84cde2c67538c5cfbd328ce85b0f934e8568769e51709b100a7a0283fff5dbfde72b72e2b74c464b1add985d72750be3f4e16ae8ffb4747a40ff2","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84682013a81c88082ea608094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86482013a8082ea60808094ff000000000000000000000000000000000003ec6480c080a051b109080002dab4aae47139eb92ddea8951ef5ac6dfc3d7fa07621047dbc680a0334aa47a2888a6cc52b8cf3c3635192b66c692416e954822c1c93c3896ff1ead","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a8082ea60808094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86582013a81c882ea60808094ff000000000000000000000000000000000003ec6480c080a009e179e3bad2da6fb5e205e52fd8d1c462007162aabde5a4d6b052dd4fc4f23ca063922c31438835adf2e4424e2e7d5d2702ec65de2e24a72b491ff0004a53865d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c882ea60808094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86482013a8082ea60808094ff000000000000000000000000000000000003ec6480c080a051b109080002dab4aae47139eb92ddea8951ef5ac6dfc3d7fa07621047dbc680a0334aa47a2888a6cc52b8cf3c3635192b66c692416e954822c1c93c3896ff1ead","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a8082ea60808094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86582013a81c882ea60808094ff000000000000000000000000000000000003ec6480c080a009e179e3bad2da6fb5e205e52fd8d1c462007162aabde5a4d6b052dd4fc4f23ca063922c31438835adf2e4424e2e7d5d2702ec65de2e24a72b491ff0004a53865d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c882ea60808094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f88882013a8082ea60808094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0d3bfebc6597304c6a06491f68d2ac149fc233d28e81af48dd5b1f83e6ff951d2a06668da06d86aba341971dabb58016ca7764cd4b4c1634e3f829dcc8ef8bca4f6","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84582013a8082ea60808094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88982013a81c882ea60808094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0d45b9fd9a2a3fdf79805cf73b70348037cc69927209a5e3728fe62cbe9543f03a02f5f8477666487ee5148a65ce59f400beac7c208369162b2d555411314d358fb","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84682013a81c882ea60808094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86682013a8082ea6082ea608094ff000000000000000000000000000000000003ec6480c001a02a6a910f7b5f83fda937006021b9c074f4544d5bb37b9b5a1b7045095f461836a038572b25418528bce7e6a3a480cf9fc90a33d9c63b392c2dbc8faf72a1e4ab8f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a8082ea6082ea608094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86782013a81c882ea6082ea608094ff000000000000000000000000000000000003ec6480c080a07a6dd661b5da27c809cce22aa186c158fe3b07a484a9395fd9a7a31a2b90636fa02b86f82b661264e27c3fda085b59740d3059335bff91693291afcf93c7ca627c","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c882ea6082ea608094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86682013a8082ea6082ea608094ff000000000000000000000000000000000003ec6480c001a02a6a910f7b5f83fda937006021b9c074f4544d5bb37b9b5a1b7045095f461836a038572b25418528bce7e6a3a480cf9fc90a33d9c63b392c2dbc8faf72a1e4ab8f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a8082ea6082ea608094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86782013a81c882ea6082ea608094ff000000000000000000000000000000000003ec6480c080a07a6dd661b5da27c809cce22aa186c158fe3b07a484a9395fd9a7a31a2b90636fa02b86f82b661264e27c3fda085b59740d3059335bff91693291afcf93c7ca627c","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c882ea6082ea608094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f88a82013a8082ea6082ea608094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a08c13c10490bc20cb1e55dc54ececb37a6c9cc8d013dbe513feacbb0416f09feba045c4e038759a0901820091e043db326b1bf9a8a1cd046ac72629969497c6a86f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84782013a8082ea6082ea608094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88b82013a81c882ea6082ea608094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0b904edf8eb9b6beb9cde9e1fae538e12f8d40e9124ace0cba2eee8cbbe77aa10a0788a0bd9a6fb98e7230f5db89be2f5067d1a227ba277b9cb155fb5859c57aae6","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84882013a81c882ea6082ea608094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86482013a80808082ea6094ff000000000000000000000000000000000003ec6480c080a08d10a7a81c561391fe88bcb2c1dfbf4f7140fb7884fec0558606e76ffc4eaa91a049fa2a95e0f07a4376df9c6f2e1563ad443ce8369d44c6e1ce8ee521805b3623","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a80808082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86582013a81c8808082ea6094ff000000000000000000000000000000000003ec6480c001a00de6dc2841a25e5ea2dc1e054d69638ec519a9953666930060797cd110cde122a07fd1dcb6319eca7c681cef006efb3f7dcd74ff98a79ce05917d5d1fa7a175b6f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c8808082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86482013a80808082ea6094ff000000000000000000000000000000000003ec6480c080a08d10a7a81c561391fe88bcb2c1dfbf4f7140fb7884fec0558606e76ffc4eaa91a049fa2a95e0f07a4376df9c6f2e1563ad443ce8369d44c6e1ce8ee521805b3623","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e182013a80808082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86582013a81c8808082ea6094ff000000000000000000000000000000000003ec6480c001a00de6dc2841a25e5ea2dc1e054d69638ec519a9953666930060797cd110cde122a07fd1dcb6319eca7c681cef006efb3f7dcd74ff98a79ce05917d5d1fa7a175b6f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e282013a81c8808082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f88882013a80808082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a04c43dab94dd746973a1f7f051cc520cc01e93e9c6c55147cef34e5fdc0b182a2a06d148cc6ec017f9aeb6442a17d72e388ffc835950e19abd0c06057520f893542","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84582013a80808082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88982013a81c8808082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a025b50c1db31c0ae7aaa73374659201b54b71488efecbb6985dc50015abde7e36a04dd8cf68920de7232ab8d1fb28ab94ac05466c1f9d9a3a658f2054fce7868e2c","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84682013a81c8808082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86682013a808082ea6082ea6094ff000000000000000000000000000000000003ec6480c080a0415ad0a93225eaec617206ec835e362d5e75fd0e1903747c1806270ec2684c7da0487ec1479cdb2affa891ff56413818ec169651c906ab932594b6e5bbb79d4998","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a808082ea6082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86782013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec6480c001a0a46ac278c400ef099ad23ac4ccb066a37db8bb5c4d65e0a347152a499ae9eb92a07505f9c67f0897cbe6f848c9a2164c3c234dab2fea7a4dd6f4436be34080e2ff","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86682013a808082ea6082ea6094ff000000000000000000000000000000000003ec6480c080a0415ad0a93225eaec617206ec835e362d5e75fd0e1903747c1806270ec2684c7da0487ec1479cdb2affa891ff56413818ec169651c906ab932594b6e5bbb79d4998","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a808082ea6082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86782013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec6480c001a0a46ac278c400ef099ad23ac4ccb066a37db8bb5c4d65e0a347152a499ae9eb92a07505f9c67f0897cbe6f848c9a2164c3c234dab2fea7a4dd6f4436be34080e2ff","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f88a82013a808082ea6082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0a43aba5078d2da3ecc1ec0c67191f8cf58f29f5b4db7f8d4765ea691ddbd4195a0110e568c803db5ea587b406f452cf49ddf6b6f24d41207973d6c785ffaed1454","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84782013a808082ea6082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88b82013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a00caeadf2fcba95f0deab5ee4899348ecac4a18eeb09317d6f8156b891626d219a0549c5376aba320889c2f7b61fd4a51aec5f9a1d9ed9b26cef0a3bee52fac4989","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84882013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86682013a8082ea608082ea6094ff000000000000000000000000000000000003ec6480c001a07b5568d8a3ec3c7e126f570955db304e31d3f3d7b0c4fd103b6d064a2f6f5e23a030a1b17f299352ae193b8dbce2adda473ccb04e00670f416877762971697606f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a8082ea608082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86782013a81c882ea608082ea6094ff000000000000000000000000000000000003ec6480c080a07bb69d01062f9d6ecb011ad344bbe08d4eca2f6b192dde45015def4c2e6096e0a03a3df52d753e3293d2fd544f72e62ceae00ea6dcab7229685d7b1873d873d203","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c882ea608082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86682013a8082ea608082ea6094ff000000000000000000000000000000000003ec6480c001a07b5568d8a3ec3c7e126f570955db304e31d3f3d7b0c4fd103b6d064a2f6f5e23a030a1b17f299352ae193b8dbce2adda473ccb04e00670f416877762971697606f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e382013a8082ea608082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86782013a81c882ea608082ea6094ff000000000000000000000000000000000003ec6480c080a07bb69d01062f9d6ecb011ad344bbe08d4eca2f6b192dde45015def4c2e6096e0a03a3df52d753e3293d2fd544f72e62ceae00ea6dcab7229685d7b1873d873d203","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e482013a81c882ea608082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f88a82013a8082ea608082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0621255015626b35acf19629ce318999336441537920f9f3ff1bfd44e54d8abd3a03b3426f8fa963debdfa6b44561772bdebc9524c7f63abd0d947b678f5e966502","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84782013a8082ea608082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88b82013a81c882ea608082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0b73c3ba53fc5a0f7fab636cc2b826c3873cda5d0be9dd2100fdceae7899f3310a0491905f676063924cf847fdf2e488be4606ce351748e5c88d49ed50c8d595c94","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84882013a81c882ea608082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86882013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec6480c001a0e60702e3f5c5f56e3d1bc2907015ec889d0557ea14e81f137056471fef0fdb9da066e601e6e55c2e37e2042401b352e81841d492d0fe4f05bfe81bba29c9e6ce1f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e582013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86982013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec6480c001a085a947fb201d0b50272e7bb7a056adc9ee6f5904634ed91dbde0d650641b7de3a03635c731769302e955d41f794a63262d5d4d37d117c9db89a6b6bce927b71f42","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e682013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86882013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec6480c001a0e60702e3f5c5f56e3d1bc2907015ec889d0557ea14e81f137056471fef0fdb9da066e601e6e55c2e37e2042401b352e81841d492d0fe4f05bfe81bba29c9e6ce1f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e582013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f86982013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec6480c001a085a947fb201d0b50272e7bb7a056adc9ee6f5904634ed91dbde0d650641b7de3a03635c731769302e955d41f794a63262d5d4d37d117c9db89a6b6bce927b71f42","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e682013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec6480c0"},{"input":"0x02f88c82013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0d67e28d31489af5129c4832af814a01e0baa5e5ba6245fe2d3304693ceea48e0a03bc06f1c6dd01a14826c67aa35258c0bbf7c516a9bb21e9190eaa8d3768f49bb","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84982013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88d82013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0a5368984aca4bc1e3d7ebc7ae4ead5e09ffd3b4b4712d039c19fdac948e5952ea065953ace0a29210440d6a0f05d6b43f482950b463b3be6b23fc63452c94b9446","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"100\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84a82013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec64a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86a82013a8080808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a086da25ab078729b08cf48da02eb1c1e05fe0f4e5d7b332262b68f4db3dc9b72fa04102c03c7d9f11a6fdb77d6a36d3f07e09b1ceaab0bf4ef1fdc604bcd726f83b","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e782013a8080808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86b82013a81c880808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0cde92f395919b3205b4260867b11597f9ecf363bc1be9bbd8b5400d3381d64b3a01b9555cfa22ee8615c3033235ebad605d0bef616d08876de26719866fcc4d41e","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e882013a81c880808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86a82013a8080808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a086da25ab078729b08cf48da02eb1c1e05fe0f4e5d7b332262b68f4db3dc9b72fa04102c03c7d9f11a6fdb77d6a36d3f07e09b1ceaab0bf4ef1fdc604bcd726f83b","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e782013a8080808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86b82013a81c880808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0cde92f395919b3205b4260867b11597f9ecf363bc1be9bbd8b5400d3381d64b3a01b9555cfa22ee8615c3033235ebad605d0bef616d08876de26719866fcc4d41e","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02e882013a81c880808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f88e82013a8080808094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a03dd64e48a1ae228665b3f180367997ee96bc60ee226615c900e3d86634044328a00f6cdb24633e75fa65f6b93fce9b084c1f30dd03dde97d01f25c6f10f34d5d9d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84b82013a8080808094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f88f82013a81c880808094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a07475efeb8dd5bf4ba7efb31ab67a9077401ed71f4e8dd13e7058ce5cfeb5a0f2a01046e93a5258bf320bc392173a49b6fef15976be4c1210f2e367af223ad8c026","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84c82013a81c880808094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86c82013a808082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0ca84441c7ba097a7afa5ef9ad7ef70ba58ddfffc06c5d015b5c8553f1632d103a057fee6d92055c9c031a1efa667f3ee554804c4f34a195b6dfc781e1592c20444","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e982013a808082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86d82013a81c88082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a04055dfcd6e0b7264d3474ba13f76659384e5f365ebc6ba271641481b12bf410ca01ef7d04dc33fdf0c3137e31d8c822ad68bbd4f89ada52db9705bb66813d11583","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ea82013a81c88082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86c82013a808082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0ca84441c7ba097a7afa5ef9ad7ef70ba58ddfffc06c5d015b5c8553f1632d103a057fee6d92055c9c031a1efa667f3ee554804c4f34a195b6dfc781e1592c20444","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e982013a808082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86d82013a81c88082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a04055dfcd6e0b7264d3474ba13f76659384e5f365ebc6ba271641481b12bf410ca01ef7d04dc33fdf0c3137e31d8c822ad68bbd4f89ada52db9705bb66813d11583","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ea82013a81c88082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f89082013a808082ea608094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a02080212bb64a798e1e138e4991ab830cf04d37ffeedf6fde7eba0eb7d972b350a02aff43f9e5ca8d6cea6e918391188fa37bdb91b864eadec705f7c69c4a61bc5a","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84d82013a808082ea608094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f89182013a81c88082ea608094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0e41c052d72950a563b8ed7fb15855beabea43ff5b038bd6a3ccc6416e3498619a0568bbd7cbff31a47e1d0b9712f382c52e74b7b28cbcb8458974d82a8d54ddc57","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84e82013a81c88082ea608094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86c82013a8082ea60808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a057c342304f133ff8832d3d16a43571afe905dc9b10afc24c6e99225cca6d8817a00e2155d1904751ce0d2ba01e6475aeae254c02966773f5bc7650e37252a01a92","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e982013a8082ea60808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86d82013a81c882ea60808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0fc2a550a7798085cae28028abbe4829be29e5f3a40af221086831d0e17ca3c83a01ce21f5934b9ca566958e09e89c99fd9ed2dc4acae209a6fb81fd3a6c9879a99","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ea82013a81c882ea60808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86c82013a8082ea60808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a057c342304f133ff8832d3d16a43571afe905dc9b10afc24c6e99225cca6d8817a00e2155d1904751ce0d2ba01e6475aeae254c02966773f5bc7650e37252a01a92","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e982013a8082ea60808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86d82013a81c882ea60808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0fc2a550a7798085cae28028abbe4829be29e5f3a40af221086831d0e17ca3c83a01ce21f5934b9ca566958e09e89c99fd9ed2dc4acae209a6fb81fd3a6c9879a99","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ea82013a81c882ea60808094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f89082013a8082ea60808094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0fa33b63666310ca1c72fc5d82639c5b8e2a7638910be7bee23ada9f139c6b891a02012cad8e991beea7dcf0b6e9346b0228699698e183e2fadfc5b9b880601af9b","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84d82013a8082ea60808094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f89182013a81c882ea60808094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0bc6ae4e92e7a20d5ff61258653dffda636cee0fd97dd156eac7a1f231f1f2785a0323055e0e0bed496b3fec30be292338d0956ecf8baeeb34458230821589aa7fb","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84e82013a81c882ea60808094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86e82013a8082ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a0bd2889395392859a83a33bfe549c09d172e1f289de29d4bc9d0a3d25ea8aa71ba075fe92140a08d8e680061852438623c9cd10e211955577d1a3b56e49e960e4e7","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02eb82013a8082ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86f82013a81c882ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a05553c929ae32692a9f742371ffcfc8c8d2b77f31a7795460297cb78c29e357e8a043e42ca4ed7eb1b8e3546de2364522735d79a2e2ff5d16f7f96d165c5815c80c","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ec82013a81c882ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86e82013a8082ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a0bd2889395392859a83a33bfe549c09d172e1f289de29d4bc9d0a3d25ea8aa71ba075fe92140a08d8e680061852438623c9cd10e211955577d1a3b56e49e960e4e7","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02eb82013a8082ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86f82013a81c882ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a05553c929ae32692a9f742371ffcfc8c8d2b77f31a7795460297cb78c29e357e8a043e42ca4ed7eb1b8e3546de2364522735d79a2e2ff5d16f7f96d165c5815c80c","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ec82013a81c882ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f89282013a8082ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a055f63a6bef8e23dc437ff4ac9349a59fcde2f72d1879de50b0d3686ff648749da04cf8034df06cf6f15f31bb55979b40eeacbd28fb1d745e608acdc088e22beb66","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84f82013a8082ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f89382013a81c882ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0c4a0253448dad999692c1bf3cfb5de9e95a2e96da4e1f64133ada452a825fe9aa0757b576ceb7a2c494819960ac59e9d3a4e3da384f23c0e88ada758dc265eae94","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":0,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f85082013a81c882ea6082ea608094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86c82013a80808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a02632c4d8a443afb8d39f91d036fd4915ca3ad2f253b8f93211b4b3ee15566519a009bdc00c8eaaf22f3d7d04b53dbc777fd027a780fb4ddaf01002724ddf2879dd","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e982013a80808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86d82013a81c8808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a08bda02c15ca37d35d9ad2e2f7731d24dd039f5c6c6f7eaad739daadac6db33e5a044c01e493e10929e4021c69d9df886b211eb349a865df9f0796846ad1cdf23e8","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ea82013a81c8808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86c82013a80808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a02632c4d8a443afb8d39f91d036fd4915ca3ad2f253b8f93211b4b3ee15566519a009bdc00c8eaaf22f3d7d04b53dbc777fd027a780fb4ddaf01002724ddf2879dd","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02e982013a80808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86d82013a81c8808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a08bda02c15ca37d35d9ad2e2f7731d24dd039f5c6c6f7eaad739daadac6db33e5a044c01e493e10929e4021c69d9df886b211eb349a865df9f0796846ad1cdf23e8","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ea82013a81c8808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f89082013a80808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0ed0db75f41b2b8b89768ce5ad08716aff149dc1d5a2e593140d8964eb2da3229a02e5248cca9b5af340d73271cad4d690f7efa11c9278824aca528eb15d28aec4d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84d82013a80808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f89182013a81c8808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a07108fbbabc45826dbdc8e4cf831240fb39ead7bd4b8ec5d8de64d04e2885e554a04dae4fb4bdbabb9d8f923d579e75ee980da1b4fac5773ec68f395af240f037f0","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84e82013a81c8808082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86e82013a808082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0130b6723050095faa2e7abc69c2f785e73d333c65fae6cf2835518f970c627d5a00b90bd4f2ded1da0163ab5e81ad76d51aef005d663137347fc550313e1c8b6fc","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02eb82013a808082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86f82013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a0993a50431e82d10d632466d45f8aaffea9a56efa59d529dfd497d3c2a06aabeba0070d3132c6ce1e4ff70b0721d1f4c03ab566b8e2af29d33148033fb3009dc29d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ec82013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86e82013a808082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0130b6723050095faa2e7abc69c2f785e73d333c65fae6cf2835518f970c627d5a00b90bd4f2ded1da0163ab5e81ad76d51aef005d663137347fc550313e1c8b6fc","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02eb82013a808082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86f82013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a0993a50431e82d10d632466d45f8aaffea9a56efa59d529dfd497d3c2a06aabeba0070d3132c6ce1e4ff70b0721d1f4c03ab566b8e2af29d33148033fb3009dc29d","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ec82013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f89282013a808082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a09c9d3b0d7b58bfe81a6881b9db184e0ade03c1ad11aa8f1566e2f24f50f85525a06c10cf91f4dbc24d0f78ef09a8e2310d349a034cec7e86e807d7a48ea26161e1","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84f82013a808082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f89382013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a0f8423b51e513618c6a4bdd2696479d91c760e11ea24657dd27fa6eb9b7da8c0ea07e9456113fb034718d1b4f4e09ade1ce78251a8c86f298b152850bc5925156cb","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"0\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f85082013a81c88082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f86e82013a8082ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0d09b373d45c1bfc1c5d9b5198e69f974d4df456245e2f7a5edd486f3dd2795a9a011396197a670e7b0c4613b7ebf8aee53382930c7bd25c35dda15acae78ec0e2c","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02eb82013a8082ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86f82013a81c882ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a0131f5af3ece9a0b723d0c812dbcfc6cb458acf5e0846cc506215fc04d6af66d5a078d0bf7a40cc1ddcebbc4e86fb9a04bfc94f3da94b4a74476883b7b1729f8a44","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ec82013a81c882ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86e82013a8082ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0d09b373d45c1bfc1c5d9b5198e69f974d4df456245e2f7a5edd486f3dd2795a9a011396197a670e7b0c4613b7ebf8aee53382930c7bd25c35dda15acae78ec0e2c","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02eb82013a8082ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f86f82013a81c882ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c080a0131f5af3ece9a0b723d0c812dbcfc6cb458acf5e0846cc506215fc04d6af66d5a078d0bf7a40cc1ddcebbc4e86fb9a04bfc94f3da94b4a74476883b7b1729f8a44","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ec82013a81c882ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f89282013a8082ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0c286f4ee350eab70273cf9a952537534446a0f39e9bfea7340eabc04396a0e3da01e1302ae987a69836ec2c9266e6fe623db5fcdc566e37084c0c57630c4de8ee6","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f84f82013a8082ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f89382013a81c882ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c080a09dee3fa88e365133a18035618af718a045e1a957f10f50c632f23923fd337b9ba06bbbd59489849803f8c61138932ac1a8361edb4c80789d030542829c0a2b5b7f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"0\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f85082013a81c882ea608082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f87082013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0c1cb1e2b41e48fecd59d72039147c76993653f061f9ea156b53c377673eef7f1a01822506f755206b60209a12ed3c84446f4fcb4ad602fa7ab7ee4ff2acde19ed6","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02ed82013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f87182013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a09817043ad22797d2f26ca46697db5f586c38336a171dce2d22d659889e9e9eb5a0369a5d6169586d9c831b6e017aa29fd49eac0636a136bfa5bafb95390fa95b8f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":null,\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ee82013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f87082013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a0c1cb1e2b41e48fecd59d72039147c76993653f061f9ea156b53c377673eef7f1a01822506f755206b60209a12ed3c84446f4fcb4ad602fa7ab7ee4ff2acde19ed6","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02ed82013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f87182013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c001a09817043ad22797d2f26ca46697db5f586c38336a171dce2d22d659889e9e9eb5a0369a5d6169586d9c831b6e017aa29fd49eac0636a136bfa5bafb95390fa95b8f","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02ee82013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a764000080c0"},{"input":"0x02f89482013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a039357ad40087d17551ca2b94723f0394185a993671db02172a7de70c24054852a046c84070dfadd244b358690e5b89c75f3988b21b6614e6e3af2f8ca302d6c42a","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":0,\"type\":2,\"chainId\":314}","nosigTx":"0x02f85182013a8082ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"},{"input":"0x02f89582013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c001a0c991c81705a4c53a9255e72beb8243638c68f10c63b082755972bbbe15245d12a014f6852ae34c92882559e6810d4372109930a23b522368fdef2c85ce04e27839","output":"{\"to\":\"0xff000000000000000000000000000000000003EC\",\"value\":\"1000000000000000000\",\"gasLimit\":60000,\"maxFeePerGas\":\"60000\",\"maxPriorityFeePerGas\":\"60000\",\"data\":\"0xf8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064\",\"nonce\":200,\"type\":2,\"chainId\":314}","nosigTx":"0x02f85282013a81c882ea6082ea6082ea6094ff000000000000000000000000000000000003ec880de0b6b3a7640000a4f8b2cb4f000000000000000000000000ff00000000000000000000000000000000000064c0"}]` testcases := []struct { - Input EthBytes `json:"input"` - Output string `json:"output"` - NosigTx string `json:"nosigTx"` + Input ethtypes.EthBytes `json:"input"` + Output string `json:"output"` + NosigTx string `json:"nosigTx"` }{} err := json.Unmarshal([]byte(tcstr), &testcases) diff --git a/chain/eth/rlp_test.go b/chain/eth/rlp_test.go index 2cb4afdeb..397f2e1a8 100644 --- a/chain/eth/rlp_test.go +++ b/chain/eth/rlp_test.go @@ -9,10 +9,12 @@ import ( "github.com/stretchr/testify/require" "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/lotus/chain/types/ethtypes" ) func TestEncode(t *testing.T) { - testcases := []TestCase{ + testcases := []ethtypes.TestCase{ {[]byte(""), mustDecodeHex("0x80")}, {mustDecodeHex("0x01"), mustDecodeHex("0x01")}, {mustDecodeHex("0xaa"), mustDecodeHex("0x81aa")}, @@ -64,7 +66,7 @@ func TestEncode(t *testing.T) { } func TestDecodeString(t *testing.T) { - testcases := []TestCase{ + testcases := []ethtypes.TestCase{ {"0x00", "0x00"}, {"0x80", "0x"}, {"0x0f", "0x0f"}, @@ -96,7 +98,7 @@ func mustDecodeHex(s string) []byte { } func TestDecodeList(t *testing.T) { - testcases := []TestCase{ + testcases := []ethtypes.TestCase{ {"0xc0", []interface{}{}}, {"0xc100", []interface{}{[]byte{0}}}, {"0xc3000102", []interface{}{[]byte{0}, []byte{1}, []byte{2}}}, diff --git a/chain/eth/eth_types.go b/chain/types/ethtypes/eth_types.go similarity index 99% rename from chain/eth/eth_types.go rename to chain/types/ethtypes/eth_types.go index b59d691db..6eefb5bf0 100644 --- a/chain/eth/eth_types.go +++ b/chain/types/ethtypes/eth_types.go @@ -1,4 +1,4 @@ -package eth +package ethtypes import ( "bytes" diff --git a/chain/eth/eth_types_test.go b/chain/types/ethtypes/eth_types_test.go similarity index 99% rename from chain/eth/eth_types_test.go rename to chain/types/ethtypes/eth_types_test.go index 1725be444..288145979 100644 --- a/chain/eth/eth_types_test.go +++ b/chain/types/ethtypes/eth_types_test.go @@ -1,5 +1,5 @@ // stm: #unit -package eth +package ethtypes import ( "strings" diff --git a/node/impl/full/dummy.go b/node/impl/full/dummy.go index fa4c9dc62..6d976ec17 100644 --- a/node/impl/full/dummy.go +++ b/node/impl/full/dummy.go @@ -6,73 +6,74 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/eth" + "github.com/filecoin-project/lotus/chain/types/ethtypes" ) var ErrImplementMe = errors.New("Not implemented yet") type EthModuleDummy struct{} -func (e *EthModuleDummy) EthBlockNumber(ctx context.Context) (eth.EthUint64, error) { +func (e *EthModuleDummy) EthBlockNumber(ctx context.Context) (ethtypes.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthAccounts(ctx context.Context) ([]eth.EthAddress, error) { +func (e *EthModuleDummy) EthAccounts(ctx context.Context) ([]ethtypes.EthAddress, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum eth.EthUint64) (eth.EthUint64, error) { +func (e *EthModuleDummy) EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum ethtypes.EthUint64) (ethtypes.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthGetBlockTransactionCountByHash(ctx context.Context, blkHash eth.EthHash) (eth.EthUint64, error) { +func (e *EthModuleDummy) EthGetBlockTransactionCountByHash(ctx context.Context, blkHash ethtypes.EthHash) (ethtypes.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthGetBlockByHash(ctx context.Context, blkHash eth.EthHash, fullTxInfo bool) (eth.EthBlock, error) { - return eth.EthBlock{}, ErrImplementMe +func (e *EthModuleDummy) EthGetBlockByHash(ctx context.Context, blkHash ethtypes.EthHash, fullTxInfo bool) (ethtypes.EthBlock, error) { + return ethtypes.EthBlock{}, ErrImplementMe } -func (e *EthModuleDummy) EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) { - return eth.EthBlock{}, ErrImplementMe +func (e *EthModuleDummy) EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (ethtypes.EthBlock, error) { + return ethtypes.EthBlock{}, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) { +func (e *EthModuleDummy) EthGetTransactionByHash(ctx context.Context, txHash *ethtypes.EthHash) (*eth.EthTx, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkOpt string) (eth.EthUint64, error) { +func (e *EthModuleDummy) EthGetTransactionCount(ctx context.Context, sender ethtypes.EthAddress, blkOpt string) (ethtypes.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*api.EthTxReceipt, error) { +func (e *EthModuleDummy) EthGetTransactionReceipt(ctx context.Context, txHash ethtypes.EthHash) (*api.EthTxReceipt, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) { +func (e *EthModuleDummy) EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash ethtypes.EthHash, txIndex ethtypes.EthUint64) (eth.EthTx, error) { return eth.EthTx{}, ErrImplementMe } -func (e *EthModuleDummy) EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) { +func (e *EthModuleDummy) EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum ethtypes.EthUint64, txIndex ethtypes.EthUint64) (eth.EthTx, error) { return eth.EthTx{}, ErrImplementMe } -func (e *EthModuleDummy) EthGetCode(ctx context.Context, address eth.EthAddress, blkOpt string) (eth.EthBytes, error) { +func (e *EthModuleDummy) EthGetCode(ctx context.Context, address ethtypes.EthAddress, blkOpt string) (ethtypes.EthBytes, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetStorageAt(ctx context.Context, address eth.EthAddress, position eth.EthBytes, blkParam string) (eth.EthBytes, error) { +func (e *EthModuleDummy) EthGetStorageAt(ctx context.Context, address ethtypes.EthAddress, position ethtypes.EthBytes, blkParam string) (ethtypes.EthBytes, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthGetBalance(ctx context.Context, address eth.EthAddress, blkParam string) (eth.EthBigInt, error) { - return eth.EthBigIntZero, ErrImplementMe +func (e *EthModuleDummy) EthGetBalance(ctx context.Context, address ethtypes.EthAddress, blkParam string) (ethtypes.EthBigInt, error) { + return ethtypes.EthBigIntZero, ErrImplementMe } -func (e *EthModuleDummy) EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, newestBlk string, rewardPercentiles []float64) (eth.EthFeeHistory, error) { - return eth.EthFeeHistory{}, ErrImplementMe +func (e *EthModuleDummy) EthFeeHistory(ctx context.Context, blkCount ethtypes.EthUint64, newestBlk string, rewardPercentiles []float64) (ethtypes.EthFeeHistory, error) { + return ethtypes.EthFeeHistory{}, ErrImplementMe } -func (e *EthModuleDummy) EthChainId(ctx context.Context) (eth.EthUint64, error) { +func (e *EthModuleDummy) EthChainId(ctx context.Context) (ethtypes.EthUint64, error) { return 0, ErrImplementMe } @@ -84,26 +85,26 @@ func (e *EthModuleDummy) NetListening(ctx context.Context) (bool, error) { return false, ErrImplementMe } -func (e *EthModuleDummy) EthProtocolVersion(ctx context.Context) (eth.EthUint64, error) { +func (e *EthModuleDummy) EthProtocolVersion(ctx context.Context) (ethtypes.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthGasPrice(ctx context.Context) (eth.EthBigInt, error) { - return eth.EthBigIntZero, ErrImplementMe +func (e *EthModuleDummy) EthGasPrice(ctx context.Context) (ethtypes.EthBigInt, error) { + return ethtypes.EthBigIntZero, ErrImplementMe } -func (e *EthModuleDummy) EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.EthUint64, error) { +func (e *EthModuleDummy) EthEstimateGas(ctx context.Context, tx ethtypes.EthCall) (ethtypes.EthUint64, error) { return 0, ErrImplementMe } -func (e *EthModuleDummy) EthCall(ctx context.Context, tx eth.EthCall, blkParam string) (eth.EthBytes, error) { +func (e *EthModuleDummy) EthCall(ctx context.Context, tx ethtypes.EthCall, blkParam string) (ethtypes.EthBytes, error) { return nil, ErrImplementMe } -func (e *EthModuleDummy) EthMaxPriorityFeePerGas(ctx context.Context) (eth.EthBigInt, error) { - return eth.EthBigIntZero, ErrImplementMe +func (e *EthModuleDummy) EthMaxPriorityFeePerGas(ctx context.Context) (ethtypes.EthBigInt, error) { + return ethtypes.EthBigIntZero, ErrImplementMe } -func (e *EthModuleDummy) EthSendRawTransaction(ctx context.Context, rawTx eth.EthBytes) (eth.EthHash, error) { - return eth.EthHash{}, ErrImplementMe +func (e *EthModuleDummy) EthSendRawTransaction(ctx context.Context, rawTx ethtypes.EthBytes) (ethtypes.EthHash, error) { + return ethtypes.EthHash{}, ErrImplementMe } diff --git a/node/impl/full/eth.go b/node/impl/full/eth.go index 0cfa686d2..2acea9b17 100644 --- a/node/impl/full/eth.go +++ b/node/impl/full/eth.go @@ -27,34 +27,35 @@ import ( "github.com/filecoin-project/lotus/chain/stmgr" "github.com/filecoin-project/lotus/chain/store" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/chain/types/ethtypes" "github.com/filecoin-project/lotus/node/modules/dtypes" ) type EthModuleAPI interface { - EthBlockNumber(ctx context.Context) (eth.EthUint64, error) - EthAccounts(ctx context.Context) ([]eth.EthAddress, error) - EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum eth.EthUint64) (eth.EthUint64, error) - EthGetBlockTransactionCountByHash(ctx context.Context, blkHash eth.EthHash) (eth.EthUint64, error) - EthGetBlockByHash(ctx context.Context, blkHash eth.EthHash, fullTxInfo bool) (eth.EthBlock, error) - EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) - EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) - EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkOpt string) (eth.EthUint64, error) - EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*api.EthTxReceipt, error) - EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) - EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) - EthGetCode(ctx context.Context, address eth.EthAddress, blkOpt string) (eth.EthBytes, error) - EthGetStorageAt(ctx context.Context, address eth.EthAddress, position eth.EthBytes, blkParam string) (eth.EthBytes, error) - EthGetBalance(ctx context.Context, address eth.EthAddress, blkParam string) (eth.EthBigInt, error) - EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, newestBlk string, rewardPercentiles []float64) (eth.EthFeeHistory, error) - EthChainId(ctx context.Context) (eth.EthUint64, error) + EthBlockNumber(ctx context.Context) (ethtypes.EthUint64, error) + EthAccounts(ctx context.Context) ([]ethtypes.EthAddress, error) + EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum ethtypes.EthUint64) (ethtypes.EthUint64, error) + EthGetBlockTransactionCountByHash(ctx context.Context, blkHash ethtypes.EthHash) (ethtypes.EthUint64, error) + EthGetBlockByHash(ctx context.Context, blkHash ethtypes.EthHash, fullTxInfo bool) (ethtypes.EthBlock, error) + EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (ethtypes.EthBlock, error) + EthGetTransactionByHash(ctx context.Context, txHash *ethtypes.EthHash) (*eth.EthTx, error) + EthGetTransactionCount(ctx context.Context, sender ethtypes.EthAddress, blkOpt string) (ethtypes.EthUint64, error) + EthGetTransactionReceipt(ctx context.Context, txHash ethtypes.EthHash) (*api.EthTxReceipt, error) + EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash ethtypes.EthHash, txIndex ethtypes.EthUint64) (eth.EthTx, error) + EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum ethtypes.EthUint64, txIndex ethtypes.EthUint64) (eth.EthTx, error) + EthGetCode(ctx context.Context, address ethtypes.EthAddress, blkOpt string) (ethtypes.EthBytes, error) + EthGetStorageAt(ctx context.Context, address ethtypes.EthAddress, position ethtypes.EthBytes, blkParam string) (ethtypes.EthBytes, error) + EthGetBalance(ctx context.Context, address ethtypes.EthAddress, blkParam string) (ethtypes.EthBigInt, error) + EthFeeHistory(ctx context.Context, blkCount ethtypes.EthUint64, newestBlk string, rewardPercentiles []float64) (ethtypes.EthFeeHistory, error) + EthChainId(ctx context.Context) (ethtypes.EthUint64, error) NetVersion(ctx context.Context) (string, error) NetListening(ctx context.Context) (bool, error) - EthProtocolVersion(ctx context.Context) (eth.EthUint64, error) - EthGasPrice(ctx context.Context) (eth.EthBigInt, error) - EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.EthUint64, error) - EthCall(ctx context.Context, tx eth.EthCall, blkParam string) (eth.EthBytes, error) - EthMaxPriorityFeePerGas(ctx context.Context) (eth.EthBigInt, error) - EthSendRawTransaction(ctx context.Context, rawTx eth.EthBytes) (eth.EthHash, error) + EthProtocolVersion(ctx context.Context) (ethtypes.EthUint64, error) + EthGasPrice(ctx context.Context) (ethtypes.EthBigInt, error) + EthEstimateGas(ctx context.Context, tx ethtypes.EthCall) (ethtypes.EthUint64, error) + EthCall(ctx context.Context, tx ethtypes.EthCall, blkParam string) (ethtypes.EthBytes, error) + EthMaxPriorityFeePerGas(ctx context.Context) (ethtypes.EthBigInt, error) + EthSendRawTransaction(ctx context.Context, rawTx ethtypes.EthBytes) (ethtypes.EthHash, error) } var _ EthModuleAPI = *new(api.FullNode) @@ -88,14 +89,14 @@ func (a *EthModule) StateNetworkName(ctx context.Context) (dtypes.NetworkName, e return stmgr.GetNetworkName(ctx, a.StateManager, a.Chain.GetHeaviestTipSet().ParentState()) } -func (a *EthModule) EthBlockNumber(context.Context) (eth.EthUint64, error) { +func (a *EthModule) EthBlockNumber(context.Context) (ethtypes.EthUint64, error) { height := a.Chain.GetHeaviestTipSet().Height() - return eth.EthUint64(height), nil + return ethtypes.EthUint64(height), nil } -func (a *EthModule) EthAccounts(context.Context) ([]eth.EthAddress, error) { +func (a *EthModule) EthAccounts(context.Context) ([]ethtypes.EthAddress, error) { // The lotus node is not expected to hold manage accounts, so we'll always return an empty array - return []eth.EthAddress{}, nil + return []ethtypes.EthAddress{}, nil } func (a *EthModule) countTipsetMsgs(ctx context.Context, ts *types.TipSet) (int, error) { @@ -112,54 +113,54 @@ func (a *EthModule) countTipsetMsgs(ctx context.Context, ts *types.TipSet) (int, return count, nil } -func (a *EthModule) EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum eth.EthUint64) (eth.EthUint64, error) { +func (a *EthModule) EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum ethtypes.EthUint64) (ethtypes.EthUint64, error) { ts, err := a.Chain.GetTipsetByHeight(ctx, abi.ChainEpoch(blkNum), nil, false) if err != nil { - return eth.EthUint64(0), xerrors.Errorf("error loading tipset %s: %w", ts, err) + return ethtypes.EthUint64(0), xerrors.Errorf("error loading tipset %s: %w", ts, err) } count, err := a.countTipsetMsgs(ctx, ts) - return eth.EthUint64(count), err + return ethtypes.EthUint64(count), err } -func (a *EthModule) EthGetBlockTransactionCountByHash(ctx context.Context, blkHash eth.EthHash) (eth.EthUint64, error) { +func (a *EthModule) EthGetBlockTransactionCountByHash(ctx context.Context, blkHash ethtypes.EthHash) (ethtypes.EthUint64, error) { ts, err := a.Chain.GetTipSetByCid(ctx, blkHash.ToCid()) if err != nil { - return eth.EthUint64(0), xerrors.Errorf("error loading tipset %s: %w", ts, err) + return ethtypes.EthUint64(0), xerrors.Errorf("error loading tipset %s: %w", ts, err) } count, err := a.countTipsetMsgs(ctx, ts) - return eth.EthUint64(count), err + return ethtypes.EthUint64(count), err } -func (a *EthModule) EthGetBlockByHash(ctx context.Context, blkHash eth.EthHash, fullTxInfo bool) (eth.EthBlock, error) { +func (a *EthModule) EthGetBlockByHash(ctx context.Context, blkHash ethtypes.EthHash, fullTxInfo bool) (ethtypes.EthBlock, error) { ts, err := a.Chain.GetTipSetByCid(ctx, blkHash.ToCid()) if err != nil { - return eth.EthBlock{}, xerrors.Errorf("error loading tipset %s: %w", ts, err) + return ethtypes.EthBlock{}, xerrors.Errorf("error loading tipset %s: %w", ts, err) } return a.newEthBlockFromFilecoinTipSet(ctx, ts, fullTxInfo) } -func (a *EthModule) EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (eth.EthBlock, error) { - typ, num, err := eth.ParseBlkNumOption(blkNum) +func (a *EthModule) EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (ethtypes.EthBlock, error) { + typ, num, err := ethtypes.ParseBlkNumOption(blkNum) if err != nil { - return eth.EthBlock{}, fmt.Errorf("cannot parse block number: %v", err) + return ethtypes.EthBlock{}, fmt.Errorf("cannot parse block number: %v", err) } switch typ { - case eth.BlkNumLatest: - num = eth.EthUint64(a.Chain.GetHeaviestTipSet().Height()) - 1 - case eth.BlkNumPending: - num = eth.EthUint64(a.Chain.GetHeaviestTipSet().Height()) + case ethtypes.BlkNumLatest: + num = ethtypes.EthUint64(a.Chain.GetHeaviestTipSet().Height()) - 1 + case ethtypes.BlkNumPending: + num = ethtypes.EthUint64(a.Chain.GetHeaviestTipSet().Height()) } ts, err := a.Chain.GetTipsetByHeight(ctx, abi.ChainEpoch(num), nil, false) if err != nil { - return eth.EthBlock{}, xerrors.Errorf("error loading tipset %s: %w", ts, err) + return ethtypes.EthBlock{}, xerrors.Errorf("error loading tipset %s: %w", ts, err) } return a.newEthBlockFromFilecoinTipSet(ctx, ts, fullTxInfo) } -func (a *EthModule) EthGetTransactionByHash(ctx context.Context, txHash *eth.EthHash) (*eth.EthTx, error) { +func (a *EthModule) EthGetTransactionByHash(ctx context.Context, txHash *ethtypes.EthHash) (*eth.EthTx, error) { // Ethereum's behavior is to return null when the txHash is invalid, so we use nil to check if txHash is valid if txHash == nil { return nil, nil @@ -179,19 +180,19 @@ func (a *EthModule) EthGetTransactionByHash(ctx context.Context, txHash *eth.Eth return &tx, nil } -func (a *EthModule) EthGetTransactionCount(ctx context.Context, sender eth.EthAddress, blkParam string) (eth.EthUint64, error) { +func (a *EthModule) EthGetTransactionCount(ctx context.Context, sender ethtypes.EthAddress, blkParam string) (ethtypes.EthUint64, error) { addr, err := sender.ToFilecoinAddress() if err != nil { - return eth.EthUint64(0), nil + return ethtypes.EthUint64(0), nil } nonce, err := a.Mpool.GetNonce(ctx, addr, types.EmptyTSK) if err != nil { - return eth.EthUint64(0), nil + return ethtypes.EthUint64(0), nil } - return eth.EthUint64(nonce), nil + return ethtypes.EthUint64(nonce), nil } -func (a *EthModule) EthGetTransactionReceipt(ctx context.Context, txHash eth.EthHash) (*api.EthTxReceipt, error) { +func (a *EthModule) EthGetTransactionReceipt(ctx context.Context, txHash ethtypes.EthHash) (*api.EthTxReceipt, error) { cid := txHash.ToCid() msgLookup, err := a.StateAPI.StateSearchMsg(ctx, types.EmptyTSK, cid, api.LookbackNoLimit, true) @@ -216,16 +217,16 @@ func (a *EthModule) EthGetTransactionReceipt(ctx context.Context, txHash eth.Eth return &receipt, nil } -func (a *EthModule) EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash eth.EthHash, txIndex eth.EthUint64) (eth.EthTx, error) { +func (a *EthModule) EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash ethtypes.EthHash, txIndex ethtypes.EthUint64) (eth.EthTx, error) { return eth.EthTx{}, nil } -func (a *EthModule) EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum eth.EthUint64, txIndex eth.EthUint64) (eth.EthTx, error) { +func (a *EthModule) EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum ethtypes.EthUint64, txIndex ethtypes.EthUint64) (eth.EthTx, error) { return eth.EthTx{}, nil } // EthGetCode returns string value of the compiled bytecode -func (a *EthModule) EthGetCode(ctx context.Context, ethAddr eth.EthAddress, blkOpt string) (eth.EthBytes, error) { +func (a *EthModule) EthGetCode(ctx context.Context, ethAddr ethtypes.EthAddress, blkOpt string) (ethtypes.EthBytes, error) { to, err := ethAddr.ToFilecoinAddress() if err != nil { return nil, xerrors.Errorf("cannot get Filecoin address: %w", err) @@ -289,7 +290,7 @@ func (a *EthModule) EthGetCode(ctx context.Context, ethAddr eth.EthAddress, blkO return blk.RawData(), nil } -func (a *EthModule) EthGetStorageAt(ctx context.Context, ethAddr eth.EthAddress, position eth.EthBytes, blkParam string) (eth.EthBytes, error) { +func (a *EthModule) EthGetStorageAt(ctx context.Context, ethAddr ethtypes.EthAddress, position ethtypes.EthBytes, blkParam string) (ethtypes.EthBytes, error) { l := len(position) if l > 32 { return nil, fmt.Errorf("supplied storage key is too long") @@ -363,35 +364,35 @@ func (a *EthModule) EthGetStorageAt(ctx context.Context, ethAddr eth.EthAddress, return res.MsgRct.Return, nil } -func (a *EthModule) EthGetBalance(ctx context.Context, address eth.EthAddress, blkParam string) (eth.EthBigInt, error) { +func (a *EthModule) EthGetBalance(ctx context.Context, address ethtypes.EthAddress, blkParam string) (ethtypes.EthBigInt, error) { filAddr, err := address.ToFilecoinAddress() if err != nil { - return eth.EthBigInt{}, err + return ethtypes.EthBigInt{}, err } actor, err := a.StateGetActor(ctx, filAddr, types.EmptyTSK) if xerrors.Is(err, types.ErrActorNotFound) { - return eth.EthBigIntZero, nil + return ethtypes.EthBigIntZero, nil } else if err != nil { - return eth.EthBigInt{}, err + return ethtypes.EthBigInt{}, err } - return eth.EthBigInt{Int: actor.Balance.Int}, nil + return ethtypes.EthBigInt{Int: actor.Balance.Int}, nil } -func (a *EthModule) EthChainId(ctx context.Context) (eth.EthUint64, error) { - return eth.EthUint64(build.Eip155ChainId), nil +func (a *EthModule) EthChainId(ctx context.Context) (ethtypes.EthUint64, error) { + return ethtypes.EthUint64(build.Eip155ChainId), nil } -func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, newestBlkNum string, rewardPercentiles []float64) (eth.EthFeeHistory, error) { +func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount ethtypes.EthUint64, newestBlkNum string, rewardPercentiles []float64) (ethtypes.EthFeeHistory, error) { if blkCount > 1024 { - return eth.EthFeeHistory{}, fmt.Errorf("block count should be smaller than 1024") + return ethtypes.EthFeeHistory{}, fmt.Errorf("block count should be smaller than 1024") } newestBlkHeight := uint64(a.Chain.GetHeaviestTipSet().Height()) // TODO https://github.com/filecoin-project/ref-fvm/issues/1016 - var blkNum eth.EthUint64 + var blkNum ethtypes.EthUint64 err := blkNum.UnmarshalJSON([]byte(`"` + newestBlkNum + `"`)) if err == nil && uint64(blkNum) < newestBlkHeight { newestBlkHeight = uint64(blkNum) @@ -406,13 +407,13 @@ func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, n ts, err := a.Chain.GetTipsetByHeight(ctx, abi.ChainEpoch(newestBlkHeight), nil, false) if err != nil { - return eth.EthFeeHistory{}, fmt.Errorf("cannot load find block height: %v", newestBlkHeight) + return ethtypes.EthFeeHistory{}, fmt.Errorf("cannot load find block height: %v", newestBlkHeight) } // FIXME: baseFeePerGas should include the next block after the newest of the returned range, because this // can be inferred from the newest block. we use the newest block's baseFeePerGas for now but need to fix it // In other words, due to deferred execution, we might not be returning the most useful value here for the client. - baseFeeArray := []eth.EthBigInt{eth.EthBigInt(ts.Blocks()[0].ParentBaseFee)} + baseFeeArray := []ethtypes.EthBigInt{ethtypes.EthBigInt(ts.Blocks()[0].ParentBaseFee)} gasUsedRatioArray := []float64{} for ts.Height() >= abi.ChainEpoch(oldestBlkHeight) { @@ -420,17 +421,17 @@ func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, n // totalize gas used in the tipset. block, err := a.newEthBlockFromFilecoinTipSet(ctx, ts, false) if err != nil { - return eth.EthFeeHistory{}, fmt.Errorf("cannot create eth block: %v", err) + return ethtypes.EthFeeHistory{}, fmt.Errorf("cannot create eth block: %v", err) } // both arrays should be reversed at the end - baseFeeArray = append(baseFeeArray, eth.EthBigInt(ts.Blocks()[0].ParentBaseFee)) + baseFeeArray = append(baseFeeArray, ethtypes.EthBigInt(ts.Blocks()[0].ParentBaseFee)) gasUsedRatioArray = append(gasUsedRatioArray, float64(block.GasUsed)/float64(build.BlockGasLimit)) parentTsKey := ts.Parents() ts, err = a.Chain.LoadTipSet(ctx, parentTsKey) if err != nil { - return eth.EthFeeHistory{}, fmt.Errorf("cannot load tipset key: %v", parentTsKey) + return ethtypes.EthFeeHistory{}, fmt.Errorf("cannot load tipset key: %v", parentTsKey) } } @@ -443,7 +444,7 @@ func (a *EthModule) EthFeeHistory(ctx context.Context, blkCount eth.EthUint64, n gasUsedRatioArray[i], gasUsedRatioArray[j] = gasUsedRatioArray[j], gasUsedRatioArray[i] } - return eth.EthFeeHistory{ + return ethtypes.EthFeeHistory{ OldestBlock: oldestBlkHeight, BaseFeePerGas: baseFeeArray, GasUsedRatio: gasUsedRatioArray, @@ -463,20 +464,20 @@ func (a *EthModule) NetListening(ctx context.Context) (bool, error) { return true, nil } -func (a *EthModule) EthProtocolVersion(ctx context.Context) (eth.EthUint64, error) { +func (a *EthModule) EthProtocolVersion(ctx context.Context) (ethtypes.EthUint64, error) { height := a.Chain.GetHeaviestTipSet().Height() - return eth.EthUint64(a.StateManager.GetNetworkVersion(ctx, height)), nil + return ethtypes.EthUint64(a.StateManager.GetNetworkVersion(ctx, height)), nil } -func (a *EthModule) EthMaxPriorityFeePerGas(ctx context.Context) (eth.EthBigInt, error) { +func (a *EthModule) EthMaxPriorityFeePerGas(ctx context.Context) (ethtypes.EthBigInt, error) { gasPremium, err := a.GasAPI.GasEstimateGasPremium(ctx, 0, builtin.SystemActorAddr, 10000, types.EmptyTSK) if err != nil { - return eth.EthBigInt(big.Zero()), err + return ethtypes.EthBigInt(big.Zero()), err } - return eth.EthBigInt(gasPremium), nil + return ethtypes.EthBigInt(gasPremium), nil } -func (a *EthModule) EthGasPrice(ctx context.Context) (eth.EthBigInt, error) { +func (a *EthModule) EthGasPrice(ctx context.Context) (ethtypes.EthBigInt, error) { // According to Geth's implementation, eth_gasPrice should return base + tip // Ref: https://github.com/ethereum/pm/issues/328#issuecomment-853234014 @@ -485,22 +486,22 @@ func (a *EthModule) EthGasPrice(ctx context.Context) (eth.EthBigInt, error) { premium, err := a.EthMaxPriorityFeePerGas(ctx) if err != nil { - return eth.EthBigInt(big.Zero()), nil + return ethtypes.EthBigInt(big.Zero()), nil } gasPrice := big.Add(baseFee, big.Int(premium)) - return eth.EthBigInt(gasPrice), nil + return ethtypes.EthBigInt(gasPrice), nil } -func (a *EthModule) EthSendRawTransaction(ctx context.Context, rawTx eth.EthBytes) (eth.EthHash, error) { +func (a *EthModule) EthSendRawTransaction(ctx context.Context, rawTx ethtypes.EthBytes) (ethtypes.EthHash, error) { txArgs, err := eth.ParseEthTxArgs(rawTx) if err != nil { - return eth.EmptyEthHash, err + return ethtypes.EmptyEthHash, err } smsg, err := txArgs.ToSignedMessage() if err != nil { - return eth.EmptyEthHash, err + return ethtypes.EmptyEthHash, err } _, err = a.StateAPI.StateGetActor(ctx, smsg.Message.To, types.EmptyTSK) @@ -512,17 +513,17 @@ func (a *EthModule) EthSendRawTransaction(ctx context.Context, rawTx eth.EthByte cid, err := a.MpoolAPI.MpoolPush(ctx, smsg) if err != nil { - return eth.EmptyEthHash, err + return ethtypes.EmptyEthHash, err } - return eth.NewEthHashFromCid(cid) + return ethtypes.NewEthHashFromCid(cid) } -func (a *EthModule) ethCallToFilecoinMessage(ctx context.Context, tx eth.EthCall) (*types.Message, error) { +func (a *EthModule) ethCallToFilecoinMessage(ctx context.Context, tx ethtypes.EthCall) (*types.Message, error) { var err error var from address.Address if tx.From == nil { // Send from the filecoin "system" address. - from, err = (eth.EthAddress{}).ToFilecoinAddress() + from, err = (ethtypes.EthAddress{}).ToFilecoinAddress() if err != nil { return nil, fmt.Errorf("failed to construct the ethereum system address: %w", err) } @@ -612,10 +613,10 @@ func (a *EthModule) applyMessage(ctx context.Context, msg *types.Message) (res * return res, nil } -func (a *EthModule) EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.EthUint64, error) { +func (a *EthModule) EthEstimateGas(ctx context.Context, tx ethtypes.EthCall) (ethtypes.EthUint64, error) { msg, err := a.ethCallToFilecoinMessage(ctx, tx) if err != nil { - return eth.EthUint64(0), err + return ethtypes.EthUint64(0), err } // Set the gas limit to the zero sentinel value, which makes @@ -624,13 +625,13 @@ func (a *EthModule) EthEstimateGas(ctx context.Context, tx eth.EthCall) (eth.Eth msg, err = a.GasAPI.GasEstimateMessageGas(ctx, msg, nil, types.EmptyTSK) if err != nil { - return eth.EthUint64(0), err + return ethtypes.EthUint64(0), err } - return eth.EthUint64(msg.GasLimit), nil + return ethtypes.EthUint64(msg.GasLimit), nil } -func (a *EthModule) EthCall(ctx context.Context, tx eth.EthCall, blkParam string) (eth.EthBytes, error) { +func (a *EthModule) EthCall(ctx context.Context, tx ethtypes.EthCall, blkParam string) (ethtypes.EthBytes, error) { msg, err := a.ethCallToFilecoinMessage(ctx, tx) if err != nil { return nil, err @@ -643,38 +644,38 @@ func (a *EthModule) EthCall(ctx context.Context, tx eth.EthCall, blkParam string if len(invokeResult.MsgRct.Return) > 0 { return cbg.ReadByteArray(bytes.NewReader(invokeResult.MsgRct.Return), uint64(len(invokeResult.MsgRct.Return))) } - return eth.EthBytes{}, nil + return ethtypes.EthBytes{}, nil } -func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types.TipSet, fullTxInfo bool) (eth.EthBlock, error) { +func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types.TipSet, fullTxInfo bool) (ethtypes.EthBlock, error) { parent, err := a.Chain.LoadTipSet(ctx, ts.Parents()) if err != nil { - return eth.EthBlock{}, err + return ethtypes.EthBlock{}, err } parentKeyCid, err := parent.Key().Cid() if err != nil { - return eth.EthBlock{}, err + return ethtypes.EthBlock{}, err } - parentBlkHash, err := eth.NewEthHashFromCid(parentKeyCid) + parentBlkHash, err := ethtypes.NewEthHashFromCid(parentKeyCid) if err != nil { - return eth.EthBlock{}, err + return ethtypes.EthBlock{}, err } blkCid, err := ts.Key().Cid() if err != nil { - return eth.EthBlock{}, err + return ethtypes.EthBlock{}, err } - blkHash, err := eth.NewEthHashFromCid(blkCid) + blkHash, err := ethtypes.NewEthHashFromCid(blkCid) if err != nil { - return eth.EthBlock{}, err + return ethtypes.EthBlock{}, err } blkMsgs, err := a.Chain.BlockMsgsForTipset(ctx, ts) if err != nil { - return eth.EthBlock{}, xerrors.Errorf("error loading messages for tipset: %v: %w", ts, err) + return ethtypes.EthBlock{}, xerrors.Errorf("error loading messages for tipset: %v: %w", ts, err) } - block := eth.NewEthBlock() + block := ethtypes.NewEthBlock() // this seems to be a very expensive way to get gasUsed of the block. may need to find an efficient way to do it gasUsed := int64(0) @@ -682,20 +683,20 @@ func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types for _, msg := range append(blkMsg.BlsMessages, blkMsg.SecpkMessages...) { msgLookup, err := a.StateAPI.StateSearchMsg(ctx, types.EmptyTSK, msg.Cid(), api.LookbackNoLimit, true) if err != nil || msgLookup == nil { - return eth.EthBlock{}, nil + return ethtypes.EthBlock{}, nil } gasUsed += msgLookup.Receipt.GasUsed if fullTxInfo { tx, err := a.newEthTxFromFilecoinMessageLookup(ctx, msgLookup) if err != nil { - return eth.EthBlock{}, nil + return ethtypes.EthBlock{}, nil } block.Transactions = append(block.Transactions, tx) } else { - hash, err := eth.NewEthHashFromCid(msg.Cid()) + hash, err := ethtypes.NewEthHashFromCid(msg.Cid()) if err != nil { - return eth.EthBlock{}, err + return ethtypes.EthBlock{}, err } block.Transactions = append(block.Transactions, hash.String()) } @@ -703,11 +704,11 @@ func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types } block.Hash = blkHash - block.Number = eth.EthUint64(ts.Height()) + block.Number = ethtypes.EthUint64(ts.Height()) block.ParentHash = parentBlkHash - block.Timestamp = eth.EthUint64(ts.Blocks()[0].Timestamp) - block.BaseFeePerGas = eth.EthBigInt{Int: ts.Blocks()[0].ParentBaseFee.Int} - block.GasUsed = eth.EthUint64(gasUsed) + block.Timestamp = ethtypes.EthUint64(ts.Blocks()[0].Timestamp) + block.BaseFeePerGas = ethtypes.EthBigInt{Int: ts.Blocks()[0].ParentBaseFee.Int} + block.GasUsed = ethtypes.EthUint64(gasUsed) return block, nil } @@ -719,10 +720,10 @@ func (a *EthModule) newEthBlockFromFilecoinTipSet(ctx context.Context, ts *types // 3. Otherwise, we fall back to returning a masked ID Ethereum address. If the supplied address is an f0 address, we // use that ID to form the masked ID address. // 4. Otherwise, we fetch the actor's ID from the state tree and form the masked ID with it. -func (a *EthModule) lookupEthAddress(ctx context.Context, addr address.Address) (eth.EthAddress, error) { +func (a *EthModule) lookupEthAddress(ctx context.Context, addr address.Address) (ethtypes.EthAddress, error) { // Attempt to convert directly. - if ethAddr, ok, err := eth.TryEthAddressFromFilecoinAddress(addr, false); err != nil { - return eth.EthAddress{}, err + if ethAddr, ok, err := ethtypes.TryEthAddressFromFilecoinAddress(addr, false); err != nil { + return ethtypes.EthAddress{}, err } else if ok { return ethAddr, nil } @@ -730,19 +731,19 @@ func (a *EthModule) lookupEthAddress(ctx context.Context, addr address.Address) // Lookup on the target actor. actor, err := a.StateAPI.StateGetActor(ctx, addr, types.EmptyTSK) if err != nil { - return eth.EthAddress{}, err + return ethtypes.EthAddress{}, err } if actor.Address != nil { - if ethAddr, ok, err := eth.TryEthAddressFromFilecoinAddress(*actor.Address, false); err != nil { - return eth.EthAddress{}, err + if ethAddr, ok, err := ethtypes.TryEthAddressFromFilecoinAddress(*actor.Address, false); err != nil { + return ethtypes.EthAddress{}, err } else if ok { return ethAddr, nil } } // Check if we already have an ID addr, and use it if possible. - if ethAddr, ok, err := eth.TryEthAddressFromFilecoinAddress(addr, true); err != nil { - return eth.EthAddress{}, err + if ethAddr, ok, err := ethtypes.TryEthAddressFromFilecoinAddress(addr, true); err != nil { + return ethtypes.EthAddress{}, err } else if ok { return ethAddr, nil } @@ -750,9 +751,9 @@ func (a *EthModule) lookupEthAddress(ctx context.Context, addr address.Address) // Otherwise, resolve the ID addr. idAddr, err := a.StateAPI.StateLookupID(ctx, addr, types.EmptyTSK) if err != nil { - return eth.EthAddress{}, err + return ethtypes.EthAddress{}, err } - return eth.EthAddressFromFilecoinAddress(idAddr) + return ethtypes.EthAddressFromFilecoinAddress(idAddr) } func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLookup *api.MsgLookup) (eth.EthTx, error) { @@ -760,7 +761,7 @@ func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLo return eth.EthTx{}, fmt.Errorf("msg does not exist") } cid := msgLookup.Message - txHash, err := eth.NewEthHashFromCid(cid) + txHash, err := ethtypes.NewEthHashFromCid(cid) if err != nil { return eth.EthTx{}, err } @@ -796,7 +797,7 @@ func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLo return eth.EthTx{}, fmt.Errorf("cannot find the msg in the tipset") } - blkHash, err := eth.NewEthHashFromCid(parentTsCid) + blkHash, err := ethtypes.NewEthHashFromCid(parentTsCid) if err != nil { return eth.EthTx{}, err } @@ -846,21 +847,21 @@ func (a *EthModule) newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLo } tx := eth.EthTx{ - ChainID: eth.EthUint64(build.Eip155ChainId), + ChainID: ethtypes.EthUint64(build.Eip155ChainId), Hash: txHash, BlockHash: blkHash, - BlockNumber: eth.EthUint64(parentTs.Height()), + BlockNumber: ethtypes.EthUint64(parentTs.Height()), From: fromEthAddr, To: toAddr, - Value: eth.EthBigInt(msg.Value), - Type: eth.EthUint64(2), - TransactionIndex: eth.EthUint64(txIdx), - Gas: eth.EthUint64(msg.GasLimit), - MaxFeePerGas: eth.EthBigInt(msg.GasFeeCap), - MaxPriorityFeePerGas: eth.EthBigInt(msg.GasPremium), - V: eth.EthBytes{}, - R: eth.EthBytes{}, - S: eth.EthBytes{}, + Value: ethtypes.EthBigInt(msg.Value), + Type: ethtypes.EthUint64(2), + TransactionIndex: ethtypes.EthUint64(txIdx), + Gas: ethtypes.EthUint64(msg.GasLimit), + MaxFeePerGas: ethtypes.EthBigInt(msg.GasFeeCap), + MaxPriorityFeePerGas: ethtypes.EthBigInt(msg.GasPremium), + V: ethtypes.EthBytes{}, + R: ethtypes.EthBytes{}, + S: ethtypes.EthBytes{}, Input: input, } return tx, nil @@ -874,7 +875,7 @@ func NewEthTxReceipt(tx eth.EthTx, lookup *api.MsgLookup, replay *api.InvocResul BlockNumber: tx.BlockNumber, From: tx.From, To: tx.To, - StateRoot: eth.EmptyEthHash, + StateRoot: ethtypes.EmptyEthHash, LogsBloom: []byte{0}, Logs: []string{}, } @@ -885,7 +886,7 @@ func NewEthTxReceipt(tx eth.EthTx, lookup *api.MsgLookup, replay *api.InvocResul if err := ret.UnmarshalCBOR(bytes.NewReader(lookup.Receipt.Return)); err != nil { return api.EthTxReceipt{}, xerrors.Errorf("failed to parse contract creation result: %w", err) } - addr := eth.EthAddress(ret.EthAddress) + addr := ethtypes.EthAddress(ret.EthAddress) receipt.ContractAddress = &addr } @@ -896,12 +897,12 @@ func NewEthTxReceipt(tx eth.EthTx, lookup *api.MsgLookup, replay *api.InvocResul receipt.Status = 0 } - receipt.GasUsed = eth.EthUint64(lookup.Receipt.GasUsed) + receipt.GasUsed = ethtypes.EthUint64(lookup.Receipt.GasUsed) // TODO: handle CumulativeGasUsed - receipt.CumulativeGasUsed = eth.EmptyEthInt + receipt.CumulativeGasUsed = ethtypes.EmptyEthInt effectiveGasPrice := big.Div(replay.GasCost.TotalCost, big.NewInt(lookup.Receipt.GasUsed)) - receipt.EffectiveGasPrice = eth.EthBigInt(effectiveGasPrice) + receipt.EffectiveGasPrice = ethtypes.EthBigInt(effectiveGasPrice) return receipt, nil } From 3497b53b88acf779567ce0013368d9af52d12d8b Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Wed, 14 Dec 2022 15:26:58 -0500 Subject: [PATCH 4/4] Fix lint --- chain/eth/rlp_test.go | 13 ++++++++----- chain/types/ethtypes/eth_types_test.go | 1 - 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/chain/eth/rlp_test.go b/chain/eth/rlp_test.go index 397f2e1a8..715021040 100644 --- a/chain/eth/rlp_test.go +++ b/chain/eth/rlp_test.go @@ -9,12 +9,15 @@ import ( "github.com/stretchr/testify/require" "github.com/filecoin-project/go-address" - - "github.com/filecoin-project/lotus/chain/types/ethtypes" ) +type TestCase struct { + Input interface{} + Output interface{} +} + func TestEncode(t *testing.T) { - testcases := []ethtypes.TestCase{ + testcases := []TestCase{ {[]byte(""), mustDecodeHex("0x80")}, {mustDecodeHex("0x01"), mustDecodeHex("0x01")}, {mustDecodeHex("0xaa"), mustDecodeHex("0x81aa")}, @@ -66,7 +69,7 @@ func TestEncode(t *testing.T) { } func TestDecodeString(t *testing.T) { - testcases := []ethtypes.TestCase{ + testcases := []TestCase{ {"0x00", "0x00"}, {"0x80", "0x"}, {"0x0f", "0x0f"}, @@ -98,7 +101,7 @@ func mustDecodeHex(s string) []byte { } func TestDecodeList(t *testing.T) { - testcases := []ethtypes.TestCase{ + testcases := []TestCase{ {"0xc0", []interface{}{}}, {"0xc100", []interface{}{[]byte{0}}}, {"0xc3000102", []interface{}{[]byte{0}, []byte{1}, []byte{2}}}, diff --git a/chain/types/ethtypes/eth_types_test.go b/chain/types/ethtypes/eth_types_test.go index 288145979..3891c80af 100644 --- a/chain/types/ethtypes/eth_types_test.go +++ b/chain/types/ethtypes/eth_types_test.go @@ -1,4 +1,3 @@ -// stm: #unit package ethtypes import (