From ced80e44e319d33405c1cd63d15f767a13def8a9 Mon Sep 17 00:00:00 2001 From: Paul Lange Date: Wed, 26 Apr 2023 14:01:09 +0200 Subject: [PATCH 1/3] Add test for prestate tracing transfer --- eth/tracers/tracers_test.go | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/eth/tracers/tracers_test.go b/eth/tracers/tracers_test.go index ae26ef6e7c..7f28adb6f8 100644 --- a/eth/tracers/tracers_test.go +++ b/eth/tracers/tracers_test.go @@ -201,6 +201,73 @@ func TestPrestateTracerCreate2(t *testing.T) { } } +func TestPrestateTracerTransfer(t *testing.T) { + celoMock := testutil.NewCeloMock() + + toAddr := "0x00000000000000000000000000000000deadbeef" + unsignedTx := types.NewTransaction(1, common.HexToAddress(toAddr), new(big.Int), 5000000, big.NewInt(1), nil, nil, nil, []byte{}) + + privateKeyECDSA, err := ecdsa.GenerateKey(crypto.S256(), rand.Reader) + if err != nil { + t.Fatalf("err %v", err) + } + signer := types.NewEIP155Signer(big.NewInt(1)) + tx, err := types.SignTx(unsignedTx, signer, privateKeyECDSA) + if err != nil { + t.Fatalf("err %v", err) + } + origin, _ := signer.Sender(tx) + txContext := vm.TxContext{ + Origin: origin, + GasPrice: big.NewInt(1), + } + context := vm.BlockContext{ + CanTransfer: vmcontext.CanTransfer, + Transfer: vmcontext.TobinTransfer, + Coinbase: common.Address{}, + BlockNumber: new(big.Int).SetUint64(8000000), + Time: new(big.Int).SetUint64(5), + GetRegisteredAddress: vmcontext.GetRegisteredAddress, + } + alloc := core.GenesisAlloc{} + alloc[origin] = core.GenesisAccount{ + Nonce: 1, + Code: []byte{}, + Balance: big.NewInt(500000000000000), + } + _, statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), alloc, false) + + // Create the tracer, the EVM environment and run it + tracer, err := New("prestateTracer", new(Context)) + if err != nil { + t.Fatalf("failed to create prestate tracer: %v", err) + } + vmConfig := vm.Config{Debug: true, Tracer: tracer} + evm := vm.NewEVM(context, txContext, statedb, params.MainnetChainConfig, vmConfig) + + msg, err := tx.AsMessage(signer, nil) + if err != nil { + t.Fatalf("failed to prepare transaction for tracing: %v", err) + } + + st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas()), celoMock.Runner, nil) + if _, err = st.TransitionDb(); err != nil { + t.Fatalf("failed to execute transaction: %v", err) + } + // Retrieve the trace result and compare against the etalon + res, err := tracer.GetResult() + if err != nil { + t.Fatalf("failed to retrieve trace result: %v", err) + } + ret := make(map[string]interface{}) + if err := json.Unmarshal(res, &ret); err != nil { + t.Fatalf("failed to unmarshal trace result: %v", err) + } + if _, has := ret[toAddr]; !has { + t.Fatalf("Expected %s in result", toAddr) + } +} + // Iterates over all the input-output datasets in the tracer test harness and // runs the JavaScript tracers against them. func TestCallTracerLegacy(t *testing.T) { From fad7939dd1ef6339708feecaa91688ab8e901e3b Mon Sep 17 00:00:00 2001 From: Paul Lange Date: Wed, 26 Apr 2023 14:01:44 +0200 Subject: [PATCH 2/3] Fix prestate tracer for simple transfers --- eth/tracers/internal/tracers/prestate_tracer.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/eth/tracers/internal/tracers/prestate_tracer.js b/eth/tracers/internal/tracers/prestate_tracer.js index 084c04ec46..40aa356a33 100644 --- a/eth/tracers/internal/tracers/prestate_tracer.js +++ b/eth/tracers/internal/tracers/prestate_tracer.js @@ -47,6 +47,12 @@ // result is invoked when all the opcodes have been iterated over and returns // the final result of the tracing. result: function(ctx, db) { + if (this.prestate === null) { + this.prestate = {}; + // If tx is transfer-only, the recipient account + // hasn't been populated. + this.lookupAccount(ctx.to, db); + } // At this point, we need to deduct the 'value' from the // outer transaction, and move it back to the origin this.lookupAccount(ctx.from, db); @@ -79,7 +85,7 @@ } // Whenever new state is accessed, add it to the prestate switch (log.op.toString()) { - case "EXTCODECOPY": case "EXTCODESIZE": case "BALANCE": + case "EXTCODECOPY": case "EXTCODESIZE": case "EXTCODEHASH": case "BALANCE": this.lookupAccount(toAddress(log.stack.peek(0).toString(16)), db); break; case "CREATE": From 59600c609b847de9960202494bc42543b9ba10ee Mon Sep 17 00:00:00 2001 From: Paul Lange Date: Wed, 26 Apr 2023 14:02:40 +0200 Subject: [PATCH 3/3] Repackage js tracers --- eth/tracers/internal/tracers/assets.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/eth/tracers/internal/tracers/assets.go b/eth/tracers/internal/tracers/assets.go index 185967bdb6..d1d4353478 100644 --- a/eth/tracers/internal/tracers/assets.go +++ b/eth/tracers/internal/tracers/assets.go @@ -8,7 +8,7 @@ // evmdis_tracer.js (4.195kB) // noop_tracer.js (1.271kB) // opcount_tracer.js (1.372kB) -// prestate_tracer.js (4.287kB) +// prestate_tracer.js (4.482kB) // trigram_tracer.js (1.788kB) // unigram_tracer.js (1.469kB) @@ -20,7 +20,6 @@ import ( "crypto/sha256" "fmt" "io" - "io/ioutil" "os" "path/filepath" "strings" @@ -239,7 +238,7 @@ func opcount_tracerJs() (*asset, error) { return a, nil } -var _prestate_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x57\xdd\x6f\xdb\x38\x12\x7f\xb6\xfe\x8a\x41\x5f\x6c\x5d\x5d\xb9\xcd\x02\x7b\x80\x73\x39\x40\x75\xdd\x36\x40\x36\x09\x6c\xe7\x72\xb9\xc5\x3e\x50\xe4\x48\xe6\x9a\x26\x05\x92\xb2\xe3\x2b\xf2\xbf\x1f\x86\xfa\xf0\x47\x93\xa6\x7b\x6f\x16\x39\xfc\xcd\xf7\x6f\xc6\xa3\x11\x4c\x4c\xb9\xb3\xb2\x58\x7a\x38\x7b\xff\xe1\xef\xb0\x58\x22\x14\xe6\x1d\xfa\x25\x5a\xac\xd6\x90\x56\x7e\x69\xac\x8b\x46\x23\x58\x2c\xa5\x83\x5c\x2a\x04\xe9\xa0\x64\xd6\x83\xc9\xc1\x9f\xc8\x2b\x99\x59\x66\x77\x49\x34\x1a\xd5\x6f\x9e\xbd\x26\x84\xdc\x22\x82\x33\xb9\xdf\x32\x8b\x63\xd8\x99\x0a\x38\xd3\x60\x51\x48\xe7\xad\xcc\x2a\x8f\x20\x3d\x30\x2d\x46\xc6\xc2\xda\x08\x99\xef\x08\x52\x7a\xa8\xb4\x40\x1b\x54\x7b\xb4\x6b\xd7\xda\xf1\xe5\xfa\x0e\xae\xd0\x39\xb4\xf0\x05\x35\x5a\xa6\xe0\xb6\xca\x94\xe4\x70\x25\x39\x6a\x87\xc0\x1c\x94\x74\xe2\x96\x28\x20\x0b\x70\xf4\xf0\x33\x99\x32\x6f\x4c\x81\xcf\xa6\xd2\x82\x79\x69\xf4\x10\x50\x92\xe5\xb0\x41\xeb\xa4\xd1\xf0\x4b\xab\xaa\x01\x1c\x82\xb1\x04\x32\x60\x9e\x1c\xb0\x60\x4a\x7a\x17\x03\xd3\x3b\x50\xcc\xef\x9f\xfe\x44\x40\xf6\x7e\x0b\x90\x3a\xa8\x59\x9a\x12\xc1\x2f\x99\x27\xaf\xb7\x52\x29\xc8\x10\x2a\x87\x79\xa5\x86\x84\x96\x55\x1e\xee\x2f\x17\x5f\x6f\xee\x16\x90\x5e\x3f\xc0\x7d\x3a\x9b\xa5\xd7\x8b\x87\x73\xd8\x4a\xbf\x34\x95\x07\xdc\x60\x0d\x25\xd7\xa5\x92\x28\x60\xcb\xac\x65\xda\xef\xc0\xe4\x84\xf0\xdb\x74\x36\xf9\x9a\x5e\x2f\xd2\x8f\x97\x57\x97\x8b\x07\x30\x16\x3e\x5f\x2e\xae\xa7\xf3\x39\x7c\xbe\x99\x41\x0a\xb7\xe9\x6c\x71\x39\xb9\xbb\x4a\x67\x70\x7b\x37\xbb\xbd\x99\x4f\x13\x98\x23\x59\x85\xf4\xfe\xf5\x98\xe7\x21\x7b\x16\x41\xa0\x67\x52\xb9\x36\x12\x0f\xa6\x02\xb7\x34\x95\x12\xb0\x64\x1b\x04\x8b\x1c\xe5\x06\x05\x30\xe0\xa6\xdc\xfd\x74\x52\x09\x8b\x29\xa3\x8b\xe0\xf3\x8b\x05\x09\x97\x39\x68\xe3\x87\xe0\x10\xe1\x1f\x4b\xef\xcb\xf1\x68\xb4\xdd\x6e\x93\x42\x57\x89\xb1\xc5\x48\xd5\x70\x6e\xf4\xcf\x24\x22\xcc\xd2\xa2\xf3\xcc\xe3\xc2\x32\x8e\x16\x4c\xe5\xcb\xca\x3b\x70\x55\x9e\x4b\x2e\x51\x7b\x90\x3a\x37\x76\x1d\x2a\x05\xbc\x01\x6e\x91\x79\x04\x06\xca\x70\xa6\x00\x1f\x91\x57\xe1\xae\x8e\x74\x28\x57\xcb\xb4\x63\x3c\x9c\xe6\xd6\xac\xc9\xd7\xca\x79\xfa\xe1\x1c\xae\x33\x85\x02\x0a\xd4\xe8\xa4\x83\x4c\x19\xbe\x4a\xa2\x6f\x51\xef\xc0\x18\xaa\x93\xe0\x61\x23\x14\x6a\x63\x8b\x7d\x8b\x90\x55\x52\x09\xa9\x8b\x24\xea\xb5\xd2\x63\xd0\x95\x52\xc3\x28\x40\x28\x63\x56\x55\x99\x72\x6e\xaa\x60\xfb\x9f\xc8\x7d\x0d\xe6\x4a\xe4\x32\xa7\xe2\x60\xdd\xad\x37\xe1\xaa\xd3\x6b\x32\x92\x4f\xa2\xde\x11\xcc\x18\xf2\x4a\x07\x77\x06\x4c\x08\x3b\x04\x91\xc5\xdf\xa2\x5e\x6f\xc3\x2c\x61\xc1\x05\x78\xf3\x15\x1f\xc3\x65\x7c\x1e\xf5\x7a\x32\x87\x81\x5f\x4a\x97\xb4\xc0\xbf\x33\xce\xff\x80\x8b\x8b\x8b\xd0\xd4\xb9\xd4\x28\x62\x20\x88\xde\x73\x62\xf5\x4d\x2f\x63\x8a\x69\x8e\x63\xe8\xbf\x7f\xec\xc3\x5b\x10\x59\x52\xa0\xff\x58\x9f\xd6\xca\x12\x6f\xe6\xde\x4a\x5d\x0c\x3e\xfc\x1a\x0f\xc3\x2b\x6d\xc2\x1b\x68\xc4\xaf\x4d\x27\x5c\xdf\x73\x23\xc2\x75\x63\x73\x2d\x35\x31\xa2\x11\x6a\xa4\x9c\x37\x96\x15\x38\x86\x6f\x4f\xf4\xfd\x44\x5e\x3d\x45\xbd\xa7\xa3\x28\xcf\x6b\xa1\x17\xa2\xdc\x40\x00\x6a\x6f\xbb\x3a\x2f\x24\x75\xea\x61\x02\x02\xde\x8f\x92\x30\x6f\x4d\x39\x49\xc2\x0a\x77\xaf\x67\x82\x2e\xa4\x78\xec\x2e\x56\xb8\x8b\xcf\xa3\x17\x53\x94\x34\x46\xff\x2e\xc5\xe3\xcf\xe6\xeb\xe4\xcd\x51\x5c\xe7\x24\xb5\xb7\x37\x8e\x4f\xe2\x68\xd1\x55\xca\x53\xb9\x4b\xbd\x31\x2b\x22\xae\x25\xc5\x47\xa9\x10\x12\x53\x52\xb6\x5c\xcd\x1c\x19\xa2\x06\xe9\xd1\x32\xa2\x4e\xb3\x41\x4b\x53\x03\x2c\xfa\xca\x6a\xd7\x85\x31\x97\x9a\xa9\x16\xb8\x89\xba\xb7\x8c\xd7\x3d\x53\x9f\x1f\xc4\x92\xfb\xc7\x10\xc5\xe0\xdd\x68\x04\xa9\x07\x72\x11\x4a\x23\xb5\x1f\xc2\x16\x41\x23\x0a\x6a\x7c\x81\xa2\xe2\x3e\xe0\xf5\x37\x4c\x55\xd8\xaf\x9b\x9b\x28\x32\x3c\x35\x15\x4d\x82\x83\xe6\x1f\x06\x03\xd7\x66\x13\x46\x5c\xc6\xf8\x0a\x9a\x86\x33\x56\x16\x52\x47\x4d\x38\x8f\x9a\x8d\x2c\x4a\x08\x38\x98\x15\x72\x45\x49\xa4\x93\x8f\x4c\xc1\x05\x64\xb2\xb8\xd4\xfe\x24\x79\x75\xd0\xdb\xa7\xf1\x1f\x49\xd3\x3c\x89\x23\xc2\x1b\x9c\xc5\x43\xf8\xf0\x6b\x57\x11\xde\x10\x14\xbc\x0e\xe6\xcd\xcb\x50\xd1\x69\x31\x3c\xff\x2c\xa8\xa1\x0e\x7e\x1b\xb4\x26\xae\xca\x28\x1d\xb5\x9f\x21\x8e\xc7\x5d\x7c\xfe\x03\xdc\x63\xdf\x5a\xdc\x26\x34\x09\x13\xe2\x10\x94\x3e\xc3\x77\xc1\xdc\x9d\x43\x01\x6f\x81\xbe\xa4\x26\x55\x4e\xf2\x2f\xcc\xc5\xf0\x37\x68\x24\x6e\xad\xe4\xdf\x59\x52\xe7\xf5\x13\x72\x8b\x6b\x1a\x05\x94\x3a\xce\x94\x42\xdb\x77\x10\x88\x66\xd8\xd4\x60\x48\x32\xae\x4b\xbf\x6b\x07\x84\x67\xb6\x40\xef\x5e\xf7\x26\xe0\xbc\x7b\xd7\xf2\x66\x88\xdf\xae\x44\xb8\xb8\x80\xfe\x64\x36\x4d\x17\xd3\x7e\xd3\x7b\xa3\x11\xdc\x63\x58\x9f\x32\x25\x33\xa1\x76\x20\x50\xa1\xc7\xda\x2e\xa3\x43\x5c\x3b\x1e\x19\xd2\x1e\x44\x1b\x0a\x3e\x4a\xe7\xa5\x2e\xa0\xa6\x97\x2d\x0d\xe3\x06\x2e\x34\x16\x67\x15\x85\xe7\x74\x72\x79\x43\x6b\x88\x45\x22\x23\x1a\x1a\xa1\x47\x99\x92\xdd\xda\x92\x4b\xeb\x3c\x94\x8a\x71\x4c\x08\xaf\x33\xe6\xe5\xa2\x68\xda\x9f\x54\xcf\x42\xdf\x06\xa0\xfd\x54\x64\x8a\xa6\x2a\xa9\x77\x30\x68\x31\xe2\xa8\xd7\xb3\xad\xf4\x01\xf6\xf9\x9e\x47\x9c\xc7\xf2\x90\x45\x68\x1b\xc1\x0d\x12\xef\x06\x0a\xa9\x27\x28\xe9\xfa\xd7\x6f\xcd\xc8\x46\x97\x44\x3d\x7a\x77\x40\x06\xca\x14\xc7\x64\x20\xea\xb0\xf0\xca\x5a\xca\x7f\xc7\xdb\x39\x11\xc3\x9f\x95\xf3\x14\x53\x4b\xe1\x69\x28\xe6\x39\x66\x0d\x3c\x4a\x23\x3a\xfe\x9e\x41\x69\xd8\x85\xe1\x42\xea\x9a\xd1\x56\xaf\x80\xa5\xf1\xa8\xbd\x64\x4a\xed\x28\x0f\x5b\x4b\xbb\x0f\x6d\x3b\x43\x70\x92\xa4\x02\x4d\x05\x51\xa9\xb9\xaa\x44\x5d\x06\xa1\xf8\x1b\x3c\x17\x6c\x3e\x5e\x9a\xd6\xe8\x1c\x2b\x30\xa1\x4a\xca\xe5\x63\xb3\x76\x6a\xe8\xd7\xcc\x38\x88\xfb\x49\x67\xe4\x31\x2f\x29\x53\x24\x6d\x91\x11\xb7\xa7\x42\x58\x74\x6e\x10\x37\x44\xd5\x65\xf6\x7e\x89\x9a\x82\x0f\x1a\xb7\xd0\xed\x33\x8c\x73\xda\xef\xc4\x10\x98\x10\xc4\x87\x27\xbb\x47\xd4\xeb\xb9\xad\xf4\x7c\x09\x41\x93\x29\xf7\xbd\x18\x37\xf5\xcf\x99\x43\x78\x33\xfd\xf7\x62\x72\xf3\x69\x3a\xb9\xb9\x7d\x78\x33\x86\xa3\xb3\xf9\xe5\x7f\xa6\xdd\xd9\xc7\xf4\x2a\xbd\x9e\x4c\xdf\x8c\xc3\x40\x7f\xc6\x21\x6f\x5a\x17\x48\xa1\xf3\x8c\xaf\x92\x12\x71\x35\x78\x7f\xcc\x03\x7b\x07\x7b\xbd\xcc\x22\x5b\x9d\xef\x8d\xa9\x1b\xb4\xd1\xd1\xf2\x34\x5c\xc0\x8b\xc1\x3a\x7f\xd9\x9a\x49\x23\x3f\x68\xd9\x7f\xbf\xbf\x04\xaa\x78\xdd\x8e\xb3\xbf\x6c\x48\xe8\x1d\xc6\x57\x63\x70\x4c\xd1\xda\x2c\xff\x4b\x7f\x77\xf2\xdc\xa1\x1f\x02\x6a\x61\xb6\xc4\x7c\x1d\x6a\x7d\xd3\xe0\x1e\x84\xec\x43\x5c\xd3\xee\x4d\x3e\x88\x3b\x61\x02\xfb\x5e\xf4\xec\x39\x51\xd4\x02\x2e\x5a\xf4\xb7\xe1\xe5\xeb\x81\x3a\x6b\x22\x75\xa2\xe0\x97\x93\xb5\x30\xdc\xaf\x71\x6d\xec\xae\x99\x61\x07\xfe\xfd\x38\xaa\xe9\xd5\x55\x57\x4f\xf4\x41\x45\xd6\x1d\x7c\x9a\x5e\x4d\xbf\xa4\x8b\xe9\x91\xd4\x7c\x91\x2e\x2e\x27\xf5\xd1\x5f\x2e\xbc\x0f\x3f\x5d\x78\xfd\xf9\x7c\x71\x33\x9b\xf6\xc7\xcd\xd7\xd5\x4d\xfa\xa9\xff\x9d\xc2\x66\x75\xfc\x51\xeb\x7a\x73\x6f\xac\xf8\x7f\x3a\xe0\x60\x8d\xcb\xd9\x73\x5b\x5c\xa0\x76\xee\xab\x93\x7f\x49\xc0\x74\xcb\xca\x79\xfd\x4f\xb1\x17\xde\x3f\xcb\xc3\x4f\xd1\x53\xf4\xbf\x00\x00\x00\xff\xff\x3a\xb7\x37\x41\xbf\x10\x00\x00") +var _prestate_tracerJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x57\xdb\x6e\x1b\x39\x12\x7d\x56\x7f\x45\x21\x2f\x92\x36\x4a\x2b\xf1\x00\xb3\x80\xbc\x5e\xa0\xa3\x28\xb1\x00\x8f\x6d\x48\xf2\x7a\xbd\x83\x79\x60\x93\xd5\x2d\x8e\x28\xb2\x41\xb2\x25\x6b\x03\xff\xfb\xa2\xd8\x17\x5d\xe2\x4b\x66\xdf\xd4\x64\xf1\x54\xd5\x61\xd5\x61\x69\x38\x84\xb1\x29\x76\x56\xe6\x4b\x0f\x67\x1f\x3f\xfd\x1d\x16\x4b\x84\xdc\x7c\x40\xbf\x44\x8b\xe5\x1a\x92\xd2\x2f\x8d\x75\xd1\x70\x08\x8b\xa5\x74\x90\x49\x85\x20\x1d\x14\xcc\x7a\x30\x19\xf8\x13\x7b\x25\x53\xcb\xec\x2e\x8e\x86\xc3\xea\xcc\xb3\xdb\x84\x90\x59\x44\x70\x26\xf3\x5b\x66\x71\x04\x3b\x53\x02\x67\x1a\x2c\x0a\xe9\xbc\x95\x69\xe9\x11\xa4\x07\xa6\xc5\xd0\x58\x58\x1b\x21\xb3\x1d\x41\x4a\x0f\xa5\x16\x68\x83\x6b\x8f\x76\xed\x9a\x38\xbe\x5d\xdf\xc1\x15\x3a\x87\x16\xbe\xa1\x46\xcb\x14\xdc\x96\xa9\x92\x1c\xae\x24\x47\xed\x10\x98\x83\x82\x56\xdc\x12\x05\xa4\x01\x8e\x0e\x7e\xa5\x50\xe6\x75\x28\xf0\xd5\x94\x5a\x30\x2f\x8d\x1e\x00\x4a\x8a\x1c\x36\x68\x9d\x34\x1a\x7e\x69\x5c\xd5\x80\x03\x30\x96\x40\x7a\xcc\x53\x02\x16\x4c\x41\xe7\xfa\xc0\xf4\x0e\x14\xf3\xfb\xa3\x3f\x41\xc8\x3e\x6f\x01\x52\x07\x37\x4b\x53\x20\xf8\x25\xf3\x94\xf5\x56\x2a\x05\x29\x42\xe9\x30\x2b\xd5\x80\xd0\xd2\xd2\xc3\xfd\x74\x71\x79\x73\xb7\x80\xe4\xfa\x01\xee\x93\xd9\x2c\xb9\x5e\x3c\x9c\xc3\x56\xfa\xa5\x29\x3d\xe0\x06\x2b\x28\xb9\x2e\x94\x44\x01\x5b\x66\x2d\xd3\x7e\x07\x26\x23\x84\xdf\x26\xb3\xf1\x65\x72\xbd\x48\x3e\x4f\xaf\xa6\x8b\x07\x30\x16\xbe\x4e\x17\xd7\x93\xf9\x1c\xbe\xde\xcc\x20\x81\xdb\x64\xb6\x98\x8e\xef\xae\x92\x19\xdc\xde\xcd\x6e\x6f\xe6\x93\x18\xe6\x48\x51\x21\x9d\x7f\x9b\xf3\x2c\xdc\x9e\x45\x10\xe8\x99\x54\xae\x61\xe2\xc1\x94\xe0\x96\xa6\x54\x02\x96\x6c\x83\x60\x91\xa3\xdc\xa0\x00\x06\xdc\x14\xbb\x9f\xbe\x54\xc2\x62\xca\xe8\x3c\xe4\xfc\x62\x41\xc2\x34\x03\x6d\xfc\x00\x1c\x22\xfc\x63\xe9\x7d\x31\x1a\x0e\xb7\xdb\x6d\x9c\xeb\x32\x36\x36\x1f\xaa\x0a\xce\x0d\xff\x19\x47\x84\x59\x58\x74\x9e\x79\x5c\x58\xc6\xd1\x82\x29\x7d\x51\x7a\x07\xae\xcc\x32\xc9\x25\x6a\x0f\x52\x67\xc6\xae\x43\xa5\x80\x37\xc0\x2d\x32\x8f\xc0\x40\x19\xce\x14\xe0\x23\xf2\x32\xec\x55\x4c\x87\x72\xb5\x4c\x3b\xc6\xc3\x6a\x66\xcd\x9a\x72\x2d\x9d\xa7\x1f\xce\xe1\x3a\x55\x28\x20\x47\x8d\x4e\x3a\x48\x95\xe1\xab\x38\xfa\x1e\x75\x0e\x82\xa1\x3a\x09\x19\xd6\x46\xa1\x36\xb6\xd8\xb5\x08\x69\x29\x95\x90\x3a\x8f\xa3\x4e\x63\x3d\x02\x5d\x2a\x35\x88\x02\x84\x32\x66\x55\x16\x09\xe7\xa6\x0c\xb1\xff\x89\xdc\x57\x60\xae\x40\x2e\x33\x2a\x0e\xd6\xee\x7a\x13\xb6\x5a\xbf\x26\x25\xfb\x38\xea\x1c\xc1\x8c\x20\x2b\x75\x48\xa7\xc7\x84\xb0\x03\x10\x69\xff\x7b\xd4\xe9\x6c\x98\x25\x2c\xb8\x00\x6f\x2e\xf1\x31\x6c\xf6\xcf\xa3\x4e\x47\x66\xd0\xf3\x4b\xe9\xe2\x06\xf8\x77\xc6\xf9\x1f\x70\x71\x71\x11\x9a\x3a\x93\x1a\x45\x1f\x08\xa2\xf3\x9c\x59\xb5\xd3\x49\x99\x62\x9a\xe3\x08\xba\x1f\x1f\xbb\xf0\x1e\x44\x1a\xe7\xe8\x3f\x57\xab\x95\xb3\xd8\x9b\xb9\xb7\x52\xe7\xbd\x4f\xbf\xf6\x07\xe1\x94\x36\xe1\x0c\xd4\xe6\xd7\xa6\x35\xae\xf6\xb9\x11\x61\xbb\x8e\xb9\xb2\x1a\x1b\x51\x1b\xd5\x56\xce\x1b\xcb\x72\x1c\xc1\xf7\x27\xfa\x7e\xa2\xac\x9e\xa2\xce\xd3\x11\xcb\xf3\xca\xe8\x05\x96\x6b\x08\x40\xed\x6d\x5b\xe7\xb9\xa4\x4e\x3d\xbc\x80\x80\xf7\xda\x25\xcc\x9b\x50\x4e\x2e\x61\x85\xbb\xb7\x6f\x82\x36\xa4\x78\x6c\x37\x56\xb8\xeb\x9f\x47\x2f\x5e\x51\x5c\x07\xfd\xbb\x14\x8f\x3f\x7b\x5f\x27\x67\x8e\x78\x9d\x93\xd5\x3e\xde\x7e\xff\x84\x47\x8b\xae\x54\x9e\xca\x5d\xea\x8d\x59\x91\x70\x2d\x89\x1f\xa5\x02\x25\xa6\xa0\xdb\x72\x95\x72\xa4\x88\x1a\xa4\x47\xcb\x48\x3a\xcd\x06\x2d\xbd\x1a\x60\xd1\x97\x56\xbb\x96\xc6\x4c\x6a\xa6\x1a\xe0\x9a\x75\x6f\x19\xaf\x7a\xa6\x5a\x3f\xe0\x92\xfb\xc7\xc0\x62\xc8\xee\x07\x52\x02\x05\xd4\x5d\xcf\x65\x4f\x85\x1a\x0a\x83\x5c\x4f\x33\xf0\x8f\xa1\x6f\xa9\xf9\x33\xb4\x1f\x8c\x56\xbb\x41\x70\x6f\x91\xcb\x22\x68\x49\x7d\xf1\xf5\x99\x25\x73\xba\xeb\xab\xc4\x0a\x53\x94\xf4\x94\x88\xb8\xf5\x73\xd4\x83\x14\x68\xec\x4d\x88\xb5\x26\x91\x20\x12\x0f\x64\x0b\x85\x91\xda\x0f\x60\x8b\xa0\x11\x05\xe9\x94\x40\x51\x72\x1f\xfc\x77\x37\x4c\x95\xd8\xad\xb4\x88\x14\x3d\x1c\x35\x25\x3d\x5c\x07\x5a\x35\x08\x7c\xae\xcd\x26\xbc\xc8\x29\xe3\x2b\xa8\xf5\xc1\x58\x99\x4b\x1d\xbd\x18\x17\x01\xd7\x91\xd5\x35\x47\x2b\x9f\x99\x82\x0b\x48\x65\x3e\xd5\xfe\xa4\xd6\xaa\x1a\x69\x8e\xf6\xff\x88\xeb\x5e\x8f\x1d\xe9\x73\xef\xac\x3f\x80\x4f\xbf\xb6\x05\xec\x0d\x41\xc1\xdb\x60\xde\xbc\x0c\x15\x9d\xd6\xee\xf3\xc7\x82\x1b\x12\x9c\xf7\xc1\x6b\xec\xca\x94\xaa\xa7\xca\x33\xf0\x78\x2c\x3a\xe7\xaf\xe0\x1e\xe7\xd6\xe0\xd6\xd4\xc4\x4c\x88\x43\x50\xfa\x0c\xdf\x39\x73\x77\x0e\x05\xbc\x07\xfa\x92\x9a\x5c\x39\xc9\xbf\x31\xd7\x87\xbf\x41\x6d\x71\x6b\x25\xff\x21\x92\xea\x5e\xbf\x20\xb7\xb8\xa6\x6a\xa3\xab\xe3\x4c\x29\xb4\x5d\x07\x41\x17\x07\x75\xcb\x84\x4b\xc6\x75\xe1\x77\xcd\x7b\xe6\x99\xcd\xd1\xbb\xb7\xb3\x09\x38\x1f\x3e\x34\x32\x1f\xf8\xdb\x15\xd4\x29\xd0\x1d\xcf\x26\xc9\x62\xd2\xad\x9b\x65\x38\x84\x7b\x0c\xd3\x5e\xaa\x64\x2a\xd4\x0e\x04\x2a\xf4\x58\xc5\x65\x74\xe0\xb5\x95\xbd\x01\x8d\x6d\x34\x50\xe1\xa3\x74\x5e\xea\x1c\xaa\x26\xdb\xd2\xec\xd0\x36\xcc\x86\x00\x4b\xa2\xe7\xf4\xa1\xf5\x86\xa6\x26\x8b\xa4\x9d\xf4\xc6\x05\x49\x61\x4a\xb6\x53\x56\x26\xad\xf3\x50\x28\xc6\x31\xf4\x58\x1b\xcc\xcb\x45\x71\xd0\x68\xb3\x20\x33\x01\x68\xff\x88\x33\x45\x43\x00\xb9\x77\xd0\x6b\x30\xfa\x51\xa7\x63\x1b\xeb\x03\xec\xf3\xbd\xec\x39\x8f\xc5\xa1\xe8\xd1\xf0\x84\x1b\xa4\x67\x22\x28\x5e\xf5\xe0\x93\xaf\x7f\xfd\x56\x4f\x18\xe8\xe2\xa8\x43\xe7\x0e\xb4\x4b\x99\x7c\xaf\x5d\x24\x06\xa2\xa2\x85\x97\xd6\x1e\xa8\x0d\xc8\x8c\x84\xe1\xcf\xd2\x79\xe2\xd4\x12\x3d\xb5\x22\xbe\xae\x79\x6f\x48\x5e\xfd\x12\x57\x13\x6b\x61\x3c\x6a\x2f\x99\x52\x3b\xba\x87\xad\xa5\x51\x8d\x86\xb3\x01\x38\x49\x56\x41\xa6\x82\xa9\xd4\x5c\x95\xa2\x2a\x83\x50\xfc\x35\x9e\x0b\x31\x1f\xcf\x78\x6b\x74\x8e\xe5\x18\x53\x25\x65\xf2\xb1\x9e\x92\x35\x74\x2b\x21\xef\xf5\xbb\x2f\xe9\xa5\x32\x79\xdc\x14\x19\x3d\x45\x89\x10\x16\x9d\xeb\xf5\x4f\x25\xf4\x7e\x89\x9a\xc8\x07\x8d\x5b\x68\xc7\x2f\xc6\x39\x8d\xa3\x62\x00\x4c\x08\xd2\xc3\x93\x51\x29\xea\x74\xdc\x56\x7a\xbe\x84\xe0\xc9\x14\xfb\x5e\xec\xd7\xf5\xcf\x99\x43\x78\x37\xf9\xf7\x62\x7c\xf3\x65\x32\xbe\xb9\x7d\x78\x37\x82\xa3\xb5\xf9\xf4\x3f\x93\xd3\xb5\xcb\x64\x7e\xd9\xae\x7d\x4e\xae\x92\xeb\xf1\xe4\xdd\x28\xcc\x24\xcf\x24\xe9\x4d\x93\x16\x05\xe1\x3c\xe3\xab\xb8\x40\x5c\xf5\x3e\x1e\x6b\xc3\x3e\xe9\x4e\x27\xb5\xc8\x56\xe7\xfb\x00\xab\xa6\xad\x7d\x34\xda\x0d\x17\xf0\x22\x81\xe7\x2f\x47\x33\xae\xed\x7b\xcd\x8b\xb0\x1f\xc1\x82\x7c\xbc\x1d\xc7\xd9\x5f\x0e\x24\xf4\x13\xe3\xab\x11\x38\xa6\x68\xf2\x97\xff\xa5\x7f\x6c\x59\xe6\xd0\x0f\x00\xb5\x30\x5b\x52\xc3\x16\xb5\xda\xa9\x71\x0f\x28\xfb\xd4\xaf\xa4\xf8\x26\xeb\xf5\x5b\x63\x02\xfb\xd1\xf4\xec\x39\x53\xd4\x02\x2e\x1a\xf4\xf7\xe1\xe4\xdb\x44\x9d\xd5\x4c\x9d\x38\xf8\xe5\x64\xb2\x0d\xfb\x6b\x5c\x1b\xbb\xab\xdf\xb5\x83\xfc\x5e\x67\x35\xb9\xba\x6a\xeb\x89\x3e\xa8\xc8\xda\x85\x2f\x93\xab\xc9\xb7\x64\x31\x39\xb2\x9a\x2f\x92\xc5\x74\x5c\x2d\xfd\xe5\xc2\xfb\xf4\xd3\x85\xd7\x9d\xcf\x17\x37\xb3\x49\x77\x54\x7f\x5d\xdd\x24\x5f\xba\x3f\x38\xac\xa7\xdf\xd7\xda\xd9\x9b\x7b\x63\xc5\xff\xd3\x01\x07\x93\x68\xc6\x9e\x1b\x44\x83\xdc\x73\x5f\x9e\xfc\xd1\x03\xa6\x1b\xa5\xce\xaa\x3f\xbb\x9d\x70\xfe\x59\x6d\x7e\x8a\x9e\xa2\xff\x05\x00\x00\xff\xff\x78\x74\x1c\xa8\x82\x11\x00\x00") func prestate_tracerJsBytes() ([]byte, error) { return bindataRead( @@ -255,7 +254,7 @@ func prestate_tracerJs() (*asset, error) { } info := bindataFileInfo{name: "prestate_tracer.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd4, 0x9, 0xf9, 0x44, 0x13, 0x31, 0x89, 0xf7, 0x35, 0x9a, 0xc6, 0xf0, 0x86, 0x9d, 0xb2, 0xe3, 0x57, 0xe2, 0xc0, 0xde, 0xc9, 0x3a, 0x4c, 0x4a, 0x94, 0x90, 0xa5, 0x92, 0x2f, 0xbf, 0xc0, 0xb8}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x52, 0x80, 0x86, 0xa9, 0xa9, 0x19, 0xc0, 0xc0, 0x23, 0x24, 0x59, 0xd8, 0xf6, 0xb0, 0x20, 0x47, 0x84, 0x3c, 0x55, 0x12, 0x85, 0x6, 0x28, 0x57, 0x4f, 0xf8, 0xdd, 0xc0, 0x71, 0xc0, 0xf6, 0x27}} return a, nil } @@ -410,11 +409,13 @@ const AssetDebug = false // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the // following hierarchy: -// data/ -// foo.txt -// img/ -// a.png -// b.png +// +// data/ +// foo.txt +// img/ +// a.png +// b.png +// // then AssetDir("data") would return []string{"foo.txt", "img"}, // AssetDir("data/img") would return []string{"a.png", "b.png"}, // AssetDir("foo.txt") and AssetDir("notexist") would return an error, and @@ -474,7 +475,7 @@ func RestoreAsset(dir, name string) error { if err != nil { return err } - err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + err = os.WriteFile(_filePath(dir, name), data, info.Mode()) if err != nil { return err }