Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit 66d695d

Browse files
Update keccak of address to be a common.Hash instead of a common.Address
1 parent a8a8fe4 commit 66d695d

File tree

7 files changed

+56
-54
lines changed

7 files changed

+56
-54
lines changed

libraries/shared/fetcher/geth_rpc_storage_fetcher.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ func (fetcher GethRpcStorageFetcher) FetchStorageDiffs(out chan<- utils.StorageD
6262
for _, storage := range account.Storage {
6363
logrus.Trace("adding storage diff to out channel")
6464
out <- utils.StorageDiff{
65-
Contract: common.BytesToAddress(account.Key),
66-
BlockHash: stateDiff.BlockHash,
67-
BlockHeight: int(stateDiff.BlockNumber.Int64()),
68-
StorageKey: common.BytesToHash(storage.Key),
69-
StorageValue: common.BytesToHash(storage.Value),
65+
KeccakOfContractAddress: common.BytesToHash(account.Key),
66+
BlockHash: stateDiff.BlockHash,
67+
BlockHeight: int(stateDiff.BlockNumber.Int64()),
68+
StorageKey: common.BytesToHash(storage.Key),
69+
StorageValue: common.BytesToHash(storage.Value),
7070
}
7171
}
7272
}

libraries/shared/fetcher/geth_rpc_storage_fetcher_test.go

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,20 +101,18 @@ var _ = Describe("Geth RPC Storage Fetcher", func() {
101101
height := test_data.BlockNumber
102102
intHeight := int(height.Int64())
103103
expectedStorageDiff := utils.StorageDiff{
104-
//this is not the contract address, but the keccak 256 of the address
105-
Contract: common.BytesToAddress(test_data.ContractLeafKey[:]),
106-
BlockHash: common.HexToHash("0xfa40fbe2d98d98b3363a778d52f2bcd29d6790b9b3f3cab2b167fd12d3550f73"),
107-
BlockHeight: intHeight,
108-
StorageKey: common.BytesToHash(test_data.StorageKey),
109-
StorageValue: common.BytesToHash(test_data.StorageValue),
104+
KeccakOfContractAddress: common.BytesToHash(test_data.ContractLeafKey[:]),
105+
BlockHash: common.HexToHash("0xfa40fbe2d98d98b3363a778d52f2bcd29d6790b9b3f3cab2b167fd12d3550f73"),
106+
BlockHeight: intHeight,
107+
StorageKey: common.BytesToHash(test_data.StorageKey),
108+
StorageValue: common.BytesToHash(test_data.StorageValue),
110109
}
111110
anotherExpectedStorageDiff := utils.StorageDiff{
112-
//this is not the contract address, but the keccak 256 of the address
113-
Contract: common.BytesToAddress(test_data.AnotherContractLeafKey[:]),
114-
BlockHash: common.HexToHash("0xfa40fbe2d98d98b3363a778d52f2bcd29d6790b9b3f3cab2b167fd12d3550f73"),
115-
BlockHeight: intHeight,
116-
StorageKey: common.BytesToHash(test_data.StorageKey),
117-
StorageValue: common.BytesToHash(test_data.StorageValue),
111+
KeccakOfContractAddress: common.BytesToHash(test_data.AnotherContractLeafKey[:]),
112+
BlockHash: common.HexToHash("0xfa40fbe2d98d98b3363a778d52f2bcd29d6790b9b3f3cab2b167fd12d3550f73"),
113+
BlockHeight: intHeight,
114+
StorageKey: common.BytesToHash(test_data.StorageKey),
115+
StorageValue: common.BytesToHash(test_data.StorageValue),
118116
}
119117
Expect(<-storagediffChan).To(Equal(expectedStorageDiff))
120118
Expect(<-storagediffChan).To(Equal(anotherExpectedStorageDiff))

libraries/shared/storage/utils/diff.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ import (
2525
const ExpectedRowLength = 5
2626

2727
type StorageDiff struct {
28-
Id int
29-
Contract common.Address
30-
BlockHash common.Hash `db:"block_hash"`
31-
BlockHeight int `db:"block_height"`
32-
StorageKey common.Hash `db:"storage_key"`
33-
StorageValue common.Hash `db:"storage_value"`
28+
Id int
29+
Contract common.Address
30+
KeccakOfContractAddress common.Hash
31+
BlockHash common.Hash `db:"block_hash"`
32+
BlockHeight int `db:"block_height"`
33+
StorageKey common.Hash `db:"storage_key"`
34+
StorageValue common.Hash `db:"storage_value"`
3435
}
3536

3637
func FromStrings(csvRow []string) (StorageDiff, error) {

libraries/shared/watcher/csv_storage_watcher.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/ethereum/go-ethereum/common"
1919
"github.com/vulcanize/vulcanizedb/libraries/shared/fetcher"
2020
"github.com/vulcanize/vulcanizedb/libraries/shared/storage"
21+
"github.com/vulcanize/vulcanizedb/libraries/shared/storage/utils"
2122
"github.com/vulcanize/vulcanizedb/libraries/shared/transformer"
2223
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
2324
)
@@ -39,7 +40,7 @@ func NewCsvStorageWatcher(fetcher fetcher.IStorageFetcher, db *postgres.DB) CsvS
3940
return CsvStorageWatcher{StorageWatcher: storageWatcher}
4041
}
4142

42-
func (storageWatcher StorageWatcher) getCsvTransformer(contractAddress common.Address) (transformer.StorageTransformer, bool) {
43-
storageTransformer, ok := storageWatcher.Transformers[contractAddress]
43+
func (storageWatcher StorageWatcher) getCsvTransformer(diff utils.StorageDiff) (transformer.StorageTransformer, bool) {
44+
storageTransformer, ok := storageWatcher.Transformers[diff.Contract]
4445
return storageTransformer, ok
4546
}

libraries/shared/watcher/geth_storage_watcher.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/ethereum/go-ethereum/crypto"
2020
"github.com/vulcanize/vulcanizedb/libraries/shared/fetcher"
2121
"github.com/vulcanize/vulcanizedb/libraries/shared/storage"
22+
"github.com/vulcanize/vulcanizedb/libraries/shared/storage/utils"
2223
"github.com/vulcanize/vulcanizedb/libraries/shared/transformer"
2324
"github.com/vulcanize/vulcanizedb/pkg/datastore/postgres"
2425
)
@@ -30,7 +31,7 @@ type GethStorageWatcher struct {
3031
func NewGethStorageWatcher(fetcher fetcher.IStorageFetcher, db *postgres.DB) GethStorageWatcher {
3132
queue := storage.NewStorageQueue(db)
3233
transformers := make(map[common.Address]transformer.StorageTransformer)
33-
keccakAddressTransformers := make(map[common.Address]transformer.StorageTransformer)
34+
keccakAddressTransformers := make(map[common.Hash]transformer.StorageTransformer)
3435
storageWatcher := StorageWatcher{
3536
db: db,
3637
StorageFetcher: fetcher,
@@ -42,15 +43,16 @@ func NewGethStorageWatcher(fetcher fetcher.IStorageFetcher, db *postgres.DB) Get
4243
return GethStorageWatcher{StorageWatcher: storageWatcher}
4344
}
4445

45-
func (storageWatcher StorageWatcher) getTransformerForGethWatcher(contractAddress common.Address) (transformer.StorageTransformer, bool) {
46-
storageTransformer, ok := storageWatcher.KeccakAddressTransformers[contractAddress]
46+
func (storageWatcher StorageWatcher) getTransformerForGethWatcher(diff utils.StorageDiff) (transformer.StorageTransformer, bool) {
47+
keccakOfAddress := diff.KeccakOfContractAddress
48+
storageTransformer, ok := storageWatcher.KeccakAddressTransformers[keccakOfAddress]
4749
if ok {
4850
return storageTransformer, ok
4951
} else {
5052
for address, transformer := range storageWatcher.Transformers {
51-
keccakOfTransformerAddress := common.BytesToAddress(crypto.Keccak256(address[:]))
52-
if keccakOfTransformerAddress == contractAddress {
53-
storageWatcher.KeccakAddressTransformers[contractAddress] = transformer
53+
keccakOfTransformerAddress := common.BytesToHash(crypto.Keccak256(address[:]))
54+
if keccakOfTransformerAddress == keccakOfAddress {
55+
storageWatcher.KeccakAddressTransformers[keccakOfAddress] = transformer
5456
return transformer, true
5557
}
5658
}

libraries/shared/watcher/geth_storage_watcher_test.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,24 +56,24 @@ var _ = Describe("Geth Storage Watcher", func() {
5656
diffs chan utils.StorageDiff
5757
storageWatcher watcher.GethStorageWatcher
5858
address common.Address
59-
keccakOfAddress common.Address
59+
keccakOfAddress common.Hash
6060
)
6161

6262
BeforeEach(func() {
6363
errs = make(chan error)
6464
diffs = make(chan utils.StorageDiff)
6565
address = common.HexToAddress("0x0123456789abcdef")
66-
keccakOfAddress = common.BytesToAddress(crypto.Keccak256(address[:]))
66+
keccakOfAddress = common.BytesToHash(crypto.Keccak256(address[:]))
6767
mockFetcher = mocks.NewMockStorageFetcher()
6868
mockQueue = &mocks.MockStorageQueue{}
6969
mockTransformer = &mocks.MockStorageTransformer{Address: address}
7070
gethDiff = utils.StorageDiff{
71-
Id: 1338,
72-
Contract: keccakOfAddress,
73-
BlockHash: common.HexToHash("0xfedcba9876543210"),
74-
BlockHeight: 0,
75-
StorageKey: common.HexToHash("0xabcdef1234567890"),
76-
StorageValue: common.HexToHash("0x9876543210abcdef"),
71+
Id: 1338,
72+
KeccakOfContractAddress: keccakOfAddress,
73+
BlockHash: common.HexToHash("0xfedcba9876543210"),
74+
BlockHeight: 0,
75+
StorageKey: common.HexToHash("0xabcdef1234567890"),
76+
StorageValue: common.HexToHash("0x9876543210abcdef"),
7777
}
7878
})
7979

@@ -151,10 +151,10 @@ var _ = Describe("Geth Storage Watcher", func() {
151151
It("keeps track transformers by the keccak256 hash of their contract address ", func(done Done) {
152152
go storageWatcher.Execute(diffs, errs, time.Hour)
153153

154-
m := make(map[common.Address]transformer.StorageTransformer)
154+
m := make(map[common.Hash]transformer.StorageTransformer)
155155
m[keccakOfAddress] = mockTransformer
156156

157-
Eventually(func() map[common.Address]transformer.StorageTransformer {
157+
Eventually(func() map[common.Hash]transformer.StorageTransformer {
158158
return storageWatcher.KeccakAddressTransformers
159159
}).Should(Equal(m))
160160

@@ -164,15 +164,15 @@ var _ = Describe("Geth Storage Watcher", func() {
164164
It("gets the transformer from the known keccak address map first", func(done Done) {
165165
anotherAddress := common.HexToAddress("0xafakeaddress")
166166
anotherTransformer := &mocks.MockStorageTransformer{Address: anotherAddress}
167-
keccakOfAnotherAddress := common.BytesToAddress(crypto.Keccak256(anotherAddress[:]))
167+
keccakOfAnotherAddress := common.BytesToHash(crypto.Keccak256(anotherAddress[:]))
168168

169169
anotherGethDiff := utils.StorageDiff{
170-
Id: 1338,
171-
Contract: keccakOfAnotherAddress,
172-
BlockHash: common.HexToHash("0xfedcba9876543210"),
173-
BlockHeight: 0,
174-
StorageKey: common.HexToHash("0xabcdef1234567890"),
175-
StorageValue: common.HexToHash("0x9876543210abcdef"),
170+
Id: 1338,
171+
KeccakOfContractAddress: keccakOfAnotherAddress,
172+
BlockHash: common.HexToHash("0xfedcba9876543210"),
173+
BlockHeight: 0,
174+
StorageKey: common.HexToHash("0xabcdef1234567890"),
175+
StorageValue: common.HexToHash("0x9876543210abcdef"),
176176
}
177177
mockFetcher.DiffsToReturn = []utils.StorageDiff{anotherGethDiff}
178178
storageWatcher.KeccakAddressTransformers[keccakOfAnotherAddress] = anotherTransformer

libraries/shared/watcher/storage_watcher.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ type StorageWatcher struct {
4141
StorageFetcher fetcher.IStorageFetcher
4242
Queue storage.IStorageQueue
4343
Transformers map[common.Address]transformer.StorageTransformer
44-
KeccakAddressTransformers map[common.Address]transformer.StorageTransformer // keccak hash of an address => transformer
45-
transformerGetter func(common.Address) (transformer.StorageTransformer, bool)
44+
KeccakAddressTransformers map[common.Hash]transformer.StorageTransformer // keccak hash of an address => transformer
45+
transformerGetter func(diff utils.StorageDiff) (transformer.StorageTransformer, bool)
4646
}
4747

4848
func (storageWatcher StorageWatcher) AddTransformers(initializers []transformer.StorageTransformerInitializer) {
@@ -67,12 +67,12 @@ func (storageWatcher StorageWatcher) Execute(diffsChan chan utils.StorageDiff, e
6767
}
6868
}
6969

70-
func (storageWatcher StorageWatcher) getTransformer(contractAddress common.Address) (transformer.StorageTransformer, bool) {
71-
return storageWatcher.transformerGetter(contractAddress)
70+
func (storageWatcher StorageWatcher) getTransformer(diff utils.StorageDiff) (transformer.StorageTransformer, bool) {
71+
return storageWatcher.transformerGetter(diff)
7272
}
7373

7474
func (storageWatcher StorageWatcher) processRow(diff utils.StorageDiff) {
75-
storageTransformer, ok := storageWatcher.getTransformer(diff.Contract)
75+
storageTransformer, ok := storageWatcher.getTransformer(diff)
7676
if !ok {
7777
logrus.Debug("ignoring a diff from an unwatched contract")
7878
return
@@ -93,7 +93,7 @@ func (storageWatcher StorageWatcher) processQueue() {
9393
logrus.Warn(fmt.Sprintf("error getting queued storage: %s", fetchErr))
9494
}
9595
for _, diff := range diffs {
96-
storageTransformer, ok := storageWatcher.getTransformer(diff.Contract)
96+
storageTransformer, ok := storageWatcher.getTransformer(diff)
9797
if !ok {
9898
// delete diff from queue if address no longer watched
9999
storageWatcher.deleteRow(diff.Id)

0 commit comments

Comments
 (0)