talelbaz 8a309a7d2a
Upgradability mechanisms script version (#1313)
* ''

* ''

* ''

* Changes genesis block version to 0.

* a

* a

* All tests are done.

* All tests passed for changed block version from int32 to uint16

* Adds validation of rejecting blocks with unknown versions.

* Changes txn version from int32 to uint16.

* .

* Adds comments to exported functions.

* Change functions name from ConvertFromRpcScriptPubKeyToRPCScriptPubKey to ConvertFromAppMsgRPCScriptPubKeyToRPCScriptPubKey and from ConvertFromRPCScriptPubKeyToRpcScriptPubKey to ConvertFromRPCScriptPubKeyToAppMsgRPCScriptPubKey

* change comment to "ScriptPublicKey represents a Kaspad ScriptPublicKey"

* delete part (tx.Version < 0) that cannot be exist on the if statement.

* Revert protobuf version.

* Fix a comment.

* Fix a comment.

* Rename a variable.

* Rename a variable.

* Remove a const.

* Rename a type.

* Rename a field.

* Rename a field.

* Remove commented-out code.

* Remove dangerous nil case in DomainTransactionOutput.Clone().

* Remove a constant.

* Fix a string.

* Fix wrong totalScriptPubKeySize in transactionMassStandalonePart.

* Remove a constant.

* Remove an unused error.

* Fix a serialization error.

* Specify version types to be uint16 explicitly.

* Use constants.ScriptPublicKeyVersion.

* Fix a bad test.

* Remove some whitespace.

* Add a case to utxoEntry.Equal().

* Rename scriptPubKey to scriptPublicKey.

* Remove a TODO.

* Rename constants.

* Rename a variable.

* Add version to parseShortForm.

Co-authored-by: tal <tal@daglabs.com>
Co-authored-by: stasatdaglabs <stas@daglabs.com>
2021-01-05 17:50:09 +02:00

91 lines
3.8 KiB
Go

package serialization
import (
"github.com/kaspanet/kaspad/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
}