graphql: add raw fields to block and tx (#24816)

This commit is contained in:
Sina Mahmoodi 2022-05-17 10:31:17 +02:00 committed by GitHub
parent 39fb82bcfb
commit 29a6b6bcac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 2 deletions

@ -33,6 +33,7 @@ import (
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth/filters" "github.com/ethereum/go-ethereum/eth/filters"
"github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/internal/ethapi"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
) )
@ -516,10 +517,18 @@ func (t *Transaction) V(ctx context.Context) (hexutil.Big, error) {
return hexutil.Big(*v), nil return hexutil.Big(*v), nil
} }
func (t *Transaction) Raw(ctx context.Context) (hexutil.Bytes, error) {
tx, err := t.resolve(ctx)
if err != nil || tx == nil {
return hexutil.Bytes{}, err
}
return tx.MarshalBinary()
}
func (t *Transaction) RawReceipt(ctx context.Context) (hexutil.Bytes, error) { func (t *Transaction) RawReceipt(ctx context.Context) (hexutil.Bytes, error) {
receipt, err := t.getReceipt(ctx) receipt, err := t.getReceipt(ctx)
if err != nil || receipt == nil { if err != nil || receipt == nil {
return nil, err return hexutil.Bytes{}, err
} }
return receipt.MarshalBinary() return receipt.MarshalBinary()
} }
@ -798,6 +807,22 @@ func (b *Block) TotalDifficulty(ctx context.Context) (hexutil.Big, error) {
return hexutil.Big(*td), nil return hexutil.Big(*td), nil
} }
func (b *Block) RawHeader(ctx context.Context) (hexutil.Bytes, error) {
header, err := b.resolveHeader(ctx)
if err != nil {
return hexutil.Bytes{}, err
}
return rlp.EncodeToBytes(header)
}
func (b *Block) Raw(ctx context.Context) (hexutil.Bytes, error) {
block, err := b.resolve(ctx)
if err != nil {
return hexutil.Bytes{}, err
}
return rlp.EncodeToBytes(block)
}
// BlockNumberArgs encapsulates arguments to accessors that specify a block number. // BlockNumberArgs encapsulates arguments to accessors that specify a block number.
type BlockNumberArgs struct { type BlockNumberArgs struct {
// TODO: Ideally we could use input unions to allow the query to specify the // TODO: Ideally we could use input unions to allow the query to specify the

@ -140,7 +140,11 @@ const schema string = `
# Envelope transaction support # Envelope transaction support
type: Int type: Int
accessList: [AccessTuple!] accessList: [AccessTuple!]
# RawReceipt is the binary encoding of the receipt. For post EIP-2718 typed transactions # Raw is the canonical encoding of the transaction.
# For legacy transactions, it returns the RLP encoding.
# For EIP-2718 typed transactions, it returns the type and payload.
raw: Bytes!
# RawReceipt is the canonical encoding of the receipt. For post EIP-2718 typed transactions
# this is equivalent to TxType || ReceiptEncoding. # this is equivalent to TxType || ReceiptEncoding.
rawReceipt: Bytes! rawReceipt: Bytes!
} }
@ -238,6 +242,10 @@ const schema string = `
# EstimateGas estimates the amount of gas that will be required for # EstimateGas estimates the amount of gas that will be required for
# successful execution of a transaction at the current block's state. # successful execution of a transaction at the current block's state.
estimateGas(data: CallData!): Long! estimateGas(data: CallData!): Long!
# RawHeader is the RLP encoding of the block's header.
rawHeader: Bytes!
# Raw is the RLP encoding of the block.
raw: Bytes!
} }
# CallData represents the data associated with a local contract call. # CallData represents the data associated with a local contract call.