38db9bf4e2
* ci: temp enable blobtx branch ci run; * Switch ON blobpool & ensure Cancun hardfork can occur (#2223) * feat: support blob storage & miscs; (#2229) * chainconfig: use cancun fork for BSC; * feat: fill WithdrawalsHash when BSC enable cancun fork; * rawdb: support to CRUD blobs; * freezer: support to freeze block blobs; * blockchain: add blob cache & blob query helper; * freezer: refactor addition table logic, add uts; * blobexpiry: add more extra expiry time, and logs; * parlia: implement IsDataAvailable function; * blob: refactor blob transfer logic; * blob: support config blob extra reserve; * blockchian: support to import block with blob & blobGasFee; (#2260) * blob: implement min&max gas price logic; * blockchian: support import side chain; * blobpool: reject the banned address; * blockchain: add chasing head for DA check; * params: update blob related config; * blockchain: opt data available checking performance; * params: modify blob related params; * gasprice: support BEP-336 blob gas price calculate; * blobTx: mining + brodcasting (#2253) * blobtx mining pass (#2282) * Sidecar fetching changes for 4844 (#2283) * ci: temp enable blobtx branch ci run; * Switch ON blobpool & ensure Cancun hardfork can occur (#2223) * feat: support blob storage & miscs; (#2229) * chainconfig: use cancun fork for BSC; feat: fill WithdrawalsHash when BSC enable cancun fork; * rawdb: support to CRUD blobs; * freezer: support to freeze block blobs; * blockchain: add blob cache & blob query helper; * freezer: refactor addition table logic, add uts; * blobexpiry: add more extra expiry time, and logs; * parlia: implement IsDataAvailable function; * blob: refactor blob transfer logic; * blob: support config blob extra reserve; * blockchian: support to import block with blob & blobGasFee; (#2260) * blob: implement min&max gas price logic; * blockchian: support import side chain; * blobpool: reject the banned address; * blockchain: add chasing head for DA check; * params: update blob related config; * blockchain: opt data available checking performance; * params: modify blob related params; * gasprice: support BEP-336 blob gas price calculate; * fix failed check for WithdrawalsHash (#2276) * eth: include sidecars in fitering of body * core: refactor sidecars name * eth: sidecars type refactor * core: remove extra from bad merge * eth: fix handlenewblock test after merge * Implement eth_getBlobSidecars && eth_getBlobSidecarByTxHash (#2286) * execution: add blob gas fee reward to system; * syncing: support blob syncing & DA checking; * naming: rename blobs to sidecars; * fix the semantics of WithXXX (#2293) * config: reduce sidecar cache to 1024 and rename (#2297) * fix: Withdrawals turn into empty from nil when BlockBody has Sidecars (#2301) * internal/api_test: add test case for eth_getBlobSidecars && eth_getBlobSidecarByTxHash (#2300) * consensus/misc: rollback CalcBlobFee (#2306) * flags: add new flags to override blobs' params; * freezer: fix blob ancient save error; * blobsidecar: add new sidecar struct with metadata; (#2315) * core/rawdb: optimize write block with sidecars (#2318) * core: more check for validity of sidecars * mev: add TxIndex for mev bid (#2325) * remove useless Config() (#2326) * fix WithSidecars (#2327) * fix: fix mined block sidecar issue; (#2328) * fix WithSidecars (#2329) --------- Co-authored-by: GalaIO <GalaIO@users.noreply.github.com> Co-authored-by: buddho <galaxystroller@gmail.com> Co-authored-by: Satyajit Das <emailtovamos@gmail.com> Co-authored-by: Eric <45141191+zlacfzy@users.noreply.github.com> Co-authored-by: zzzckck <152148891+zzzckck@users.noreply.github.com>
152 lines
5.6 KiB
Go
152 lines
5.6 KiB
Go
package eip3529tests
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/consensus/ethash"
|
|
"github.com/ethereum/go-ethereum/core/vm"
|
|
"github.com/ethereum/go-ethereum/params"
|
|
)
|
|
|
|
func postHertzPreShanghaiConfig() *params.ChainConfig {
|
|
config := *params.ParliaTestChainConfig
|
|
config.ShanghaiTime = nil
|
|
config.KeplerTime = nil
|
|
config.FeynmanTime = nil
|
|
config.FeynmanFixTime = nil
|
|
config.CancunTime = nil
|
|
return &config
|
|
}
|
|
|
|
func preHertzConfig() *params.ChainConfig {
|
|
config := *params.ParliaTestChainConfig
|
|
config.LondonBlock = nil
|
|
config.BerlinBlock = nil
|
|
config.HertzBlock = nil
|
|
config.HertzfixBlock = nil
|
|
config.ShanghaiTime = nil
|
|
config.KeplerTime = nil
|
|
config.FeynmanTime = nil
|
|
config.FeynmanFixTime = nil
|
|
config.CancunTime = nil
|
|
return &config
|
|
}
|
|
|
|
func TestSelfDestructGasPreHertz(t *testing.T) {
|
|
bytecode := []byte{
|
|
byte(vm.PC),
|
|
byte(vm.SELFDESTRUCT),
|
|
}
|
|
|
|
// Expected gas is (intrinsic + selfdestruct cost ) / 2
|
|
// The refund of 24000 gas (i.e. params.SelfdestructRefundGas) is not applied since refunds pre-EIP3529 are
|
|
// capped to half of the transaction's gas.
|
|
expectedGasUsed := (params.TxGas + vm.GasQuickStep + params.SelfdestructGasEIP150) / 2
|
|
TestGasUsage(t, preHertzConfig(), ethash.NewFaker(), bytecode, nil, 60_000, expectedGasUsed)
|
|
}
|
|
|
|
func TestSstoreClearGasPreHertz(t *testing.T) {
|
|
bytecode := []byte{
|
|
byte(vm.PUSH1), 0x0, // value
|
|
byte(vm.PUSH1), 0x1, // location
|
|
byte(vm.SSTORE), // Set slot[1] = 0
|
|
}
|
|
// initialize contract storage
|
|
initialStorage := make(map[common.Hash]common.Hash)
|
|
// Populate two slots
|
|
initialStorage[common.HexToHash("01")] = common.HexToHash("01")
|
|
initialStorage[common.HexToHash("02")] = common.HexToHash("02")
|
|
|
|
// Expected gas is (intrinsic + 2*pushGas + SstoreReset (a->b such that a!=0) ) / 2
|
|
// The refund of params.SstoreClearsScheduleRefundEIP2200 is not applied because of the refund cap to half the gas cost.
|
|
expectedGasUsage := (params.TxGas + 2*vm.GasFastestStep + params.SstoreResetGasEIP2200) / 2
|
|
TestGasUsage(t, preHertzConfig(), ethash.NewFaker(), bytecode, initialStorage, 60_000, expectedGasUsage)
|
|
}
|
|
|
|
func TestSstoreModifyGasPreHertz(t *testing.T) {
|
|
bytecode := []byte{
|
|
byte(vm.PUSH1), 0x3, // value
|
|
byte(vm.PUSH1), 0x1, // location
|
|
byte(vm.SSTORE), // Set slot[1] = 3
|
|
}
|
|
// initialize contract storage
|
|
initialStorage := make(map[common.Hash]common.Hash)
|
|
// Populate two slots
|
|
initialStorage[common.HexToHash("01")] = common.HexToHash("01")
|
|
initialStorage[common.HexToHash("02")] = common.HexToHash("02")
|
|
// Expected gas is intrinsic + 2*pushGas + SstoreReset (a->b such that a!=0)
|
|
// i.e. no refund
|
|
expectedGasUsed := params.TxGas + 2*vm.GasFastestStep + params.SstoreResetGasEIP2200
|
|
TestGasUsage(t, preHertzConfig(), ethash.NewFaker(), bytecode, initialStorage, 60_000, expectedGasUsed)
|
|
}
|
|
|
|
func TestSstoreGasPreHertz(t *testing.T) {
|
|
bytecode := []byte{
|
|
byte(vm.PUSH1), 0x3, // value
|
|
byte(vm.PUSH1), 0x3, // location
|
|
byte(vm.SSTORE), // Set slot[3] = 3
|
|
}
|
|
// Expected gas is intrinsic + 2*pushGas + SstoreGas
|
|
// i.e. No refund
|
|
expectedGasUsed := params.TxGas + 2*vm.GasFastestStep + params.SstoreSetGasEIP2200
|
|
TestGasUsage(t, preHertzConfig(), ethash.NewFaker(), bytecode, nil, 60_000, expectedGasUsed)
|
|
}
|
|
|
|
func TestSelfDestructGasPostHertz(t *testing.T) {
|
|
bytecode := []byte{
|
|
byte(vm.PC),
|
|
byte(vm.SELFDESTRUCT),
|
|
}
|
|
// Expected gas is intrinsic + pc + cold load (due to legacy tx) + SelfDestructGas
|
|
// i.e. No refund
|
|
expectedGasUsed := params.TxGas + vm.GasQuickStep + params.ColdAccountAccessCostEIP2929 + params.SelfdestructGasEIP150
|
|
TestGasUsage(t, postHertzPreShanghaiConfig(), ethash.NewFaker(), bytecode, nil, 60_000, expectedGasUsed)
|
|
}
|
|
|
|
func TestSstoreGasPostHertz(t *testing.T) {
|
|
bytecode := []byte{
|
|
byte(vm.PUSH1), 0x3, // value
|
|
byte(vm.PUSH1), 0x3, // location
|
|
byte(vm.SSTORE), // Set slot[3] = 3
|
|
}
|
|
// Expected gas is intrinsic + 2*pushGas + cold load (due to legacy tx) + SstoreGas
|
|
// i.e. No refund
|
|
expectedGasUsed := params.TxGas + 2*vm.GasFastestStep + params.ColdSloadCostEIP2929 + params.SstoreSetGasEIP2200
|
|
TestGasUsage(t, postHertzPreShanghaiConfig(), ethash.NewFaker(), bytecode, nil, 60_000, expectedGasUsed)
|
|
}
|
|
|
|
func TestSstoreModifyGasPostHertz(t *testing.T) {
|
|
bytecode := []byte{
|
|
byte(vm.PUSH1), 0x3, // value
|
|
byte(vm.PUSH1), 0x1, // location
|
|
byte(vm.SSTORE), // Set slot[1] = 3
|
|
}
|
|
// initialize contract storage
|
|
initialStorage := make(map[common.Hash]common.Hash)
|
|
// Populate two slots
|
|
initialStorage[common.HexToHash("01")] = common.HexToHash("01")
|
|
initialStorage[common.HexToHash("02")] = common.HexToHash("02")
|
|
// Expected gas is intrinsic + 2*pushGas + cold load (due to legacy tx) + SstoreReset (a->b such that a!=0)
|
|
// i.e. No refund
|
|
expectedGasUsed := params.TxGas + 2*vm.GasFastestStep + params.SstoreResetGasEIP2200
|
|
TestGasUsage(t, postHertzPreShanghaiConfig(), ethash.NewFaker(), bytecode, initialStorage, 60_000, expectedGasUsed)
|
|
}
|
|
|
|
func TestSstoreClearGasPostHertz(t *testing.T) {
|
|
bytecode := []byte{
|
|
byte(vm.PUSH1), 0x0, // value
|
|
byte(vm.PUSH1), 0x1, // location
|
|
byte(vm.SSTORE), // Set slot[1] = 0
|
|
}
|
|
// initialize contract storage
|
|
initialStorage := make(map[common.Hash]common.Hash)
|
|
// Populate two slots
|
|
initialStorage[common.HexToHash("01")] = common.HexToHash("01")
|
|
initialStorage[common.HexToHash("02")] = common.HexToHash("02")
|
|
|
|
// Expected gas is intrinsic + 2*pushGas + SstoreReset (a->b such that a!=0) - sstoreClearGasRefund
|
|
expectedGasUsage := params.TxGas + 2*vm.GasFastestStep + params.SstoreResetGasEIP2200 - params.SstoreClearsScheduleRefundEIP3529
|
|
TestGasUsage(t, postHertzPreShanghaiConfig(), ethash.NewFaker(), bytecode, initialStorage, 60_000, expectedGasUsage)
|
|
}
|