@@ -163,14 +163,14 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error {
163163 if err != nil {
164164 return err
165165 }
166- receipts , _ , usedGas , err := blockchain .processor .Process (block , statedb , vm.Config {})
166+ res , err := blockchain .processor .Process (block , statedb , vm.Config {})
167167 if err != nil {
168- blockchain .reportBlock (block , receipts , err )
168+ blockchain .reportBlock (block , res . Receipts , err )
169169 return err
170170 }
171- err = blockchain .validator .ValidateState (block , statedb , receipts , usedGas )
171+ err = blockchain .validator .ValidateState (block , statedb , res )
172172 if err != nil {
173- blockchain .reportBlock (block , receipts , err )
173+ blockchain .reportBlock (block , res . Receipts , err )
174174 return err
175175 }
176176
@@ -4221,3 +4221,86 @@ func TestEIP3651(t *testing.T) {
42214221 t .Fatalf ("sender balance incorrect: expected %d, got %d" , expected , actual )
42224222 }
42234223}
4224+
4225+ func TestEIP6110 (t * testing.T ) {
4226+ var (
4227+ engine = beacon .NewFaker ()
4228+
4229+ // A sender who makes transactions, has some funds
4230+ key , _ = crypto .HexToECDSA ("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291" )
4231+ addr = crypto .PubkeyToAddress (key .PublicKey )
4232+ funds = new (big.Int ).Mul (common .Big1 , big .NewInt (params .Ether ))
4233+ config = * params .AllEthashProtocolChanges
4234+ gspec = & Genesis {
4235+ Config : & config ,
4236+ Alloc : types.GenesisAlloc {
4237+ addr : {Balance : funds },
4238+ config .DepositContractAddress : {
4239+ // Simple deposit generator, source: https://gist.github.com/lightclient/54abb2af2465d6969fa6d1920b9ad9d7
4240+ Code : common .Hex2Bytes ("6080604052366103aa575f603067ffffffffffffffff811115610025576100246103ae565b5b6040519080825280601f01601f1916602001820160405280156100575781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f8151811061007d5761007c6103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f602067ffffffffffffffff8111156100c7576100c66103ae565b5b6040519080825280601f01601f1916602001820160405280156100f95781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f8151811061011f5761011e6103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f600867ffffffffffffffff811115610169576101686103ae565b5b6040519080825280601f01601f19166020018201604052801561019b5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f815181106101c1576101c06103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f606067ffffffffffffffff81111561020b5761020a6103ae565b5b6040519080825280601f01601f19166020018201604052801561023d5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f81518110610263576102626103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f600867ffffffffffffffff8111156102ad576102ac6103ae565b5b6040519080825280601f01601f1916602001820160405280156102df5781602001600182028036833780820191505090505b5090505f8054906101000a900460ff1660f81b815f81518110610305576103046103db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f8081819054906101000a900460ff168092919061035090610441565b91906101000a81548160ff021916908360ff160217905550507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c585858585856040516103a09594939291906104d9565b60405180910390a1005b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60ff82169050919050565b5f61044b82610435565b915060ff820361045e5761045d610408565b5b600182019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6104ab82610469565b6104b58185610473565b93506104c5818560208601610483565b6104ce81610491565b840191505092915050565b5f60a0820190508181035f8301526104f181886104a1565b9050818103602083015261050581876104a1565b9050818103604083015261051981866104a1565b9050818103606083015261052d81856104a1565b9050818103608083015261054181846104a1565b9050969550505050505056fea26469706673582212208569967e58690162d7d6fe3513d07b393b4c15e70f41505cbbfd08f53eba739364736f6c63430008190033" ),
4241+ Nonce : 0 ,
4242+ Balance : big .NewInt (0 ),
4243+ },
4244+ },
4245+ }
4246+ )
4247+
4248+ gspec .Config .BerlinBlock = common .Big0
4249+ gspec .Config .LondonBlock = common .Big0
4250+ gspec .Config .TerminalTotalDifficulty = common .Big0
4251+ gspec .Config .TerminalTotalDifficultyPassed = true
4252+ gspec .Config .ShanghaiTime = u64 (0 )
4253+ gspec .Config .CancunTime = u64 (0 )
4254+ gspec .Config .PragueTime = u64 (0 )
4255+ signer := types .LatestSigner (gspec .Config )
4256+
4257+ _ , blocks , _ := GenerateChainWithGenesis (gspec , engine , 1 , func (i int , b * BlockGen ) {
4258+ for i := 0 ; i < 5 ; i ++ {
4259+ txdata := & types.DynamicFeeTx {
4260+ ChainID : gspec .Config .ChainID ,
4261+ Nonce : uint64 (i ),
4262+ To : & config .DepositContractAddress ,
4263+ Gas : 500000 ,
4264+ GasFeeCap : newGwei (5 ),
4265+ GasTipCap : big .NewInt (2 ),
4266+ AccessList : nil ,
4267+ Data : []byte {},
4268+ }
4269+ tx := types .NewTx (txdata )
4270+ tx , _ = types .SignTx (tx , signer , key )
4271+ b .AddTx (tx )
4272+ }
4273+ })
4274+ chain , err := NewBlockChain (rawdb .NewMemoryDatabase (), nil , gspec , nil , engine , vm.Config {Tracer : logger .NewMarkdownLogger (& logger.Config {DisableStack : true }, os .Stderr ).Hooks ()}, nil , nil )
4275+ if err != nil {
4276+ t .Fatalf ("failed to create tester chain: %v" , err )
4277+ }
4278+ defer chain .Stop ()
4279+ if n , err := chain .InsertChain (blocks ); err != nil {
4280+ t .Fatalf ("block %d: failed to insert into chain: %v" , n , err )
4281+ }
4282+
4283+ block := chain .GetBlockByNumber (1 )
4284+ if len (block .Deposits ()) != 5 {
4285+ t .Fatalf ("failed to retreive deposits: have %d, want %d" , len (block .Deposits ()), 5 )
4286+ }
4287+
4288+ // Verify each index is correct.
4289+ for want , d := range block .Deposits () {
4290+ if got := int (d .PublicKey [0 ]); got != want {
4291+ t .Fatalf ("invalid pubkey: have %d, want %d" , got , want )
4292+ }
4293+ if got := int (d .WithdrawalCredentials [0 ]); got != want {
4294+ t .Fatalf ("invalid withdrawal credentials: have %d, want %d" , got , want )
4295+ }
4296+ if d .Amount != uint64 (want ) {
4297+ t .Fatalf ("invalid amounbt: have %d, want %d" , d .Amount , want )
4298+ }
4299+ if got := int (d .Signature [0 ]); got != want {
4300+ t .Fatalf ("invalid signature: have %d, want %d" , got , want )
4301+ }
4302+ if d .Index != uint64 (want ) {
4303+ t .Fatalf ("invalid index: have %d, want %d" , d .Index , want )
4304+ }
4305+ }
4306+ }
0 commit comments