mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
correctly handle finalized&safe block number (#605)
* better naming * update eth/api_backend.go * update eth/gasprice/feehistory.go
This commit is contained in:
parent
44fed24237
commit
35b8da75a0
3 changed files with 42 additions and 26 deletions
|
|
@ -1490,7 +1490,7 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func unmarshalBlockNumber(input string) (rpc.BlockNumber, error) {
|
func unmarshalL1BlockNumber(input string) (rpc.BlockNumber, error) {
|
||||||
switch input {
|
switch input {
|
||||||
case "finalized":
|
case "finalized":
|
||||||
return rpc.FinalizedBlockNumber, nil
|
return rpc.FinalizedBlockNumber, nil
|
||||||
|
|
@ -1514,7 +1514,7 @@ func setL1(ctx *cli.Context, cfg *node.Config) {
|
||||||
cfg.L1Endpoint = ctx.String(L1EndpointFlag.Name)
|
cfg.L1Endpoint = ctx.String(L1EndpointFlag.Name)
|
||||||
}
|
}
|
||||||
if ctx.IsSet(L1ConfirmationsFlag.Name) {
|
if ctx.IsSet(L1ConfirmationsFlag.Name) {
|
||||||
cfg.L1Confirmations, err = unmarshalBlockNumber(ctx.String(L1ConfirmationsFlag.Name))
|
cfg.L1Confirmations, err = unmarshalL1BlockNumber(ctx.String(L1ConfirmationsFlag.Name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Sprintf("invalid value for flag %s: %s", L1ConfirmationsFlag.Name, ctx.String(L1ConfirmationsFlag.Name)))
|
panic(fmt.Sprintf("invalid value for flag %s: %s", L1ConfirmationsFlag.Name, ctx.String(L1ConfirmationsFlag.Name)))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,19 +77,27 @@ func (b *EthAPIBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumb
|
||||||
if number == rpc.LatestBlockNumber {
|
if number == rpc.LatestBlockNumber {
|
||||||
return b.eth.blockchain.CurrentBlock(), nil
|
return b.eth.blockchain.CurrentBlock(), nil
|
||||||
}
|
}
|
||||||
|
// if number == rpc.FinalizedBlockNumber {
|
||||||
|
// block := b.eth.blockchain.CurrentFinalBlock()
|
||||||
|
// if block == nil {
|
||||||
|
// return nil, errors.New("finalized block not found")
|
||||||
|
// }
|
||||||
|
// return block, nil
|
||||||
|
// }
|
||||||
|
// if number == rpc.SafeBlockNumber {
|
||||||
|
// block := b.eth.blockchain.CurrentSafeBlock()
|
||||||
|
// if block == nil {
|
||||||
|
// return nil, errors.New("safe block not found")
|
||||||
|
// }
|
||||||
|
// return block, nil
|
||||||
|
// }
|
||||||
if number == rpc.FinalizedBlockNumber {
|
if number == rpc.FinalizedBlockNumber {
|
||||||
block := b.eth.blockchain.CurrentFinalBlock()
|
finalizedBlockHeightPtr := rawdb.ReadFinalizedL2BlockNumber(b.eth.ChainDb())
|
||||||
if block == nil {
|
if finalizedBlockHeightPtr == nil {
|
||||||
return nil, errors.New("finalized block not found")
|
return nil, errors.New("L2 finalized block height not found in database")
|
||||||
}
|
}
|
||||||
return block, nil
|
number = rpc.BlockNumber(*finalizedBlockHeightPtr)
|
||||||
}
|
return b.eth.blockchain.GetHeaderByNumber(uint64(number)), nil
|
||||||
if number == rpc.SafeBlockNumber {
|
|
||||||
block := b.eth.blockchain.CurrentSafeBlock()
|
|
||||||
if block == nil {
|
|
||||||
return nil, errors.New("safe block not found")
|
|
||||||
}
|
|
||||||
return block, nil
|
|
||||||
}
|
}
|
||||||
return b.eth.blockchain.GetHeaderByNumber(uint64(number)), nil
|
return b.eth.blockchain.GetHeaderByNumber(uint64(number)), nil
|
||||||
}
|
}
|
||||||
|
|
@ -129,19 +137,27 @@ func (b *EthAPIBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumbe
|
||||||
header := b.eth.blockchain.CurrentBlock()
|
header := b.eth.blockchain.CurrentBlock()
|
||||||
return b.eth.blockchain.GetBlock(header.Hash(), header.Number.Uint64()), nil
|
return b.eth.blockchain.GetBlock(header.Hash(), header.Number.Uint64()), nil
|
||||||
}
|
}
|
||||||
|
// if number == rpc.FinalizedBlockNumber {
|
||||||
|
// header := b.eth.blockchain.CurrentFinalBlock()
|
||||||
|
// if header == nil {
|
||||||
|
// return nil, errors.New("finalized block not found")
|
||||||
|
// }
|
||||||
|
// return b.eth.blockchain.GetBlock(header.Hash(), header.Number.Uint64()), nil
|
||||||
|
// }
|
||||||
|
// if number == rpc.SafeBlockNumber {
|
||||||
|
// header := b.eth.blockchain.CurrentSafeBlock()
|
||||||
|
// if header == nil {
|
||||||
|
// return nil, errors.New("safe block not found")
|
||||||
|
// }
|
||||||
|
// return b.eth.blockchain.GetBlock(header.Hash(), header.Number.Uint64()), nil
|
||||||
|
// }
|
||||||
if number == rpc.FinalizedBlockNumber {
|
if number == rpc.FinalizedBlockNumber {
|
||||||
header := b.eth.blockchain.CurrentFinalBlock()
|
finalizedBlockHeightPtr := rawdb.ReadFinalizedL2BlockNumber(b.eth.ChainDb())
|
||||||
if header == nil {
|
if finalizedBlockHeightPtr == nil {
|
||||||
return nil, errors.New("finalized block not found")
|
return nil, errors.New("L2 finalized block height not found in database")
|
||||||
}
|
}
|
||||||
return b.eth.blockchain.GetBlock(header.Hash(), header.Number.Uint64()), nil
|
number = rpc.BlockNumber(*finalizedBlockHeightPtr)
|
||||||
}
|
return b.eth.blockchain.GetBlockByNumber(uint64(number)), nil
|
||||||
if number == rpc.SafeBlockNumber {
|
|
||||||
header := b.eth.blockchain.CurrentSafeBlock()
|
|
||||||
if header == nil {
|
|
||||||
return nil, errors.New("safe block not found")
|
|
||||||
}
|
|
||||||
return b.eth.blockchain.GetBlock(header.Hash(), header.Number.Uint64()), nil
|
|
||||||
}
|
}
|
||||||
return b.eth.blockchain.GetBlockByNumber(uint64(number)), nil
|
return b.eth.blockchain.GetBlockByNumber(uint64(number)), nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -172,8 +172,8 @@ func (oracle *Oracle) resolveBlockRange(ctx context.Context, reqEnd rpc.BlockNum
|
||||||
case rpc.LatestBlockNumber:
|
case rpc.LatestBlockNumber:
|
||||||
// Retrieved above.
|
// Retrieved above.
|
||||||
resolved = headBlock
|
resolved = headBlock
|
||||||
case rpc.SafeBlockNumber:
|
// case rpc.SafeBlockNumber:
|
||||||
resolved, err = oracle.backend.HeaderByNumber(ctx, rpc.SafeBlockNumber)
|
// resolved, err = oracle.backend.HeaderByNumber(ctx, rpc.SafeBlockNumber)
|
||||||
case rpc.FinalizedBlockNumber:
|
case rpc.FinalizedBlockNumber:
|
||||||
resolved, err = oracle.backend.HeaderByNumber(ctx, rpc.FinalizedBlockNumber)
|
resolved, err = oracle.backend.HeaderByNumber(ctx, rpc.FinalizedBlockNumber)
|
||||||
case rpc.EarliestBlockNumber:
|
case rpc.EarliestBlockNumber:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue