graphql: add 4844 blob fields (#27963)
This adds block and receipt fields for EIP-4844. --------- Signed-off-by: jsvisa <delweng@gmail.com> Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>
This commit is contained in:
parent
86bc2cdf33
commit
8514d665ee
@ -272,8 +272,6 @@ func (t *Transaction) GasPrice(ctx context.Context) hexutil.Big {
|
|||||||
return hexutil.Big{}
|
return hexutil.Big{}
|
||||||
}
|
}
|
||||||
switch tx.Type() {
|
switch tx.Type() {
|
||||||
case types.AccessListTxType:
|
|
||||||
return hexutil.Big(*tx.GasPrice())
|
|
||||||
case types.DynamicFeeTxType:
|
case types.DynamicFeeTxType:
|
||||||
if block != nil {
|
if block != nil {
|
||||||
if baseFee, _ := block.BaseFeePerGas(ctx); baseFee != nil {
|
if baseFee, _ := block.BaseFeePerGas(ctx); baseFee != nil {
|
||||||
@ -312,9 +310,7 @@ func (t *Transaction) MaxFeePerGas(ctx context.Context) *hexutil.Big {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
switch tx.Type() {
|
switch tx.Type() {
|
||||||
case types.AccessListTxType:
|
case types.DynamicFeeTxType, types.BlobTxType:
|
||||||
return nil
|
|
||||||
case types.DynamicFeeTxType:
|
|
||||||
return (*hexutil.Big)(tx.GasFeeCap())
|
return (*hexutil.Big)(tx.GasFeeCap())
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
@ -327,15 +323,33 @@ func (t *Transaction) MaxPriorityFeePerGas(ctx context.Context) *hexutil.Big {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
switch tx.Type() {
|
switch tx.Type() {
|
||||||
case types.AccessListTxType:
|
case types.DynamicFeeTxType, types.BlobTxType:
|
||||||
return nil
|
|
||||||
case types.DynamicFeeTxType:
|
|
||||||
return (*hexutil.Big)(tx.GasTipCap())
|
return (*hexutil.Big)(tx.GasTipCap())
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transaction) MaxFeePerBlobGas(ctx context.Context) *hexutil.Big {
|
||||||
|
tx, _ := t.resolve(ctx)
|
||||||
|
if tx == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return (*hexutil.Big)(tx.BlobGasFeeCap())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Transaction) BlobVersionedHashes(ctx context.Context) *[]common.Hash {
|
||||||
|
tx, _ := t.resolve(ctx)
|
||||||
|
if tx == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if tx.Type() != types.BlobTxType {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
blobHashes := tx.BlobHashes()
|
||||||
|
return &blobHashes
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Transaction) EffectiveTip(ctx context.Context) (*hexutil.Big, error) {
|
func (t *Transaction) EffectiveTip(ctx context.Context) (*hexutil.Big, error) {
|
||||||
tx, block := t.resolve(ctx)
|
tx, block := t.resolve(ctx)
|
||||||
if tx == nil {
|
if tx == nil {
|
||||||
@ -468,6 +482,40 @@ func (t *Transaction) CumulativeGasUsed(ctx context.Context) (*hexutil.Uint64, e
|
|||||||
return &ret, nil
|
return &ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transaction) BlobGasUsed(ctx context.Context) (*hexutil.Uint64, error) {
|
||||||
|
tx, _ := t.resolve(ctx)
|
||||||
|
if tx == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
if tx.Type() != types.BlobTxType {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
receipt, err := t.getReceipt(ctx)
|
||||||
|
if err != nil || receipt == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
ret := hexutil.Uint64(receipt.BlobGasUsed)
|
||||||
|
return &ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Transaction) BlobGasPrice(ctx context.Context) (*hexutil.Big, error) {
|
||||||
|
tx, _ := t.resolve(ctx)
|
||||||
|
if tx == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
if tx.Type() != types.BlobTxType {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
receipt, err := t.getReceipt(ctx)
|
||||||
|
if err != nil || receipt == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
ret := (*hexutil.Big)(receipt.BlobGasPrice)
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Transaction) CreatedContract(ctx context.Context, args BlockNumberArgs) (*Account, error) {
|
func (t *Transaction) CreatedContract(ctx context.Context, args BlockNumberArgs) (*Account, error) {
|
||||||
receipt, err := t.getReceipt(ctx)
|
receipt, err := t.getReceipt(ctx)
|
||||||
if err != nil || receipt == nil || receipt.ContractAddress == (common.Address{}) {
|
if err != nil || receipt == nil || receipt.ContractAddress == (common.Address{}) {
|
||||||
@ -1019,6 +1067,30 @@ func (b *Block) Withdrawals(ctx context.Context) (*[]*Withdrawal, error) {
|
|||||||
return &ret, nil
|
return &ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Block) BlobGasUsed(ctx context.Context) (*hexutil.Uint64, error) {
|
||||||
|
header, err := b.resolveHeader(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if header.BlobGasUsed == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
ret := hexutil.Uint64(*header.BlobGasUsed)
|
||||||
|
return &ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Block) ExcessBlobGas(ctx context.Context) (*hexutil.Uint64, error) {
|
||||||
|
header, err := b.resolveHeader(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if header.ExcessBlobGas == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
ret := hexutil.Uint64(*header.ExcessBlobGas)
|
||||||
|
return &ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
// BlockFilterCriteria encapsulates criteria passed to a `logs` accessor inside
|
// BlockFilterCriteria encapsulates criteria passed to a `logs` accessor inside
|
||||||
// a block.
|
// a block.
|
||||||
type BlockFilterCriteria struct {
|
type BlockFilterCriteria struct {
|
||||||
|
@ -71,8 +71,8 @@ const schema string = `
|
|||||||
transaction: Transaction!
|
transaction: Transaction!
|
||||||
}
|
}
|
||||||
|
|
||||||
#EIP-2718
|
# EIP-2718
|
||||||
type AccessTuple{
|
type AccessTuple {
|
||||||
address: Address!
|
address: Address!
|
||||||
storageKeys : [Bytes32!]!
|
storageKeys : [Bytes32!]!
|
||||||
}
|
}
|
||||||
@ -112,6 +112,8 @@ const schema string = `
|
|||||||
maxFeePerGas: BigInt
|
maxFeePerGas: BigInt
|
||||||
# MaxPriorityFeePerGas is the maximum miner tip per gas offered to include a transaction, in wei.
|
# MaxPriorityFeePerGas is the maximum miner tip per gas offered to include a transaction, in wei.
|
||||||
maxPriorityFeePerGas: BigInt
|
maxPriorityFeePerGas: BigInt
|
||||||
|
# MaxFeePerBlobGas is the maximum blob gas fee cap per blob the sender is willing to pay for blob transaction, in wei.
|
||||||
|
maxFeePerBlobGas: BigInt
|
||||||
# EffectiveTip is the actual amount of reward going to miner after considering the max fee cap.
|
# EffectiveTip is the actual amount of reward going to miner after considering the max fee cap.
|
||||||
effectiveTip: BigInt
|
effectiveTip: BigInt
|
||||||
# Gas is the maximum amount of gas this transaction can consume.
|
# Gas is the maximum amount of gas this transaction can consume.
|
||||||
@ -141,6 +143,10 @@ const schema string = `
|
|||||||
# coerced into the EIP-1559 format by setting both maxFeePerGas and
|
# coerced into the EIP-1559 format by setting both maxFeePerGas and
|
||||||
# maxPriorityFeePerGas as the transaction's gas price.
|
# maxPriorityFeePerGas as the transaction's gas price.
|
||||||
effectiveGasPrice: BigInt
|
effectiveGasPrice: BigInt
|
||||||
|
# BlobGasUsed is the amount of blob gas used by this transaction.
|
||||||
|
blobGasUsed: Long
|
||||||
|
# blobGasPrice is the actual value per blob gas deducted from the senders account.
|
||||||
|
blobGasPrice: BigInt
|
||||||
# CreatedContract is the account that was created by a contract creation
|
# CreatedContract is the account that was created by a contract creation
|
||||||
# transaction. If the transaction was not a contract creation transaction,
|
# transaction. If the transaction was not a contract creation transaction,
|
||||||
# or it has not yet been mined, this field will be null.
|
# or it has not yet been mined, this field will be null.
|
||||||
@ -162,6 +168,8 @@ const schema string = `
|
|||||||
# RawReceipt is the canonical encoding of the receipt. For post EIP-2718 typed transactions
|
# 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!
|
||||||
|
# BlobVersionedHashes is a set of hash outputs from the blobs in the transaction.
|
||||||
|
blobVersionedHashes: [Bytes32!]
|
||||||
}
|
}
|
||||||
|
|
||||||
# BlockFilterCriteria encapsulates log filter criteria for a filter applied
|
# BlockFilterCriteria encapsulates log filter criteria for a filter applied
|
||||||
@ -171,16 +179,16 @@ const schema string = `
|
|||||||
# empty, results will not be filtered by address.
|
# empty, results will not be filtered by address.
|
||||||
addresses: [Address!]
|
addresses: [Address!]
|
||||||
# Topics list restricts matches to particular event topics. Each event has a list
|
# Topics list restricts matches to particular event topics. Each event has a list
|
||||||
# of topics. Topics matches a prefix of that list. An empty element array matches any
|
# of topics. Topics matches a prefix of that list. An empty element array matches any
|
||||||
# topic. Non-empty elements represent an alternative that matches any of the
|
# topic. Non-empty elements represent an alternative that matches any of the
|
||||||
# contained topics.
|
# contained topics.
|
||||||
#
|
#
|
||||||
# Examples:
|
# Examples:
|
||||||
# - [] or nil matches any topic list
|
# - [] or nil matches any topic list
|
||||||
# - [[A]] matches topic A in first position
|
# - [[A]] matches topic A in first position
|
||||||
# - [[], [B]] matches any topic in first position, B in second position
|
# - [[], [B]] matches any topic in first position, B in second position
|
||||||
# - [[A], [B]] matches topic A in first position, B in second position
|
# - [[A], [B]] matches topic A in first position, B in second position
|
||||||
# - [[A, B]], [C, D]] matches topic (A OR B) in first position, (C OR D) in second position
|
# - [[A, B]], [C, D]] matches topic (A OR B) in first position, (C OR D) in second position
|
||||||
topics: [[Bytes32!]!]
|
topics: [[Bytes32!]!]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,6 +275,10 @@ const schema string = `
|
|||||||
# Withdrawals is a list of withdrawals associated with this block. If
|
# Withdrawals is a list of withdrawals associated with this block. If
|
||||||
# withdrawals are unavailable for this block, this field will be null.
|
# withdrawals are unavailable for this block, this field will be null.
|
||||||
withdrawals: [Withdrawal!]
|
withdrawals: [Withdrawal!]
|
||||||
|
# BlobGasUsed is the total amount of gas used by the transactions.
|
||||||
|
blobGasUsed: Long
|
||||||
|
# ExcessBlobGas is a running total of blob gas consumed in excess of the target, prior to the block.
|
||||||
|
excessBlobGas: Long
|
||||||
}
|
}
|
||||||
|
|
||||||
# CallData represents the data associated with a local contract call.
|
# CallData represents the data associated with a local contract call.
|
||||||
@ -312,21 +324,21 @@ const schema string = `
|
|||||||
# empty, results will not be filtered by address.
|
# empty, results will not be filtered by address.
|
||||||
addresses: [Address!]
|
addresses: [Address!]
|
||||||
# Topics list restricts matches to particular event topics. Each event has a list
|
# Topics list restricts matches to particular event topics. Each event has a list
|
||||||
# of topics. Topics matches a prefix of that list. An empty element array matches any
|
# of topics. Topics matches a prefix of that list. An empty element array matches any
|
||||||
# topic. Non-empty elements represent an alternative that matches any of the
|
# topic. Non-empty elements represent an alternative that matches any of the
|
||||||
# contained topics.
|
# contained topics.
|
||||||
#
|
#
|
||||||
# Examples:
|
# Examples:
|
||||||
# - [] or nil matches any topic list
|
# - [] or nil matches any topic list
|
||||||
# - [[A]] matches topic A in first position
|
# - [[A]] matches topic A in first position
|
||||||
# - [[], [B]] matches any topic in first position, B in second position
|
# - [[], [B]] matches any topic in first position, B in second position
|
||||||
# - [[A], [B]] matches topic A in first position, B in second position
|
# - [[A], [B]] matches topic A in first position, B in second position
|
||||||
# - [[A, B]], [C, D]] matches topic (A OR B) in first position, (C OR D) in second position
|
# - [[A, B]], [C, D]] matches topic (A OR B) in first position, (C OR D) in second position
|
||||||
topics: [[Bytes32!]!]
|
topics: [[Bytes32!]!]
|
||||||
}
|
}
|
||||||
|
|
||||||
# SyncState contains the current synchronisation state of the client.
|
# SyncState contains the current synchronisation state of the client.
|
||||||
type SyncState{
|
type SyncState {
|
||||||
# StartingBlock is the block number at which synchronisation started.
|
# StartingBlock is the block number at which synchronisation started.
|
||||||
startingBlock: Long!
|
startingBlock: Long!
|
||||||
# CurrentBlock is the point at which synchronisation has presently reached.
|
# CurrentBlock is the point at which synchronisation has presently reached.
|
||||||
@ -337,17 +349,17 @@ const schema string = `
|
|||||||
|
|
||||||
# Pending represents the current pending state.
|
# Pending represents the current pending state.
|
||||||
type Pending {
|
type Pending {
|
||||||
# TransactionCount is the number of transactions in the pending state.
|
# TransactionCount is the number of transactions in the pending state.
|
||||||
transactionCount: Long!
|
transactionCount: Long!
|
||||||
# Transactions is a list of transactions in the current pending state.
|
# Transactions is a list of transactions in the current pending state.
|
||||||
transactions: [Transaction!]
|
transactions: [Transaction!]
|
||||||
# Account fetches an Ethereum account for the pending state.
|
# Account fetches an Ethereum account for the pending state.
|
||||||
account(address: Address!): Account!
|
account(address: Address!): Account!
|
||||||
# Call executes a local call operation for the pending state.
|
# Call executes a local call operation for the pending state.
|
||||||
call(data: CallData!): CallResult
|
call(data: CallData!): CallResult
|
||||||
# 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 for the pending state.
|
# successful execution of a transaction for the pending state.
|
||||||
estimateGas(data: CallData!): Long!
|
estimateGas(data: CallData!): Long!
|
||||||
}
|
}
|
||||||
|
|
||||||
type Query {
|
type Query {
|
||||||
|
Loading…
Reference in New Issue
Block a user