mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-26 22:56:43 +00:00
Merge pull request #1062 from maticnetwork/v1.1.0-beta-candidate
Merge v1.1.0 changes to master
This commit is contained in:
commit
c66862aa09
58 changed files with 2903 additions and 2567 deletions
File diff suppressed because one or more lines are too long
|
|
@ -157,7 +157,7 @@ func Transaction(ctx *cli.Context) error {
|
||||||
}
|
}
|
||||||
// Check intrinsic gas
|
// Check intrinsic gas
|
||||||
if gas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil,
|
if gas, err := core.IntrinsicGas(tx.Data(), tx.AccessList(), tx.To() == nil,
|
||||||
chainConfig.IsHomestead(new(big.Int)), chainConfig.IsIstanbul(new(big.Int)), chainConfig.IsShanghai(0)); err != nil {
|
chainConfig.IsHomestead(new(big.Int)), chainConfig.IsIstanbul(new(big.Int)), chainConfig.IsShanghai(new(big.Int))); err != nil {
|
||||||
r.Error = err
|
r.Error = err
|
||||||
results = append(results, r)
|
results = append(results, r)
|
||||||
|
|
||||||
|
|
@ -190,9 +190,8 @@ func Transaction(ctx *cli.Context) error {
|
||||||
case new(big.Int).Mul(tx.GasFeeCap(), new(big.Int).SetUint64(tx.Gas())).BitLen() > 256:
|
case new(big.Int).Mul(tx.GasFeeCap(), new(big.Int).SetUint64(tx.Gas())).BitLen() > 256:
|
||||||
r.Error = errors.New("gas * maxFeePerGas exceeds 256 bits")
|
r.Error = errors.New("gas * maxFeePerGas exceeds 256 bits")
|
||||||
}
|
}
|
||||||
// TODO marcello double check
|
|
||||||
// Check whether the init code size has been exceeded.
|
// Check whether the init code size has been exceeded.
|
||||||
if chainConfig.IsShanghai(0) && tx.To() == nil && len(tx.Data()) > params.MaxInitCodeSize {
|
if chainConfig.IsShanghai(new(big.Int)) && tx.To() == nil && len(tx.Data()) > params.MaxInitCodeSize {
|
||||||
r.Error = errors.New("max initcode size exceeded")
|
r.Error = errors.New("max initcode size exceeded")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -285,8 +285,8 @@ func Transition(ctx *cli.Context) error {
|
||||||
return NewError(ErrorConfig, errors.New("EIP-1559 config but missing 'currentBaseFee' in env section"))
|
return NewError(ErrorConfig, errors.New("EIP-1559 config but missing 'currentBaseFee' in env section"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO marcello double check
|
|
||||||
if chainConfig.IsShanghai(prestate.Env.Number) && prestate.Env.Withdrawals == nil {
|
if chainConfig.IsShanghai(big.NewInt(int64(prestate.Env.Number))) && prestate.Env.Withdrawals == nil {
|
||||||
return NewError(ErrorConfig, errors.New("Shanghai config but missing 'withdrawals' in env section"))
|
return NewError(ErrorConfig, errors.New("Shanghai config but missing 'withdrawals' in env section"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -238,7 +238,6 @@ func TestT8n(t *testing.T) {
|
||||||
output: t8nOutput{result: true},
|
output: t8nOutput{result: true},
|
||||||
expOut: "exp.json",
|
expOut: "exp.json",
|
||||||
},
|
},
|
||||||
// TODO marcello double check
|
|
||||||
{ // Test post-merge transition
|
{ // Test post-merge transition
|
||||||
base: "./testdata/24",
|
base: "./testdata/24",
|
||||||
input: t8nInput{
|
input: t8nInput{
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math/big"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -147,10 +148,9 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) {
|
||||||
// makeFullNode loads geth configuration and creates the Ethereum backend.
|
// makeFullNode loads geth configuration and creates the Ethereum backend.
|
||||||
func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) {
|
func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) {
|
||||||
stack, cfg := makeConfigNode(ctx)
|
stack, cfg := makeConfigNode(ctx)
|
||||||
// TODO marcello double check
|
|
||||||
if ctx.IsSet(utils.OverrideShanghai.Name) {
|
if ctx.IsSet(utils.OverrideShanghai.Name) {
|
||||||
v := ctx.Uint64(utils.OverrideShanghai.Name)
|
v := ctx.Int64(utils.OverrideShanghai.Name)
|
||||||
cfg.Eth.OverrideShanghai = &v
|
cfg.Eth.OverrideShanghai = new(big.Int).SetInt64(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
backend, eth := utils.RegisterEthService(stack, &cfg.Eth)
|
backend, eth := utils.RegisterEthService(stack, &cfg.Eth)
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,6 @@ var (
|
||||||
utils.NoUSBFlag,
|
utils.NoUSBFlag,
|
||||||
utils.USBFlag,
|
utils.USBFlag,
|
||||||
utils.SmartCardDaemonPathFlag,
|
utils.SmartCardDaemonPathFlag,
|
||||||
// TODO marcello double check
|
|
||||||
utils.OverrideShanghai,
|
utils.OverrideShanghai,
|
||||||
utils.EnablePersonal,
|
utils.EnablePersonal,
|
||||||
utils.EthashCacheDirFlag,
|
utils.EthashCacheDirFlag,
|
||||||
|
|
|
||||||
|
|
@ -283,8 +283,7 @@ func (beacon *Beacon) verifyHeader(chain consensus.ChainHeaderReader, header, pa
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Verify existence / non-existence of withdrawalsHash.
|
// Verify existence / non-existence of withdrawalsHash.
|
||||||
// TODO marcello double check
|
shanghai := chain.Config().IsShanghai(header.Number)
|
||||||
shanghai := chain.Config().IsShanghai(header.Time)
|
|
||||||
if shanghai && header.WithdrawalsHash == nil {
|
if shanghai && header.WithdrawalsHash == nil {
|
||||||
return errors.New("missing withdrawalsHash")
|
return errors.New("missing withdrawalsHash")
|
||||||
}
|
}
|
||||||
|
|
@ -293,7 +292,7 @@ func (beacon *Beacon) verifyHeader(chain consensus.ChainHeaderReader, header, pa
|
||||||
return fmt.Errorf("invalid withdrawalsHash: have %x, expected nil", header.WithdrawalsHash)
|
return fmt.Errorf("invalid withdrawalsHash: have %x, expected nil", header.WithdrawalsHash)
|
||||||
}
|
}
|
||||||
// Verify the existence / non-existence of excessDataGas
|
// Verify the existence / non-existence of excessDataGas
|
||||||
cancun := chain.Config().IsCancun(header.Time)
|
cancun := chain.Config().IsCancun(header.Number)
|
||||||
if cancun && header.ExcessDataGas == nil {
|
if cancun && header.ExcessDataGas == nil {
|
||||||
return errors.New("missing excessDataGas")
|
return errors.New("missing excessDataGas")
|
||||||
}
|
}
|
||||||
|
|
@ -391,8 +390,8 @@ func (beacon *Beacon) FinalizeAndAssemble(ctx context.Context, chain consensus.C
|
||||||
if !beacon.IsPoSHeader(header) {
|
if !beacon.IsPoSHeader(header) {
|
||||||
return beacon.ethone.FinalizeAndAssemble(ctx, chain, header, state, txs, uncles, receipts, nil)
|
return beacon.ethone.FinalizeAndAssemble(ctx, chain, header, state, txs, uncles, receipts, nil)
|
||||||
}
|
}
|
||||||
// TODO marcello double check
|
|
||||||
shanghai := chain.Config().IsShanghai(header.Time)
|
shanghai := chain.Config().IsShanghai(header.Number)
|
||||||
if shanghai {
|
if shanghai {
|
||||||
// All blocks after Shanghai must include a withdrawals root.
|
// All blocks after Shanghai must include a withdrawals root.
|
||||||
if withdrawals == nil {
|
if withdrawals == nil {
|
||||||
|
|
|
||||||
|
|
@ -381,11 +381,14 @@ func (c *Bor) verifyHeader(chain consensus.ChainHeaderReader, header *types.Head
|
||||||
|
|
||||||
// Verify that the gas limit is <= 2^63-1
|
// Verify that the gas limit is <= 2^63-1
|
||||||
gasCap := uint64(0x7fffffffffffffff)
|
gasCap := uint64(0x7fffffffffffffff)
|
||||||
|
|
||||||
if header.GasLimit > gasCap {
|
if header.GasLimit > gasCap {
|
||||||
return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, gasCap)
|
return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, gasCap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if header.WithdrawalsHash != nil {
|
||||||
|
return consensus.ErrUnexpectedWithdrawals
|
||||||
|
}
|
||||||
|
|
||||||
// All basic checks passed, verify cascading fields
|
// All basic checks passed, verify cascading fields
|
||||||
return c.verifyCascadingFields(chain, header, parents)
|
return c.verifyCascadingFields(chain, header, parents)
|
||||||
}
|
}
|
||||||
|
|
@ -816,6 +819,10 @@ func (c *Bor) Finalize(chain consensus.ChainHeaderReader, header *types.Header,
|
||||||
|
|
||||||
headerNumber := header.Number.Uint64()
|
headerNumber := header.Number.Uint64()
|
||||||
|
|
||||||
|
if withdrawals != nil || header.WithdrawalsHash != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if IsSprintStart(headerNumber, c.config.CalculateSprint(headerNumber)) {
|
if IsSprintStart(headerNumber, c.config.CalculateSprint(headerNumber)) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
cx := statefull.ChainContext{Chain: chain, Bor: c}
|
cx := statefull.ChainContext{Chain: chain, Bor: c}
|
||||||
|
|
@ -888,10 +895,14 @@ func (c *Bor) FinalizeAndAssemble(ctx context.Context, chain consensus.ChainHead
|
||||||
finalizeCtx, finalizeSpan := tracing.StartSpan(ctx, "bor.FinalizeAndAssemble")
|
finalizeCtx, finalizeSpan := tracing.StartSpan(ctx, "bor.FinalizeAndAssemble")
|
||||||
defer tracing.EndSpan(finalizeSpan)
|
defer tracing.EndSpan(finalizeSpan)
|
||||||
|
|
||||||
stateSyncData := []*types.StateSyncData{}
|
|
||||||
|
|
||||||
headerNumber := header.Number.Uint64()
|
headerNumber := header.Number.Uint64()
|
||||||
|
|
||||||
|
if withdrawals != nil || header.WithdrawalsHash != nil {
|
||||||
|
return nil, consensus.ErrUnexpectedWithdrawals
|
||||||
|
}
|
||||||
|
|
||||||
|
stateSyncData := []*types.StateSyncData{}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if IsSprintStart(headerNumber, c.config.CalculateSprint(headerNumber)) {
|
if IsSprintStart(headerNumber, c.config.CalculateSprint(headerNumber)) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package statefull
|
package statefull
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"math"
|
"math"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
@ -90,7 +91,11 @@ func ApplyMessage(
|
||||||
|
|
||||||
success := big.NewInt(5).SetBytes(ret)
|
success := big.NewInt(5).SetBytes(ret)
|
||||||
|
|
||||||
if success.Cmp(big.NewInt(0)) == 0 {
|
validatorContract := common.HexToAddress(chainConfig.Bor.ValidatorContract)
|
||||||
|
|
||||||
|
// if success == 0 and msg.To() != validatorContractAddress, log Error
|
||||||
|
// if msg.To() == validatorContractAddress, its committing a span and we don't get any return value
|
||||||
|
if success.Cmp(big.NewInt(0)) == 0 && !bytes.Equal(msg.To().Bytes(), validatorContract.Bytes()) {
|
||||||
log.Error("message execution failed on contract", "msgData", msg.Data)
|
log.Error("message execution failed on contract", "msgData", msg.Data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -308,12 +308,12 @@ func (c *Clique) verifyHeader(chain consensus.ChainHeaderReader, header *types.H
|
||||||
if header.GasLimit > params.MaxGasLimit {
|
if header.GasLimit > params.MaxGasLimit {
|
||||||
return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, params.MaxGasLimit)
|
return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, params.MaxGasLimit)
|
||||||
}
|
}
|
||||||
// TODO marcello double check
|
|
||||||
if chain.Config().IsShanghai(header.Time) {
|
if chain.Config().IsShanghai(header.Number) {
|
||||||
return fmt.Errorf("clique does not support shanghai fork")
|
return fmt.Errorf("clique does not support shanghai fork")
|
||||||
}
|
}
|
||||||
|
|
||||||
if chain.Config().IsCancun(header.Time) {
|
if chain.Config().IsCancun(header.Number) {
|
||||||
return fmt.Errorf("clique does not support cancun fork")
|
return fmt.Errorf("clique does not support cancun fork")
|
||||||
}
|
}
|
||||||
// All basic checks passed, verify cascading fields
|
// All basic checks passed, verify cascading fields
|
||||||
|
|
|
||||||
|
|
@ -38,4 +38,7 @@ var (
|
||||||
// ErrInvalidTerminalBlock is returned if a block is invalid wrt. the terminal
|
// ErrInvalidTerminalBlock is returned if a block is invalid wrt. the terminal
|
||||||
// total difficulty.
|
// total difficulty.
|
||||||
ErrInvalidTerminalBlock = errors.New("invalid terminal block")
|
ErrInvalidTerminalBlock = errors.New("invalid terminal block")
|
||||||
|
|
||||||
|
// ErrUnexpectedWithdrawals is returned if a pre-Shanghai block has withdrawals.
|
||||||
|
ErrUnexpectedWithdrawals = errors.New("unexpected withdrawals")
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -333,12 +333,12 @@ func (ethash *Ethash) verifyHeader(chain consensus.ChainHeaderReader, header, pa
|
||||||
if diff := new(big.Int).Sub(header.Number, parent.Number); diff.Cmp(big.NewInt(1)) != 0 {
|
if diff := new(big.Int).Sub(header.Number, parent.Number); diff.Cmp(big.NewInt(1)) != 0 {
|
||||||
return consensus.ErrInvalidNumber
|
return consensus.ErrInvalidNumber
|
||||||
}
|
}
|
||||||
// TODO marcello double check
|
|
||||||
if chain.Config().IsShanghai(header.Time) {
|
if chain.Config().IsShanghai(header.Number) {
|
||||||
return fmt.Errorf("ethash does not support shanghai fork")
|
return fmt.Errorf("ethash does not support shanghai fork")
|
||||||
}
|
}
|
||||||
|
|
||||||
if chain.Config().IsCancun(header.Time) {
|
if chain.Config().IsCancun(header.Number) {
|
||||||
return fmt.Errorf("ethash does not support cancun fork")
|
return fmt.Errorf("ethash does not support cancun fork")
|
||||||
}
|
}
|
||||||
// Verify the engine specific seal securing the block
|
// Verify the engine specific seal securing the block
|
||||||
|
|
|
||||||
|
|
@ -4688,7 +4688,7 @@ func TestEIP3651(t *testing.T) {
|
||||||
gspec.Config.LondonBlock = common.Big0
|
gspec.Config.LondonBlock = common.Big0
|
||||||
gspec.Config.TerminalTotalDifficulty = common.Big0
|
gspec.Config.TerminalTotalDifficulty = common.Big0
|
||||||
gspec.Config.TerminalTotalDifficultyPassed = true
|
gspec.Config.TerminalTotalDifficultyPassed = true
|
||||||
gspec.Config.ShanghaiTime = u64(0)
|
gspec.Config.ShanghaiBlock = common.Big0
|
||||||
signer := types.LatestSigner(gspec.Config)
|
signer := types.LatestSigner(gspec.Config)
|
||||||
|
|
||||||
_, blocks, _ := GenerateChainWithGenesis(gspec, engine, 1, func(i int, b *BlockGen) {
|
_, blocks, _ := GenerateChainWithGenesis(gspec, engine, 1, func(i int, b *BlockGen) {
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ func TestGenerateWithdrawalChain(t *testing.T) {
|
||||||
|
|
||||||
config.TerminalTotalDifficultyPassed = true
|
config.TerminalTotalDifficultyPassed = true
|
||||||
config.TerminalTotalDifficulty = common.Big0
|
config.TerminalTotalDifficulty = common.Big0
|
||||||
config.ShanghaiTime = u64(0)
|
config.ShanghaiBlock = common.Big0
|
||||||
|
|
||||||
// init 0xaa with some storage elements
|
// init 0xaa with some storage elements
|
||||||
storage := make(map[common.Hash]common.Hash)
|
storage := make(map[common.Hash]common.Hash)
|
||||||
|
|
|
||||||
|
|
@ -45,34 +45,30 @@ func TestCreation(t *testing.T) {
|
||||||
params.MainnetChainConfig,
|
params.MainnetChainConfig,
|
||||||
params.MainnetGenesisHash,
|
params.MainnetGenesisHash,
|
||||||
[]testcase{
|
[]testcase{
|
||||||
{0, 0, ID{Hash: checksumToBytes(0xfc64ec04), Next: 1150000}}, // Unsynced
|
{0, 0, ID{Hash: checksumToBytes(0xfc64ec04), Next: 1150000}}, // Unsynced
|
||||||
{1149999, 0, ID{Hash: checksumToBytes(0xfc64ec04), Next: 1150000}}, // Last Frontier block
|
{1149999, 0, ID{Hash: checksumToBytes(0xfc64ec04), Next: 1150000}}, // Last Frontier block
|
||||||
{1150000, 0, ID{Hash: checksumToBytes(0x97c2c34c), Next: 1920000}}, // First Homestead block
|
{1150000, 0, ID{Hash: checksumToBytes(0x97c2c34c), Next: 1920000}}, // First Homestead block
|
||||||
{1919999, 0, ID{Hash: checksumToBytes(0x97c2c34c), Next: 1920000}}, // Last Homestead block
|
{1919999, 0, ID{Hash: checksumToBytes(0x97c2c34c), Next: 1920000}}, // Last Homestead block
|
||||||
{1920000, 0, ID{Hash: checksumToBytes(0x91d1f948), Next: 2463000}}, // First DAO block
|
{1920000, 0, ID{Hash: checksumToBytes(0x91d1f948), Next: 2463000}}, // First DAO block
|
||||||
{2462999, 0, ID{Hash: checksumToBytes(0x91d1f948), Next: 2463000}}, // Last DAO block
|
{2462999, 0, ID{Hash: checksumToBytes(0x91d1f948), Next: 2463000}}, // Last DAO block
|
||||||
{2463000, 0, ID{Hash: checksumToBytes(0x7a64da13), Next: 2675000}}, // First Tangerine block
|
{2463000, 0, ID{Hash: checksumToBytes(0x7a64da13), Next: 2675000}}, // First Tangerine block
|
||||||
{2674999, 0, ID{Hash: checksumToBytes(0x7a64da13), Next: 2675000}}, // Last Tangerine block
|
{2674999, 0, ID{Hash: checksumToBytes(0x7a64da13), Next: 2675000}}, // Last Tangerine block
|
||||||
{2675000, 0, ID{Hash: checksumToBytes(0x3edd5b10), Next: 4370000}}, // First Spurious block
|
{2675000, 0, ID{Hash: checksumToBytes(0x3edd5b10), Next: 4370000}}, // First Spurious block
|
||||||
{4369999, 0, ID{Hash: checksumToBytes(0x3edd5b10), Next: 4370000}}, // Last Spurious block
|
{4369999, 0, ID{Hash: checksumToBytes(0x3edd5b10), Next: 4370000}}, // Last Spurious block
|
||||||
{4370000, 0, ID{Hash: checksumToBytes(0xa00bc324), Next: 7280000}}, // First Byzantium block
|
{4370000, 0, ID{Hash: checksumToBytes(0xa00bc324), Next: 7280000}}, // First Byzantium block
|
||||||
{7279999, 0, ID{Hash: checksumToBytes(0xa00bc324), Next: 7280000}}, // Last Byzantium block
|
{7279999, 0, ID{Hash: checksumToBytes(0xa00bc324), Next: 7280000}}, // Last Byzantium block
|
||||||
{7280000, 0, ID{Hash: checksumToBytes(0x668db0af), Next: 9069000}}, // First and last Constantinople, first Petersburg block
|
{7280000, 0, ID{Hash: checksumToBytes(0x668db0af), Next: 9069000}}, // First and last Constantinople, first Petersburg block
|
||||||
{9068999, 0, ID{Hash: checksumToBytes(0x668db0af), Next: 9069000}}, // Last Petersburg block
|
{9068999, 0, ID{Hash: checksumToBytes(0x668db0af), Next: 9069000}}, // Last Petersburg block
|
||||||
{9069000, 0, ID{Hash: checksumToBytes(0x879d6e30), Next: 9200000}}, // First Istanbul and first Muir Glacier block
|
{9069000, 0, ID{Hash: checksumToBytes(0x879d6e30), Next: 9200000}}, // First Istanbul and first Muir Glacier block
|
||||||
{9199999, 0, ID{Hash: checksumToBytes(0x879d6e30), Next: 9200000}}, // Last Istanbul and first Muir Glacier block
|
{9199999, 0, ID{Hash: checksumToBytes(0x879d6e30), Next: 9200000}}, // Last Istanbul and first Muir Glacier block
|
||||||
{9200000, 0, ID{Hash: checksumToBytes(0xe029e991), Next: 12244000}}, // First Muir Glacier block
|
{9200000, 0, ID{Hash: checksumToBytes(0xe029e991), Next: 12244000}}, // First Muir Glacier block
|
||||||
{12243999, 0, ID{Hash: checksumToBytes(0xe029e991), Next: 12244000}}, // Last Muir Glacier block
|
{12243999, 0, ID{Hash: checksumToBytes(0xe029e991), Next: 12244000}}, // Last Muir Glacier block
|
||||||
{12244000, 0, ID{Hash: checksumToBytes(0x0eb440f6), Next: 12965000}}, // First Berlin block
|
{12244000, 0, ID{Hash: checksumToBytes(0x0eb440f6), Next: 12965000}}, // First Berlin block
|
||||||
{12964999, 0, ID{Hash: checksumToBytes(0x0eb440f6), Next: 12965000}}, // Last Berlin block
|
{12964999, 0, ID{Hash: checksumToBytes(0x0eb440f6), Next: 12965000}}, // Last Berlin block
|
||||||
{12965000, 0, ID{Hash: checksumToBytes(0xb715077d), Next: 13773000}}, // First London block
|
{12965000, 0, ID{Hash: checksumToBytes(0xb715077d), Next: 13773000}}, // First London block
|
||||||
{13772999, 0, ID{Hash: checksumToBytes(0xb715077d), Next: 13773000}}, // Last London block
|
{13772999, 0, ID{Hash: checksumToBytes(0xb715077d), Next: 13773000}}, // Last London block
|
||||||
{13773000, 0, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // First Arrow Glacier block
|
{13773000, 0, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // First Arrow Glacier block
|
||||||
{15049999, 0, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // Last Arrow Glacier block
|
{15049999, 0, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // Last Arrow Glacier block
|
||||||
{15050000, 0, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 1681338455}}, // First Gray Glacier block
|
|
||||||
{20000000, 1681338454, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 1681338455}}, // Last Gray Glacier block
|
|
||||||
{20000000, 1681338455, ID{Hash: checksumToBytes(0xdce96c2d), Next: 0}}, // First Shanghai block
|
|
||||||
{30000000, 2000000000, ID{Hash: checksumToBytes(0xdce96c2d), Next: 0}}, // Future Shanghai block
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// Goerli test cases
|
// Goerli test cases
|
||||||
|
|
@ -80,16 +76,12 @@ func TestCreation(t *testing.T) {
|
||||||
params.GoerliChainConfig,
|
params.GoerliChainConfig,
|
||||||
params.GoerliGenesisHash,
|
params.GoerliGenesisHash,
|
||||||
[]testcase{
|
[]testcase{
|
||||||
{0, 0, ID{Hash: checksumToBytes(0xa3f5ab08), Next: 1561651}}, // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople and first Petersburg block
|
{0, 0, ID{Hash: checksumToBytes(0xa3f5ab08), Next: 1561651}}, // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople and first Petersburg block
|
||||||
{1561650, 0, ID{Hash: checksumToBytes(0xa3f5ab08), Next: 1561651}}, // Last Petersburg block
|
{1561650, 0, ID{Hash: checksumToBytes(0xa3f5ab08), Next: 1561651}}, // Last Petersburg block
|
||||||
{1561651, 0, ID{Hash: checksumToBytes(0xc25efa5c), Next: 4460644}}, // First Istanbul block
|
{1561651, 0, ID{Hash: checksumToBytes(0xc25efa5c), Next: 4460644}}, // First Istanbul block
|
||||||
{4460643, 0, ID{Hash: checksumToBytes(0xc25efa5c), Next: 4460644}}, // Last Istanbul block
|
{4460643, 0, ID{Hash: checksumToBytes(0xc25efa5c), Next: 4460644}}, // Last Istanbul block
|
||||||
{4460644, 0, ID{Hash: checksumToBytes(0x757a1c47), Next: 5062605}}, // First Berlin block
|
{4460644, 0, ID{Hash: checksumToBytes(0x757a1c47), Next: 5062605}}, // First Berlin block
|
||||||
{5000000, 0, ID{Hash: checksumToBytes(0x757a1c47), Next: 5062605}}, // Last Berlin block
|
{5000000, 0, ID{Hash: checksumToBytes(0x757a1c47), Next: 5062605}}, // Last Berlin block
|
||||||
{5062605, 0, ID{Hash: checksumToBytes(0xB8C6299D), Next: 1678832736}}, // First London block
|
|
||||||
{6000000, 1678832735, ID{Hash: checksumToBytes(0xB8C6299D), Next: 1678832736}}, // Last London block
|
|
||||||
{6000001, 1678832736, ID{Hash: checksumToBytes(0xf9843abf), Next: 0}}, // First Shanghai block
|
|
||||||
{6500000, 2678832736, ID{Hash: checksumToBytes(0xf9843abf), Next: 0}}, // Future Shanghai block
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// Sepolia test cases
|
// Sepolia test cases
|
||||||
|
|
@ -97,11 +89,8 @@ func TestCreation(t *testing.T) {
|
||||||
params.SepoliaChainConfig,
|
params.SepoliaChainConfig,
|
||||||
params.SepoliaGenesisHash,
|
params.SepoliaGenesisHash,
|
||||||
[]testcase{
|
[]testcase{
|
||||||
{0, 0, ID{Hash: checksumToBytes(0xfe3366e7), Next: 1735371}}, // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople, Petersburg, Istanbul, Berlin and first London block
|
{0, 0, ID{Hash: checksumToBytes(0xfe3366e7), Next: 1735371}}, // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople, Petersburg, Istanbul, Berlin and first London block
|
||||||
{1735370, 0, ID{Hash: checksumToBytes(0xfe3366e7), Next: 1735371}}, // Last London block
|
{1735370, 0, ID{Hash: checksumToBytes(0xfe3366e7), Next: 1735371}}, // Last London block
|
||||||
{1735371, 0, ID{Hash: checksumToBytes(0xb96cbd13), Next: 1677557088}}, // First MergeNetsplit block
|
|
||||||
{1735372, 1677557087, ID{Hash: checksumToBytes(0xb96cbd13), Next: 1677557088}}, // Last MergeNetsplit block
|
|
||||||
{1735372, 1677557088, ID{Hash: checksumToBytes(0xf7f9bc08), Next: 0}}, // First Shanghai block
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -119,7 +108,7 @@ func TestCreation(t *testing.T) {
|
||||||
func TestValidation(t *testing.T) {
|
func TestValidation(t *testing.T) {
|
||||||
// Config that has not timestamp enabled
|
// Config that has not timestamp enabled
|
||||||
legacyConfig := *params.MainnetChainConfig
|
legacyConfig := *params.MainnetChainConfig
|
||||||
legacyConfig.ShanghaiTime = nil
|
legacyConfig.ShanghaiBlock = nil
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
config *params.ChainConfig
|
config *params.ChainConfig
|
||||||
|
|
@ -221,29 +210,14 @@ func TestValidation(t *testing.T) {
|
||||||
// neither forks passed at neither nodes, they may mismatch, but we still connect for now.
|
// neither forks passed at neither nodes, they may mismatch, but we still connect for now.
|
||||||
{params.MainnetChainConfig, 15050000, 0, ID{Hash: checksumToBytes(0xf0afd0e3), Next: math.MaxUint64}, nil},
|
{params.MainnetChainConfig, 15050000, 0, ID{Hash: checksumToBytes(0xf0afd0e3), Next: math.MaxUint64}, nil},
|
||||||
|
|
||||||
// Local is mainnet exactly on Shanghai, remote announces Gray Glacier + knowledge about Shanghai. Remote
|
|
||||||
// is simply out of sync, accept.
|
|
||||||
{params.MainnetChainConfig, 20000000, 1681338455, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 1681338455}, nil},
|
|
||||||
|
|
||||||
// Local is mainnet Shanghai, remote announces Gray Glacier + knowledge about Shanghai. Remote
|
|
||||||
// is simply out of sync, accept.
|
|
||||||
{params.MainnetChainConfig, 20123456, 1681338456, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 1681338455}, nil},
|
|
||||||
|
|
||||||
// Local is mainnet Shanghai, remote announces Arrow Glacier + knowledge about Gray Glacier. Remote
|
// Local is mainnet Shanghai, remote announces Arrow Glacier + knowledge about Gray Glacier. Remote
|
||||||
// is definitely out of sync. It may or may not need the Shanghai update, we don't know yet.
|
// is definitely out of sync. It may or may not need the Shanghai update, we don't know yet.
|
||||||
{params.MainnetChainConfig, 20000000, 1681338455, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}, nil},
|
{params.MainnetChainConfig, 20000000, 1681338455, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}, nil},
|
||||||
|
|
||||||
// Local is mainnet Gray Glacier, remote announces Shanghai. Local is out of sync, accept.
|
|
||||||
{params.MainnetChainConfig, 15050000, 0, ID{Hash: checksumToBytes(0xdce96c2d), Next: 0}, nil},
|
|
||||||
|
|
||||||
// Local is mainnet Arrow Glacier, remote announces Gray Glacier, but is not aware of Shanghai. Local
|
// Local is mainnet Arrow Glacier, remote announces Gray Glacier, but is not aware of Shanghai. Local
|
||||||
// out of sync. Local also knows about a future fork, but that is uncertain yet.
|
// out of sync. Local also knows about a future fork, but that is uncertain yet.
|
||||||
{params.MainnetChainConfig, 13773000, 0, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 0}, nil},
|
{params.MainnetChainConfig, 13773000, 0, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 0}, nil},
|
||||||
|
|
||||||
// Local is mainnet Shanghai. remote announces Gray Glacier but is not aware of further forks.
|
|
||||||
// Remote needs software update.
|
|
||||||
{params.MainnetChainConfig, 20000000, 1681338455, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 0}, ErrRemoteStale},
|
|
||||||
|
|
||||||
// Local is mainnet Gray Glacier, and isn't aware of more forks. Remote announces Gray Glacier +
|
// Local is mainnet Gray Glacier, and isn't aware of more forks. Remote announces Gray Glacier +
|
||||||
// 0xffffffff. Local needs software update, reject.
|
// 0xffffffff. Local needs software update, reject.
|
||||||
{params.MainnetChainConfig, 15050000, 0, ID{Hash: checksumToBytes(checksumUpdate(0xf0afd0e3, math.MaxUint64)), Next: 0}, ErrLocalIncompatibleOrStale},
|
{params.MainnetChainConfig, 15050000, 0, ID{Hash: checksumToBytes(checksumUpdate(0xf0afd0e3, math.MaxUint64)), Next: 0}, ErrLocalIncompatibleOrStale},
|
||||||
|
|
@ -266,13 +240,6 @@ func TestValidation(t *testing.T) {
|
||||||
// Timestamp based tests
|
// Timestamp based tests
|
||||||
//----------------------
|
//----------------------
|
||||||
|
|
||||||
// Local is mainnet Shanghai, remote announces the same. No future fork is announced.
|
|
||||||
{params.MainnetChainConfig, 20000000, 1681338455, ID{Hash: checksumToBytes(0xdce96c2d), Next: 0}, nil},
|
|
||||||
|
|
||||||
// Local is mainnet Shanghai, remote announces the same. Remote also announces a next fork
|
|
||||||
// at time 0xffffffff, but that is uncertain.
|
|
||||||
{params.MainnetChainConfig, 20000000, 1681338455, ID{Hash: checksumToBytes(0xdce96c2d), Next: math.MaxUint64}, nil},
|
|
||||||
|
|
||||||
// Local is mainnet currently in Shanghai only (so it's aware of Cancun), remote announces
|
// Local is mainnet currently in Shanghai only (so it's aware of Cancun), remote announces
|
||||||
// also Shanghai, but it's not yet aware of Cancun (e.g. non updated node before the fork).
|
// also Shanghai, but it's not yet aware of Cancun (e.g. non updated node before the fork).
|
||||||
// In this case we don't know if Cancun passed yet or not.
|
// In this case we don't know if Cancun passed yet or not.
|
||||||
|
|
|
||||||
|
|
@ -298,7 +298,7 @@ func (e *GenesisMismatchError) Error() string {
|
||||||
|
|
||||||
// ChainOverrides contains the changes to chain config.
|
// ChainOverrides contains the changes to chain config.
|
||||||
type ChainOverrides struct {
|
type ChainOverrides struct {
|
||||||
OverrideShanghai *uint64
|
OverrideShanghai *big.Int
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetupGenesisBlock writes or updates the genesis block in db.
|
// SetupGenesisBlock writes or updates the genesis block in db.
|
||||||
|
|
@ -326,9 +326,8 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *trie.Database, gen
|
||||||
|
|
||||||
applyOverrides := func(config *params.ChainConfig) {
|
applyOverrides := func(config *params.ChainConfig) {
|
||||||
if config != nil {
|
if config != nil {
|
||||||
// TODO marcello double check
|
|
||||||
if overrides != nil && overrides.OverrideShanghai != nil {
|
if overrides != nil && overrides.OverrideShanghai != nil {
|
||||||
config.ShanghaiTime = overrides.OverrideShanghai
|
config.ShanghaiBlock = overrides.OverrideShanghai
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -529,9 +528,9 @@ func (g *Genesis) ToBlock() *types.Block {
|
||||||
|
|
||||||
var withdrawals []*types.Withdrawal
|
var withdrawals []*types.Withdrawal
|
||||||
|
|
||||||
if g.Config != nil && g.Config.IsShanghai(g.Timestamp) {
|
if g.Config != nil && g.Config.IsShanghai(new(big.Int).SetUint64(g.Number)) {
|
||||||
head.WithdrawalsHash = &types.EmptyWithdrawalsHash
|
head.WithdrawalsHash = nil
|
||||||
withdrawals = make([]*types.Withdrawal, 0)
|
withdrawals = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return types.NewBlock(head, nil, nil, nil, trie.NewStackTrie(nil)).WithWithdrawals(withdrawals)
|
return types.NewBlock(head, nil, nil, nil, trie.NewStackTrie(nil)).WithWithdrawals(withdrawals)
|
||||||
|
|
|
||||||
|
|
@ -1595,7 +1595,6 @@ func (s *StateDB) Prepare(rules params.Rules, sender, coinbase common.Address, d
|
||||||
al.AddSlot(el.Address, key)
|
al.AddSlot(el.Address, key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO marcello double check
|
|
||||||
if rules.IsShanghai { // EIP-3651: warm coinbase
|
if rules.IsShanghai { // EIP-3651: warm coinbase
|
||||||
al.AddAddress(coinbase)
|
al.AddAddress(coinbase)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,10 +101,13 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
|
||||||
}
|
}
|
||||||
// Fail if Shanghai not enabled and len(withdrawals) is non-zero.
|
// Fail if Shanghai not enabled and len(withdrawals) is non-zero.
|
||||||
withdrawals := block.Withdrawals()
|
withdrawals := block.Withdrawals()
|
||||||
// TODO marcello double check
|
if !p.config.IsShanghai(block.Number()) && withdrawals != nil {
|
||||||
if len(withdrawals) > 0 && !p.config.IsShanghai(block.Time()) {
|
|
||||||
return nil, nil, 0, fmt.Errorf("withdrawals before shanghai")
|
return nil, nil, 0, fmt.Errorf("withdrawals before shanghai")
|
||||||
}
|
}
|
||||||
|
// Bor does not support withdrawals
|
||||||
|
if withdrawals != nil {
|
||||||
|
withdrawals = nil
|
||||||
|
}
|
||||||
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
|
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
|
||||||
p.engine.Finalize(p.bc, header, statedb, block.Transactions(), block.Uncles(), withdrawals)
|
p.engine.Finalize(p.bc, header, statedb, block.Transactions(), block.Uncles(), withdrawals)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -364,9 +364,8 @@ func TestStateProcessorErrors(t *testing.T) {
|
||||||
MergeNetsplitBlock: big.NewInt(0),
|
MergeNetsplitBlock: big.NewInt(0),
|
||||||
TerminalTotalDifficulty: big.NewInt(0),
|
TerminalTotalDifficulty: big.NewInt(0),
|
||||||
TerminalTotalDifficultyPassed: true,
|
TerminalTotalDifficultyPassed: true,
|
||||||
// TODO marcello double check
|
ShanghaiBlock: big.NewInt(0),
|
||||||
ShanghaiTime: u64(0),
|
Bor: ¶ms.BorConfig{BurntContract: map[string]string{"0": "0x000000000000000000000000000000000000dead"}},
|
||||||
Bor: ¶ms.BorConfig{BurntContract: map[string]string{"0": "0x000000000000000000000000000000000000dead"}},
|
|
||||||
},
|
},
|
||||||
Alloc: GenesisAlloc{
|
Alloc: GenesisAlloc{
|
||||||
common.HexToAddress("0x71562b71999873DB5b286dF957af199Ec94617F7"): GenesisAccount{
|
common.HexToAddress("0x71562b71999873DB5b286dF957af199Ec94617F7"): GenesisAccount{
|
||||||
|
|
@ -442,11 +441,12 @@ func GenerateBadBlock(parent *types.Block, engine consensus.Engine, txs types.Tr
|
||||||
Time: parent.Time() + 10,
|
Time: parent.Time() + 10,
|
||||||
UncleHash: types.EmptyUncleHash,
|
UncleHash: types.EmptyUncleHash,
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.IsLondon(header.Number) {
|
if config.IsLondon(header.Number) {
|
||||||
header.BaseFee = misc.CalcBaseFee(config, parent.Header())
|
header.BaseFee = misc.CalcBaseFee(config, parent.Header())
|
||||||
}
|
}
|
||||||
// TODO marcello double check
|
|
||||||
if config.IsShanghai(header.Time) {
|
if config.IsShanghai(header.Number) {
|
||||||
header.WithdrawalsHash = &types.EmptyWithdrawalsHash
|
header.WithdrawalsHash = &types.EmptyWithdrawalsHash
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -471,8 +471,7 @@ func GenerateBadBlock(parent *types.Block, engine consensus.Engine, txs types.Tr
|
||||||
|
|
||||||
header.Root = common.BytesToHash(hasher.Sum(nil))
|
header.Root = common.BytesToHash(hasher.Sum(nil))
|
||||||
// Assemble and return the final block for sealing
|
// Assemble and return the final block for sealing
|
||||||
// TODO marcello double check
|
if config.IsShanghai(header.Number) {
|
||||||
if config.IsShanghai(header.Time) {
|
|
||||||
return types.NewBlockWithWithdrawals(header, txs, nil, receipts, []*types.Withdrawal{}, trie.NewStackTrie(nil))
|
return types.NewBlockWithWithdrawals(header, txs, nil, receipts, []*types.Withdrawal{}, trie.NewStackTrie(nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -403,7 +403,6 @@ func (st *StateTransition) TransitionDb(interruptCtx context.Context) (*Executio
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check whether the init code size has been exceeded.
|
// Check whether the init code size has been exceeded.
|
||||||
// TODO marcello double check
|
|
||||||
if rules.IsShanghai && contractCreation && len(msg.Data) > params.MaxInitCodeSize {
|
if rules.IsShanghai && contractCreation && len(msg.Data) > params.MaxInitCodeSize {
|
||||||
return nil, fmt.Errorf("%w: code size %v limit %v", ErrMaxInitCodeSizeExceeded, len(msg.Data), params.MaxInitCodeSize)
|
return nil, fmt.Errorf("%w: code size %v limit %v", ErrMaxInitCodeSizeExceeded, len(msg.Data), params.MaxInitCodeSize)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1900,7 +1900,7 @@ func (pool *TxPool) reset(oldHead, newHead *types.Header) {
|
||||||
pool.istanbul.Store(pool.chainconfig.IsIstanbul(next))
|
pool.istanbul.Store(pool.chainconfig.IsIstanbul(next))
|
||||||
pool.eip2718.Store(pool.chainconfig.IsBerlin(next))
|
pool.eip2718.Store(pool.chainconfig.IsBerlin(next))
|
||||||
pool.eip1559.Store(pool.chainconfig.IsLondon(next))
|
pool.eip1559.Store(pool.chainconfig.IsLondon(next))
|
||||||
pool.shanghai.Store(pool.chainconfig.IsShanghai(uint64(time.Now().Unix())))
|
pool.shanghai.Store(pool.chainconfig.IsShanghai(next))
|
||||||
}
|
}
|
||||||
|
|
||||||
// promoteExecutables moves transactions that have become processable from the
|
// promoteExecutables moves transactions that have become processable from the
|
||||||
|
|
|
||||||
|
|
@ -134,8 +134,7 @@ func NewEVM(blockCtx BlockContext, txCtx TxContext, statedb StateDB, chainConfig
|
||||||
StateDB: statedb,
|
StateDB: statedb,
|
||||||
Config: config,
|
Config: config,
|
||||||
chainConfig: chainConfig,
|
chainConfig: chainConfig,
|
||||||
// TODO marcello double check
|
chainRules: chainConfig.Rules(blockCtx.BlockNumber, blockCtx.Random != nil, blockCtx.Time),
|
||||||
chainRules: chainConfig.Rules(blockCtx.BlockNumber, blockCtx.Random != nil, blockCtx.Time),
|
|
||||||
}
|
}
|
||||||
evm.interpreter = NewEVMInterpreter(evm)
|
evm.interpreter = NewEVMInterpreter(evm)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,6 @@ func NewEVMInterpreter(evm *EVM) *EVMInterpreter {
|
||||||
var table *JumpTable
|
var table *JumpTable
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
// TODO marcello double check
|
|
||||||
case evm.chainRules.IsShanghai:
|
case evm.chainRules.IsShanghai:
|
||||||
table = &shanghaiInstructionSet
|
table = &shanghaiInstructionSet
|
||||||
case evm.chainRules.IsMerge:
|
case evm.chainRules.IsMerge:
|
||||||
|
|
|
||||||
|
|
@ -90,12 +90,15 @@ func newShanghaiInstructionSet() JumpTable {
|
||||||
|
|
||||||
func newMergeInstructionSet() JumpTable {
|
func newMergeInstructionSet() JumpTable {
|
||||||
instructionSet := newLondonInstructionSet()
|
instructionSet := newLondonInstructionSet()
|
||||||
instructionSet[PREVRANDAO] = &operation{
|
|
||||||
execute: opRandom,
|
// disabling in pos due to incompatibility with prevrandao
|
||||||
constantGas: GasQuickStep,
|
|
||||||
minStack: minStack(0, 1),
|
// instructionSet[PREVRANDAO] = &operation{
|
||||||
maxStack: maxStack(0, 1),
|
// execute: opRandom,
|
||||||
}
|
// constantGas: GasQuickStep,
|
||||||
|
// minStack: minStack(0, 1),
|
||||||
|
// maxStack: maxStack(0, 1),
|
||||||
|
// }
|
||||||
|
|
||||||
return validate(instructionSet)
|
return validate(instructionSet)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -277,6 +277,9 @@ func (api *DebugAPI) DumpBlock(blockNr rpc.BlockNumber) (state.Dump, error) {
|
||||||
// both the pending block as well as the pending state from
|
// both the pending block as well as the pending state from
|
||||||
// the miner and operate on those
|
// the miner and operate on those
|
||||||
_, stateDb := api.eth.miner.Pending()
|
_, stateDb := api.eth.miner.Pending()
|
||||||
|
if stateDb == nil {
|
||||||
|
return state.Dump{}, errors.New("pending state is not available")
|
||||||
|
}
|
||||||
return stateDb.RawDump(opts), nil
|
return stateDb.RawDump(opts), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -385,6 +388,9 @@ func (api *DebugAPI) AccountRange(blockNrOrHash rpc.BlockNumberOrHash, start hex
|
||||||
// both the pending block as well as the pending state from
|
// both the pending block as well as the pending state from
|
||||||
// the miner and operate on those
|
// the miner and operate on those
|
||||||
_, stateDb = api.eth.miner.Pending()
|
_, stateDb = api.eth.miner.Pending()
|
||||||
|
if stateDb == nil {
|
||||||
|
return state.IteratorDump{}, errors.New("pending state is not available")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
var header *types.Header
|
var header *types.Header
|
||||||
if number == rpc.LatestBlockNumber {
|
if number == rpc.LatestBlockNumber {
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,9 @@ func (b *EthAPIBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumb
|
||||||
// Pending block is only known by the miner
|
// Pending block is only known by the miner
|
||||||
if number == rpc.PendingBlockNumber {
|
if number == rpc.PendingBlockNumber {
|
||||||
block := b.eth.miner.PendingBlock()
|
block := b.eth.miner.PendingBlock()
|
||||||
|
if block == nil {
|
||||||
|
return nil, errors.New("pending block is not available")
|
||||||
|
}
|
||||||
return block.Header(), nil
|
return block.Header(), nil
|
||||||
}
|
}
|
||||||
// Otherwise resolve and return the block
|
// Otherwise resolve and return the block
|
||||||
|
|
@ -136,6 +139,9 @@ func (b *EthAPIBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumbe
|
||||||
// Pending block is only known by the miner
|
// Pending block is only known by the miner
|
||||||
if number == rpc.PendingBlockNumber {
|
if number == rpc.PendingBlockNumber {
|
||||||
block := b.eth.miner.PendingBlock()
|
block := b.eth.miner.PendingBlock()
|
||||||
|
if block == nil {
|
||||||
|
return nil, errors.New("pending block is not available")
|
||||||
|
}
|
||||||
return block, nil
|
return block, nil
|
||||||
}
|
}
|
||||||
// Otherwise resolve and return the block
|
// Otherwise resolve and return the block
|
||||||
|
|
@ -217,6 +223,9 @@ func (b *EthAPIBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.B
|
||||||
// Pending state is only known by the miner
|
// Pending state is only known by the miner
|
||||||
if number == rpc.PendingBlockNumber {
|
if number == rpc.PendingBlockNumber {
|
||||||
block, state := b.eth.miner.Pending()
|
block, state := b.eth.miner.Pending()
|
||||||
|
if block == nil || state == nil {
|
||||||
|
return nil, nil, errors.New("pending state is not available")
|
||||||
|
}
|
||||||
return state, block.Header(), nil
|
return state, block.Header(), nil
|
||||||
}
|
}
|
||||||
// Otherwise resolve the block number and return its state
|
// Otherwise resolve the block number and return its state
|
||||||
|
|
|
||||||
|
|
@ -165,46 +165,46 @@ func NewConsensusAPI(eth *eth.Ethereum) *ConsensusAPI {
|
||||||
//
|
//
|
||||||
// If there are payloadAttributes: we try to assemble a block with the payloadAttributes
|
// If there are payloadAttributes: we try to assemble a block with the payloadAttributes
|
||||||
// and return its payloadID.
|
// and return its payloadID.
|
||||||
func (api *ConsensusAPI) ForkchoiceUpdatedV1(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) {
|
// func (api *ConsensusAPI) ForkchoiceUpdatedV1(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) {
|
||||||
if payloadAttributes != nil {
|
// if payloadAttributes != nil {
|
||||||
if payloadAttributes.Withdrawals != nil {
|
// if payloadAttributes.Withdrawals != nil {
|
||||||
return engine.STATUS_INVALID, engine.InvalidParams.With(fmt.Errorf("withdrawals not supported in V1"))
|
// return engine.STATUS_INVALID, engine.InvalidParams.With(fmt.Errorf("withdrawals not supported in V1"))
|
||||||
}
|
// }
|
||||||
|
|
||||||
if api.eth.BlockChain().Config().IsShanghai(payloadAttributes.Timestamp) {
|
// if api.eth.BlockChain().Config().IsShanghai(payloadAttributes.Timestamp) {
|
||||||
return engine.STATUS_INVALID, engine.InvalidParams.With(fmt.Errorf("forkChoiceUpdateV1 called post-shanghai"))
|
// return engine.STATUS_INVALID, engine.InvalidParams.With(fmt.Errorf("forkChoiceUpdateV1 called post-shanghai"))
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
return api.forkchoiceUpdated(update, payloadAttributes)
|
// return api.forkchoiceUpdated(update, payloadAttributes)
|
||||||
}
|
// }
|
||||||
|
|
||||||
// ForkchoiceUpdatedV2 is equivalent to V1 with the addition of withdrawals in the payload attributes.
|
// ForkchoiceUpdatedV2 is equivalent to V1 with the addition of withdrawals in the payload attributes.
|
||||||
func (api *ConsensusAPI) ForkchoiceUpdatedV2(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) {
|
// func (api *ConsensusAPI) ForkchoiceUpdatedV2(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) {
|
||||||
if payloadAttributes != nil {
|
// if payloadAttributes != nil {
|
||||||
if err := api.verifyPayloadAttributes(payloadAttributes); err != nil {
|
// if err := api.verifyPayloadAttributes(payloadAttributes); err != nil {
|
||||||
return engine.STATUS_INVALID, engine.InvalidParams.With(err)
|
// return engine.STATUS_INVALID, engine.InvalidParams.With(err)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
return api.forkchoiceUpdated(update, payloadAttributes)
|
// return api.forkchoiceUpdated(update, payloadAttributes)
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (api *ConsensusAPI) verifyPayloadAttributes(attr *engine.PayloadAttributes) error {
|
// func (api *ConsensusAPI) verifyPayloadAttributes(attr *engine.PayloadAttributes) error {
|
||||||
if !api.eth.BlockChain().Config().IsShanghai(attr.Timestamp) {
|
// if !api.eth.BlockChain().Config().IsShanghai(attr.Timestamp) {
|
||||||
// Reject payload attributes with withdrawals before shanghai
|
// // Reject payload attributes with withdrawals before shanghai
|
||||||
if attr.Withdrawals != nil {
|
// if attr.Withdrawals != nil {
|
||||||
return errors.New("withdrawals before shanghai")
|
// return errors.New("withdrawals before shanghai")
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
// Reject payload attributes with nil withdrawals after shanghai
|
// // Reject payload attributes with nil withdrawals after shanghai
|
||||||
if attr.Withdrawals == nil {
|
// if attr.Withdrawals == nil {
|
||||||
return errors.New("missing withdrawals list")
|
// return errors.New("missing withdrawals list")
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
// nolint:gocognit
|
// nolint:gocognit
|
||||||
func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) {
|
func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) {
|
||||||
|
|
@ -454,18 +454,18 @@ func (api *ConsensusAPI) NewPayloadV1(params engine.ExecutableData) (engine.Payl
|
||||||
return api.newPayload(params)
|
return api.newPayload(params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPayloadV2 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
|
// // NewPayloadV2 creates an Eth1 block, inserts it in the chain, and returns the status of the chain.
|
||||||
func (api *ConsensusAPI) NewPayloadV2(params engine.ExecutableData) (engine.PayloadStatusV1, error) {
|
// func (api *ConsensusAPI) NewPayloadV2(params engine.ExecutableData) (engine.PayloadStatusV1, error) {
|
||||||
if api.eth.BlockChain().Config().IsShanghai(params.Timestamp) {
|
// if api.eth.BlockChain().Config().IsShanghai(params.Timestamp) {
|
||||||
if params.Withdrawals == nil {
|
// if params.Withdrawals == nil {
|
||||||
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(fmt.Errorf("nil withdrawals post-shanghai"))
|
// return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(fmt.Errorf("nil withdrawals post-shanghai"))
|
||||||
}
|
// }
|
||||||
} else if params.Withdrawals != nil {
|
// } else if params.Withdrawals != nil {
|
||||||
return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(fmt.Errorf("non-nil withdrawals pre-shanghai"))
|
// return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(fmt.Errorf("non-nil withdrawals pre-shanghai"))
|
||||||
}
|
// }
|
||||||
|
|
||||||
return api.newPayload(params)
|
// return api.newPayload(params)
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (api *ConsensusAPI) newPayload(params engine.ExecutableData) (engine.PayloadStatusV1, error) {
|
func (api *ConsensusAPI) newPayload(params engine.ExecutableData) (engine.PayloadStatusV1, error) {
|
||||||
// The locking here is, strictly, not required. Without these locks, this can happen:
|
// The locking here is, strictly, not required. Without these locks, this can happen:
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -18,6 +18,7 @@
|
||||||
package ethconfig
|
package ethconfig
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/big"
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
@ -224,9 +225,8 @@ type Config struct {
|
||||||
// CheckpointOracle is the configuration for checkpoint oracle.
|
// CheckpointOracle is the configuration for checkpoint oracle.
|
||||||
CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"`
|
CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"`
|
||||||
|
|
||||||
// TODO marcello double check
|
|
||||||
// OverrideShanghai (TODO: remove after the fork)
|
// OverrideShanghai (TODO: remove after the fork)
|
||||||
OverrideShanghai *uint64 `toml:",omitempty"`
|
OverrideShanghai *big.Int `toml:",omitempty"`
|
||||||
|
|
||||||
// URL to connect to Heimdall node
|
// URL to connect to Heimdall node
|
||||||
HeimdallURL string
|
HeimdallURL string
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
package ethconfig
|
package ethconfig
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/big"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
|
@ -18,51 +19,65 @@ import (
|
||||||
// MarshalTOML marshals as TOML.
|
// MarshalTOML marshals as TOML.
|
||||||
func (c Config) MarshalTOML() (interface{}, error) {
|
func (c Config) MarshalTOML() (interface{}, error) {
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Genesis *core.Genesis `toml:",omitempty"`
|
Genesis *core.Genesis `toml:",omitempty"`
|
||||||
NetworkId uint64
|
NetworkId uint64
|
||||||
SyncMode downloader.SyncMode
|
SyncMode downloader.SyncMode
|
||||||
EthDiscoveryURLs []string
|
EthDiscoveryURLs []string
|
||||||
SnapDiscoveryURLs []string
|
SnapDiscoveryURLs []string
|
||||||
NoPruning bool
|
NoPruning bool
|
||||||
NoPrefetch bool
|
NoPrefetch bool
|
||||||
TxLookupLimit uint64 `toml:",omitempty"`
|
TxLookupLimit uint64 `toml:",omitempty"`
|
||||||
RequiredBlocks map[uint64]common.Hash `toml:"-"`
|
RequiredBlocks map[uint64]common.Hash `toml:"-"`
|
||||||
LightServ int `toml:",omitempty"`
|
LightServ int `toml:",omitempty"`
|
||||||
LightIngress int `toml:",omitempty"`
|
LightIngress int `toml:",omitempty"`
|
||||||
LightEgress int `toml:",omitempty"`
|
LightEgress int `toml:",omitempty"`
|
||||||
LightPeers int `toml:",omitempty"`
|
LightPeers int `toml:",omitempty"`
|
||||||
LightNoPrune bool `toml:",omitempty"`
|
LightNoPrune bool `toml:",omitempty"`
|
||||||
LightNoSyncServe bool `toml:",omitempty"`
|
LightNoSyncServe bool `toml:",omitempty"`
|
||||||
SyncFromCheckpoint bool `toml:",omitempty"`
|
SyncFromCheckpoint bool `toml:",omitempty"`
|
||||||
UltraLightServers []string `toml:",omitempty"`
|
UltraLightServers []string `toml:",omitempty"`
|
||||||
UltraLightFraction int `toml:",omitempty"`
|
UltraLightFraction int `toml:",omitempty"`
|
||||||
UltraLightOnlyAnnounce bool `toml:",omitempty"`
|
UltraLightOnlyAnnounce bool `toml:",omitempty"`
|
||||||
SkipBcVersionCheck bool `toml:"-"`
|
SkipBcVersionCheck bool `toml:"-"`
|
||||||
DatabaseHandles int `toml:"-"`
|
DatabaseHandles int `toml:"-"`
|
||||||
DatabaseCache int
|
DatabaseCache int
|
||||||
DatabaseFreezer string
|
DatabaseFreezer string
|
||||||
TrieCleanCache int
|
LevelDbCompactionTableSize uint64
|
||||||
TrieCleanCacheJournal string `toml:",omitempty"`
|
LevelDbCompactionTableSizeMultiplier float64
|
||||||
TrieCleanCacheRejournal time.Duration `toml:",omitempty"`
|
LevelDbCompactionTotalSize uint64
|
||||||
TrieDirtyCache int
|
LevelDbCompactionTotalSizeMultiplier float64
|
||||||
TrieTimeout time.Duration
|
TrieCleanCache int
|
||||||
SnapshotCache int
|
TrieCleanCacheJournal string `toml:",omitempty"`
|
||||||
Preimages bool
|
TrieCleanCacheRejournal time.Duration `toml:",omitempty"`
|
||||||
FilterLogCacheSize int
|
TrieDirtyCache int
|
||||||
Miner miner.Config
|
TrieTimeout time.Duration
|
||||||
Ethash ethash.Config
|
SnapshotCache int
|
||||||
TxPool txpool.Config
|
Preimages bool
|
||||||
GPO gasprice.Config
|
TriesInMemory uint64
|
||||||
EnablePreimageRecording bool
|
FilterLogCacheSize int
|
||||||
DocRoot string `toml:"-"`
|
Miner miner.Config
|
||||||
RPCGasCap uint64
|
Ethash ethash.Config
|
||||||
RPCEVMTimeout time.Duration
|
TxPool txpool.Config
|
||||||
RPCTxFeeCap float64
|
GPO gasprice.Config
|
||||||
Checkpoint *params.TrustedCheckpoint `toml:",omitempty"`
|
EnablePreimageRecording bool
|
||||||
CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"`
|
DocRoot string `toml:"-"`
|
||||||
OverrideShanghai *uint64 `toml:",omitempty"`
|
RPCGasCap uint64
|
||||||
|
RPCReturnDataLimit uint64
|
||||||
|
RPCEVMTimeout time.Duration
|
||||||
|
RPCTxFeeCap float64
|
||||||
|
Checkpoint *params.TrustedCheckpoint `toml:",omitempty"`
|
||||||
|
CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"`
|
||||||
|
OverrideShanghai *big.Int `toml:",omitempty"`
|
||||||
|
HeimdallURL string
|
||||||
|
WithoutHeimdall bool
|
||||||
|
HeimdallgRPCAddress string
|
||||||
|
RunHeimdall bool
|
||||||
|
RunHeimdallArgs string
|
||||||
|
UseHeimdallApp bool
|
||||||
|
BorLogs bool
|
||||||
|
ParallelEVM core.ParallelEVMConfig `toml:",omitempty"`
|
||||||
|
DevFakeAuthor bool `hcl:"devfakeauthor,optional" toml:"devfakeauthor,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var enc Config
|
var enc Config
|
||||||
enc.Genesis = c.Genesis
|
enc.Genesis = c.Genesis
|
||||||
enc.NetworkId = c.NetworkId
|
enc.NetworkId = c.NetworkId
|
||||||
|
|
@ -87,6 +102,10 @@ func (c Config) MarshalTOML() (interface{}, error) {
|
||||||
enc.DatabaseHandles = c.DatabaseHandles
|
enc.DatabaseHandles = c.DatabaseHandles
|
||||||
enc.DatabaseCache = c.DatabaseCache
|
enc.DatabaseCache = c.DatabaseCache
|
||||||
enc.DatabaseFreezer = c.DatabaseFreezer
|
enc.DatabaseFreezer = c.DatabaseFreezer
|
||||||
|
enc.LevelDbCompactionTableSize = c.LevelDbCompactionTableSize
|
||||||
|
enc.LevelDbCompactionTableSizeMultiplier = c.LevelDbCompactionTableSizeMultiplier
|
||||||
|
enc.LevelDbCompactionTotalSize = c.LevelDbCompactionTotalSize
|
||||||
|
enc.LevelDbCompactionTotalSizeMultiplier = c.LevelDbCompactionTotalSizeMultiplier
|
||||||
enc.TrieCleanCache = c.TrieCleanCache
|
enc.TrieCleanCache = c.TrieCleanCache
|
||||||
enc.TrieCleanCacheJournal = c.TrieCleanCacheJournal
|
enc.TrieCleanCacheJournal = c.TrieCleanCacheJournal
|
||||||
enc.TrieCleanCacheRejournal = c.TrieCleanCacheRejournal
|
enc.TrieCleanCacheRejournal = c.TrieCleanCacheRejournal
|
||||||
|
|
@ -94,6 +113,7 @@ func (c Config) MarshalTOML() (interface{}, error) {
|
||||||
enc.TrieTimeout = c.TrieTimeout
|
enc.TrieTimeout = c.TrieTimeout
|
||||||
enc.SnapshotCache = c.SnapshotCache
|
enc.SnapshotCache = c.SnapshotCache
|
||||||
enc.Preimages = c.Preimages
|
enc.Preimages = c.Preimages
|
||||||
|
enc.TriesInMemory = c.TriesInMemory
|
||||||
enc.FilterLogCacheSize = c.FilterLogCacheSize
|
enc.FilterLogCacheSize = c.FilterLogCacheSize
|
||||||
enc.Miner = c.Miner
|
enc.Miner = c.Miner
|
||||||
enc.Ethash = c.Ethash
|
enc.Ethash = c.Ethash
|
||||||
|
|
@ -102,239 +122,263 @@ func (c Config) MarshalTOML() (interface{}, error) {
|
||||||
enc.EnablePreimageRecording = c.EnablePreimageRecording
|
enc.EnablePreimageRecording = c.EnablePreimageRecording
|
||||||
enc.DocRoot = c.DocRoot
|
enc.DocRoot = c.DocRoot
|
||||||
enc.RPCGasCap = c.RPCGasCap
|
enc.RPCGasCap = c.RPCGasCap
|
||||||
|
enc.RPCReturnDataLimit = c.RPCReturnDataLimit
|
||||||
enc.RPCEVMTimeout = c.RPCEVMTimeout
|
enc.RPCEVMTimeout = c.RPCEVMTimeout
|
||||||
enc.RPCTxFeeCap = c.RPCTxFeeCap
|
enc.RPCTxFeeCap = c.RPCTxFeeCap
|
||||||
enc.Checkpoint = c.Checkpoint
|
enc.Checkpoint = c.Checkpoint
|
||||||
enc.CheckpointOracle = c.CheckpointOracle
|
enc.CheckpointOracle = c.CheckpointOracle
|
||||||
enc.OverrideShanghai = c.OverrideShanghai
|
enc.OverrideShanghai = c.OverrideShanghai
|
||||||
|
enc.HeimdallURL = c.HeimdallURL
|
||||||
|
enc.WithoutHeimdall = c.WithoutHeimdall
|
||||||
|
enc.HeimdallgRPCAddress = c.HeimdallgRPCAddress
|
||||||
|
enc.RunHeimdall = c.RunHeimdall
|
||||||
|
enc.RunHeimdallArgs = c.RunHeimdallArgs
|
||||||
|
enc.UseHeimdallApp = c.UseHeimdallApp
|
||||||
|
enc.BorLogs = c.BorLogs
|
||||||
|
enc.ParallelEVM = c.ParallelEVM
|
||||||
|
enc.DevFakeAuthor = c.DevFakeAuthor
|
||||||
return &enc, nil
|
return &enc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnmarshalTOML unmarshals from TOML.
|
// UnmarshalTOML unmarshals from TOML.
|
||||||
func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error {
|
func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error {
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Genesis *core.Genesis `toml:",omitempty"`
|
Genesis *core.Genesis `toml:",omitempty"`
|
||||||
NetworkId *uint64
|
NetworkId *uint64
|
||||||
SyncMode *downloader.SyncMode
|
SyncMode *downloader.SyncMode
|
||||||
EthDiscoveryURLs []string
|
EthDiscoveryURLs []string
|
||||||
SnapDiscoveryURLs []string
|
SnapDiscoveryURLs []string
|
||||||
NoPruning *bool
|
NoPruning *bool
|
||||||
NoPrefetch *bool
|
NoPrefetch *bool
|
||||||
TxLookupLimit *uint64 `toml:",omitempty"`
|
TxLookupLimit *uint64 `toml:",omitempty"`
|
||||||
RequiredBlocks map[uint64]common.Hash `toml:"-"`
|
RequiredBlocks map[uint64]common.Hash `toml:"-"`
|
||||||
LightServ *int `toml:",omitempty"`
|
LightServ *int `toml:",omitempty"`
|
||||||
LightIngress *int `toml:",omitempty"`
|
LightIngress *int `toml:",omitempty"`
|
||||||
LightEgress *int `toml:",omitempty"`
|
LightEgress *int `toml:",omitempty"`
|
||||||
LightPeers *int `toml:",omitempty"`
|
LightPeers *int `toml:",omitempty"`
|
||||||
LightNoPrune *bool `toml:",omitempty"`
|
LightNoPrune *bool `toml:",omitempty"`
|
||||||
LightNoSyncServe *bool `toml:",omitempty"`
|
LightNoSyncServe *bool `toml:",omitempty"`
|
||||||
SyncFromCheckpoint *bool `toml:",omitempty"`
|
SyncFromCheckpoint *bool `toml:",omitempty"`
|
||||||
UltraLightServers []string `toml:",omitempty"`
|
UltraLightServers []string `toml:",omitempty"`
|
||||||
UltraLightFraction *int `toml:",omitempty"`
|
UltraLightFraction *int `toml:",omitempty"`
|
||||||
UltraLightOnlyAnnounce *bool `toml:",omitempty"`
|
UltraLightOnlyAnnounce *bool `toml:",omitempty"`
|
||||||
SkipBcVersionCheck *bool `toml:"-"`
|
SkipBcVersionCheck *bool `toml:"-"`
|
||||||
DatabaseHandles *int `toml:"-"`
|
DatabaseHandles *int `toml:"-"`
|
||||||
DatabaseCache *int
|
DatabaseCache *int
|
||||||
DatabaseFreezer *string
|
DatabaseFreezer *string
|
||||||
TrieCleanCache *int
|
LevelDbCompactionTableSize *uint64
|
||||||
TrieCleanCacheJournal *string `toml:",omitempty"`
|
LevelDbCompactionTableSizeMultiplier *float64
|
||||||
TrieCleanCacheRejournal *time.Duration `toml:",omitempty"`
|
LevelDbCompactionTotalSize *uint64
|
||||||
TrieDirtyCache *int
|
LevelDbCompactionTotalSizeMultiplier *float64
|
||||||
TrieTimeout *time.Duration
|
TrieCleanCache *int
|
||||||
SnapshotCache *int
|
TrieCleanCacheJournal *string `toml:",omitempty"`
|
||||||
Preimages *bool
|
TrieCleanCacheRejournal *time.Duration `toml:",omitempty"`
|
||||||
FilterLogCacheSize *int
|
TrieDirtyCache *int
|
||||||
Miner *miner.Config
|
TrieTimeout *time.Duration
|
||||||
Ethash *ethash.Config
|
SnapshotCache *int
|
||||||
TxPool *txpool.Config
|
Preimages *bool
|
||||||
GPO *gasprice.Config
|
TriesInMemory *uint64
|
||||||
EnablePreimageRecording *bool
|
FilterLogCacheSize *int
|
||||||
DocRoot *string `toml:"-"`
|
Miner *miner.Config
|
||||||
RPCGasCap *uint64
|
Ethash *ethash.Config
|
||||||
RPCEVMTimeout *time.Duration
|
TxPool *txpool.Config
|
||||||
RPCTxFeeCap *float64
|
GPO *gasprice.Config
|
||||||
Checkpoint *params.TrustedCheckpoint `toml:",omitempty"`
|
EnablePreimageRecording *bool
|
||||||
CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"`
|
DocRoot *string `toml:"-"`
|
||||||
OverrideShanghai *uint64 `toml:",omitempty"`
|
RPCGasCap *uint64
|
||||||
|
RPCReturnDataLimit *uint64
|
||||||
|
RPCEVMTimeout *time.Duration
|
||||||
|
RPCTxFeeCap *float64
|
||||||
|
Checkpoint *params.TrustedCheckpoint `toml:",omitempty"`
|
||||||
|
CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"`
|
||||||
|
OverrideShanghai *big.Int `toml:",omitempty"`
|
||||||
|
HeimdallURL *string
|
||||||
|
WithoutHeimdall *bool
|
||||||
|
HeimdallgRPCAddress *string
|
||||||
|
RunHeimdall *bool
|
||||||
|
RunHeimdallArgs *string
|
||||||
|
UseHeimdallApp *bool
|
||||||
|
BorLogs *bool
|
||||||
|
ParallelEVM *core.ParallelEVMConfig `toml:",omitempty"`
|
||||||
|
DevFakeAuthor *bool `hcl:"devfakeauthor,optional" toml:"devfakeauthor,optional"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var dec Config
|
var dec Config
|
||||||
if err := unmarshal(&dec); err != nil {
|
if err := unmarshal(&dec); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.Genesis != nil {
|
if dec.Genesis != nil {
|
||||||
c.Genesis = dec.Genesis
|
c.Genesis = dec.Genesis
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.NetworkId != nil {
|
if dec.NetworkId != nil {
|
||||||
c.NetworkId = *dec.NetworkId
|
c.NetworkId = *dec.NetworkId
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.SyncMode != nil {
|
if dec.SyncMode != nil {
|
||||||
c.SyncMode = *dec.SyncMode
|
c.SyncMode = *dec.SyncMode
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.EthDiscoveryURLs != nil {
|
if dec.EthDiscoveryURLs != nil {
|
||||||
c.EthDiscoveryURLs = dec.EthDiscoveryURLs
|
c.EthDiscoveryURLs = dec.EthDiscoveryURLs
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.SnapDiscoveryURLs != nil {
|
if dec.SnapDiscoveryURLs != nil {
|
||||||
c.SnapDiscoveryURLs = dec.SnapDiscoveryURLs
|
c.SnapDiscoveryURLs = dec.SnapDiscoveryURLs
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.NoPruning != nil {
|
if dec.NoPruning != nil {
|
||||||
c.NoPruning = *dec.NoPruning
|
c.NoPruning = *dec.NoPruning
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.NoPrefetch != nil {
|
if dec.NoPrefetch != nil {
|
||||||
c.NoPrefetch = *dec.NoPrefetch
|
c.NoPrefetch = *dec.NoPrefetch
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.TxLookupLimit != nil {
|
if dec.TxLookupLimit != nil {
|
||||||
c.TxLookupLimit = *dec.TxLookupLimit
|
c.TxLookupLimit = *dec.TxLookupLimit
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.RequiredBlocks != nil {
|
if dec.RequiredBlocks != nil {
|
||||||
c.RequiredBlocks = dec.RequiredBlocks
|
c.RequiredBlocks = dec.RequiredBlocks
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.LightServ != nil {
|
if dec.LightServ != nil {
|
||||||
c.LightServ = *dec.LightServ
|
c.LightServ = *dec.LightServ
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.LightIngress != nil {
|
if dec.LightIngress != nil {
|
||||||
c.LightIngress = *dec.LightIngress
|
c.LightIngress = *dec.LightIngress
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.LightEgress != nil {
|
if dec.LightEgress != nil {
|
||||||
c.LightEgress = *dec.LightEgress
|
c.LightEgress = *dec.LightEgress
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.LightPeers != nil {
|
if dec.LightPeers != nil {
|
||||||
c.LightPeers = *dec.LightPeers
|
c.LightPeers = *dec.LightPeers
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.LightNoPrune != nil {
|
if dec.LightNoPrune != nil {
|
||||||
c.LightNoPrune = *dec.LightNoPrune
|
c.LightNoPrune = *dec.LightNoPrune
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.LightNoSyncServe != nil {
|
if dec.LightNoSyncServe != nil {
|
||||||
c.LightNoSyncServe = *dec.LightNoSyncServe
|
c.LightNoSyncServe = *dec.LightNoSyncServe
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.SyncFromCheckpoint != nil {
|
if dec.SyncFromCheckpoint != nil {
|
||||||
c.SyncFromCheckpoint = *dec.SyncFromCheckpoint
|
c.SyncFromCheckpoint = *dec.SyncFromCheckpoint
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.UltraLightServers != nil {
|
if dec.UltraLightServers != nil {
|
||||||
c.UltraLightServers = dec.UltraLightServers
|
c.UltraLightServers = dec.UltraLightServers
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.UltraLightFraction != nil {
|
if dec.UltraLightFraction != nil {
|
||||||
c.UltraLightFraction = *dec.UltraLightFraction
|
c.UltraLightFraction = *dec.UltraLightFraction
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.UltraLightOnlyAnnounce != nil {
|
if dec.UltraLightOnlyAnnounce != nil {
|
||||||
c.UltraLightOnlyAnnounce = *dec.UltraLightOnlyAnnounce
|
c.UltraLightOnlyAnnounce = *dec.UltraLightOnlyAnnounce
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.SkipBcVersionCheck != nil {
|
if dec.SkipBcVersionCheck != nil {
|
||||||
c.SkipBcVersionCheck = *dec.SkipBcVersionCheck
|
c.SkipBcVersionCheck = *dec.SkipBcVersionCheck
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.DatabaseHandles != nil {
|
if dec.DatabaseHandles != nil {
|
||||||
c.DatabaseHandles = *dec.DatabaseHandles
|
c.DatabaseHandles = *dec.DatabaseHandles
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.DatabaseCache != nil {
|
if dec.DatabaseCache != nil {
|
||||||
c.DatabaseCache = *dec.DatabaseCache
|
c.DatabaseCache = *dec.DatabaseCache
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.DatabaseFreezer != nil {
|
if dec.DatabaseFreezer != nil {
|
||||||
c.DatabaseFreezer = *dec.DatabaseFreezer
|
c.DatabaseFreezer = *dec.DatabaseFreezer
|
||||||
}
|
}
|
||||||
|
if dec.LevelDbCompactionTableSize != nil {
|
||||||
|
c.LevelDbCompactionTableSize = *dec.LevelDbCompactionTableSize
|
||||||
|
}
|
||||||
|
if dec.LevelDbCompactionTableSizeMultiplier != nil {
|
||||||
|
c.LevelDbCompactionTableSizeMultiplier = *dec.LevelDbCompactionTableSizeMultiplier
|
||||||
|
}
|
||||||
|
if dec.LevelDbCompactionTotalSize != nil {
|
||||||
|
c.LevelDbCompactionTotalSize = *dec.LevelDbCompactionTotalSize
|
||||||
|
}
|
||||||
|
if dec.LevelDbCompactionTotalSizeMultiplier != nil {
|
||||||
|
c.LevelDbCompactionTotalSizeMultiplier = *dec.LevelDbCompactionTotalSizeMultiplier
|
||||||
|
}
|
||||||
if dec.TrieCleanCache != nil {
|
if dec.TrieCleanCache != nil {
|
||||||
c.TrieCleanCache = *dec.TrieCleanCache
|
c.TrieCleanCache = *dec.TrieCleanCache
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.TrieCleanCacheJournal != nil {
|
if dec.TrieCleanCacheJournal != nil {
|
||||||
c.TrieCleanCacheJournal = *dec.TrieCleanCacheJournal
|
c.TrieCleanCacheJournal = *dec.TrieCleanCacheJournal
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.TrieCleanCacheRejournal != nil {
|
if dec.TrieCleanCacheRejournal != nil {
|
||||||
c.TrieCleanCacheRejournal = *dec.TrieCleanCacheRejournal
|
c.TrieCleanCacheRejournal = *dec.TrieCleanCacheRejournal
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.TrieDirtyCache != nil {
|
if dec.TrieDirtyCache != nil {
|
||||||
c.TrieDirtyCache = *dec.TrieDirtyCache
|
c.TrieDirtyCache = *dec.TrieDirtyCache
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.TrieTimeout != nil {
|
if dec.TrieTimeout != nil {
|
||||||
c.TrieTimeout = *dec.TrieTimeout
|
c.TrieTimeout = *dec.TrieTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.SnapshotCache != nil {
|
if dec.SnapshotCache != nil {
|
||||||
c.SnapshotCache = *dec.SnapshotCache
|
c.SnapshotCache = *dec.SnapshotCache
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.Preimages != nil {
|
if dec.Preimages != nil {
|
||||||
c.Preimages = *dec.Preimages
|
c.Preimages = *dec.Preimages
|
||||||
}
|
}
|
||||||
|
if dec.TriesInMemory != nil {
|
||||||
|
c.TriesInMemory = *dec.TriesInMemory
|
||||||
|
}
|
||||||
if dec.FilterLogCacheSize != nil {
|
if dec.FilterLogCacheSize != nil {
|
||||||
c.FilterLogCacheSize = *dec.FilterLogCacheSize
|
c.FilterLogCacheSize = *dec.FilterLogCacheSize
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.Miner != nil {
|
if dec.Miner != nil {
|
||||||
c.Miner = *dec.Miner
|
c.Miner = *dec.Miner
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.Ethash != nil {
|
if dec.Ethash != nil {
|
||||||
c.Ethash = *dec.Ethash
|
c.Ethash = *dec.Ethash
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.TxPool != nil {
|
if dec.TxPool != nil {
|
||||||
c.TxPool = *dec.TxPool
|
c.TxPool = *dec.TxPool
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.GPO != nil {
|
if dec.GPO != nil {
|
||||||
c.GPO = *dec.GPO
|
c.GPO = *dec.GPO
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.EnablePreimageRecording != nil {
|
if dec.EnablePreimageRecording != nil {
|
||||||
c.EnablePreimageRecording = *dec.EnablePreimageRecording
|
c.EnablePreimageRecording = *dec.EnablePreimageRecording
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.DocRoot != nil {
|
if dec.DocRoot != nil {
|
||||||
c.DocRoot = *dec.DocRoot
|
c.DocRoot = *dec.DocRoot
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.RPCGasCap != nil {
|
if dec.RPCGasCap != nil {
|
||||||
c.RPCGasCap = *dec.RPCGasCap
|
c.RPCGasCap = *dec.RPCGasCap
|
||||||
}
|
}
|
||||||
|
if dec.RPCReturnDataLimit != nil {
|
||||||
|
c.RPCReturnDataLimit = *dec.RPCReturnDataLimit
|
||||||
|
}
|
||||||
if dec.RPCEVMTimeout != nil {
|
if dec.RPCEVMTimeout != nil {
|
||||||
c.RPCEVMTimeout = *dec.RPCEVMTimeout
|
c.RPCEVMTimeout = *dec.RPCEVMTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.RPCTxFeeCap != nil {
|
if dec.RPCTxFeeCap != nil {
|
||||||
c.RPCTxFeeCap = *dec.RPCTxFeeCap
|
c.RPCTxFeeCap = *dec.RPCTxFeeCap
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.Checkpoint != nil {
|
if dec.Checkpoint != nil {
|
||||||
c.Checkpoint = dec.Checkpoint
|
c.Checkpoint = dec.Checkpoint
|
||||||
}
|
}
|
||||||
|
|
||||||
if dec.CheckpointOracle != nil {
|
if dec.CheckpointOracle != nil {
|
||||||
c.CheckpointOracle = dec.CheckpointOracle
|
c.CheckpointOracle = dec.CheckpointOracle
|
||||||
}
|
}
|
||||||
// TODO marcello double check
|
|
||||||
if dec.OverrideShanghai != nil {
|
if dec.OverrideShanghai != nil {
|
||||||
c.OverrideShanghai = dec.OverrideShanghai
|
c.OverrideShanghai = dec.OverrideShanghai
|
||||||
}
|
}
|
||||||
|
if dec.HeimdallURL != nil {
|
||||||
|
c.HeimdallURL = *dec.HeimdallURL
|
||||||
|
}
|
||||||
|
if dec.WithoutHeimdall != nil {
|
||||||
|
c.WithoutHeimdall = *dec.WithoutHeimdall
|
||||||
|
}
|
||||||
|
if dec.HeimdallgRPCAddress != nil {
|
||||||
|
c.HeimdallgRPCAddress = *dec.HeimdallgRPCAddress
|
||||||
|
}
|
||||||
|
if dec.RunHeimdall != nil {
|
||||||
|
c.RunHeimdall = *dec.RunHeimdall
|
||||||
|
}
|
||||||
|
if dec.RunHeimdallArgs != nil {
|
||||||
|
c.RunHeimdallArgs = *dec.RunHeimdallArgs
|
||||||
|
}
|
||||||
|
if dec.UseHeimdallApp != nil {
|
||||||
|
c.UseHeimdallApp = *dec.UseHeimdallApp
|
||||||
|
}
|
||||||
|
if dec.BorLogs != nil {
|
||||||
|
c.BorLogs = *dec.BorLogs
|
||||||
|
}
|
||||||
|
if dec.ParallelEVM != nil {
|
||||||
|
c.ParallelEVM = *dec.ParallelEVM
|
||||||
|
}
|
||||||
|
if dec.DevFakeAuthor != nil {
|
||||||
|
c.DevFakeAuthor = *dec.DevFakeAuthor
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -328,6 +328,9 @@ func (f *Filter) checkMatches(ctx context.Context, header *types.Header) ([]*typ
|
||||||
// pendingLogs returns the logs matching the filter criteria within the pending block.
|
// pendingLogs returns the logs matching the filter criteria within the pending block.
|
||||||
func (f *Filter) pendingLogs() ([]*types.Log, error) {
|
func (f *Filter) pendingLogs() ([]*types.Log, error) {
|
||||||
block, receipts := f.sys.backend.PendingBlockAndReceipts()
|
block, receipts := f.sys.backend.PendingBlockAndReceipts()
|
||||||
|
if block == nil || receipts == nil {
|
||||||
|
return nil, errors.New("pending block is not available")
|
||||||
|
}
|
||||||
if bloomFilter(block.Bloom(), f.addresses, f.topics) {
|
if bloomFilter(block.Bloom(), f.addresses, f.topics) {
|
||||||
var unfiltered []*types.Log
|
var unfiltered []*types.Log
|
||||||
for _, r := range receipts {
|
for _, r := range receipts {
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,6 @@ func newTestBackendWithGenerator(blocks int, shanghai bool, generator func(int,
|
||||||
engine consensus.Engine = ethash.NewFaker()
|
engine consensus.Engine = ethash.NewFaker()
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO marcello double check
|
|
||||||
if shanghai {
|
if shanghai {
|
||||||
config = ¶ms.ChainConfig{
|
config = ¶ms.ChainConfig{
|
||||||
ChainID: big.NewInt(1),
|
ChainID: big.NewInt(1),
|
||||||
|
|
@ -94,7 +93,7 @@ func newTestBackendWithGenerator(blocks int, shanghai bool, generator func(int,
|
||||||
ArrowGlacierBlock: big.NewInt(0),
|
ArrowGlacierBlock: big.NewInt(0),
|
||||||
GrayGlacierBlock: big.NewInt(0),
|
GrayGlacierBlock: big.NewInt(0),
|
||||||
MergeNetsplitBlock: big.NewInt(0),
|
MergeNetsplitBlock: big.NewInt(0),
|
||||||
ShanghaiTime: u64(0),
|
ShanghaiBlock: big.NewInt(0),
|
||||||
TerminalTotalDifficulty: big.NewInt(0),
|
TerminalTotalDifficulty: big.NewInt(0),
|
||||||
TerminalTotalDifficultyPassed: true,
|
TerminalTotalDifficultyPassed: true,
|
||||||
Ethash: new(params.EthashConfig),
|
Ethash: new(params.EthashConfig),
|
||||||
|
|
@ -368,11 +367,7 @@ func TestGetBlockBodies68(t *testing.T) {
|
||||||
func testGetBlockBodies(t *testing.T, protocol uint) {
|
func testGetBlockBodies(t *testing.T, protocol uint) {
|
||||||
gen := func(n int, g *core.BlockGen) {
|
gen := func(n int, g *core.BlockGen) {
|
||||||
if n%2 == 0 {
|
if n%2 == 0 {
|
||||||
w := &types.Withdrawal{
|
g.AddWithdrawal(&types.Withdrawal{})
|
||||||
Address: common.Address{0xaa},
|
|
||||||
Amount: 42,
|
|
||||||
}
|
|
||||||
g.AddWithdrawal(w)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1425,18 +1425,18 @@ func overrideConfig(original *params.ChainConfig, override *params.ChainConfig)
|
||||||
canon = false
|
canon = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if timestamp := override.ShanghaiTime; timestamp != nil {
|
if timestamp := override.ShanghaiBlock; timestamp != nil {
|
||||||
chainConfigCopy.ShanghaiTime = timestamp
|
chainConfigCopy.ShanghaiBlock = timestamp
|
||||||
canon = false
|
canon = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if timestamp := override.CancunTime; timestamp != nil {
|
if timestamp := override.CancunBlock; timestamp != nil {
|
||||||
chainConfigCopy.CancunTime = timestamp
|
chainConfigCopy.CancunBlock = timestamp
|
||||||
canon = false
|
canon = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if timestamp := override.PragueTime; timestamp != nil {
|
if timestamp := override.PragueBlock; timestamp != nil {
|
||||||
chainConfigCopy.PragueTime = timestamp
|
chainConfigCopy.PragueBlock = timestamp
|
||||||
canon = false
|
canon = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
8
go.mod
8
go.mod
|
|
@ -180,6 +180,7 @@ require (
|
||||||
github.com/bgentry/speakeasy v0.1.0 // indirect
|
github.com/bgentry/speakeasy v0.1.0 // indirect
|
||||||
github.com/bits-and-blooms/bitset v1.7.0 // indirect
|
github.com/bits-and-blooms/bitset v1.7.0 // indirect
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect
|
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect
|
||||||
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect
|
||||||
github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect
|
github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect
|
||||||
github.com/cbergoon/merkletree v0.2.0 // indirect
|
github.com/cbergoon/merkletree v0.2.0 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||||
|
|
@ -238,6 +239,7 @@ require (
|
||||||
golang.org/x/oauth2 v0.10.0 // indirect
|
golang.org/x/oauth2 v0.10.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect
|
||||||
|
gotest.tools/v3 v3.5.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|
@ -259,13 +261,13 @@ require (
|
||||||
google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 // indirect
|
google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/cosmos/cosmos-sdk => github.com/maticnetwork/cosmos-sdk v0.37.5-0.20231005133937-b1eb1f90feb7
|
replace github.com/cosmos/cosmos-sdk => github.com/maticnetwork/cosmos-sdk v0.38.4
|
||||||
|
|
||||||
replace github.com/tendermint/tendermint => github.com/maticnetwork/tendermint v0.26.0-dev0.0.20231005133805-2bb6a831bb2e
|
replace github.com/tendermint/tendermint => github.com/maticnetwork/tendermint v0.33.0
|
||||||
|
|
||||||
replace github.com/tendermint/tm-db => github.com/tendermint/tm-db v0.2.0
|
replace github.com/tendermint/tm-db => github.com/tendermint/tm-db v0.2.0
|
||||||
|
|
||||||
replace github.com/ethereum/go-ethereum => github.com/maticnetwork/bor v1.0.4
|
replace github.com/ethereum/go-ethereum => github.com/maticnetwork/bor v1.0.6
|
||||||
|
|
||||||
replace github.com/Masterminds/goutils => github.com/Masterminds/goutils v1.1.1
|
replace github.com/Masterminds/goutils => github.com/Masterminds/goutils v1.1.1
|
||||||
|
|
||||||
|
|
|
||||||
32
go.sum
32
go.sum
|
|
@ -826,17 +826,13 @@ github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/
|
||||||
github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI=
|
github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI=
|
||||||
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo=
|
|
||||||
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
|
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc=
|
github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
|
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y=
|
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.18.43 h1:IgdUtTRvUDC6eiJBqU6vh7bHFNAEBjQ8S+qJ7zVhDOs=
|
github.com/aws/aws-sdk-go-v2/config v1.18.43 h1:IgdUtTRvUDC6eiJBqU6vh7bHFNAEBjQ8S+qJ7zVhDOs=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.18.43/go.mod h1:NiFev8qlgg8MPzw3fO/EwzMZeZwlJEKGwfpjRPA9Nvw=
|
github.com/aws/aws-sdk-go-v2/config v1.18.43/go.mod h1:NiFev8qlgg8MPzw3fO/EwzMZeZwlJEKGwfpjRPA9Nvw=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo=
|
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.13.41 h1:dgbKq1tamtboYAKSXWbqL0lKO9rmEzEhbZFh9JQW/Bg=
|
github.com/aws/aws-sdk-go-v2/credentials v1.13.41 h1:dgbKq1tamtboYAKSXWbqL0lKO9rmEzEhbZFh9JQW/Bg=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.13.41/go.mod h1:cc3Fn7DkKbJalPtQnudHGZZ8ml9+hwtbc1CJONsYYqk=
|
github.com/aws/aws-sdk-go-v2/credentials v1.13.41/go.mod h1:cc3Fn7DkKbJalPtQnudHGZZ8ml9+hwtbc1CJONsYYqk=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM=
|
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 h1:uDZJF1hu0EVT/4bogChk8DyjSF6fof6uL/0Y26Ma7Fg=
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 h1:uDZJF1hu0EVT/4bogChk8DyjSF6fof6uL/0Y26Ma7Fg=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8=
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g=
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g=
|
||||||
|
|
@ -846,21 +842,16 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.43 h1:g+qlObJH4Kn4n21g69DjspU0hKTjWtq7naZ9OLCv0ew=
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.43 h1:g+qlObJH4Kn4n21g69DjspU0hKTjWtq7naZ9OLCv0ew=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.43/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo=
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.43/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo=
|
||||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
|
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI=
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
|
||||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.29.5 h1:6wPin3WPyQpBl/QZsoNUnqvXy4Ib1Ygv7VagGvLKJAc=
|
github.com/aws/aws-sdk-go-v2/service/route53 v1.29.5 h1:6wPin3WPyQpBl/QZsoNUnqvXy4Ib1Ygv7VagGvLKJAc=
|
||||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.29.5/go.mod h1:6zl0jh5MUKuJ07eHn3MNeLOVutxwl8m9vQltZjoLakM=
|
github.com/aws/aws-sdk-go-v2/service/route53 v1.29.5/go.mod h1:6zl0jh5MUKuJ07eHn3MNeLOVutxwl8m9vQltZjoLakM=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.15.0 h1:vuGK1vHNP9zx0PfOrtPumbwR2af0ATQ1Z2H6p75AgRQ=
|
github.com/aws/aws-sdk-go-v2/service/sso v1.15.0 h1:vuGK1vHNP9zx0PfOrtPumbwR2af0ATQ1Z2H6p75AgRQ=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.15.0/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4=
|
github.com/aws/aws-sdk-go-v2/service/sso v1.15.0/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.1 h1:8lKOidPkmSmfUtiTgtdXWgaKItCZ/g75/jEk6Ql6GsA=
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.1 h1:8lKOidPkmSmfUtiTgtdXWgaKItCZ/g75/jEk6Ql6GsA=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.1/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4=
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.1/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM=
|
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.23.0 h1:pyvfUqkNLMipdKNAtu7OVbRxUrR2BMaKccIPpk/Hkak=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.23.0 h1:pyvfUqkNLMipdKNAtu7OVbRxUrR2BMaKccIPpk/Hkak=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.23.0/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.23.0/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU=
|
||||||
github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw=
|
|
||||||
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||||
github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ=
|
github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ=
|
||||||
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
|
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
|
||||||
|
|
@ -886,15 +877,14 @@ github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQ
|
||||||
github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0=
|
github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0=
|
||||||
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
|
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
|
||||||
github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA=
|
github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA=
|
||||||
github.com/btcsuite/btcd v0.22.3 h1:kYNaWFvOw6xvqP0vR20RP1Zq1DVMBxEO8QN5d1/EfNg=
|
|
||||||
github.com/btcsuite/btcd v0.22.3/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y=
|
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
|
github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
|
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
|
github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
|
github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
|
||||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
||||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
|
|
||||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
||||||
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9w277ABlgELO7H04IM=
|
||||||
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
||||||
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
|
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
|
||||||
github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
|
github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
|
||||||
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
|
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
|
||||||
|
|
@ -973,7 +963,6 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE
|
||||||
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
|
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
|
||||||
github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=
|
github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=
|
||||||
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
|
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
|
||||||
github.com/consensys/gnark-crypto v0.9.1-0.20230105202408-1a7a29904a7c/go.mod h1:CkbdF9hbRidRJYMRzmfX8TMOr95I2pYXRHF18MzRrvA=
|
|
||||||
github.com/consensys/gnark-crypto v0.12.0 h1:1OnSpOykNkUIBIBJKdhwy2p0JlW5o+Az02ICzZmvvdg=
|
github.com/consensys/gnark-crypto v0.12.0 h1:1OnSpOykNkUIBIBJKdhwy2p0JlW5o+Az02ICzZmvvdg=
|
||||||
github.com/consensys/gnark-crypto v0.12.0/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
|
github.com/consensys/gnark-crypto v0.12.0/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
|
||||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
|
|
@ -1632,17 +1621,17 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN
|
||||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||||
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
|
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
|
||||||
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
|
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
|
||||||
github.com/maticnetwork/bor v1.0.4/go.mod h1:HzDbqdJMBJMIF7b3yxaeWGU6vEIrCZkIouGhJ1q3Ybc=
|
github.com/maticnetwork/bor v1.0.6/go.mod h1:G6yfIs9dMYF0hP7BdhEFtCjpUEYqXBag+q/Uit4cqmQ=
|
||||||
github.com/maticnetwork/cosmos-sdk v0.37.5-0.20231005133937-b1eb1f90feb7 h1:6U6WvtWQHUxzNqlo2UkcdmPfEIoyYg+c08j31nCgRZg=
|
github.com/maticnetwork/cosmos-sdk v0.38.4 h1:PAfkMXzHDHJoAf4bXQL4UWgwbu/U3yYuXoXxPhXdpBw=
|
||||||
github.com/maticnetwork/cosmos-sdk v0.37.5-0.20231005133937-b1eb1f90feb7/go.mod h1:N3NySXu6ob1GKEJSUwp3vE2Ri9G1vzk0T0tNGodTBoU=
|
github.com/maticnetwork/cosmos-sdk v0.38.4/go.mod h1:NbuVdUoqlRF6RrFJp27hpbqSoRB8cJJfUxCzUJWtaLA=
|
||||||
github.com/maticnetwork/crand v1.0.2 h1:Af0tAivC8zrxXDpGWNWVT/0s1fOz8w0eRbahZgURS8I=
|
github.com/maticnetwork/crand v1.0.2 h1:Af0tAivC8zrxXDpGWNWVT/0s1fOz8w0eRbahZgURS8I=
|
||||||
github.com/maticnetwork/crand v1.0.2/go.mod h1:/NRNL3bj2eYdqpWmoIP5puxndTpi0XRxpj5ZKxfHjyg=
|
github.com/maticnetwork/crand v1.0.2/go.mod h1:/NRNL3bj2eYdqpWmoIP5puxndTpi0XRxpj5ZKxfHjyg=
|
||||||
github.com/maticnetwork/heimdall v0.3.1-0.20230227104835-81bd1055b0bc h1:7wEWQbYs6ESGsVBhjiVp7fZZyfaN4lg4XYLOLfRIpmY=
|
github.com/maticnetwork/heimdall v0.3.1-0.20230227104835-81bd1055b0bc h1:7wEWQbYs6ESGsVBhjiVp7fZZyfaN4lg4XYLOLfRIpmY=
|
||||||
github.com/maticnetwork/heimdall v0.3.1-0.20230227104835-81bd1055b0bc/go.mod h1:P2DoKhovYP9G9Kj2EH/zHaiRJF1jNU7ZJOyelG4UCa8=
|
github.com/maticnetwork/heimdall v0.3.1-0.20230227104835-81bd1055b0bc/go.mod h1:P2DoKhovYP9G9Kj2EH/zHaiRJF1jNU7ZJOyelG4UCa8=
|
||||||
github.com/maticnetwork/polyproto v0.0.3-0.20230216113155-340ea926ca53 h1:PjYV+lghs106JKkrYgOnrsfDLoTc11BxZd4rUa4Rus4=
|
github.com/maticnetwork/polyproto v0.0.3-0.20230216113155-340ea926ca53 h1:PjYV+lghs106JKkrYgOnrsfDLoTc11BxZd4rUa4Rus4=
|
||||||
github.com/maticnetwork/polyproto v0.0.3-0.20230216113155-340ea926ca53/go.mod h1:e1mU2EXSwEpn5jM7GfNwu3AupsV6WAGoPFFfswXOF0o=
|
github.com/maticnetwork/polyproto v0.0.3-0.20230216113155-340ea926ca53/go.mod h1:e1mU2EXSwEpn5jM7GfNwu3AupsV6WAGoPFFfswXOF0o=
|
||||||
github.com/maticnetwork/tendermint v0.26.0-dev0.0.20231005133805-2bb6a831bb2e h1:gvjyv7uPmtfWe4mX+7Bmy02Ftal2Mfoadf+dXxGVBYI=
|
github.com/maticnetwork/tendermint v0.33.0 h1:f+vORM02BoUOlCvnu3Zjw5rv6l6JSNVchWjH03rUuR8=
|
||||||
github.com/maticnetwork/tendermint v0.26.0-dev0.0.20231005133805-2bb6a831bb2e/go.mod h1:D2fcnxGk6bje+LoPwImuKSSYLiK7/G06IynGNDSEcJk=
|
github.com/maticnetwork/tendermint v0.33.0/go.mod h1:D2fcnxGk6bje+LoPwImuKSSYLiK7/G06IynGNDSEcJk=
|
||||||
github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
|
github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
|
||||||
github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs=
|
github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs=
|
||||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||||
|
|
@ -2021,7 +2010,6 @@ github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKN
|
||||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||||
github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
|
github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
|
||||||
github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
|
github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
|
||||||
github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
|
|
||||||
github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4=
|
github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4=
|
||||||
github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
|
github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
|
||||||
github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA=
|
github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA=
|
||||||
|
|
@ -2232,7 +2220,6 @@ golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0
|
||||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220507011949-2cf3adece122/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220507011949-2cf3adece122/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
|
||||||
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
||||||
|
|
@ -2598,6 +2585,7 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||||
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
|
|
@ -3114,8 +3102,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||||
gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
|
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
|
||||||
gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
|
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -41,6 +41,7 @@ func TestFlagsWithoutConfig(t *testing.T) {
|
||||||
|
|
||||||
require.Equal(t, c.config.Identity, "")
|
require.Equal(t, c.config.Identity, "")
|
||||||
require.Equal(t, c.config.DataDir, "./data")
|
require.Equal(t, c.config.DataDir, "./data")
|
||||||
|
require.Equal(t, c.config.KeyStoreDir, "")
|
||||||
require.Equal(t, c.config.Verbosity, 3)
|
require.Equal(t, c.config.Verbosity, 3)
|
||||||
require.Equal(t, c.config.RPCBatchLimit, uint64(0))
|
require.Equal(t, c.config.RPCBatchLimit, uint64(0))
|
||||||
require.Equal(t, c.config.Snapshot, true)
|
require.Equal(t, c.config.Snapshot, true)
|
||||||
|
|
@ -74,6 +75,7 @@ func TestFlagsWithConfig(t *testing.T) {
|
||||||
|
|
||||||
require.Equal(t, c.config.Identity, "")
|
require.Equal(t, c.config.Identity, "")
|
||||||
require.Equal(t, c.config.DataDir, "./data")
|
require.Equal(t, c.config.DataDir, "./data")
|
||||||
|
require.Equal(t, c.config.KeyStoreDir, "./keystore")
|
||||||
require.Equal(t, c.config.Verbosity, 3)
|
require.Equal(t, c.config.Verbosity, 3)
|
||||||
require.Equal(t, c.config.RPCBatchLimit, uint64(0))
|
require.Equal(t, c.config.RPCBatchLimit, uint64(0))
|
||||||
require.Equal(t, c.config.Snapshot, true)
|
require.Equal(t, c.config.Snapshot, true)
|
||||||
|
|
@ -105,6 +107,7 @@ func TestFlagsWithConfigAndFlags(t *testing.T) {
|
||||||
"--config", "./testdata/test.toml",
|
"--config", "./testdata/test.toml",
|
||||||
"--identity", "Anon",
|
"--identity", "Anon",
|
||||||
"--datadir", "",
|
"--datadir", "",
|
||||||
|
"--keystore", "",
|
||||||
"--verbosity", "0",
|
"--verbosity", "0",
|
||||||
"--rpc.batchlimit", "5",
|
"--rpc.batchlimit", "5",
|
||||||
"--snapshot=false",
|
"--snapshot=false",
|
||||||
|
|
@ -128,6 +131,7 @@ func TestFlagsWithConfigAndFlags(t *testing.T) {
|
||||||
|
|
||||||
require.Equal(t, c.config.Identity, "Anon")
|
require.Equal(t, c.config.Identity, "Anon")
|
||||||
require.Equal(t, c.config.DataDir, "")
|
require.Equal(t, c.config.DataDir, "")
|
||||||
|
require.Equal(t, c.config.KeyStoreDir, "")
|
||||||
require.Equal(t, c.config.Verbosity, 0)
|
require.Equal(t, c.config.Verbosity, 0)
|
||||||
require.Equal(t, c.config.RPCBatchLimit, uint64(5))
|
require.Equal(t, c.config.RPCBatchLimit, uint64(5))
|
||||||
require.Equal(t, c.config.Snapshot, false)
|
require.Equal(t, c.config.Snapshot, false)
|
||||||
|
|
|
||||||
|
|
@ -605,6 +605,7 @@ func DefaultConfig() *Config {
|
||||||
DataDir: DefaultDataDir(),
|
DataDir: DefaultDataDir(),
|
||||||
Ancient: "",
|
Ancient: "",
|
||||||
DBEngine: "leveldb",
|
DBEngine: "leveldb",
|
||||||
|
KeyStoreDir: "",
|
||||||
Logging: &LoggingConfig{
|
Logging: &LoggingConfig{
|
||||||
Vmodule: "",
|
Vmodule: "",
|
||||||
Json: false,
|
Json: false,
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ func TestConfigLegacy(t *testing.T) {
|
||||||
|
|
||||||
testConfig.Identity = ""
|
testConfig.Identity = ""
|
||||||
testConfig.DataDir = "./data"
|
testConfig.DataDir = "./data"
|
||||||
|
testConfig.KeyStoreDir = "./keystore"
|
||||||
testConfig.Verbosity = 3
|
testConfig.Verbosity = 3
|
||||||
testConfig.RPCBatchLimit = 0
|
testConfig.RPCBatchLimit = 0
|
||||||
testConfig.Snapshot = true
|
testConfig.Snapshot = true
|
||||||
|
|
|
||||||
|
|
@ -64,9 +64,10 @@ func (c *Command) Flags(config *Config) *flagset.Flagset {
|
||||||
Default: c.cliConfig.DBEngine,
|
Default: c.cliConfig.DBEngine,
|
||||||
})
|
})
|
||||||
f.StringFlag(&flagset.StringFlag{
|
f.StringFlag(&flagset.StringFlag{
|
||||||
Name: "keystore",
|
Name: "keystore",
|
||||||
Usage: "Path of the directory where keystores are located",
|
Usage: "Path of the directory where keystores are located",
|
||||||
Value: &c.cliConfig.KeyStoreDir,
|
Value: &c.cliConfig.KeyStoreDir,
|
||||||
|
Default: c.cliConfig.KeyStoreDir,
|
||||||
})
|
})
|
||||||
f.Uint64Flag(&flagset.Uint64Flag{
|
f.Uint64Flag(&flagset.Uint64Flag{
|
||||||
Name: "rpc.batchlimit",
|
Name: "rpc.batchlimit",
|
||||||
|
|
|
||||||
1
internal/cli/server/testdata/test.toml
vendored
1
internal/cli/server/testdata/test.toml
vendored
|
|
@ -1,5 +1,6 @@
|
||||||
identity = ""
|
identity = ""
|
||||||
datadir = "./data"
|
datadir = "./data"
|
||||||
|
keystore = "./keystore"
|
||||||
verbosity = 3
|
verbosity = 3
|
||||||
"rpc.batchlimit" = 0
|
"rpc.batchlimit" = 0
|
||||||
snapshot = true
|
snapshot = true
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,11 @@ func (api *BorAPI) SendRawTransactionConditional(ctx context.Context, input hexu
|
||||||
}
|
}
|
||||||
|
|
||||||
currentHeader := api.b.CurrentHeader()
|
currentHeader := api.b.CurrentHeader()
|
||||||
currentState, _, _ := api.b.StateAndHeaderByNumber(ctx, rpc.BlockNumber(currentHeader.Number.Int64()))
|
currentState, _, err := api.b.StateAndHeaderByNumber(ctx, rpc.BlockNumber(currentHeader.Number.Int64()))
|
||||||
|
|
||||||
|
if currentState == nil || err != nil {
|
||||||
|
return common.Hash{}, err
|
||||||
|
}
|
||||||
|
|
||||||
// check block number range
|
// check block number range
|
||||||
if err := currentHeader.ValidateBlockNumberOptions4337(options.BlockNumberMin, options.BlockNumberMax); err != nil {
|
if err := currentHeader.ValidateBlockNumberOptions4337(options.BlockNumberMin, options.BlockNumberMax); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -341,7 +341,7 @@ func (pool *TxPool) setNewHead(head *types.Header) {
|
||||||
next := new(big.Int).Add(head.Number, big.NewInt(1))
|
next := new(big.Int).Add(head.Number, big.NewInt(1))
|
||||||
pool.istanbul = pool.config.IsIstanbul(next)
|
pool.istanbul = pool.config.IsIstanbul(next)
|
||||||
pool.eip2718 = pool.config.IsBerlin(next)
|
pool.eip2718 = pool.config.IsBerlin(next)
|
||||||
pool.shanghai = pool.config.IsShanghai(uint64(time.Now().Unix()))
|
pool.shanghai = pool.config.IsShanghai(next)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop stops the light transaction pool
|
// Stop stops the light transaction pool
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,5 +1,5 @@
|
||||||
Source: bor
|
Source: bor
|
||||||
Version: 1.0.6
|
Version: 1.1.0-beta4
|
||||||
Section: develop
|
Section: develop
|
||||||
Priority: standard
|
Priority: standard
|
||||||
Maintainer: Polygon <release-team@polygon.technology>
|
Maintainer: Polygon <release-team@polygon.technology>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
Source: bor
|
Source: bor
|
||||||
Version: 1.0.6
|
Version: 1.1.0-beta4
|
||||||
Section: develop
|
Section: develop
|
||||||
Priority: standard
|
Priority: standard
|
||||||
Maintainer: Polygon <release-team@polygon.technology>
|
Maintainer: Polygon <release-team@polygon.technology>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
Source: bor-profile
|
Source: bor-profile
|
||||||
Version: 1.0.6
|
Version: 1.1.0-beta4
|
||||||
Section: develop
|
Section: develop
|
||||||
Priority: standard
|
Priority: standard
|
||||||
Maintainer: Polygon <release-team@polygon.technology>
|
Maintainer: Polygon <release-team@polygon.technology>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
Source: bor-profile
|
Source: bor-profile
|
||||||
Version: 1.0.6
|
Version: 1.1.0-beta4
|
||||||
Section: develop
|
Section: develop
|
||||||
Priority: standard
|
Priority: standard
|
||||||
Maintainer: Polygon <release-team@polygon.technology>
|
Maintainer: Polygon <release-team@polygon.technology>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
Source: bor-profile
|
Source: bor-profile
|
||||||
Version: 1.0.6
|
Version: 1.1.0-beta4
|
||||||
Section: develop
|
Section: develop
|
||||||
Priority: standard
|
Priority: standard
|
||||||
Maintainer: Polygon <release-team@polygon.technology>
|
Maintainer: Polygon <release-team@polygon.technology>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
Source: bor-profile
|
Source: bor-profile
|
||||||
Version: 1.0.6
|
Version: 1.1.0-beta4
|
||||||
Section: develop
|
Section: develop
|
||||||
Priority: standard
|
Priority: standard
|
||||||
Maintainer: Polygon <release-team@polygon.technology>
|
Maintainer: Polygon <release-team@polygon.technology>
|
||||||
|
|
|
||||||
162
params/config.go
162
params/config.go
File diff suppressed because one or more lines are too long
|
|
@ -22,6 +22,8 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"gotest.tools/assert"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common/math"
|
"github.com/ethereum/go-ethereum/common/math"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -94,22 +96,11 @@ func TestCheckCompatible(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
stored: &ChainConfig{ShanghaiTime: newUint64(10)},
|
stored: &ChainConfig{ShanghaiBlock: big.NewInt(30)},
|
||||||
new: &ChainConfig{ShanghaiTime: newUint64(20)},
|
new: &ChainConfig{ShanghaiBlock: big.NewInt(30)},
|
||||||
headTimestamp: 9,
|
headTimestamp: 9,
|
||||||
wantErr: nil,
|
wantErr: nil,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
stored: &ChainConfig{ShanghaiTime: newUint64(10)},
|
|
||||||
new: &ChainConfig{ShanghaiTime: newUint64(20)},
|
|
||||||
headTimestamp: 25,
|
|
||||||
wantErr: &ConfigCompatError{
|
|
||||||
What: "Shanghai fork timestamp",
|
|
||||||
StoredTime: newUint64(10),
|
|
||||||
NewTime: newUint64(20),
|
|
||||||
RewindToTime: 9,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
|
@ -124,24 +115,66 @@ func TestConfigRules(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
c := &ChainConfig{
|
c := &ChainConfig{
|
||||||
ShanghaiTime: newUint64(500),
|
ShanghaiBlock: big.NewInt(10),
|
||||||
}
|
}
|
||||||
|
|
||||||
var stamp uint64
|
block := new(big.Int)
|
||||||
|
|
||||||
if r := c.Rules(big.NewInt(0), true, stamp); r.IsShanghai {
|
if r := c.Rules(block, true, 0); r.IsShanghai {
|
||||||
t.Errorf("expected %v to not be shanghai", stamp)
|
t.Errorf("expected %v to not be shanghai", 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
stamp = 500
|
block.SetInt64(10)
|
||||||
|
|
||||||
if r := c.Rules(big.NewInt(0), true, stamp); !r.IsShanghai {
|
if r := c.Rules(block, true, 0); !r.IsShanghai {
|
||||||
t.Errorf("expected %v to be shanghai", stamp)
|
t.Errorf("expected %v to be shanghai", 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
stamp = math.MaxInt64
|
block = block.SetInt64(math.MaxInt64)
|
||||||
|
|
||||||
if r := c.Rules(big.NewInt(0), true, stamp); !r.IsShanghai {
|
if r := c.Rules(block, true, 0); !r.IsShanghai {
|
||||||
t.Errorf("expected %v to be shanghai", stamp)
|
t.Errorf("expected %v to be shanghai", 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBorKeyValueConfigHelper(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
backupMultiplier := map[string]uint64{
|
||||||
|
"0": 2,
|
||||||
|
"25275000": 5,
|
||||||
|
"29638656": 2,
|
||||||
|
}
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(backupMultiplier, 0), uint64(2))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(backupMultiplier, 1), uint64(2))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(backupMultiplier, 25275000-1), uint64(2))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(backupMultiplier, 25275000), uint64(5))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(backupMultiplier, 25275000+1), uint64(5))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(backupMultiplier, 29638656-1), uint64(5))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(backupMultiplier, 29638656), uint64(2))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(backupMultiplier, 29638656+1), uint64(2))
|
||||||
|
|
||||||
|
config := map[string]uint64{
|
||||||
|
"0": 1,
|
||||||
|
"90000000": 2,
|
||||||
|
"100000000": 3,
|
||||||
|
}
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(config, 0), uint64(1))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(config, 1), uint64(1))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(config, 90000000-1), uint64(1))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(config, 90000000), uint64(2))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(config, 90000000+1), uint64(2))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(config, 100000000-1), uint64(2))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(config, 100000000), uint64(3))
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(config, 100000000+1), uint64(3))
|
||||||
|
|
||||||
|
burntContract := map[string]string{
|
||||||
|
"22640000": "0x70bcA57F4579f58670aB2d18Ef16e02C17553C38",
|
||||||
|
"41824608": "0x617b94CCCC2511808A3C9478ebb96f455CF167aA",
|
||||||
|
}
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(burntContract, 22640000), "0x70bcA57F4579f58670aB2d18Ef16e02C17553C38")
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(burntContract, 22640000+1), "0x70bcA57F4579f58670aB2d18Ef16e02C17553C38")
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(burntContract, 41824608-1), "0x70bcA57F4579f58670aB2d18Ef16e02C17553C38")
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(burntContract, 41824608), "0x617b94CCCC2511808A3C9478ebb96f455CF167aA")
|
||||||
|
assert.Equal(t, borKeyValueConfigHelper(burntContract, 41824608+1), "0x617b94CCCC2511808A3C9478ebb96f455CF167aA")
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
VersionMajor = 1 // Major version component of the current release
|
VersionMajor = 1 // Major version component of the current release
|
||||||
VersionMinor = 0 // Minor version component of the current release
|
VersionMinor = 1 // Minor version component of the current release
|
||||||
VersionPatch = 6 // Patch version component of the current release
|
VersionPatch = 0 // Patch version component of the current release
|
||||||
VersionMeta = "" // Version metadata to append to the version string
|
VersionMeta = "beta4" // Version metadata to append to the version string
|
||||||
)
|
)
|
||||||
|
|
||||||
var GitCommit string
|
var GitCommit string
|
||||||
|
|
|
||||||
|
|
@ -969,6 +969,290 @@ func TestEIP1559Transition(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBurnContract(t *testing.T) {
|
||||||
|
var (
|
||||||
|
aa = common.HexToAddress("0x000000000000000000000000000000000000aaaa")
|
||||||
|
|
||||||
|
// Generate a canonical chain to act as the main dataset
|
||||||
|
db = rawdb.NewMemoryDatabase()
|
||||||
|
engine = ethash.NewFaker()
|
||||||
|
|
||||||
|
// A sender who makes transactions, has some funds
|
||||||
|
key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
||||||
|
key2, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a")
|
||||||
|
key3, _ = crypto.HexToECDSA("225171aed3793cba1c029832886d69785b7e77a54a44211226b447aa2d16b058")
|
||||||
|
|
||||||
|
addr1 = crypto.PubkeyToAddress(key1.PublicKey)
|
||||||
|
addr2 = crypto.PubkeyToAddress(key2.PublicKey)
|
||||||
|
addr3 = crypto.PubkeyToAddress(key3.PublicKey)
|
||||||
|
funds = new(big.Int).Mul(common.Big1, big.NewInt(params.Ether))
|
||||||
|
gspec = &core.Genesis{
|
||||||
|
Config: params.BorUnittestChainConfig,
|
||||||
|
Alloc: core.GenesisAlloc{
|
||||||
|
addr1: {Balance: funds},
|
||||||
|
addr2: {Balance: funds},
|
||||||
|
addr3: {Balance: funds},
|
||||||
|
// The address 0xAAAA sloads 0x00 and 0x01
|
||||||
|
aa: {
|
||||||
|
Code: []byte{
|
||||||
|
byte(vm.PC),
|
||||||
|
byte(vm.PC),
|
||||||
|
byte(vm.SLOAD),
|
||||||
|
byte(vm.SLOAD),
|
||||||
|
},
|
||||||
|
Nonce: 0,
|
||||||
|
Balance: big.NewInt(0),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
gspec.Config.BerlinBlock = common.Big0
|
||||||
|
gspec.Config.LondonBlock = common.Big0
|
||||||
|
gspec.Config.Bor.BurntContract = map[string]string{
|
||||||
|
"0": "0x000000000000000000000000000000000000aaab",
|
||||||
|
"1": "0x000000000000000000000000000000000000aaac",
|
||||||
|
"2": "0x000000000000000000000000000000000000aaad",
|
||||||
|
"3": "0x000000000000000000000000000000000000aaae",
|
||||||
|
}
|
||||||
|
genesis := gspec.MustCommit(db)
|
||||||
|
signer := types.LatestSigner(gspec.Config)
|
||||||
|
|
||||||
|
blocks, _ := core.GenerateChain(gspec.Config, genesis, engine, db, 1, func(i int, b *core.BlockGen) {
|
||||||
|
b.SetCoinbase(common.Address{1})
|
||||||
|
// One transaction to 0xAAAA
|
||||||
|
accesses := types.AccessList{types.AccessTuple{
|
||||||
|
Address: aa,
|
||||||
|
StorageKeys: []common.Hash{{0}},
|
||||||
|
}}
|
||||||
|
|
||||||
|
txdata := &types.DynamicFeeTx{
|
||||||
|
ChainID: gspec.Config.ChainID,
|
||||||
|
Nonce: 0,
|
||||||
|
To: &aa,
|
||||||
|
Gas: 30000,
|
||||||
|
GasFeeCap: newGwei(5),
|
||||||
|
GasTipCap: big.NewInt(2),
|
||||||
|
AccessList: accesses,
|
||||||
|
Data: []byte{},
|
||||||
|
}
|
||||||
|
tx := types.NewTx(txdata)
|
||||||
|
tx, _ = types.SignTx(tx, signer, key1)
|
||||||
|
|
||||||
|
b.AddTx(tx)
|
||||||
|
})
|
||||||
|
|
||||||
|
diskdb := rawdb.NewMemoryDatabase()
|
||||||
|
gspec.MustCommit(diskdb)
|
||||||
|
|
||||||
|
chain, err := core.NewBlockChain(diskdb, nil, gspec, nil, engine, vm.Config{}, nil, nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to create tester chain: %v", err)
|
||||||
|
}
|
||||||
|
if n, err := chain.InsertChain(blocks); err != nil {
|
||||||
|
t.Fatalf("block %d: failed to insert into chain: %v", n, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
block := chain.GetBlockByNumber(1)
|
||||||
|
|
||||||
|
// 1+2: Ensure EIP-1559 access lists are accounted for via gas usage.
|
||||||
|
expectedGas := params.TxGas + params.TxAccessListAddressGas + params.TxAccessListStorageKeyGas +
|
||||||
|
vm.GasQuickStep*2 + params.WarmStorageReadCostEIP2929 + params.ColdSloadCostEIP2929
|
||||||
|
if block.GasUsed() != expectedGas {
|
||||||
|
t.Fatalf("incorrect amount of gas spent: expected %d, got %d", expectedGas, block.GasUsed())
|
||||||
|
}
|
||||||
|
|
||||||
|
state, _ := chain.State()
|
||||||
|
|
||||||
|
// 3: Ensure that miner received only the tx's tip.
|
||||||
|
actual := state.GetBalance(block.Coinbase())
|
||||||
|
expected := new(big.Int).Add(
|
||||||
|
new(big.Int).SetUint64(block.GasUsed()*block.Transactions()[0].GasTipCap().Uint64()),
|
||||||
|
ethash.ConstantinopleBlockReward,
|
||||||
|
)
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("miner balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
// check burnt contract balance
|
||||||
|
actual = state.GetBalance(common.HexToAddress(gspec.Config.Bor.CalculateBurntContract(block.NumberU64())))
|
||||||
|
expected = new(big.Int).Mul(new(big.Int).SetUint64(block.GasUsed()), block.BaseFee())
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("burnt contract balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4: Ensure the tx sender paid for the gasUsed * (tip + block baseFee).
|
||||||
|
actual = new(big.Int).Sub(funds, state.GetBalance(addr1))
|
||||||
|
expected = new(big.Int).SetUint64(block.GasUsed() * (block.Transactions()[0].GasTipCap().Uint64() + block.BaseFee().Uint64()))
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("sender balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
blocks, _ = core.GenerateChain(gspec.Config, block, engine, db, 1, func(i int, b *core.BlockGen) {
|
||||||
|
b.SetCoinbase(common.Address{2})
|
||||||
|
|
||||||
|
txdata := &types.LegacyTx{
|
||||||
|
Nonce: 0,
|
||||||
|
To: &aa,
|
||||||
|
Gas: 30000,
|
||||||
|
GasPrice: newGwei(5),
|
||||||
|
}
|
||||||
|
tx := types.NewTx(txdata)
|
||||||
|
tx, _ = types.SignTx(tx, signer, key2)
|
||||||
|
|
||||||
|
b.AddTx(tx)
|
||||||
|
})
|
||||||
|
|
||||||
|
if n, err := chain.InsertChain(blocks); err != nil {
|
||||||
|
t.Fatalf("block %d: failed to insert into chain: %v", n, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
block = chain.GetBlockByNumber(2)
|
||||||
|
state, _ = chain.State()
|
||||||
|
effectiveTip := block.Transactions()[0].GasTipCap().Uint64() - block.BaseFee().Uint64()
|
||||||
|
|
||||||
|
// 6+5: Ensure that miner received only the tx's effective tip.
|
||||||
|
actual = state.GetBalance(block.Coinbase())
|
||||||
|
expected = new(big.Int).Add(
|
||||||
|
new(big.Int).SetUint64(block.GasUsed()*effectiveTip),
|
||||||
|
ethash.ConstantinopleBlockReward,
|
||||||
|
)
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("miner balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
// check burnt contract balance
|
||||||
|
actual = state.GetBalance(common.HexToAddress(gspec.Config.Bor.CalculateBurntContract(block.NumberU64())))
|
||||||
|
expected = new(big.Int).Mul(new(big.Int).SetUint64(block.GasUsed()), block.BaseFee())
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("burnt contract balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4: Ensure the tx sender paid for the gasUsed * (effectiveTip + block baseFee).
|
||||||
|
actual = new(big.Int).Sub(funds, state.GetBalance(addr2))
|
||||||
|
expected = new(big.Int).SetUint64(block.GasUsed() * (effectiveTip + block.BaseFee().Uint64()))
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("sender balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
blocks, _ = core.GenerateChain(gspec.Config, block, engine, db, 1, func(i int, b *core.BlockGen) {
|
||||||
|
b.SetCoinbase(common.Address{3})
|
||||||
|
|
||||||
|
txdata := &types.LegacyTx{
|
||||||
|
Nonce: 0,
|
||||||
|
To: &aa,
|
||||||
|
Gas: 30000,
|
||||||
|
GasPrice: newGwei(5),
|
||||||
|
}
|
||||||
|
tx := types.NewTx(txdata)
|
||||||
|
tx, _ = types.SignTx(tx, signer, key3)
|
||||||
|
|
||||||
|
b.AddTx(tx)
|
||||||
|
})
|
||||||
|
|
||||||
|
if n, err := chain.InsertChain(blocks); err != nil {
|
||||||
|
t.Fatalf("block %d: failed to insert into chain: %v", n, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
block = chain.GetBlockByNumber(3)
|
||||||
|
state, _ = chain.State()
|
||||||
|
effectiveTip = block.Transactions()[0].GasTipCap().Uint64() - block.BaseFee().Uint64()
|
||||||
|
|
||||||
|
// 6+5: Ensure that miner received only the tx's effective tip.
|
||||||
|
actual = state.GetBalance(block.Coinbase())
|
||||||
|
expected = new(big.Int).Add(
|
||||||
|
new(big.Int).SetUint64(block.GasUsed()*effectiveTip),
|
||||||
|
ethash.ConstantinopleBlockReward,
|
||||||
|
)
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("miner balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
// check burnt contract balance
|
||||||
|
actual = state.GetBalance(common.HexToAddress(gspec.Config.Bor.CalculateBurntContract(block.NumberU64())))
|
||||||
|
expected = new(big.Int).Mul(new(big.Int).SetUint64(block.GasUsed()), block.BaseFee())
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("burnt contract balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4: Ensure the tx sender paid for the gasUsed * (effectiveTip + block baseFee).
|
||||||
|
actual = new(big.Int).Sub(funds, state.GetBalance(addr3))
|
||||||
|
expected = new(big.Int).SetUint64(block.GasUsed() * (effectiveTip + block.BaseFee().Uint64()))
|
||||||
|
if actual.Cmp(expected) != 0 {
|
||||||
|
t.Fatalf("sender balance incorrect: expected %d, got %d", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBurnContractContractFetch(t *testing.T) {
|
||||||
|
config := params.BorUnittestChainConfig
|
||||||
|
config.Bor.BurntContract = map[string]string{
|
||||||
|
"10": "0x000000000000000000000000000000000000aaab",
|
||||||
|
"100": "0x000000000000000000000000000000000000aaad",
|
||||||
|
}
|
||||||
|
|
||||||
|
burnContractAddr10 := config.Bor.CalculateBurntContract(10)
|
||||||
|
burnContractAddr11 := config.Bor.CalculateBurntContract(11)
|
||||||
|
burnContractAddr99 := config.Bor.CalculateBurntContract(99)
|
||||||
|
burnContractAddr100 := config.Bor.CalculateBurntContract(100)
|
||||||
|
burnContractAddr101 := config.Bor.CalculateBurntContract(101)
|
||||||
|
|
||||||
|
if burnContractAddr10 != "0x000000000000000000000000000000000000aaab" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaab", burnContractAddr10)
|
||||||
|
}
|
||||||
|
if burnContractAddr11 != "0x000000000000000000000000000000000000aaab" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaab", burnContractAddr11)
|
||||||
|
}
|
||||||
|
if burnContractAddr99 != "0x000000000000000000000000000000000000aaab" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaab", burnContractAddr99)
|
||||||
|
}
|
||||||
|
if burnContractAddr100 != "0x000000000000000000000000000000000000aaad" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaad", burnContractAddr100)
|
||||||
|
}
|
||||||
|
if burnContractAddr101 != "0x000000000000000000000000000000000000aaad" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaad", burnContractAddr101)
|
||||||
|
}
|
||||||
|
|
||||||
|
config.Bor.BurntContract = map[string]string{
|
||||||
|
"10": "0x000000000000000000000000000000000000aaab",
|
||||||
|
"100": "0x000000000000000000000000000000000000aaad",
|
||||||
|
"1000": "0x000000000000000000000000000000000000aaae",
|
||||||
|
}
|
||||||
|
|
||||||
|
burnContractAddr10 = config.Bor.CalculateBurntContract(10)
|
||||||
|
burnContractAddr11 = config.Bor.CalculateBurntContract(11)
|
||||||
|
burnContractAddr99 = config.Bor.CalculateBurntContract(99)
|
||||||
|
burnContractAddr100 = config.Bor.CalculateBurntContract(100)
|
||||||
|
burnContractAddr101 = config.Bor.CalculateBurntContract(101)
|
||||||
|
burnContractAddr999 := config.Bor.CalculateBurntContract(999)
|
||||||
|
burnContractAddr1000 := config.Bor.CalculateBurntContract(1000)
|
||||||
|
burnContractAddr1001 := config.Bor.CalculateBurntContract(1001)
|
||||||
|
|
||||||
|
if burnContractAddr10 != "0x000000000000000000000000000000000000aaab" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaab", burnContractAddr10)
|
||||||
|
}
|
||||||
|
if burnContractAddr11 != "0x000000000000000000000000000000000000aaab" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaab", burnContractAddr11)
|
||||||
|
}
|
||||||
|
if burnContractAddr99 != "0x000000000000000000000000000000000000aaab" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaab", burnContractAddr99)
|
||||||
|
}
|
||||||
|
if burnContractAddr100 != "0x000000000000000000000000000000000000aaad" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaad", burnContractAddr100)
|
||||||
|
}
|
||||||
|
if burnContractAddr101 != "0x000000000000000000000000000000000000aaad" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaad", burnContractAddr101)
|
||||||
|
}
|
||||||
|
if burnContractAddr999 != "0x000000000000000000000000000000000000aaad" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaad", burnContractAddr999)
|
||||||
|
}
|
||||||
|
if burnContractAddr1000 != "0x000000000000000000000000000000000000aaae" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaae", burnContractAddr1000)
|
||||||
|
}
|
||||||
|
if burnContractAddr1001 != "0x000000000000000000000000000000000000aaae" {
|
||||||
|
t.Fatalf("incorrect burnt contract address: expected %s, got %s", "0x000000000000000000000000000000000000aaae", burnContractAddr1001)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// EIP1559 is not supported without EIP155. An error is expected
|
// EIP1559 is not supported without EIP155. An error is expected
|
||||||
func TestEIP1559TransitionWithEIP155(t *testing.T) {
|
func TestEIP1559TransitionWithEIP155(t *testing.T) {
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
|
|
@ -220,7 +220,11 @@ func buildNextBlock(t *testing.T, _bor consensus.Engine, chain *core.BlockChain,
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
// Finalize and seal the block
|
// Finalize and seal the block
|
||||||
block, _ := _bor.FinalizeAndAssemble(ctx, chain, b.header, state, b.txs, nil, b.receipts, []*types.Withdrawal{})
|
block, err := _bor.FinalizeAndAssemble(ctx, chain, b.header, state, b.txs, nil, b.receipts, nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("error finalizing block: %v", err))
|
||||||
|
}
|
||||||
|
|
||||||
// Write state changes to db
|
// Write state changes to db
|
||||||
root, err := state.Commit(chain.Config().IsEIP158(b.header.Number))
|
root, err := state.Commit(chain.Config().IsEIP158(b.header.Number))
|
||||||
|
|
|
||||||
|
|
@ -302,7 +302,7 @@ var Forks = map[string]*params.ChainConfig{
|
||||||
ArrowGlacierBlock: big.NewInt(0),
|
ArrowGlacierBlock: big.NewInt(0),
|
||||||
MergeNetsplitBlock: big.NewInt(0),
|
MergeNetsplitBlock: big.NewInt(0),
|
||||||
TerminalTotalDifficulty: big.NewInt(0),
|
TerminalTotalDifficulty: big.NewInt(0),
|
||||||
ShanghaiTime: u64(0),
|
ShanghaiBlock: big.NewInt(0),
|
||||||
Bor: params.BorUnittestChainConfig.Bor,
|
Bor: params.BorUnittestChainConfig.Bor,
|
||||||
},
|
},
|
||||||
"MergeToShanghaiAtTime15k": {
|
"MergeToShanghaiAtTime15k": {
|
||||||
|
|
@ -321,7 +321,7 @@ var Forks = map[string]*params.ChainConfig{
|
||||||
ArrowGlacierBlock: big.NewInt(0),
|
ArrowGlacierBlock: big.NewInt(0),
|
||||||
MergeNetsplitBlock: big.NewInt(0),
|
MergeNetsplitBlock: big.NewInt(0),
|
||||||
TerminalTotalDifficulty: big.NewInt(0),
|
TerminalTotalDifficulty: big.NewInt(0),
|
||||||
ShanghaiTime: u64(15_000),
|
ShanghaiBlock: big.NewInt(0),
|
||||||
Bor: params.BorUnittestChainConfig.Bor,
|
Bor: params.BorUnittestChainConfig.Bor,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue