eth_getTransactionByHash: return nil in some fields when tx is in mpool.
This commit is contained in:
parent
7ed79fece6
commit
4411fd7f81
@ -29,9 +29,9 @@ 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"`
|
||||
BlockHash *EthHash `json:"blockHash"`
|
||||
BlockNumber *EthUint64 `json:"blockNumber"`
|
||||
TransactionIndex *EthUint64 `json:"transactionIndex"`
|
||||
From EthAddress `json:"from"`
|
||||
To *EthAddress `json:"to"`
|
||||
Value EthBigInt `json:"value"`
|
||||
|
@ -100,9 +100,13 @@ func TestDeployment(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// require that the hashes are identical
|
||||
// TODO compare more fields
|
||||
require.Equal(t, hash, mpoolTx.Hash)
|
||||
|
||||
// these fields should be nil because the tx hasn't landed on chain.
|
||||
require.Nil(t, mpoolTx.BlockNumber)
|
||||
require.Nil(t, mpoolTx.BlockHash)
|
||||
require.Nil(t, mpoolTx.TransactionIndex)
|
||||
|
||||
changes, err := client.EthGetFilterChanges(ctx, pendingFilter)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, changes.Results, 1)
|
||||
@ -123,6 +127,19 @@ func TestDeployment(t *testing.T) {
|
||||
// Success.
|
||||
require.EqualValues(t, ethtypes.EthUint64(0x1), receipt.Status)
|
||||
|
||||
// Verify that the chain transaction now has new fields set.
|
||||
chainTx, err := client.EthGetTransactionByHash(ctx, &hash)
|
||||
require.NoError(t, err)
|
||||
|
||||
// require that the hashes are identical
|
||||
require.Equal(t, hash, chainTx.Hash)
|
||||
require.NotNil(t, chainTx.BlockNumber)
|
||||
require.Greater(t, uint64(*chainTx.BlockNumber), uint64(0))
|
||||
require.NotNil(t, chainTx.BlockHash)
|
||||
require.NotEmpty(t, *chainTx.BlockHash)
|
||||
require.NotNil(t, chainTx.TransactionIndex)
|
||||
require.Equal(t, uint64(*chainTx.TransactionIndex), uint64(0)) // only transaction
|
||||
|
||||
// Verify that the deployer is now an account.
|
||||
client.AssertActorType(ctx, deployer, manifest.EthAccountKey)
|
||||
|
||||
|
@ -1565,22 +1565,43 @@ func newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLookup *api.MsgLo
|
||||
return ethtypes.EthTx{}, err
|
||||
}
|
||||
|
||||
var (
|
||||
bn = ethtypes.EthUint64(parentTs.Height())
|
||||
ti = ethtypes.EthUint64(txIdx)
|
||||
)
|
||||
|
||||
tx.ChainID = ethtypes.EthUint64(build.Eip155ChainId)
|
||||
tx.Hash = txHash
|
||||
tx.BlockHash = blkHash
|
||||
tx.BlockNumber = ethtypes.EthUint64(parentTs.Height())
|
||||
tx.TransactionIndex = ethtypes.EthUint64(txIdx)
|
||||
tx.BlockHash = &blkHash
|
||||
tx.BlockNumber = &bn
|
||||
tx.TransactionIndex = &ti
|
||||
return tx, nil
|
||||
}
|
||||
|
||||
func newEthTxReceipt(ctx context.Context, tx ethtypes.EthTx, lookup *api.MsgLookup, replay *api.InvocResult, events []types.Event, sa StateAPI) (api.EthTxReceipt, error) {
|
||||
var (
|
||||
transactionIndex ethtypes.EthUint64
|
||||
blockHash ethtypes.EthHash
|
||||
blockNumber ethtypes.EthUint64
|
||||
)
|
||||
|
||||
if tx.TransactionIndex != nil {
|
||||
transactionIndex = *tx.TransactionIndex
|
||||
}
|
||||
if tx.BlockHash != nil {
|
||||
blockHash = *tx.BlockHash
|
||||
}
|
||||
if tx.BlockNumber != nil {
|
||||
blockNumber = *tx.BlockNumber
|
||||
}
|
||||
|
||||
receipt := api.EthTxReceipt{
|
||||
TransactionHash: tx.Hash,
|
||||
TransactionIndex: tx.TransactionIndex,
|
||||
BlockHash: tx.BlockHash,
|
||||
BlockNumber: tx.BlockNumber,
|
||||
From: tx.From,
|
||||
To: tx.To,
|
||||
TransactionIndex: transactionIndex,
|
||||
BlockHash: blockHash,
|
||||
BlockNumber: blockNumber,
|
||||
Type: ethtypes.EthUint64(2),
|
||||
LogsBloom: []byte{0},
|
||||
}
|
||||
@ -1614,10 +1635,10 @@ func newEthTxReceipt(ctx context.Context, tx ethtypes.EthTx, lookup *api.MsgLook
|
||||
l := ethtypes.EthLog{
|
||||
Removed: false,
|
||||
LogIndex: ethtypes.EthUint64(i),
|
||||
TransactionIndex: tx.TransactionIndex,
|
||||
TransactionHash: tx.Hash,
|
||||
BlockHash: tx.BlockHash,
|
||||
BlockNumber: tx.BlockNumber,
|
||||
TransactionIndex: transactionIndex,
|
||||
BlockHash: blockHash,
|
||||
BlockNumber: blockNumber,
|
||||
}
|
||||
|
||||
for _, entry := range evt.Entries {
|
||||
|
Loading…
Reference in New Issue
Block a user