forked from cerc-io/laconicd-deprecated
		
	eth_getBlockByNumber fix on batch transactions (#1050)
				
					
				
			This commit is contained in:
		
							parent
							
								
									bc4b018b60
								
							
						
					
					
						commit
						7e359068d8
					
				| @ -42,9 +42,15 @@ Ref: https://keepachangelog.com/en/1.0.0/ | ||||
| 
 | ||||
| * (deps) [tharsis#1046](https://github.com/tharsis/ethermint/pull/1046) Bump Cosmos SDK version to [`v0.45.3`](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.45.3) | ||||
| 
 | ||||
| ### Bug Fixes | ||||
| 
 | ||||
| * (rpc) [tharsis#1050](https://github.com/tharsis/ethermint/pull/1050) `eth_getBlockByNumber` fix on batch transactions | ||||
| 
 | ||||
| ### API Breaking | ||||
| 
 | ||||
| * (evm) [tharsis#1051](https://github.com/tharsis/ethermint/pull/1051) Context block height fix on TraceTx. Removes `tx_index` on `QueryTraceTxRequest` proto type.  | ||||
| 
 | ||||
| 
 | ||||
| ## [v0.13.0] - 2022-04-05 | ||||
| 
 | ||||
| ### API Breaking | ||||
|  | ||||
| @ -362,6 +362,7 @@ func (e *EVMBackend) EthBlockFromTendermint( | ||||
| 	} | ||||
| 
 | ||||
| 	txResults := resBlockResult.TxsResults | ||||
| 	txIndex := uint64(0) | ||||
| 
 | ||||
| 	for i, txBz := range block.Txs { | ||||
| 		tx, err := e.clientCtx.TxConfig.TxDecoder()(txBz) | ||||
| @ -394,7 +395,7 @@ func (e *EVMBackend) EthBlockFromTendermint( | ||||
| 				tx, | ||||
| 				common.BytesToHash(block.Hash()), | ||||
| 				uint64(block.Height), | ||||
| 				uint64(i), | ||||
| 				txIndex, | ||||
| 				baseFee, | ||||
| 			) | ||||
| 			if err != nil { | ||||
| @ -402,6 +403,7 @@ func (e *EVMBackend) EthBlockFromTendermint( | ||||
| 				continue | ||||
| 			} | ||||
| 			ethRPCTxs = append(ethRPCTxs, rpcTx) | ||||
| 			txIndex++ | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -4,6 +4,10 @@ import ( | ||||
| 	"bytes" | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"github.com/cosmos/cosmos-sdk/client/flags" | ||||
| 	codectypes "github.com/cosmos/cosmos-sdk/codec/types" | ||||
| 	authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" | ||||
| 	"github.com/tharsis/ethermint/rpc/ethereum/types" | ||||
| 	"math/big" | ||||
| 	"testing" | ||||
| 
 | ||||
| @ -132,7 +136,6 @@ func (s *IntegrationTestSuite) TestBlock() { | ||||
| 	s.Require().NotNil(blockByNum) | ||||
| 
 | ||||
| 	// compare the ethereum header with the tendermint header
 | ||||
| 	s.Require().Equal(len(block.Block.Txs), len(blockByNum.Body().Transactions)) | ||||
| 	s.Require().Equal(block.Block.LastBlockID.Hash.Bytes(), blockByNum.Header().ParentHash.Bytes()) | ||||
| 
 | ||||
| 	hash := common.BytesToHash(block.Block.Hash()) | ||||
| @ -143,7 +146,12 @@ func (s *IntegrationTestSuite) TestBlock() { | ||||
| 	blockByHash, err := s.network.Validators[0].JSONRPCClient.BlockByHash(s.ctx, hash) | ||||
| 	s.Require().NoError(err) | ||||
| 	s.Require().NotNil(blockByHash) | ||||
| 	s.Require().Equal(blockByNum, blockByHash) | ||||
| 
 | ||||
| 	//Compare blockByNumber and blockByHash results
 | ||||
| 	s.Require().Equal(blockByNum.Hash(), blockByHash.Hash()) | ||||
| 	s.Require().Equal(blockByNum.Transactions().Len(), blockByHash.Transactions().Len()) | ||||
| 	s.Require().Equal(blockByNum.ParentHash(), blockByHash.ParentHash()) | ||||
| 	s.Require().Equal(blockByNum.Root(), blockByHash.Root()) | ||||
| 
 | ||||
| 	// TODO: parse Tm block to Ethereum and compare
 | ||||
| } | ||||
| @ -747,3 +755,85 @@ func (s *IntegrationTestSuite) TestPendingTransactionFilter() { | ||||
| 	s.Require().NoError(err) | ||||
| 	s.Require().Equal([]common.Hash{signedTx.Hash()}, filterResult) | ||||
| } | ||||
| 
 | ||||
| // TODO: add transactionIndex tests once we have OpenRPC interfaces
 | ||||
| func (s *IntegrationTestSuite) TestBatchETHTransactions() { | ||||
| 	const ethTxs = 2 | ||||
| 	txBuilder := s.network.Validators[0].ClientCtx.TxConfig.NewTxBuilder() | ||||
| 	builder, ok := txBuilder.(authtx.ExtensionOptionsTxBuilder) | ||||
| 	s.Require().True(ok) | ||||
| 
 | ||||
| 	recipient := common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec") | ||||
| 	accountNonce := s.getAccountNonce(recipient) | ||||
| 	feeAmount := sdk.ZeroInt() | ||||
| 
 | ||||
| 	var gasLimit uint64 | ||||
| 	var msgs []sdk.Msg | ||||
| 
 | ||||
| 	for i := 0; i < ethTxs; i++ { | ||||
| 		chainId, err := s.network.Validators[0].JSONRPCClient.ChainID(s.ctx) | ||||
| 		s.Require().NoError(err) | ||||
| 
 | ||||
| 		gasPrice := s.getGasPrice() | ||||
| 		from := common.BytesToAddress(s.network.Validators[0].Address) | ||||
| 		nonce := accountNonce + uint64(i) + 1 | ||||
| 
 | ||||
| 		msgTx := evmtypes.NewTx( | ||||
| 			chainId, | ||||
| 			nonce, | ||||
| 			&recipient, | ||||
| 			big.NewInt(10), | ||||
| 			100000, | ||||
| 			gasPrice, | ||||
| 			big.NewInt(200), | ||||
| 			nil, | ||||
| 			nil, | ||||
| 			nil, | ||||
| 		) | ||||
| 		msgTx.From = from.Hex() | ||||
| 		err = msgTx.Sign(s.ethSigner, s.network.Validators[0].ClientCtx.Keyring) | ||||
| 		s.Require().NoError(err) | ||||
| 
 | ||||
| 		msgs = append(msgs, msgTx.GetMsgs()...) | ||||
| 		txData, err := evmtypes.UnpackTxData(msgTx.Data) | ||||
| 		s.Require().NoError(err) | ||||
| 		feeAmount = feeAmount.Add(sdk.NewIntFromBigInt(txData.Fee())) | ||||
| 		gasLimit = gasLimit + txData.GetGas() | ||||
| 	} | ||||
| 
 | ||||
| 	option, err := codectypes.NewAnyWithValue(&evmtypes.ExtensionOptionsEthereumTx{}) | ||||
| 	s.Require().NoError(err) | ||||
| 
 | ||||
| 	queryClient := types.NewQueryClient(s.network.Validators[0].ClientCtx) | ||||
| 	res, err := queryClient.Params(s.ctx, &evmtypes.QueryParamsRequest{}) | ||||
| 
 | ||||
| 	fees := make(sdk.Coins, 0) | ||||
| 	if feeAmount.Sign() > 0 { | ||||
| 		fees = fees.Add(sdk.Coin{Denom: res.Params.EvmDenom, Amount: feeAmount}) | ||||
| 	} | ||||
| 
 | ||||
| 	builder.SetExtensionOptions(option) | ||||
| 	err = builder.SetMsgs(msgs...) | ||||
| 	s.Require().NoError(err) | ||||
| 	builder.SetFeeAmount(fees) | ||||
| 	builder.SetGasLimit(gasLimit) | ||||
| 
 | ||||
| 	tx := builder.GetTx() | ||||
| 	txEncoder := s.network.Validators[0].ClientCtx.TxConfig.TxEncoder() | ||||
| 	txBytes, err := txEncoder(tx) | ||||
| 	s.Require().NoError(err) | ||||
| 
 | ||||
| 	syncCtx := s.network.Validators[0].ClientCtx.WithBroadcastMode(flags.BroadcastBlock) | ||||
| 	txResponse, err := syncCtx.BroadcastTx(txBytes) | ||||
| 	s.Require().NoError(err) | ||||
| 	s.Require().Equal(uint32(0), txResponse.Code) | ||||
| 
 | ||||
| 	block, err := s.network.Validators[0].JSONRPCClient.BlockByNumber(s.ctx, big.NewInt(txResponse.Height)) | ||||
| 	s.Require().NoError(err) | ||||
| 
 | ||||
| 	txs := block.Transactions() | ||||
| 	s.Require().Len(txs, ethTxs) | ||||
| 	for i, tx := range txs { | ||||
| 		s.Require().Equal(accountNonce+uint64(i)+1, tx.Nonce()) | ||||
| 	} | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user