diff options
Diffstat (limited to 'pkg/blockchain/coindatabase/coinrecord.go')
-rw-r--r-- | pkg/blockchain/coindatabase/coinrecord.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/pkg/blockchain/coindatabase/coinrecord.go b/pkg/blockchain/coindatabase/coinrecord.go new file mode 100644 index 0000000..6de45c3 --- /dev/null +++ b/pkg/blockchain/coindatabase/coinrecord.go @@ -0,0 +1,48 @@ +package coindatabase + +import "Chain/pkg/pro" + +// CoinRecord is a record of which coins created by a Transaction +// have been spent. It is stored in the CoinDatabase's db. +type CoinRecord struct { + Version uint32 + OutputIndexes []uint32 + Amounts []uint32 + LockingScripts []string +} + +// EncodeCoinRecord returns a pro.CoinRecord given a CoinRecord. +func EncodeCoinRecord(cr *CoinRecord) *pro.CoinRecord { + var outputIndexes []uint32 + var amounts []uint32 + var lockingScripts []string + for i := 0; i < len(cr.OutputIndexes); i++ { + outputIndexes = append(outputIndexes, cr.OutputIndexes[i]) + amounts = append(amounts, cr.Amounts[i]) + lockingScripts = append(lockingScripts, cr.LockingScripts[i]) + } + return &pro.CoinRecord{ + Version: cr.Version, + OutputIndexes: outputIndexes, + Amounts: amounts, + LockingScripts: lockingScripts, + } +} + +// DecodeCoinRecord returns a CoinRecord given a pro.CoinRecord. +func DecodeCoinRecord(pcr *pro.CoinRecord) *CoinRecord { + var outputIndexes []uint32 + var amounts []uint32 + var lockingScripts []string + for i := 0; i < len(pcr.GetOutputIndexes()); i++ { + outputIndexes = append(outputIndexes, pcr.GetOutputIndexes()[i]) + amounts = append(amounts, pcr.GetAmounts()[i]) + lockingScripts = append(lockingScripts, pcr.GetLockingScripts()[i]) + } + return &CoinRecord{ + Version: pcr.GetVersion(), + OutputIndexes: outputIndexes, + Amounts: amounts, + LockingScripts: lockingScripts, + } +} |