Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion entries/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,29 @@ func bulkInsertBlockEntry(entries []*lib.StateChangeEntry, db *bun.DB, operation
blockEntry := BlockEncoderToPGStruct(block, entry.KeyBytes, params)
pgBlockEntrySlice = append(pgBlockEntrySlice, blockEntry)
for jj, transaction := range block.Txns {
indexInBlock := uint64(jj)
pgTransactionEntry, err := TransactionEncoderToPGStruct(
transaction, uint64(jj), blockEntry.BlockHash, blockEntry.Height, blockEntry.Timestamp, params,
transaction,
&indexInBlock,
blockEntry.BlockHash,
blockEntry.Height,
blockEntry.Timestamp,
nil,
nil,
params,
)
if err != nil {
return errors.Wrapf(err, "entries.bulkInsertBlockEntry: Problem converting transaction to PG struct")
}
pgTransactionEntrySlice = append(pgTransactionEntrySlice, pgTransactionEntry)
if transaction.TxnMeta.GetTxnType() != lib.TxnTypeAtomicTxnsWrapper {
continue
}
innerTxns, err := parseInnerTxnsFromAtomicTxn(pgTransactionEntry, params)
if err != nil {
return errors.Wrapf(err, "entries.bulkInsertBlockEntry: Problem parsing inner txns from atomic txn")
}
pgTransactionEntrySlice = append(pgTransactionEntrySlice, innerTxns...)
}
}

Expand Down
116 changes: 94 additions & 22 deletions entries/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,14 @@ type TransactionEntry struct {
PublicKey string
ExtraData map[string]string `bun:"type:jsonb"`
Signature []byte
IndexInBlock uint64
IndexInBlock *uint64
BlockHeight uint64
Timestamp time.Time `pg:",use_zero"`
BadgerKey []byte `pg:",use_zero"`
// Atomic fields
WrapperTransactionHash *string
IndexInWrapperTransaction *uint64

BadgerKey []byte `pg:",use_zero"`
}

