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"`
|
ChainID EthUint64 `json:"chainId"`
|
||||||
Nonce EthUint64 `json:"nonce"`
|
Nonce EthUint64 `json:"nonce"`
|
||||||
Hash EthHash `json:"hash"`
|
Hash EthHash `json:"hash"`
|
||||||
BlockHash EthHash `json:"blockHash"`
|
BlockHash *EthHash `json:"blockHash"`
|
||||||
BlockNumber EthUint64 `json:"blockNumber"`
|
BlockNumber *EthUint64 `json:"blockNumber"`
|
||||||
TransactionIndex EthUint64 `json:"transactionIndex"`
|
TransactionIndex *EthUint64 `json:"transactionIndex"`
|
||||||
From EthAddress `json:"from"`
|
From EthAddress `json:"from"`
|
||||||
To *EthAddress `json:"to"`
|
To *EthAddress `json:"to"`
|
||||||
Value EthBigInt `json:"value"`
|
Value EthBigInt `json:"value"`
|
||||||
|
@ -100,9 +100,13 @@ func TestDeployment(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// require that the hashes are identical
|
// require that the hashes are identical
|
||||||
// TODO compare more fields
|
|
||||||
require.Equal(t, hash, mpoolTx.Hash)
|
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)
|
changes, err := client.EthGetFilterChanges(ctx, pendingFilter)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, changes.Results, 1)
|
require.Len(t, changes.Results, 1)
|
||||||
@ -123,6 +127,19 @@ func TestDeployment(t *testing.T) {
|
|||||||
// Success.
|
// Success.
|
||||||
require.EqualValues(t, ethtypes.EthUint64(0x1), receipt.Status)
|
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.
|
// Verify that the deployer is now an account.
|
||||||
client.AssertActorType(ctx, deployer, manifest.EthAccountKey)
|
client.AssertActorType(ctx, deployer, manifest.EthAccountKey)
|
||||||
|
|
||||||
|
@ -1565,22 +1565,43 @@ func newEthTxFromFilecoinMessageLookup(ctx context.Context, msgLookup *api.MsgLo
|
|||||||
return ethtypes.EthTx{}, err
|
return ethtypes.EthTx{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
bn = ethtypes.EthUint64(parentTs.Height())
|
||||||
|
ti = ethtypes.EthUint64(txIdx)
|
||||||
|
)
|
||||||
|
|
||||||
tx.ChainID = ethtypes.EthUint64(build.Eip155ChainId)
|
tx.ChainID = ethtypes.EthUint64(build.Eip155ChainId)
|
||||||
tx.Hash = txHash
|
tx.Hash = txHash
|
||||||
tx.BlockHash = blkHash
|
tx.BlockHash = &blkHash
|
||||||
tx.BlockNumber = ethtypes.EthUint64(parentTs.Height())
|
tx.BlockNumber = &bn
|
||||||
tx.TransactionIndex = ethtypes.EthUint64(txIdx)
|
tx.TransactionIndex = &ti
|
||||||
return tx, nil
|
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) {
|
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{
|
receipt := api.EthTxReceipt{
|
||||||
TransactionHash: tx.Hash,
|
TransactionHash: tx.Hash,
|
||||||
TransactionIndex: tx.TransactionIndex,
|
|
||||||
BlockHash: tx.BlockHash,
|
|
||||||
BlockNumber: tx.BlockNumber,
|
|
||||||
From: tx.From,
|
From: tx.From,
|
||||||
To: tx.To,
|
To: tx.To,
|
||||||
|
TransactionIndex: transactionIndex,
|
||||||
|
BlockHash: blockHash,
|
||||||
|
BlockNumber: blockNumber,
|
||||||
Type: ethtypes.EthUint64(2),
|
Type: ethtypes.EthUint64(2),
|
||||||
LogsBloom: []byte{0},
|
LogsBloom: []byte{0},
|
||||||
}
|
}
|
||||||
@ -1614,10 +1635,10 @@ func newEthTxReceipt(ctx context.Context, tx ethtypes.EthTx, lookup *api.MsgLook
|
|||||||
l := ethtypes.EthLog{
|
l := ethtypes.EthLog{
|
||||||
Removed: false,
|
Removed: false,
|
||||||
LogIndex: ethtypes.EthUint64(i),
|
LogIndex: ethtypes.EthUint64(i),
|
||||||
TransactionIndex: tx.TransactionIndex,
|
|
||||||
TransactionHash: tx.Hash,
|
TransactionHash: tx.Hash,
|
||||||
BlockHash: tx.BlockHash,
|
TransactionIndex: transactionIndex,
|
||||||
BlockNumber: tx.BlockNumber,
|
BlockHash: blockHash,
|
||||||
|
BlockNumber: blockNumber,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range evt.Entries {
|
for _, entry := range evt.Entries {
|
||||||
|
Loading…
Reference in New Issue
Block a user