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