mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-23 12:07:17 +00:00
add GasPrice for the DynamicFeeTransaction. (#2261)
This commit is contained in:
parent
17adaf5f87
commit
f4ef314e50
@ -3,6 +3,7 @@ package commands
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/holiman/uint256"
|
||||||
"math/big"
|
"math/big"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ func (api *BaseAPI) chainConfig(tx ethdb.Tx) (*params.ChainConfig, error) {
|
|||||||
return cfg, err
|
return cfg, err
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint:unused
|
// nolint:unused
|
||||||
func (api *BaseAPI) genesis(tx ethdb.Tx) (*types.Block, error) {
|
func (api *BaseAPI) genesis(tx ethdb.Tx) (*types.Block, error) {
|
||||||
_, genesis, err := api.chainConfigWithGenesis(tx)
|
_, genesis, err := api.chainConfigWithGenesis(tx)
|
||||||
return genesis, err
|
return genesis, err
|
||||||
@ -206,7 +207,7 @@ type RPCTransaction struct {
|
|||||||
|
|
||||||
// newRPCTransaction returns a transaction that will serialize to the RPC
|
// newRPCTransaction returns a transaction that will serialize to the RPC
|
||||||
// representation, with the given location metadata set (if available).
|
// representation, with the given location metadata set (if available).
|
||||||
func newRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber uint64, index uint64) *RPCTransaction {
|
func newRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber uint64, index uint64, baseFee *big.Int) *RPCTransaction {
|
||||||
// Determine the signer. For replay-protected transactions, use the most permissive
|
// Determine the signer. For replay-protected transactions, use the most permissive
|
||||||
// signer, because we assume that signers are backwards-compatible with old
|
// signer, because we assume that signers are backwards-compatible with old
|
||||||
// transactions. For non-protected transactions, the homestead signer signer is used
|
// transactions. For non-protected transactions, the homestead signer signer is used
|
||||||
@ -245,6 +246,14 @@ func newRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber
|
|||||||
result.R = (*hexutil.Big)(t.R.ToBig())
|
result.R = (*hexutil.Big)(t.R.ToBig())
|
||||||
result.S = (*hexutil.Big)(t.S.ToBig())
|
result.S = (*hexutil.Big)(t.S.ToBig())
|
||||||
result.Accesses = &t.AccessList
|
result.Accesses = &t.AccessList
|
||||||
|
baseFee, overflow := uint256.FromBig(baseFee)
|
||||||
|
if baseFee != nil && !overflow && blockHash != (common.Hash{}) {
|
||||||
|
// price = min(tip + baseFee, gasFeeCap)
|
||||||
|
price := math.Min256(new(uint256.Int).Add(tx.GetTip(), baseFee), tx.GetFeeCap())
|
||||||
|
result.GasPrice = (*hexutil.Big)(price.ToBig())
|
||||||
|
} else {
|
||||||
|
result.GasPrice = nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
signer := types.LatestSignerForChainID(chainId)
|
signer := types.LatestSignerForChainID(chainId)
|
||||||
result.From, _ = tx.Sender(*signer)
|
result.From, _ = tx.Sender(*signer)
|
||||||
@ -258,7 +267,7 @@ func newRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber
|
|||||||
|
|
||||||
// newRPCPendingTransaction returns a pending transaction that will serialize to the RPC representation
|
// newRPCPendingTransaction returns a pending transaction that will serialize to the RPC representation
|
||||||
func newRPCPendingTransaction(tx types.Transaction) *RPCTransaction {
|
func newRPCPendingTransaction(tx types.Transaction) *RPCTransaction {
|
||||||
return newRPCTransaction(tx, common.Hash{}, 0, 0)
|
return newRPCTransaction(tx, common.Hash{}, 0, 0, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newRPCRawTransactionFromBlockIndex returns the bytes of a transaction given a block and a transaction index.
|
// newRPCRawTransactionFromBlockIndex returns the bytes of a transaction given a block and a transaction index.
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math/big"
|
||||||
|
|
||||||
"github.com/ledgerwatch/erigon/common"
|
"github.com/ledgerwatch/erigon/common"
|
||||||
"github.com/ledgerwatch/erigon/common/hexutil"
|
"github.com/ledgerwatch/erigon/common/hexutil"
|
||||||
@ -25,8 +26,23 @@ func (api *APIImpl) GetTransactionByHash(ctx context.Context, hash common.Hash)
|
|||||||
|
|
||||||
// https://infura.io/docs/ethereum/json-rpc/eth-getTransactionByHash
|
// https://infura.io/docs/ethereum/json-rpc/eth-getTransactionByHash
|
||||||
txn, blockHash, blockNumber, txIndex := rawdb.ReadTransaction(tx, hash)
|
txn, blockHash, blockNumber, txIndex := rawdb.ReadTransaction(tx, hash)
|
||||||
|
|
||||||
|
// Add GasPrice for the DynamicFeeTransaction
|
||||||
|
var baseFee *big.Int
|
||||||
|
chainConfig, err := api.chainConfig(tx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if chainConfig.IsLondon(blockNumber) && blockHash != (common.Hash{}) {
|
||||||
|
block, err := rawdb.ReadBlockByHash(tx, blockHash)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
baseFee = block.BaseFee()
|
||||||
|
}
|
||||||
|
|
||||||
if txn != nil {
|
if txn != nil {
|
||||||
return newRPCTransaction(txn, blockHash, blockNumber, txIndex), nil
|
return newRPCTransaction(txn, blockHash, blockNumber, txIndex, baseFee), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// No finalized transaction, try to retrieve it from the pool
|
// No finalized transaction, try to retrieve it from the pool
|
||||||
@ -95,7 +111,7 @@ func (api *APIImpl) GetTransactionByBlockHashAndIndex(ctx context.Context, block
|
|||||||
return nil, fmt.Errorf("txIndex (%d) out of range (nTxs: %d)", uint64(txIndex), uint64(len(txs)))
|
return nil, fmt.Errorf("txIndex (%d) out of range (nTxs: %d)", uint64(txIndex), uint64(len(txs)))
|
||||||
}
|
}
|
||||||
|
|
||||||
return newRPCTransaction(txs[txIndex], block.Hash(), block.NumberU64(), uint64(txIndex)), nil
|
return newRPCTransaction(txs[txIndex], block.Hash(), block.NumberU64(), uint64(txIndex), block.BaseFee()), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRawTransactionByBlockHashAndIndex returns the bytes of the transaction for the given block hash and index.
|
// GetRawTransactionByBlockHashAndIndex returns the bytes of the transaction for the given block hash and index.
|
||||||
@ -145,7 +161,7 @@ func (api *APIImpl) GetTransactionByBlockNumberAndIndex(ctx context.Context, blo
|
|||||||
return nil, fmt.Errorf("txIndex (%d) out of range (nTxs: %d)", uint64(txIndex), uint64(len(txs)))
|
return nil, fmt.Errorf("txIndex (%d) out of range (nTxs: %d)", uint64(txIndex), uint64(len(txs)))
|
||||||
}
|
}
|
||||||
|
|
||||||
return newRPCTransaction(txs[txIndex], block.Hash(), block.NumberU64(), uint64(txIndex)), nil
|
return newRPCTransaction(txs[txIndex], block.Hash(), block.NumberU64(), uint64(txIndex), block.BaseFee()), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRawTransactionByBlockNumberAndIndex returns the bytes of the transaction for the given block number and index.
|
// GetRawTransactionByBlockNumberAndIndex returns the bytes of the transaction for the given block number and index.
|
||||||
|
Loading…
Reference in New Issue
Block a user