mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-31 11:16:42 +00:00

* Update constants * Add to transaction SigOpCount * Update mass calculation, and move it from InContext to InIsolation * Update block validation accordingly * Add SigOpCount validation during TransactionInContext * Remove checking of mass vs maxMassAcceptedByBlock from consensusStateManager * Update mining manager with latest changes * Add SigOpCount to MsgTx.Copy() * Fix initTestTransactionAcceptanceDataForClone * Fix all tests in transaction_equal_clone_test.go * Fix TestBlockMass * Fix tests in transactionvalidator package * Add SigOpCount to sighash * Fix TestPruningDepth * Fix problems in libkaspawalelt * Fix integration tests * Fix CalculateSignatureHash tests * Remove remaining places talking about block size * Add sanity check to checkBlockMass to make sure all transactions have their mass filled * always add own sigOpCount to sigHash * Update protowire/rpc.md * Start working on removing any remaining reference to block/tx size * Update rpc transaction verbose data to include mass rather then size * Convert verboseData and block size check to mass * Remove remaining usages of tx size in mempool * Move transactionEstimatedSerializedSize to transactionvalidator * Add PopulateMass to fakeRelayInvsContext * Move PopulateMass to beggining of ValidateAndInsertTransaction + fix in it * Assign mass a new number for backward-compatibility
88 lines
3.2 KiB
Go
88 lines
3.2 KiB
Go
package serialization
|
|
|
|
import (
|
|
"math"
|
|
|
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// 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,
|
|
SigOpCount: uint32(domainTransactionInput.SigOpCount),
|
|
}
|
|
}
|
|
|
|
dbOutputs := make([]*DbTransactionOutput, len(domainTransaction.Outputs))
|
|
for i, domainTransactionOutput := range domainTransaction.Outputs {
|
|
dbScriptPublicKey := ScriptPublicKeyToDBScriptPublicKey(domainTransactionOutput.ScriptPublicKey)
|
|
dbOutputs[i] = &DbTransactionOutput{
|
|
Value: domainTransactionOutput.Value,
|
|
ScriptPublicKey: dbScriptPublicKey,
|
|
}
|
|
}
|
|
|
|
return &DbTransaction{
|
|
Version: uint32(domainTransaction.Version),
|
|
Inputs: dbInputs,
|
|
Outputs: dbOutputs,
|
|
LockTime: domainTransaction.LockTime,
|
|
SubnetworkID: DomainSubnetworkIDToDbSubnetworkID(&domainTransaction.SubnetworkID),
|
|
Gas: domainTransaction.Gas,
|
|
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
|
|
}
|
|
|
|
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,
|
|
SigOpCount: byte(dbTransactionInput.SigOpCount),
|
|
}
|
|
}
|
|
|
|
domainOutputs := make([]*externalapi.DomainTransactionOutput, len(dbTransaction.Outputs))
|
|
for i, dbTransactionOutput := range dbTransaction.Outputs {
|
|
scriptPublicKey, err := DBScriptPublicKeyToScriptPublicKey(dbTransactionOutput.ScriptPublicKey)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
domainOutputs[i] = &externalapi.DomainTransactionOutput{
|
|
Value: dbTransactionOutput.Value,
|
|
ScriptPublicKey: scriptPublicKey,
|
|
}
|
|
}
|
|
|
|
if dbTransaction.Version > math.MaxUint16 {
|
|
return nil, errors.Errorf("The transaction version is bigger then uint16.")
|
|
}
|
|
return &externalapi.DomainTransaction{
|
|
Version: uint16(dbTransaction.Version),
|
|
Inputs: domainInputs,
|
|
Outputs: domainOutputs,
|
|
LockTime: dbTransaction.LockTime,
|
|
SubnetworkID: *domainSubnetworkID,
|
|
Gas: dbTransaction.Gas,
|
|
Payload: dbTransaction.Payload,
|
|
}, nil
|
|
}
|