1+ //go:build relic
2+
13package entries
24
35import (
@@ -12,14 +14,23 @@ import (
1214)
1315
1416type BlockEntry struct {
15- BlockHash string `pg:",pk,use_zero"`
16- PrevBlockHash string
17- TxnMerkleRoot string
18- Timestamp time.Time
19- Height uint64
20- Nonce uint64
21- ExtraNonce uint64
22- BadgerKey []byte `pg:",use_zero"`
17+ BlockHash string `pg:",pk,use_zero"`
18+ PrevBlockHash string
19+ TxnMerkleRoot string
20+ Timestamp time.Time
21+ Height uint64
22+ Nonce uint64
23+ ExtraNonce uint64
24+ BlockVersion uint32
25+ TxnConnectStatusByIndexHash string `pg:",use_zero"`
26+ ProposerPublicKey string `pg:",use_zero"`
27+ ProposerVotingPublicKey string `pg:",use_zero"`
28+ ProposerRandomSeedSignature string `pg:",use_zero"`
29+ ProposedInView uint64
30+ ProposerVotePartialSignature string `pg:",use_zero"`
31+ // TODO: Quorum Certificates. Separate entry.
32+
33+ BadgerKey []byte `pg:",use_zero"`
2334}
2435
2536type PGBlockEntry struct {
@@ -28,18 +39,34 @@ type PGBlockEntry struct {
2839}
2940
3041// Convert the UserAssociation DeSo encoder to the PG struct used by bun.
31- func BlockEncoderToPGStruct (block * lib.MsgDeSoBlock , keyBytes []byte ) * PGBlockEntry {
42+ func BlockEncoderToPGStruct (block * lib.MsgDeSoBlock , keyBytes []byte , params * lib. DeSoParams ) * PGBlockEntry {
3243 blockHash , _ := block .Hash ()
44+ var txnConnectStatusByIndexHash string
45+ if block .Header .TxnConnectStatusByIndexHash != nil {
46+ txnConnectStatusByIndexHash = hex .EncodeToString (block .Header .TxnConnectStatusByIndexHash .ToBytes ())
47+ }
48+ var proposerPublicKey string
49+ if block .Header .ProposerPublicKey != nil {
50+ proposerPublicKey = consumer .PublicKeyBytesToBase58Check (
51+ block .Header .ProposerPublicKey .ToBytes (), params )
52+ }
3353 return & PGBlockEntry {
3454 BlockEntry : BlockEntry {
35- BlockHash : hex .EncodeToString (blockHash [:]),
36- PrevBlockHash : hex .EncodeToString (block .Header .PrevBlockHash [:]),
37- TxnMerkleRoot : hex .EncodeToString (block .Header .TransactionMerkleRoot [:]),
38- Timestamp : consumer .UnixNanoToTime (uint64 (block .Header .TstampNanoSecs )),
39- Height : block .Header .Height ,
40- Nonce : block .Header .Nonce ,
41- ExtraNonce : block .Header .ExtraNonce ,
42- BadgerKey : keyBytes ,
55+ BlockHash : hex .EncodeToString (blockHash [:]),
56+ PrevBlockHash : hex .EncodeToString (block .Header .PrevBlockHash [:]),
57+ TxnMerkleRoot : hex .EncodeToString (block .Header .TransactionMerkleRoot [:]),
58+ Timestamp : consumer .UnixNanoToTime (uint64 (block .Header .TstampNanoSecs )),
59+ Height : block .Header .Height ,
60+ Nonce : block .Header .Nonce ,
61+ ExtraNonce : block .Header .ExtraNonce ,
62+ BlockVersion : block .Header .Version ,
63+ TxnConnectStatusByIndexHash : txnConnectStatusByIndexHash ,
64+ ProposerPublicKey : proposerPublicKey ,
65+ ProposerVotingPublicKey : block .Header .ProposerVotingPublicKey .ToString (),
66+ ProposerRandomSeedSignature : block .Header .ProposerRandomSeedSignature .ToString (),
67+ ProposedInView : block .Header .ProposedInView ,
68+ ProposerVotePartialSignature : block .Header .ProposerVotePartialSignature .ToString (),
69+ BadgerKey : keyBytes ,
4370 },
4471 }
4572}
@@ -77,10 +104,16 @@ func bulkInsertBlockEntry(entries []*lib.StateChangeEntry, db *bun.DB, operation
77104
78105 for _ , entry := range uniqueBlocks {
79106 block := entry .Encoder .(* lib.MsgDeSoBlock )
80- blockEntry := BlockEncoderToPGStruct (block , entry .KeyBytes )
107+ blockEntry := BlockEncoderToPGStruct (block , entry .KeyBytes , params )
81108 pgBlockEntrySlice = append (pgBlockEntrySlice , blockEntry )
82109 for jj , transaction := range block .Txns {
83- pgTransactionEntry , err := TransactionEncoderToPGStruct (transaction , uint64 (jj ), blockEntry .BlockHash , blockEntry .Height , blockEntry .Timestamp , params )
110+ // Check if the transaction connects or not.
111+ txnConnects := blockEntry .Height < uint64 (params .ForkHeights .ProofOfStake2ConsensusCutoverBlockHeight ) ||
112+ jj == 0 || block .TxnConnectStatusByIndex .Get (jj - 1 )
113+ pgTransactionEntry , err := TransactionEncoderToPGStruct (
114+ transaction , uint64 (jj ), blockEntry .BlockHash , blockEntry .Height , blockEntry .Timestamp , txnConnects ,
115+ params ,
116+ )
84117 if err != nil {
85118 return errors .Wrapf (err , "entries.bulkInsertBlockEntry: Problem converting transaction to PG struct" )
86119 }
0 commit comments