From 661cf004a703c85c459c862b043aa84ceeb019f1 Mon Sep 17 00:00:00 2001 From: Artem Zhmaka Date: Fri, 27 Feb 2026 14:04:54 +0100 Subject: [PATCH 1/2] CSDK/fixed_transaction_invocation_serialization Fixed TransactionInvocationTarget with ProtocolVersionMajor --- types/transaction_invocation_target.go | 81 ++++++++++++++------------ 1 file changed, 43 insertions(+), 38 deletions(-) diff --git a/types/transaction_invocation_target.go b/types/transaction_invocation_target.go index 1993a36..cdebd93 100644 --- a/types/transaction_invocation_target.go +++ b/types/transaction_invocation_target.go @@ -20,10 +20,9 @@ const ( ByPackageHashVersionIndex uint16 = 2 ByPackageHashProtocolVersionMajorIndex uint16 = 3 - ByPackageNameVariant uint8 = 3 - ByPackageNameNameIndex uint16 = 1 - ByPackageNameVersionIndex uint16 = 2 - ByPackageNameProtocolVersionMajorIndex uint16 = 3 + ByPackageNameVariant uint8 = 3 + ByPackageNameNameIndex uint16 = 1 + ByPackageNameVersionIndex uint16 = 2 ) type TransactionInvocationTarget struct { @@ -98,17 +97,19 @@ func (t *TransactionInvocationTarget) Bytes() ([]byte, error) { return nil, err } - var protocolMajorBytes []byte if t.ByPackageHash.ProtocolVersionMajor != nil { - versionBytes = []byte{1} // Option Some tag - bytes, _ := encoding.NewU32ToBytesEncoder(*t.ByPackageHash.ProtocolVersionMajor).Bytes() - protocolMajorBytes = append(versionBytes, bytes...) - } else { - protocolMajorBytes = []byte{0} // Option none tag - } - - if err = builder.AddField(ByPackageHashProtocolVersionMajorIndex, protocolMajorBytes); err != nil { - return nil, err + var protocolMajorBytes []byte + if t.ByPackageHash.ProtocolVersionMajor != nil { + versionBytes = []byte{1} // Option Some tag + bytes, _ := encoding.NewU32ToBytesEncoder(*t.ByPackageHash.ProtocolVersionMajor).Bytes() + protocolMajorBytes = append(versionBytes, bytes...) + } else { + protocolMajorBytes = []byte{0} // Option none tag + } + + if err = builder.AddField(ByPackageHashProtocolVersionMajorIndex, protocolMajorBytes); err != nil { + return nil, err + } } case t.ByPackageName != nil: if err = builder.AddField(TagFieldIndex, []byte{ByPackageNameVariant}); err != nil { @@ -133,17 +134,19 @@ func (t *TransactionInvocationTarget) Bytes() ([]byte, error) { return nil, err } - var protocolMajorBytes []byte if t.ByPackageName.ProtocolVersionMajor != nil { - versionBytes = []byte{1} // Option Some tag - bytes, _ := encoding.NewU32ToBytesEncoder(*t.ByPackageName.ProtocolVersionMajor).Bytes() - protocolMajorBytes = append(versionBytes, bytes...) - } else { - protocolMajorBytes = []byte{0} // Option none tag - } - - if err = builder.AddField(ByPackageNameProtocolVersionMajorIndex, protocolMajorBytes); err != nil { - return nil, err + var protocolMajorBytes []byte + if t.ByPackageName.ProtocolVersionMajor != nil { + versionBytes = []byte{1} // Option Some tag + bytes, _ := encoding.NewU32ToBytesEncoder(*t.ByPackageName.ProtocolVersionMajor).Bytes() + protocolMajorBytes = append(versionBytes, bytes...) + } else { + protocolMajorBytes = []byte{0} // Option none tag + } + + if err = builder.AddField(ByPackageHashProtocolVersionMajorIndex, protocolMajorBytes); err != nil { + return nil, err + } } default: return nil, errors.New("unknown transaction invocation target") @@ -175,34 +178,36 @@ func (t *TransactionInvocationTarget) serializedFieldLengths() []int { versionSerializedLength = encoding.U32SerializedLength } - var protocolMajorSerializedLength int - if t.ByPackageHash.ProtocolVersionMajor != nil { - protocolMajorSerializedLength = encoding.U32SerializedLength - } - - return []int{ + serializedLength := []int{ encoding.U8SerializedLength, key.ByteHashLen, encoding.U8SerializedLength + versionSerializedLength, - encoding.U8SerializedLength + protocolMajorSerializedLength, } + + if t.ByPackageHash.ProtocolVersionMajor != nil { + protocolMajorSerializedLength := encoding.U32SerializedLength + serializedLength = append(serializedLength, encoding.U8SerializedLength+protocolMajorSerializedLength) + } + + return serializedLength case t.ByPackageName != nil: var versionSerializedLength int if t.ByPackageName.Version != nil { versionSerializedLength = encoding.U32SerializedLength } - var protocolMajorSerializedLength int - if t.ByPackageName.ProtocolVersionMajor != nil { - protocolMajorSerializedLength = encoding.U32SerializedLength - } - - return []int{ + serializedLength := []int{ encoding.U8SerializedLength, encoding.StringSerializedLength(t.ByPackageName.Name), encoding.U8SerializedLength + versionSerializedLength, - encoding.U8SerializedLength + protocolMajorSerializedLength, } + + if t.ByPackageName.ProtocolVersionMajor != nil { + protocolMajorSerializedLength := encoding.U32SerializedLength + serializedLength = append(serializedLength, encoding.U8SerializedLength+protocolMajorSerializedLength) + } + + return serializedLength default: return []int{} } From 8416e84e42567581f093849483262159485b252c Mon Sep 17 00:00:00 2001 From: Artem Zhmaka Date: Fri, 27 Feb 2026 14:09:24 +0100 Subject: [PATCH 2/2] CSDK/fixed_transaction_invocation_serialization Fixed TransactionInvocationTarget with ProtocolVersionMajor --- types/transaction_invocation_target.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/types/transaction_invocation_target.go b/types/transaction_invocation_target.go index cdebd93..e92b508 100644 --- a/types/transaction_invocation_target.go +++ b/types/transaction_invocation_target.go @@ -20,9 +20,10 @@ const ( ByPackageHashVersionIndex uint16 = 2 ByPackageHashProtocolVersionMajorIndex uint16 = 3 - ByPackageNameVariant uint8 = 3 - ByPackageNameNameIndex uint16 = 1 - ByPackageNameVersionIndex uint16 = 2 + ByPackageNameVariant uint8 = 3 + ByPackageNameNameIndex uint16 = 1 + ByPackageNameVersionIndex uint16 = 2 + ByPackageNameProtocolVersionMajorIndex uint16 = 3 ) type TransactionInvocationTarget struct { @@ -144,7 +145,7 @@ func (t *TransactionInvocationTarget) Bytes() ([]byte, error) { protocolMajorBytes = []byte{0} // Option none tag } - if err = builder.AddField(ByPackageHashProtocolVersionMajorIndex, protocolMajorBytes); err != nil { + if err = builder.AddField(ByPackageNameProtocolVersionMajorIndex, protocolMajorBytes); err != nil { return nil, err } }