Skip to content

Commit 1dd37be

Browse files
authored
Merge pull request #159 from vulcanize/schema_updates
adjust for schema updates
2 parents ac6ef33 + a3e9d54 commit 1dd37be

File tree

15 files changed

+229
-151
lines changed

15 files changed

+229
-151
lines changed

statediff/indexer/database/dump/indexer.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,6 @@ func (sdi *StateDiffIndexer) PushBlock(block *types.Block, receipts types.Receip
184184
func (sdi *StateDiffIndexer) processHeader(tx *BatchTx, header *types.Header, headerNode node.Node, reward, td *big.Int) (string, error) {
185185
tx.cacheIPLD(headerNode)
186186

187-
var baseFee *string
188-
if header.BaseFee != nil {
189-
baseFee = new(string)
190-
*baseFee = header.BaseFee.String()
191-
}
192-
193187
headerID := header.Hash().String()
194188
mod := models.HeaderModel{
195189
CID: headerNode.Cid().String(),
@@ -205,7 +199,7 @@ func (sdi *StateDiffIndexer) processHeader(tx *BatchTx, header *types.Header, he
205199
TxRoot: header.TxHash.String(),
206200
UncleRoot: header.UncleHash.String(),
207201
Timestamp: header.Time,
208-
BaseFee: baseFee,
202+
Coinbase: header.Coinbase.String(),
209203
}
210204
_, err := fmt.Fprintf(sdi.dump, "%+v\r\n", mod)
211205
return headerID, err
@@ -268,6 +262,12 @@ func (sdi *StateDiffIndexer) processReceiptsAndTxs(tx *BatchTx, args processArgs
268262
// index tx
269263
trx := args.txs[i]
270264
trxID := trx.Hash().String()
265+
266+
var val string
267+
if trx.Value() != nil {
268+
val = trx.Value().String()
269+
}
270+
271271
// derive sender for the tx that corresponds with this receipt
272272
from, err := types.Sender(signer, trx)
273273
if err != nil {
@@ -283,6 +283,7 @@ func (sdi *StateDiffIndexer) processReceiptsAndTxs(tx *BatchTx, args processArgs
283283
CID: txNode.Cid().String(),
284284
MhKey: shared.MultihashKeyFromCID(txNode.Cid()),
285285
Type: trx.Type(),
286+
Value: val,
286287
}
287288
if _, err := fmt.Fprintf(sdi.dump, "%+v\r\n", txModel); err != nil {
288289
return err

statediff/indexer/database/file/indexer.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (sdi *StateDiffIndexer) processHeader(header *types.Header, headerNode node
212212
TxRoot: header.TxHash.String(),
213213
UncleRoot: header.UncleHash.String(),
214214
Timestamp: header.Time,
215-
BaseFee: baseFee,
215+
Coinbase: header.Coinbase.String(),
216216
})
217217
return headerID
218218
}
@@ -269,6 +269,12 @@ func (sdi *StateDiffIndexer) processReceiptsAndTxs(args processArgs) error {
269269
// index tx
270270
trx := args.txs[i]
271271
txID := trx.Hash().String()
272+
273+
var val string
274+
if trx.Value() != nil {
275+
val = trx.Value().String()
276+
}
277+
272278
// derive sender for the tx that corresponds with this receipt
273279
from, err := types.Sender(signer, trx)
274280
if err != nil {
@@ -284,6 +290,7 @@ func (sdi *StateDiffIndexer) processReceiptsAndTxs(args processArgs) error {
284290
CID: txNode.Cid().String(),
285291
MhKey: shared.MultihashKeyFromCID(txNode.Cid()),
286292
Type: trx.Type(),
293+
Value: val,
287294
}
288295
sdi.fileWriter.upsertTransactionCID(txModel)
289296

statediff/indexer/database/file/indexer_legacy_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,16 +108,16 @@ func TestFileIndexerLegacy(t *testing.T) {
108108
setupLegacy(t)
109109
dumpData(t)
110110
defer tearDown(t)
111-
pgStr := `SELECT cid, td, reward, block_hash, base_fee
111+
pgStr := `SELECT cid, td, reward, block_hash, coinbase
112112
FROM eth.header_cids
113113
WHERE block_number = $1`
114114
// check header was properly indexed
115115
type res struct {
116116
CID string
117117
TD string
118118
Reward string
119-
BlockHash string `db:"block_hash"`
120-
BaseFee *string `db:"base_fee"`
119+
BlockHash string `db:"block_hash"`
120+
Coinbase string `db:"coinbase"`
121121
}
122122
header := new(res)
123123
err = sqlxdb.QueryRowx(pgStr, legacyData.BlockNumber.Uint64()).StructScan(header)
@@ -126,7 +126,7 @@ func TestFileIndexerLegacy(t *testing.T) {
126126
test_helpers.ExpectEqual(t, header.CID, legacyHeaderCID.String())
127127
test_helpers.ExpectEqual(t, header.TD, legacyData.MockBlock.Difficulty().String())
128128
test_helpers.ExpectEqual(t, header.Reward, "5000000000000011250")
129+
test_helpers.ExpectEqual(t, header.Coinbase, legacyData.MockBlock.Coinbase().String())
129130
require.Nil(t, legacyData.MockHeader.BaseFee)
130-
require.Nil(t, header.BaseFee)
131131
})
132132
}

statediff/indexer/database/file/indexer_test.go

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ var (
5252
ipfsPgGet = `SELECT data FROM public.blocks
5353
WHERE key = $1`
5454
tx1, tx2, tx3, tx4, tx5, rct1, rct2, rct3, rct4, rct5 []byte
55+
txs types.Transactions
56+
rcts types.Receipts
5557
mockBlock *types.Block
5658
headerCID, trx1CID, trx2CID, trx3CID, trx4CID, trx5CID cid.Cid
5759
rct1CID, rct2CID, rct3CID, rct4CID, rct5CID cid.Cid
@@ -65,7 +67,7 @@ func init() {
6567
}
6668

6769
mockBlock = mocks.MockBlock
68-
txs, rcts := mocks.MockBlock.Transactions(), mocks.MockReceipts
70+
txs, rcts = mocks.MockBlock.Transactions(), mocks.MockReceipts
6971

7072
buf := new(bytes.Buffer)
7173
txs.EncodeIndex(0, buf)
@@ -177,16 +179,16 @@ func TestFileIndexer(t *testing.T) {
177179
setup(t)
178180
dumpData(t)
179181
defer tearDown(t)
180-
pgStr := `SELECT cid, td, reward, block_hash, base_fee
182+
pgStr := `SELECT cid, td, reward, block_hash, coinbase
181183
FROM eth.header_cids
182184
WHERE block_number = $1`
183185
// check header was properly indexed
184186
type res struct {
185187
CID string
186188
TD string
187189
Reward string
188-
BlockHash string `db:"block_hash"`
189-
BaseFee *string `db:"base_fee"`
190+
BlockHash string `db:"block_hash"`
191+
Coinbase string `db:"coinbase"`
190192
}
191193
header := new(res)
192194
err = sqlxdb.QueryRowx(pgStr, mocks.BlockNumber.Uint64()).StructScan(header)
@@ -197,7 +199,7 @@ func TestFileIndexer(t *testing.T) {
197199
test_helpers.ExpectEqual(t, header.CID, headerCID.String())
198200
test_helpers.ExpectEqual(t, header.TD, mocks.MockBlock.Difficulty().String())
199201
test_helpers.ExpectEqual(t, header.Reward, "2000000000000021250")
200-
test_helpers.ExpectEqual(t, *header.BaseFee, mocks.MockHeader.BaseFee.String())
202+
test_helpers.ExpectEqual(t, header.Coinbase, mocks.MockHeader.Coinbase.String())
201203
dc, err := cid.Decode(header.CID)
202204
if err != nil {
203205
t.Fatal(err)
@@ -231,6 +233,10 @@ func TestFileIndexer(t *testing.T) {
231233
expectTrue(t, test_helpers.ListContainsString(trxs, trx4CID.String()))
232234
expectTrue(t, test_helpers.ListContainsString(trxs, trx5CID.String()))
233235
// and published
236+
type txResult struct {
237+
TxType uint8 `db:"tx_type"`
238+
Value string
239+
}
234240
for _, c := range trxs {
235241
dc, err := cid.Decode(c)
236242
if err != nil {
@@ -243,47 +249,59 @@ func TestFileIndexer(t *testing.T) {
243249
if err != nil {
244250
t.Fatal(err)
245251
}
246-
txTypePgStr := `SELECT tx_type FROM eth.transaction_cids WHERE cid = $1`
252+
txTypeAndValueStr := `SELECT tx_type, value FROM eth.transaction_cids WHERE cid = $1`
247253
switch c {
248254
case trx1CID.String():
249255
test_helpers.ExpectEqual(t, data, tx1)
250-
var txType uint8
251-
err = sqlxdb.Get(&txType, txTypePgStr, c)
256+
txRes := new(txResult)
257+
err = sqlxdb.QueryRowx(txTypeAndValueStr, c).StructScan(txRes)
252258
if err != nil {
253259
t.Fatal(err)
254260
}
255-
if txType != 0 {
256-
t.Fatalf("expected LegacyTxType (0), got %d", txType)
261+
if txRes.TxType != 0 {
262+
t.Fatalf("expected LegacyTxType (0), got %d", txRes.TxType)
263+
}
264+
if txRes.Value != txs[0].Value().String() {
265+
t.Fatalf("expected tx value %s got %s", txs[0].Value().String(), txRes.Value)
257266
}
258267
case trx2CID.String():
259268
test_helpers.ExpectEqual(t, data, tx2)
260-
var txType uint8
261-
err = sqlxdb.Get(&txType, txTypePgStr, c)
269+
txRes := new(txResult)
270+
err = sqlxdb.QueryRowx(txTypeAndValueStr, c).StructScan(txRes)
262271
if err != nil {
263272
t.Fatal(err)
264273
}
265-
if txType != 0 {
266-
t.Fatalf("expected LegacyTxType (0), got %d", txType)
274+
if txRes.TxType != 0 {
275+
t.Fatalf("expected LegacyTxType (0), got %d", txRes.TxType)
276+
}
277+
if txRes.Value != txs[1].Value().String() {
278+
t.Fatalf("expected tx value %s got %s", txs[1].Value().String(), txRes.Value)
267279
}
268280
case trx3CID.String():
269281
test_helpers.ExpectEqual(t, data, tx3)
270-
var txType uint8
271-
err = sqlxdb.Get(&txType, txTypePgStr, c)
282+
txRes := new(txResult)
283+
err = sqlxdb.QueryRowx(txTypeAndValueStr, c).StructScan(txRes)
272284
if err != nil {
273285
t.Fatal(err)
274286
}
275-
if txType != 0 {
276-
t.Fatalf("expected LegacyTxType (0), got %d", txType)
287+
if txRes.TxType != 0 {
288+
t.Fatalf("expected LegacyTxType (0), got %d", txRes.TxType)
289+
}
290+
if txRes.Value != txs[2].Value().String() {
291+
t.Fatalf("expected tx value %s got %s", txs[2].Value().String(), txRes.Value)
277292
}
278293
case trx4CID.String():
279294
test_helpers.ExpectEqual(t, data, tx4)
280-
var txType uint8
281-
err = sqlxdb.Get(&txType, txTypePgStr, c)
295+
txRes := new(txResult)
296+
err = sqlxdb.QueryRowx(txTypeAndValueStr, c).StructScan(txRes)
282297
if err != nil {
283298
t.Fatal(err)
284299
}
285-
if txType != types.AccessListTxType {
286-
t.Fatalf("expected AccessListTxType (1), got %d", txType)
300+
if txRes.TxType != types.AccessListTxType {
301+
t.Fatalf("expected AccessListTxType (1), got %d", txRes.TxType)
302+
}
303+
if txRes.Value != txs[3].Value().String() {
304+
t.Fatalf("expected tx value %s got %s", txs[3].Value().String(), txRes.Value)
287305
}
288306
accessListElementModels := make([]models.AccessListElementModel, 0)
289307
pgStr = `SELECT access_list_elements.* FROM eth.access_list_elements INNER JOIN eth.transaction_cids ON (tx_id = transaction_cids.tx_hash) WHERE cid = $1 ORDER BY access_list_elements.index ASC`
@@ -307,13 +325,16 @@ func TestFileIndexer(t *testing.T) {
307325
test_helpers.ExpectEqual(t, model2, mocks.AccessListEntry2Model)
308326
case trx5CID.String():
309327
test_helpers.ExpectEqual(t, data, tx5)
310-
var txType *uint8
311-
err = sqlxdb.Get(&txType, txTypePgStr, c)
328+
txRes := new(txResult)
329+
err = sqlxdb.QueryRowx(txTypeAndValueStr, c).StructScan(txRes)
312330
if err != nil {
313331
t.Fatal(err)
314332
}
315-
if *txType != types.DynamicFeeTxType {
316-
t.Fatalf("expected DynamicFeeTxType (2), got %d", *txType)
333+
if txRes.TxType != types.DynamicFeeTxType {
334+
t.Fatalf("expected DynamicFeeTxType (2), got %d", txRes.TxType)
335+
}
336+
if txRes.Value != txs[4].Value().String() {
337+
t.Fatalf("expected tx value %s got %s", txs[4].Value().String(), txRes.Value)
317338
}
318339
}
319340
}

statediff/indexer/database/file/writer.go

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -124,18 +124,14 @@ const (
124124
ipldInsert = "INSERT INTO public.blocks (key, data) VALUES ('%s', '\\x%x');\n"
125125

126126
headerInsert = "INSERT INTO eth.header_cids (block_number, block_hash, parent_hash, cid, td, node_id, reward, " +
127-
"state_root, tx_root, receipt_root, uncle_root, bloom, timestamp, mh_key, times_validated, base_fee) VALUES " +
128-
"('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '\\x%x', %d, '%s', %d, %s);\n"
129-
130-
headerInsertWithoutBaseFee = "INSERT INTO eth.header_cids (block_number, block_hash, parent_hash, cid, td, node_id, " +
131-
"reward, state_root, tx_root, receipt_root, uncle_root, bloom, timestamp, mh_key, times_validated, base_fee) VALUES " +
132-
"('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '\\x%x', %d, '%s', %d, NULL);\n"
127+
"state_root, tx_root, receipt_root, uncle_root, bloom, timestamp, mh_key, times_validated, coinbase) VALUES " +
128+
"('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '\\x%x', %d, '%s', %d, '%s');\n"
133129

134130
uncleInsert = "INSERT INTO eth.uncle_cids (block_hash, header_id, parent_hash, cid, reward, mh_key) VALUES " +
135131
"('%s', '%s', '%s', '%s', '%s', '%s');\n"
136132

137-
txInsert = "INSERT INTO eth.transaction_cids (header_id, tx_hash, cid, dst, src, index, mh_key, tx_data, tx_type) " +
138-
"VALUES ('%s', '%s', '%s', '%s', '%s', %d, '%s', '\\x%x', %d);\n"
133+
txInsert = "INSERT INTO eth.transaction_cids (header_id, tx_hash, cid, dst, src, index, mh_key, tx_data, tx_type, " +
134+
"value) VALUES ('%s', '%s', '%s', '%s', '%s', %d, '%s', '\\x%x', %d, '%s');\n"
139135

140136
alInsert = "INSERT INTO eth.access_list_elements (tx_id, index, address, storage_keys) VALUES ('%s', %d, '%s', '%s');\n"
141137

@@ -191,42 +187,40 @@ func (sqw *SQLWriter) upsertIPLDRaw(codec, mh uint64, raw []byte) (string, strin
191187
}
192188

193189
func (sqw *SQLWriter) upsertHeaderCID(header models.HeaderModel) {
194-
var stmt string
195-
if header.BaseFee == nil {
196-
stmt = fmt.Sprintf(headerInsertWithoutBaseFee, header.BlockNumber, header.BlockHash, header.ParentHash, header.CID,
197-
header.TotalDifficulty, header.NodeID, header.Reward, header.StateRoot, header.TxRoot,
198-
header.RctRoot, header.UncleRoot, header.Bloom, header.Timestamp, header.MhKey, 1)
199-
} else {
200-
stmt = fmt.Sprintf(headerInsert, header.BlockNumber, header.BlockHash, header.ParentHash, header.CID,
201-
header.TotalDifficulty, header.NodeID, header.Reward, header.StateRoot, header.TxRoot,
202-
header.RctRoot, header.UncleRoot, header.Bloom, header.Timestamp, header.MhKey, 1, *header.BaseFee)
203-
}
190+
stmt := fmt.Sprintf(headerInsert, header.BlockNumber, header.BlockHash, header.ParentHash, header.CID,
191+
header.TotalDifficulty, header.NodeID, header.Reward, header.StateRoot, header.TxRoot,
192+
header.RctRoot, header.UncleRoot, header.Bloom, header.Timestamp, header.MhKey, 1, header.Coinbase)
204193
sqw.stmts <- []byte(stmt)
205194
indexerMetrics.blocks.Inc(1)
206195
}
207196

208197
func (sqw *SQLWriter) upsertUncleCID(uncle models.UncleModel) {
209-
sqw.stmts <- []byte(fmt.Sprintf(uncleInsert, uncle.BlockHash, uncle.HeaderID, uncle.ParentHash, uncle.CID, uncle.Reward, uncle.MhKey))
198+
sqw.stmts <- []byte(fmt.Sprintf(uncleInsert, uncle.BlockHash, uncle.HeaderID, uncle.ParentHash, uncle.CID,
199+
uncle.Reward, uncle.MhKey))
210200
}
211201

212202
func (sqw *SQLWriter) upsertTransactionCID(transaction models.TxModel) {
213-
sqw.stmts <- []byte(fmt.Sprintf(txInsert, transaction.HeaderID, transaction.TxHash, transaction.CID, transaction.Dst, transaction.Src, transaction.Index, transaction.MhKey, transaction.Data, transaction.Type))
203+
sqw.stmts <- []byte(fmt.Sprintf(txInsert, transaction.HeaderID, transaction.TxHash, transaction.CID, transaction.Dst,
204+
transaction.Src, transaction.Index, transaction.MhKey, transaction.Data, transaction.Type, transaction.Value))
214205
indexerMetrics.transactions.Inc(1)
215206
}
216207

217208
func (sqw *SQLWriter) upsertAccessListElement(accessListElement models.AccessListElementModel) {
218-
sqw.stmts <- []byte(fmt.Sprintf(alInsert, accessListElement.TxID, accessListElement.Index, accessListElement.Address, formatPostgresStringArray(accessListElement.StorageKeys)))
209+
sqw.stmts <- []byte(fmt.Sprintf(alInsert, accessListElement.TxID, accessListElement.Index, accessListElement.Address,
210+
formatPostgresStringArray(accessListElement.StorageKeys)))
219211
indexerMetrics.accessListEntries.Inc(1)
220212
}
221213

222214
func (sqw *SQLWriter) upsertReceiptCID(rct *models.ReceiptModel) {
223-
sqw.stmts <- []byte(fmt.Sprintf(rctInsert, rct.TxID, rct.LeafCID, rct.Contract, rct.ContractHash, rct.LeafMhKey, rct.PostState, rct.PostStatus, rct.LogRoot))
215+
sqw.stmts <- []byte(fmt.Sprintf(rctInsert, rct.TxID, rct.LeafCID, rct.Contract, rct.ContractHash, rct.LeafMhKey,
216+
rct.PostState, rct.PostStatus, rct.LogRoot))
224217
indexerMetrics.receipts.Inc(1)
225218
}
226219

227220
func (sqw *SQLWriter) upsertLogCID(logs []*models.LogsModel) {
228221
for _, l := range logs {
229-
sqw.stmts <- []byte(fmt.Sprintf(logInsert, l.LeafCID, l.LeafMhKey, l.ReceiptID, l.Address, l.Index, l.Topic0, l.Topic1, l.Topic2, l.Topic3, l.Data))
222+
sqw.stmts <- []byte(fmt.Sprintf(logInsert, l.LeafCID, l.LeafMhKey, l.ReceiptID, l.Address, l.Index, l.Topic0,
223+
l.Topic1, l.Topic2, l.Topic3, l.Data))
230224
indexerMetrics.logs.Inc(1)
231225
}
232226
}

statediff/indexer/database/sql/indexer.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ func (sdi *StateDiffIndexer) processHeader(tx *BatchTx, header *types.Header, he
256256
TxRoot: header.TxHash.String(),
257257
UncleRoot: header.UncleHash.String(),
258258
Timestamp: header.Time,
259-
BaseFee: baseFee,
259+
Coinbase: header.Coinbase.String(),
260260
})
261261
}
262262

@@ -316,6 +316,12 @@ func (sdi *StateDiffIndexer) processReceiptsAndTxs(tx *BatchTx, args processArgs
316316
// index tx
317317
trx := args.txs[i]
318318
txID := trx.Hash().String()
319+
320+
var val string
321+
if trx.Value() != nil {
322+
val = trx.Value().String()
323+
}
324+
319325
// derive sender for the tx that corresponds with this receipt
320326
from, err := types.Sender(signer, trx)
321327
if err != nil {
@@ -331,6 +337,7 @@ func (sdi *StateDiffIndexer) processReceiptsAndTxs(tx *BatchTx, args processArgs
331337
CID: txNode.Cid().String(),
332338
MhKey: shared.MultihashKeyFromCID(txNode.Cid()),
333339
Type: trx.Type(),
340+
Value: val,
334341
}
335342
if err := sdi.dbWriter.upsertTransactionCID(tx.dbtx, txModel); err != nil {
336343
return err

statediff/indexer/database/sql/pgx_indexer_legacy_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestPGXIndexerLegacy(t *testing.T) {
6363
t.Run("Publish and index header IPLDs", func(t *testing.T) {
6464
setupLegacyPGX(t)
6565
defer tearDown(t)
66-
pgStr := `SELECT cid, cast(td AS TEXT), cast(reward AS TEXT), block_hash, base_fee
66+
pgStr := `SELECT cid, cast(td AS TEXT), cast(reward AS TEXT), block_hash, coinbase
6767
FROM eth.header_cids
6868
WHERE block_number = $1`
6969
// check header was properly indexed
@@ -72,18 +72,18 @@ func TestPGXIndexerLegacy(t *testing.T) {
7272
TD string
7373
Reward string
7474
BlockHash string `db:"block_hash"`
75-
BaseFee *int64 `db:"base_fee"`
75+
Coinbase string `db:"coinbase"`
7676
}
7777
header := new(res)
7878

7979
err = db.QueryRow(context.Background(), pgStr, legacyData.BlockNumber.Uint64()).Scan(
80-
&header.CID, &header.TD, &header.Reward, &header.BlockHash, &header.BaseFee)
80+
&header.CID, &header.TD, &header.Reward, &header.BlockHash, &header.Coinbase)
8181
require.NoError(t, err)
8282

8383
test_helpers.ExpectEqual(t, header.CID, legacyHeaderCID.String())
8484
test_helpers.ExpectEqual(t, header.TD, legacyData.MockBlock.Difficulty().String())
8585
test_helpers.ExpectEqual(t, header.Reward, "5000000000000011250")
86+
test_helpers.ExpectEqual(t, header.Coinbase, legacyData.MockHeader.Coinbase.String())
8687
require.Nil(t, legacyData.MockHeader.BaseFee)
87-
require.Nil(t, header.BaseFee)
8888
})
8989
}

0 commit comments

Comments
 (0)