Merge pull request #214 from XinFinOrg/devnet-update-query

Devnet Update Query
This commit is contained in:
ben~know nothing 2023-02-03 21:43:40 -05:00 committed by GitHub
commit bd46a94e74
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 9 deletions

View file

@ -56,8 +56,9 @@ import (
// EthApiBackend implements ethapi.Backend for full nodes // EthApiBackend implements ethapi.Backend for full nodes
type EthApiBackend struct { type EthApiBackend struct {
eth *Ethereum eth *Ethereum
gpo *gasprice.Oracle gpo *gasprice.Oracle
XDPoS *XDPoS.XDPoS
} }
func (b *EthApiBackend) ChainConfig() *params.ChainConfig { func (b *EthApiBackend) ChainConfig() *params.ChainConfig {
@ -81,6 +82,22 @@ func (b *EthApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNum
// Otherwise resolve and return the block // Otherwise resolve and return the block
if blockNr == rpc.LatestBlockNumber { if blockNr == rpc.LatestBlockNumber {
return b.eth.blockchain.CurrentBlock().Header(), nil return b.eth.blockchain.CurrentBlock().Header(), nil
} else if blockNr == rpc.ConfirmedBlockNumber {
if b.eth.chainConfig.XDPoS == nil {
return nil, errors.New("PoW does not support confirmed block lookup")
}
current := b.eth.blockchain.CurrentBlock().Header()
if b.eth.blockchain.Config().XDPoS.BlockConsensusVersion(
current.Number,
current.Extra,
XDPoS.ExtraFieldCheck,
) == params.ConsensusEngineVersion2 {
// TO CHECK: why calling config in XDPoS is blocked (not field and method)
confirmedHash := b.XDPoS.EngineV2.GetLatestCommittedBlockInfo().Hash
return b.eth.blockchain.GetHeaderByHash(confirmedHash), nil
} else {
return nil, errors.New("PoS V1 does not support confirmed block lookup")
}
} }
return b.eth.blockchain.GetHeaderByNumber(uint64(blockNr)), nil return b.eth.blockchain.GetHeaderByNumber(uint64(blockNr)), nil
} }
@ -93,6 +110,22 @@ func (b *EthApiBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumb
// Otherwise resolve and return the block // Otherwise resolve and return the block
if blockNr == rpc.LatestBlockNumber { if blockNr == rpc.LatestBlockNumber {
return b.eth.blockchain.CurrentBlock(), nil return b.eth.blockchain.CurrentBlock(), nil
} else if blockNr == rpc.ConfirmedBlockNumber {
if b.eth.chainConfig.XDPoS == nil {
return nil, errors.New("PoW does not support confirmed block lookup")
}
current := b.eth.blockchain.CurrentBlock().Header()
if b.eth.blockchain.Config().XDPoS.BlockConsensusVersion(
current.Number,
current.Extra,
XDPoS.ExtraFieldCheck,
) == params.ConsensusEngineVersion2 {
// TO CHECK: why calling config in XDPoS is blocked (not field and method)
confirmedHash := b.XDPoS.EngineV2.GetLatestCommittedBlockInfo().Hash
return b.eth.blockchain.GetBlockByHash(confirmedHash), nil
} else {
return nil, errors.New("PoS V1 does not support confirmed block lookup")
}
} }
return b.eth.blockchain.GetBlockByNumber(uint64(blockNr)), nil return b.eth.blockchain.GetBlockByNumber(uint64(blockNr)), nil
} }

View file

@ -216,7 +216,11 @@ func New(ctx *node.ServiceContext, config *Config, XDCXServ *XDCx.XDCX, lendingS
eth.miner = miner.New(eth, eth.chainConfig, eth.EventMux(), eth.engine, ctx.GetConfig().AnnounceTxs) eth.miner = miner.New(eth, eth.chainConfig, eth.EventMux(), eth.engine, ctx.GetConfig().AnnounceTxs)
eth.miner.SetExtra(makeExtraData(config.ExtraData)) eth.miner.SetExtra(makeExtraData(config.ExtraData))
eth.ApiBackend = &EthApiBackend{eth, nil} if eth.chainConfig.XDPoS != nil {
eth.ApiBackend = &EthApiBackend{eth, nil, eth.engine.(*XDPoS.XDPoS)}
} else {
eth.ApiBackend = &EthApiBackend{eth, nil, nil}
}
gpoParams := config.GPO gpoParams := config.GPO
if gpoParams.Default == nil { if gpoParams.Default == nil {
gpoParams.Default = config.GasPrice gpoParams.Default = config.GasPrice

View file

@ -179,7 +179,7 @@ func (pool *TxPool) checkMinedTxs(ctx context.Context, hash common.Hash, number
} }
// If some transactions have been mined, write the needed data to disk and update // If some transactions have been mined, write the needed data to disk and update
if list != nil { if list != nil {
// Retrieve all the receipts belonging to this block and write the loopup table // Retrieve all the receipts belonging to this block and write the lookup table
if _, err := GetBlockReceipts(ctx, pool.odr, hash, number); err != nil { // ODR caches, ignore results if _, err := GetBlockReceipts(ctx, pool.odr, hash, number); err != nil { // ODR caches, ignore results
return err return err
} }

View file

@ -120,14 +120,15 @@ type BlockNumber int64
type EpochNumber int64 type EpochNumber int64
const ( const (
PendingBlockNumber = BlockNumber(-2) ConfirmedBlockNumber = BlockNumber(-3)
LatestBlockNumber = BlockNumber(-1) PendingBlockNumber = BlockNumber(-2)
EarliestBlockNumber = BlockNumber(0) LatestBlockNumber = BlockNumber(-1)
LatestEpochNumber = EpochNumber(-1) EarliestBlockNumber = BlockNumber(0)
LatestEpochNumber = EpochNumber(-1)
) )
// UnmarshalJSON parses the given JSON fragment into a BlockNumber. It supports: // UnmarshalJSON parses the given JSON fragment into a BlockNumber. It supports:
// - "latest", "earliest" or "pending" as string arguments // - "latest", "earliest", "pending" and "confirmed" as string arguments
// - the block number // - the block number
// Returned errors: // Returned errors:
// - an invalid block number error when the given argument isn't a known strings // - an invalid block number error when the given argument isn't a known strings
@ -144,6 +145,9 @@ func (bn *BlockNumber) UnmarshalJSON(data []byte) error {
case "pending": case "pending":
*bn = PendingBlockNumber *bn = PendingBlockNumber
return nil return nil
case "confirmed":
*bn = ConfirmedBlockNumber
return nil
} }
blckNum, err := hexutil.DecodeUint64(input) blckNum, err := hexutil.DecodeUint64(input)