stasatdaglabs 01c7c67aed
[NOD-1493] Implement serialization in AcceptanceDataStore, BlockRelationStore, BlockStatusStore, and BlockStore (#982)
* [NOD-1493] Add DbHashToDomainHash and DomainHashToDbHash.

* [NOD-1493] Use DbHashToDomainHash and DomainHashToDbHash.

* [NOD-1493] Begin implementing serializeAcceptanceData.

* [NOD-1493] Extract serialization blockHeader logic to serialization.

* [NOD-1493] Extract serialization acceptance data logic to serialization.

* [NOD-1493] Implement acceptance data serialization/deserialization.

* [NOD-1493] Implement transaction serialization/deserialization.

* [NOD-1493] Implement outpoint serialization/deserialization.

* [NOD-1493] Implement transaction ID serialization/deserialization.

* [NOD-1493] Implement subnetwork ID serialization/deserialization.

* [NOD-1493] Implement block relation serialization/deserialization.

* [NOD-1493] Implement block status serialization/deserialization.

* [NOD-1493] Implement block serialization/deserialization.

* [NOD-1493] Implement serialization/deserialization in BlockRelationStore.

* [NOD-1493] Implement serialization/deserialization in BlockStatusStore.

* [NOD-1493] Implement serialization/deserialization in BlockStore.

* [NOD-1493] Make go vet happy.

* [NOD-1493] Use DomainHashesToDbHashes.
2020-10-29 16:49:05 +02:00

81 lines
2.9 KiB
Go

package serialization
import (
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
)
// DomainTransactionToDbTransaction converts DomainTransaction to DbTransaction
func DomainTransactionToDbTransaction(domainTransaction *externalapi.DomainTransaction) *DbTransaction {
dbInputs := make([]*DbTransactionInput, len(domainTransaction.Inputs))
for i, domainTransactionInput := range domainTransaction.Inputs {
dbInputs[i] = &DbTransactionInput{
PreviousOutpoint: DomainOutpointToDbOutpoint(&domainTransactionInput.PreviousOutpoint),
SignatureScript: domainTransactionInput.SignatureScript,
Sequence: domainTransactionInput.Sequence,
}
}
dbOutputs := make([]*DbTransactionOutput, len(domainTransaction.Outputs))
for i, domainTransactionOutput := range domainTransaction.Outputs {
dbOutputs[i] = &DbTransactionOutput{
Value: domainTransactionOutput.Value,
ScriptPublicKey: domainTransactionOutput.ScriptPublicKey,
}
}
return &DbTransaction{
Version: domainTransaction.Version,
Inputs: dbInputs,
Outputs: dbOutputs,
LockTime: domainTransaction.LockTime,
SubnetworkID: DomainSubnetworkIDToDbSubnetworkID(&domainTransaction.SubnetworkID),
Gas: domainTransaction.Gas,
PayloadHash: DomainHashToDbHash(&domainTransaction.PayloadHash),
Payload: domainTransaction.Payload,
}
}
// DbTransactionToDomainTransaction converts DbTransaction to DomainTransaction
func DbTransactionToDomainTransaction(dbTransaction *DbTransaction) (*externalapi.DomainTransaction, error) {
domainSubnetworkID, err := DbSubnetworkIDToDomainSubnetworkID(dbTransaction.SubnetworkID)
if err != nil {
return nil, err
}
domainPayloadHash, err := DbHashToDomainHash(dbTransaction.PayloadHash)
if err != nil {
return nil, err
}
domainInputs := make([]*externalapi.DomainTransactionInput, len(dbTransaction.Inputs))
for i, dbTransactionInput := range dbTransaction.Inputs {
domainPreviousOutpoint, err := DbOutpointToDomainOutpoint(dbTransactionInput.PreviousOutpoint)
if err != nil {
return nil, err
}
domainInputs[i] = &externalapi.DomainTransactionInput{
PreviousOutpoint: *domainPreviousOutpoint,
SignatureScript: dbTransactionInput.SignatureScript,
Sequence: dbTransactionInput.Sequence,
}
}
domainOutputs := make([]*externalapi.DomainTransactionOutput, len(dbTransaction.Outputs))
for i, dbTransactionOutput := range dbTransaction.Outputs {
domainOutputs[i] = &externalapi.DomainTransactionOutput{
Value: dbTransactionOutput.Value,
ScriptPublicKey: dbTransactionOutput.ScriptPublicKey,
}
}
return &externalapi.DomainTransaction{
Version: dbTransaction.Version,
Inputs: domainInputs,
Outputs: domainOutputs,
LockTime: dbTransaction.LockTime,
SubnetworkID: *domainSubnetworkID,
Gas: dbTransaction.Gas,
PayloadHash: *domainPayloadHash,
Payload: dbTransaction.Payload,
}, nil
}