diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 2eb4dee3c0..ef600e87df 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -1220,13 +1220,14 @@ func newRPCTransactionFromBlockIndex(b *types.Block, index uint64, config *param } // newRPCRawTransactionFromBlockIndex returns the bytes of a transaction given a block and a transaction index. -func newRPCRawTransactionFromBlockIndex(b *types.Block, index uint64) hexutil.Bytes { +func newRPCRawTransactionFromBlockIndex(b *types.Block, index uint64) *hexutil.Bytes { txs := b.Transactions() if index >= uint64(len(txs)) { return nil } blob, _ := txs[index].MarshalBinary() - return blob + b2 := hexutil.Bytes(blob) + return &b2 } // accessListResult returns an optional accesslist @@ -1485,7 +1486,7 @@ func (api *TransactionAPI) GetTransactionByBlockHashAndIndex(ctx context.Context } // GetRawTransactionByBlockNumberAndIndex returns the bytes of the transaction for the given block number and index. -func (api *TransactionAPI) GetRawTransactionByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) hexutil.Bytes { +func (api *TransactionAPI) GetRawTransactionByBlockNumberAndIndex(ctx context.Context, blockNr rpc.BlockNumber, index hexutil.Uint) *hexutil.Bytes { if block, _ := api.b.BlockByNumber(ctx, blockNr); block != nil { return newRPCRawTransactionFromBlockIndex(block, uint64(index)) } @@ -1493,7 +1494,7 @@ func (api *TransactionAPI) GetRawTransactionByBlockNumberAndIndex(ctx context.Co } // GetRawTransactionByBlockHashAndIndex returns the bytes of the transaction for the given block hash and index. -func (api *TransactionAPI) GetRawTransactionByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index hexutil.Uint) hexutil.Bytes { +func (api *TransactionAPI) GetRawTransactionByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index hexutil.Uint) *hexutil.Bytes { if block, _ := api.b.BlockByHash(ctx, blockHash); block != nil { return newRPCRawTransactionFromBlockIndex(block, uint64(index)) } @@ -1545,12 +1546,17 @@ func (api *TransactionAPI) GetTransactionByHash(ctx context.Context, hash common } // GetRawTransactionByHash returns the bytes of the transaction for the given hash. -func (api *TransactionAPI) GetRawTransactionByHash(ctx context.Context, hash common.Hash) (hexutil.Bytes, error) { +func (api *TransactionAPI) GetRawTransactionByHash(ctx context.Context, hash common.Hash) (*hexutil.Bytes, error) { // Retrieve a finalized transaction, or a pooled otherwise found, tx, _, _, _ := api.b.GetCanonicalTransaction(hash) if !found { if tx = api.b.GetPoolTransaction(hash); tx != nil { - return tx.MarshalBinary() + blob, err := tx.MarshalBinary() + if err != nil { + return nil, err + } + b := hexutil.Bytes(blob) + return &b, nil } // If also not in the pool there is a chance the tx indexer is still in progress. if !api.b.TxIndexDone() { @@ -1559,7 +1565,12 @@ func (api *TransactionAPI) GetRawTransactionByHash(ctx context.Context, hash com // If the transaction is not found in the pool and the indexer is done, return nil return nil, nil } - return tx.MarshalBinary() + blob, err := tx.MarshalBinary() + if err != nil { + return nil, err + } + b := hexutil.Bytes(blob) + return &b, nil } // GetTransactionReceipt returns the transaction receipt for the given transaction hash.