/// <summary> /// Generates the bytes. /// </summary> /// <returns>System.Byte[].</returns> internal override byte[] GenerateBytes() { var builder = new FlatBufferBuilder(1); // Create modifications vector var modificationsArray = new Offset <CosignatoryModificationBuffer> [Modifications.Length]; for (var index = 0; index < Modifications.Length; index++) { var modification = Modifications[index]; var cosignatoryPublicKeyVector = CosignatoryModificationBuffer.CreateCosignatoryPublicKeyVector(builder, modification.PublicAccount.PublicKey.FromHex()); CosignatoryModificationBuffer.StartCosignatoryModificationBuffer(builder); CosignatoryModificationBuffer.AddType(builder, modification.Type.GetValue()); CosignatoryModificationBuffer.AddCosignatoryPublicKey(builder, cosignatoryPublicKeyVector); modificationsArray[index] = CosignatoryModificationBuffer.EndCosignatoryModificationBuffer(builder); } // create vectors var signatureVector = MosaicCreationTransactionBuffer.CreateSignatureVector(builder, new byte[64]); var signerVector = MosaicCreationTransactionBuffer.CreateSignerVector(builder, GetSigner()); var feeVector = MosaicCreationTransactionBuffer.CreateFeeVector(builder, Fee.ToUInt8Array()); var deadlineVector = MosaicCreationTransactionBuffer.CreateDeadlineVector(builder, Deadline.Ticks.ToUInt8Array()); var modificationVector = MultisigModificationTransactionBuffer.CreateModificationsVector(builder, modificationsArray); ushort version = ushort.Parse(NetworkType.GetNetworkByte().ToString("X") + "0" + Version.ToString("X"), System.Globalization.NumberStyles.HexNumber); MultisigModificationTransactionBuffer.StartMultisigModificationTransactionBuffer(builder); MultisigModificationTransactionBuffer.AddSize(builder, (uint)(123 + 33 * Modifications.Length)); MultisigModificationTransactionBuffer.AddSignature(builder, signatureVector); MultisigModificationTransactionBuffer.AddSigner(builder, signerVector); MultisigModificationTransactionBuffer.AddVersion(builder, version); MultisigModificationTransactionBuffer.AddType(builder, TransactionTypes.Types.ModifyMultisigAccount.GetValue()); MultisigModificationTransactionBuffer.AddFee(builder, feeVector); MultisigModificationTransactionBuffer.AddDeadline(builder, deadlineVector); MultisigModificationTransactionBuffer.AddMinRemovalDelta(builder, (byte)MinRemovalDelta); MultisigModificationTransactionBuffer.AddMinApprovalDelta(builder, (byte)MinApprovalDelta); MultisigModificationTransactionBuffer.AddNumModifications(builder, (byte)Modifications.Length); MultisigModificationTransactionBuffer.AddModifications(builder, modificationVector); // end build var codedTransfer = TransferTransactionBuffer.EndTransferTransactionBuffer(builder); builder.Finish(codedTransfer.Value); return(new MultisigModificationTransactionSchema().Serialize(builder.SizedByteArray())); }
internal override byte[] GenerateBytes() { var builder = new FlatBufferBuilder(1); // Create modifications vector var modificationsArray = new Offset <CosignatoryModificationBuffer> [Modifications.Count]; for (var index = 0; index < Modifications.Count; ++index) { var modification = Modifications[index]; var cosignatoryPublicKeyVector = CosignatoryModificationBuffer.CreateCosignatoryPublicKeyVector(builder, modification.CosignatoryPublicAccount.PublicKey.FromHex()); CosignatoryModificationBuffer.StartCosignatoryModificationBuffer(builder); CosignatoryModificationBuffer.AddType(builder, modification.Type.GetValueInByte()); CosignatoryModificationBuffer.AddCosignatoryPublicKey(builder, cosignatoryPublicKeyVector); modificationsArray[index] = CosignatoryModificationBuffer.EndCosignatoryModificationBuffer(builder); } // create vectors var signatureVector = ModifyMultisigAccountTransactionBuffer.CreateSignatureVector(builder, new byte[64]); var signerVector = ModifyMultisigAccountTransactionBuffer.CreateSignerVector(builder, GetSigner()); var feeVector = ModifyMultisigAccountTransactionBuffer.CreateMaxFeeVector(builder, MaxFee?.ToUInt8Array()); var deadlineVector = ModifyMultisigAccountTransactionBuffer.CreateDeadlineVector(builder, Deadline.Ticks.ToUInt8Array()); var modificationVector = ModifyMultisigAccountTransactionBuffer.CreateModificationsVector(builder, modificationsArray); // create version var version = GetTxVersionSerialization(); var totalSize = GetSerializedSize(); ModifyMultisigAccountTransactionBuffer.StartModifyMultisigAccountTransactionBuffer(builder); ModifyMultisigAccountTransactionBuffer.AddSize(builder, (uint)totalSize); ModifyMultisigAccountTransactionBuffer.AddSignature(builder, signatureVector); ModifyMultisigAccountTransactionBuffer.AddSigner(builder, signerVector); ModifyMultisigAccountTransactionBuffer.AddVersion(builder, (uint)version); ModifyMultisigAccountTransactionBuffer.AddType(builder, TransactionType.GetValue()); ModifyMultisigAccountTransactionBuffer.AddMaxFee(builder, feeVector); ModifyMultisigAccountTransactionBuffer.AddDeadline(builder, deadlineVector); ModifyMultisigAccountTransactionBuffer.AddMinRemovalDelta(builder, Convert.ToSByte(MinRemovalDelta)); ModifyMultisigAccountTransactionBuffer.AddMinApprovalDelta(builder, Convert.ToSByte(MinApprovalDelta)); ModifyMultisigAccountTransactionBuffer.AddNumModifications(builder, Convert.ToByte(Modifications.Count)); ModifyMultisigAccountTransactionBuffer.AddModifications(builder, modificationVector); // end build var codedTransfer = ModifyMultisigAccountTransactionBuffer.EndModifyMultisigAccountTransactionBuffer(builder); builder.Finish(codedTransfer.Value); var output = new ModifyMultisigAccountTransactionSchema().Serialize(builder.SizedByteArray()); if (output.Length != totalSize) { throw new SerializationException("Serialized form has incorrect length"); } return(output); }