type PGTransactionEntry struct {
Expand All @@ -43,12 +47,15 @@ type PGTransactionEntry struct {

func TransactionEncoderToPGStruct(
transaction *lib.MsgDeSoTxn,
blockIndex uint64,
blockIndex *uint64,
blockHash string,
blockHeight uint64,
timestamp time.Time,
wrapperTransactionHash *string,
indexInWrapperTransaction *uint64,
params *lib.DeSoParams,
) (*PGTransactionEntry, error) {

var txInputs []map[string]string
for _, input := range transaction.TxInputs {
txInputs = append(txInputs, map[string]string{
Expand Down Expand Up @@ -76,23 +83,25 @@ func TransactionEncoderToPGStruct(

transactionEntry := &PGTransactionEntry{
TransactionEntry: TransactionEntry{
TransactionHash: hex.EncodeToString(transaction.Hash()[:]),
TransactionId: consumer.PublicKeyBytesToBase58Check(transaction.Hash()[:], params),
BlockHash: blockHash,
Version: uint16(transaction.TxnVersion),
Inputs: txInputs,
Outputs: txOutputs,
FeeNanos: transaction.TxnFeeNanos,
TxnMeta: transaction.TxnMeta,
TxnMetaBytes: txnMetaBytes,
TxnBytes: txnBytes,
TxnType: uint16(transaction.TxnMeta.GetTxnType()),
PublicKey: consumer.PublicKeyBytesToBase58Check(transaction.PublicKey[:], params),
ExtraData: consumer.ExtraDataBytesToString(transaction.ExtraData),
IndexInBlock: blockIndex,
BlockHeight: blockHeight,
Timestamp: timestamp,
BadgerKey: transaction.Hash()[:],
TransactionHash: hex.EncodeToString(transaction.Hash()[:]),
TransactionId: consumer.PublicKeyBytesToBase58Check(transaction.Hash()[:], params),
BlockHash: blockHash,
Version: uint16(transaction.TxnVersion),
Inputs: txInputs,
Outputs: txOutputs,
FeeNanos: transaction.TxnFeeNanos,
TxnMeta: transaction.TxnMeta,
TxnMetaBytes: txnMetaBytes,
TxnBytes: txnBytes,
TxnType: uint16(transaction.TxnMeta.GetTxnType()),
PublicKey: consumer.PublicKeyBytesToBase58Check(transaction.PublicKey[:], params),
ExtraData: consumer.ExtraDataBytesToString(transaction.ExtraData),
IndexInBlock: blockIndex,
BlockHeight: blockHeight,
Timestamp: timestamp,
WrapperTransactionHash: wrapperTransactionHash,
IndexInWrapperTransaction: indexInWrapperTransaction,
BadgerKey: transaction.Hash()[:],
},
}

Expand Down Expand Up @@ -133,11 +142,36 @@ func transformTransactionEntry(entries []*lib.StateChangeEntry, params *lib.DeSo

for _, entry := range uniqueTransactions {
transaction := entry.Encoder.(*lib.MsgDeSoTxn)
transactionEntry, err := TransactionEncoderToPGStruct(transaction, 0, "", 0, time.Now(), params)
txIndexInBlock := uint64(0)
transactionEntry, err := TransactionEncoderToPGStruct(
transaction,
&txIndexInBlock,
"",
0,
time.Now(),
nil,
nil,
params,
)
if err != nil {
return nil, errors.Wrapf(err, "entries.transformAndBulkInsertTransactionEntry: Problem converting transaction to PG struct")
return nil, errors.Wrapf(
err,
"entries.transformAndBulkInsertTransactionEntry: Problem converting transaction to PG struct",
)
}
pgTransactionEntrySlice = append(pgTransactionEntrySlice, transactionEntry)
if transactionEntry.TxnMeta.GetTxnType() != lib.TxnTypeAtomicTxnsWrapper {
continue
}
innerTxns, err := parseInnerTxnsFromAtomicTxn(transactionEntry, params)
if err != nil {
return nil, errors.Wrapf(
err,
"entries.transformAndBulkInsertTransactionEntry: Problem parsing inner txns from atomic txn",
)
}
pgTransactionEntrySlice = append(pgTransactionEntrySlice, innerTxns...)

}
return pgTransactionEntrySlice, nil
}
Expand Down Expand Up @@ -190,3 +224,41 @@ func bulkDeleteTransactionEntry(entries []*lib.StateChangeEntry, db *bun.DB, ope

return nil
}

func parseInnerTxnsFromAtomicTxn(
pgAtomicTxn *PGTransactionEntry,
params *lib.DeSoParams,
) (
[]*PGTransactionEntry,
error,
) {
if pgAtomicTxn == nil {
return nil, fmt.Errorf("parseInnerTxnsFromAtomicTxn: atomicTxn is nil")
}
if pgAtomicTxn.TxnMeta.GetTxnType() != lib.TxnTypeAtomicTxnsWrapper {
return nil, fmt.Errorf("parseInnerTxnsFromAtomicTxn: txn is not an atomic txn")
}
realTxMeta, ok := pgAtomicTxn.TxnMeta.(*lib.AtomicTxnsWrapperMetadata)
if !ok {
return nil, fmt.Errorf("parseInnerTxnsFromAtomicTxn: txn meta is not an atomic txn wrapper")
}
innerTxns := make([]*PGTransactionEntry, 0)
for ii, txn := range realTxMeta.Txns {
indexInWrapper := uint64(ii)
pgInnerTxn, err := TransactionEncoderToPGStruct(
txn,
nil,
pgAtomicTxn.BlockHash,
pgAtomicTxn.BlockHeight,
pgAtomicTxn.Timestamp,
&pgAtomicTxn.TransactionHash,
&indexInWrapper,
params,
)
if err != nil {
return nil, errors.Wrapf(err, "getInnerTxnsFromAtomicTxn: Problem converting inner txn to PG struct")
}
innerTxns = append(innerTxns, pgInnerTxn)
}
return innerTxns, nil
}
Loading