@@ -163,13 +163,14 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error {
163
163
if err != nil {
164
164
return err
165
165
}
166
- receipts , _ , usedGas , err := blockchain .processor .Process (block , statedb , vm.Config {})
166
+ res , err := blockchain .processor .Process (block , statedb , vm.Config {})
167
167
if err != nil {
168
- blockchain .reportBlock (block , receipts , err )
168
+ blockchain .reportBlock (block , res , err )
169
169
return err
170
170
}
171
- if err = blockchain .validator .ValidateState (block , statedb , receipts , usedGas , false ); err != nil {
172
- blockchain .reportBlock (block , receipts , err )
171
+ err = blockchain .validator .ValidateState (block , statedb , res , false )
172
+ if err != nil {
173
+ blockchain .reportBlock (block , res , err )
173
174
return err
174
175
}
175
176
@@ -4220,3 +4221,90 @@ func TestEIP3651(t *testing.T) {
4220
4221
t .Fatalf ("sender balance incorrect: expected %d, got %d" , expected , actual )
4221
4222
}
4222
4223
}
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 .Requests ()) != 5 {
4285
+ t .Fatalf ("failed to retrieve deposits: have %d, want %d" , len (block .Requests ()), 5 )
4286
+ }
4287
+
4288
+ // Verify each index is correct.
4289
+ for want , req := range block .Requests () {
4290
+ d , ok := req .Inner ().(* types.Deposit )
4291
+ if ! ok {
4292
+ t .Fatalf ("expected deposit object" )
4293
+ }
4294
+ if got := int (d .PublicKey [0 ]); got != want {
4295
+ t .Fatalf ("invalid pubkey: have %d, want %d" , got , want )
4296
+ }
4297
+ if got := int (d .WithdrawalCredentials [0 ]); got != want {
4298
+ t .Fatalf ("invalid withdrawal credentials: have %d, want %d" , got , want )
4299
+ }
4300
+ if d .Amount != uint64 (want ) {
4301
+ t .Fatalf ("invalid amounbt: have %d, want %d" , d .Amount , want )
4302
+ }
4303
+ if got := int (d .Signature [0 ]); got != want {
4304
+ t .Fatalf ("invalid signature: have %d, want %d" , got , want )
4305
+ }
4306
+ if d .Index != uint64 (want ) {
4307
+ t .Fatalf ("invalid index: have %d, want %d" , d .Index , want )
4308
+ }
4309
+ }
4310
+ }
0 commit comments