forked from kaspanet/kaspad
/
acceptancedata.go
90 lines (74 loc) · 3.79 KB
/
acceptancedata.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package serialization
import (
"github.com/Hoosat-Oy/HTND/domain/consensus/model/externalapi"
)
// DomainAcceptanceDataToDbAcceptanceData converts model.AcceptanceData to DbAcceptanceData
func DomainAcceptanceDataToDbAcceptanceData(domainAcceptanceData externalapi.AcceptanceData) *DbAcceptanceData {
dbBlockAcceptanceData := make([]*DbBlockAcceptanceData, len(domainAcceptanceData))
for i, blockAcceptanceData := range domainAcceptanceData {
dbTransactionAcceptanceData := make([]*DbTransactionAcceptanceData,
len(blockAcceptanceData.TransactionAcceptanceData))
for j, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData {
dbTransaction := DomainTransactionToDbTransaction(transactionAcceptanceData.Transaction)
dbTransactionInputUTXOEntries := make([]*DbUtxoEntry, len(transactionAcceptanceData.TransactionInputUTXOEntries))
for k, transactionInputUTXOEntry := range transactionAcceptanceData.TransactionInputUTXOEntries {
dbTransactionInputUTXOEntries[k] = UTXOEntryToDBUTXOEntry(transactionInputUTXOEntry)
}
dbTransactionAcceptanceData[j] = &DbTransactionAcceptanceData{
Transaction: dbTransaction,
Fee: transactionAcceptanceData.Fee,
IsAccepted: transactionAcceptanceData.IsAccepted,
TransactionInputUtxoEntries: dbTransactionInputUTXOEntries,
}
}
blockHash := DomainHashToDbHash(blockAcceptanceData.BlockHash)
dbBlockAcceptanceData[i] = &DbBlockAcceptanceData{
BlockHash: blockHash,
TransactionAcceptanceData: dbTransactionAcceptanceData,
}
}
return &DbAcceptanceData{
BlockAcceptanceData: dbBlockAcceptanceData,
}
}
// DbAcceptanceDataToDomainAcceptanceData converts DbAcceptanceData to model.AcceptanceData
func DbAcceptanceDataToDomainAcceptanceData(dbAcceptanceData *DbAcceptanceData) (externalapi.AcceptanceData, error) {
domainAcceptanceData := make(externalapi.AcceptanceData, len(dbAcceptanceData.BlockAcceptanceData))
for i, dbBlockAcceptanceData := range dbAcceptanceData.BlockAcceptanceData {
domainTransactionAcceptanceData := make([]*externalapi.TransactionAcceptanceData,
len(dbBlockAcceptanceData.TransactionAcceptanceData))
for j, dbTransactionAcceptanceData := range dbBlockAcceptanceData.TransactionAcceptanceData {
domainTransaction, err := DbTransactionToDomainTransaction(dbTransactionAcceptanceData.Transaction)
if err != nil {
return nil, err
}
domainTransactionInputUTXOEntries := make([]externalapi.UTXOEntry, len(dbTransactionAcceptanceData.TransactionInputUtxoEntries))
for k, transactionInputUTXOEntry := range dbTransactionAcceptanceData.TransactionInputUtxoEntries {
domainTransactionInputUTXOEntry, err := DBUTXOEntryToUTXOEntry(transactionInputUTXOEntry)
if err != nil {
return nil, err
}
domainTransactionInputUTXOEntries[k] = domainTransactionInputUTXOEntry
// For consistency's sake, we fill up the transaction input's
// UTXOEntry field as well, since that's how the acceptanceData
// must have arrived when it was originally serialized
domainTransaction.Inputs[k].UTXOEntry = domainTransactionInputUTXOEntry
}
domainTransactionAcceptanceData[j] = &externalapi.TransactionAcceptanceData{
Transaction: domainTransaction,
Fee: dbTransactionAcceptanceData.Fee,
IsAccepted: dbTransactionAcceptanceData.IsAccepted,
TransactionInputUTXOEntries: domainTransactionInputUTXOEntries,
}
}
blockHash, err := DbHashToDomainHash(dbBlockAcceptanceData.BlockHash)
if err != nil {
return nil, err
}
domainAcceptanceData[i] = &externalapi.BlockAcceptanceData{
BlockHash: blockHash,
TransactionAcceptanceData: domainTransactionAcceptanceData,
}
}
return domainAcceptanceData, nil
}