stasatdaglabs 8a4ece1101
[NOD-1223] Reorganize project (#868)
* [NOD-1223] Move all network stuff into a new network package.

* [NOD-1223] Delete the unused package testutil.

* [NOD-1223] Move infrastructure stuff into a new instrastructure package.

* [NOD-1223] Move domain stuff into a new domain package.
2020-08-13 17:27:25 +03:00

105 lines
2.7 KiB
Go

package protowire
import (
"github.com/kaspanet/kaspad/network/domainmessage"
"github.com/kaspanet/kaspad/util/daghash"
"github.com/pkg/errors"
)
func (x *KaspadMessage_Transaction) toDomainMessage() (domainmessage.Message, error) {
return x.Transaction.toDomainMessage()
}
func (x *KaspadMessage_Transaction) fromDomainMessage(msgTx *domainmessage.MsgTx) error {
x.Transaction = new(TransactionMessage)
x.Transaction.fromDomainMessage(msgTx)
return nil
}
func (x *TransactionMessage) toDomainMessage() (domainmessage.Message, error) {
inputs := make([]*domainmessage.TxIn, len(x.Inputs))
for i, protoInput := range x.Inputs {
prevTxID, err := protoInput.PreviousOutpoint.TransactionID.toWire()
if err != nil {
return nil, err
}
outpoint := domainmessage.NewOutpoint(prevTxID, protoInput.PreviousOutpoint.Index)
inputs[i] = domainmessage.NewTxIn(outpoint, protoInput.SignatureScript)
}
outputs := make([]*domainmessage.TxOut, len(x.Outputs))
for i, protoOutput := range x.Outputs {
outputs[i] = &domainmessage.TxOut{
Value: protoOutput.Value,
ScriptPubKey: protoOutput.ScriptPubKey,
}
}
if x.SubnetworkID == nil {
return nil, errors.New("transaction subnetwork field cannot be nil")
}
subnetworkID, err := x.SubnetworkID.toWire()
if err != nil {
return nil, err
}
var payloadHash *daghash.Hash
if x.PayloadHash != nil {
payloadHash, err = x.PayloadHash.toWire()
if err != nil {
return nil, err
}
}
return &domainmessage.MsgTx{
Version: x.Version,
TxIn: inputs,
TxOut: outputs,
LockTime: x.LockTime,
SubnetworkID: *subnetworkID,
Gas: x.Gas,
PayloadHash: payloadHash,
Payload: x.Payload,
}, nil
}
func (x *TransactionMessage) fromDomainMessage(msgTx *domainmessage.MsgTx) {
protoInputs := make([]*TransactionInput, len(msgTx.TxIn))
for i, input := range msgTx.TxIn {
protoInputs[i] = &TransactionInput{
PreviousOutpoint: &Outpoint{
TransactionID: wireTransactionIDToProto(&input.PreviousOutpoint.TxID),
Index: input.PreviousOutpoint.Index,
},
SignatureScript: input.SignatureScript,
Sequence: input.Sequence,
}
}
protoOutputs := make([]*TransactionOutput, len(msgTx.TxOut))
for i, output := range msgTx.TxOut {
protoOutputs[i] = &TransactionOutput{
Value: output.Value,
ScriptPubKey: output.ScriptPubKey,
}
}
var payloadHash *Hash
if msgTx.PayloadHash != nil {
payloadHash = wireHashToProto(msgTx.PayloadHash)
}
*x = TransactionMessage{
Version: msgTx.Version,
Inputs: protoInputs,
Outputs: protoOutputs,
LockTime: msgTx.LockTime,
SubnetworkID: wireSubnetworkIDToProto(&msgTx.SubnetworkID),
Gas: msgTx.Gas,
PayloadHash: payloadHash,
Payload: msgTx.Payload,
}
}