mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-24 05:36:46 +00:00
params,internal: add eth_config
This commit is contained in:
parent
4726af0f83
commit
1d4b72d0e6
3 changed files with 91 additions and 0 deletions
|
|
@ -1153,6 +1153,34 @@ func (api *BlockChainAPI) CreateAccessList(ctx context.Context, args Transaction
|
|||
return result, nil
|
||||
}
|
||||
|
||||
type config struct {
|
||||
ActivationTime uint64 `json:"activationTime"`
|
||||
BlobSchedule *params.BlobConfig `json:"blobSchedule"`
|
||||
ChainId *hexutil.Big `json:"chainId"`
|
||||
Precompiles map[common.Address]string `json:"precompiles"`
|
||||
SystemContracts map[string]common.Address `json:"systemContracts"`
|
||||
}
|
||||
|
||||
// Config implements the EIP-7910 eth_config method.
|
||||
func (api *BlockChainAPI) Config(ctx context.Context) config {
|
||||
var (
|
||||
c = api.b.ChainConfig()
|
||||
h = api.b.CurrentBlock()
|
||||
rules = c.Rules(h.Number, true, h.Time)
|
||||
precompiles = make(map[common.Address]string)
|
||||
)
|
||||
for addr, c := range vm.ActivePrecompiledContracts(rules) {
|
||||
precompiles[addr] = c.Name()
|
||||
}
|
||||
return config{
|
||||
ActivationTime: c.NextForkTime(h.Time),
|
||||
BlobSchedule: c.BlobConfig(c.LatestFork(h.Time)),
|
||||
ChainId: (*hexutil.Big)(c.ChainID),
|
||||
Precompiles: precompiles,
|
||||
SystemContracts: c.ActiveSystemContracts(h.Time),
|
||||
}
|
||||
}
|
||||
|
||||
// AccessList creates an access list for the given transaction.
|
||||
// If the accesslist creation fails an error is returned.
|
||||
// If the transaction itself fails, an vmErr is returned.
|
||||
|
|
|
|||
|
|
@ -5490,6 +5490,10 @@ var properties = function () {
|
|||
new Property({
|
||||
name: 'protocolVersion',
|
||||
getter: 'eth_protocolVersion'
|
||||
}),
|
||||
new Property({
|
||||
name: 'config',
|
||||
getter: 'eth_config'
|
||||
})
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -985,6 +985,65 @@ func (c *ChainConfig) LatestFork(time uint64) forks.Fork {
|
|||
}
|
||||
}
|
||||
|
||||
// NextFork returns the next fork to activate or nil if the last defined fork is
|
||||
// active.
|
||||
func (c *ChainConfig) NextForkTime(time uint64) uint64 {
|
||||
// Assume last non-time-based fork has passed.
|
||||
london := c.LondonBlock
|
||||
next := newUint64(0)
|
||||
|
||||
switch {
|
||||
case c.IsOsaka(london, time):
|
||||
next = c.OsakaTime
|
||||
case c.IsPrague(london, time):
|
||||
next = c.OsakaTime
|
||||
case c.IsCancun(london, time):
|
||||
next = c.PragueTime
|
||||
case c.IsShanghai(london, time):
|
||||
next = c.CancunTime
|
||||
default:
|
||||
next = c.ShanghaiTime
|
||||
}
|
||||
if next == nil {
|
||||
return 0
|
||||
}
|
||||
return *next
|
||||
}
|
||||
|
||||
// BlobConfig returns the blob config associated with the provided fork.
|
||||
func (c *ChainConfig) BlobConfig(fork forks.Fork) *BlobConfig {
|
||||
switch fork {
|
||||
case forks.Osaka:
|
||||
return DefaultOsakaBlobConfig
|
||||
case forks.Prague:
|
||||
return DefaultPragueBlobConfig
|
||||
case forks.Cancun:
|
||||
return DefaultCancunBlobConfig
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// ActiveSystemContracts returns the currently active system contracts at the
|
||||
// given timestamp.
|
||||
func (c *ChainConfig) ActiveSystemContracts(time uint64) map[string]common.Address {
|
||||
fork := c.LatestFork(time)
|
||||
active := make(map[string]common.Address)
|
||||
if fork >= forks.Osaka {
|
||||
// no new system contracts
|
||||
}
|
||||
if fork >= forks.Prague {
|
||||
active["CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS"] = ConsolidationQueueAddress
|
||||
active["DEPOSIT_CONTRACT_ADDRESS"] = c.DepositContractAddress
|
||||
active["HISTORY_STORAGE_ADDRESS"] = HistoryStorageAddress
|
||||
active["WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS"] = WithdrawalQueueAddress
|
||||
}
|
||||
if fork >= forks.Cancun {
|
||||
active["BEACON_ROOTS_ADDRESS"] = BeaconRootsAddress
|
||||
}
|
||||
return active
|
||||
}
|
||||
|
||||
// Timestamp returns the timestamp associated with the fork or returns nil if
|
||||
// the fork isn't defined or isn't a time-based fork.
|
||||
func (c *ChainConfig) Timestamp(fork forks.Fork) *uint64 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue