Skip to content

Commit

Permalink
ethclient/gethclient: return storage proofs in GetProof (ethereum#24697)
Browse files Browse the repository at this point in the history
Storage proofs were being unmarshalled from the RPC form to the go struct, but were not being included in the final returned struct.
  • Loading branch information
trianglesphere authored and sadoci committed Jan 27, 2023
1 parent 504b978 commit c5a6e66
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
1 change: 1 addition & 0 deletions ethclient/gethclient/gethclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ func (ec *Client) GetProof(ctx context.Context, account common.Address, keys []s
Nonce: uint64(res.Nonce),
CodeHash: res.CodeHash,
StorageHash: res.StorageHash,
StorageProof: storageResults,
}
return &result, err
}
Expand Down
19 changes: 17 additions & 2 deletions ethclient/gethclient/gethclient_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ import (
var (
testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
testAddr = crypto.PubkeyToAddress(testKey.PublicKey)
testSlot = common.HexToHash("0xdeadbeef")
testValue = crypto.Keccak256Hash(testSlot[:])
testBalance = big.NewInt(2e15)
)

Expand Down Expand Up @@ -77,7 +79,7 @@ func generateTestChain() (*core.Genesis, []*types.Block) {
config := params.AllEthashProtocolChanges
genesis := &core.Genesis{
Config: config,
Alloc: core.GenesisAlloc{testAddr: {Balance: testBalance}},
Alloc: core.GenesisAlloc{testAddr: {Balance: testBalance, Storage: map[common.Hash]common.Hash{testSlot: testValue}}},
ExtraData: []byte("test genesis"),
Timestamp: 9000,
}
Expand Down Expand Up @@ -195,7 +197,7 @@ func testAccessList(t *testing.T, client *rpc.Client) {
func testGetProof(t *testing.T, client *rpc.Client) {
ec := New(client)
ethcl := ethclient.NewClient(client)
result, err := ec.GetProof(context.Background(), testAddr, []string{}, nil)
result, err := ec.GetProof(context.Background(), testAddr, []string{testSlot.String()}, nil)
if err != nil {
t.Fatal(err)
}
Expand All @@ -212,6 +214,19 @@ func testGetProof(t *testing.T, client *rpc.Client) {
if result.Balance.Cmp(balance) != 0 {
t.Fatalf("invalid balance, want: %v got: %v", balance, result.Balance)
}
// test storage
if len(result.StorageProof) != 1 {
t.Fatalf("invalid storage proof, want 1 proof, got %v proof(s)", len(result.StorageProof))
}
proof := result.StorageProof[0]
slotValue, _ := ethcl.StorageAt(context.Background(), testAddr, testSlot, nil)
if !bytes.Equal(slotValue, proof.Value.Bytes()) {
t.Fatalf("invalid storage proof value, want: %v, got: %v", slotValue, proof.Value.Bytes())
}
if proof.Key != testSlot.String() {
t.Fatalf("invalid storage proof key, want: %v, got: %v", testSlot.String(), proof.Key)
}

}

func testGCStats(t *testing.T, client *rpc.Client) {
Expand Down

0 comments on commit c5a6e66

Please sign in to comment.