/// <summary> /// Generates the bytes. /// </summary> /// <returns>System.Byte[].</returns> internal override byte[] GenerateBytes() { byte flags = 0; if (Properties.IsSupplyMutable) { flags += 1; } if (Properties.IsTransferable) { flags += 2; } if (Properties.IsLevyMutable) { flags += 4; } var builder = new FlatBufferBuilder(1); // 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 parentIdVector = MosaicCreationTransactionBuffer.CreateParentIdVector(builder, NamespaceId.Id.ToUInt8Array()); var mosaicIdVector = MosaicCreationTransactionBuffer.CreateMosaicIdVector(builder, MosaicId.Id.ToUInt8Array()); var mosaicNameVector = MosaicCreationTransactionBuffer.CreateMosaicNameVector(builder, Encoding.UTF8.GetBytes(MosaicId.MosaicName)); var durationVector = MosaicCreationTransactionBuffer.CreateDurationVector(builder, Properties.Duration.ToUInt8Array()); ushort version = ushort.Parse(NetworkType.GetNetworkByte().ToString("X") + "0" + Version.ToString("X"), System.Globalization.NumberStyles.HexNumber); // add vectors to buffer MosaicCreationTransactionBuffer.StartMosaicCreationTransactionBuffer(builder); MosaicCreationTransactionBuffer.AddSize(builder, (uint)(149 + Encoding.UTF8.GetBytes(MosaicId.MosaicName).ToHexLower().Length / 2)); MosaicCreationTransactionBuffer.AddSignature(builder, signatureVector); MosaicCreationTransactionBuffer.AddSigner(builder, signerVector); MosaicCreationTransactionBuffer.AddVersion(builder, version); MosaicCreationTransactionBuffer.AddType(builder, TransactionTypes.Types.MosaicDefinition.GetValue()); MosaicCreationTransactionBuffer.AddFee(builder, feeVector); MosaicCreationTransactionBuffer.AddDeadline(builder, deadlineVector); MosaicCreationTransactionBuffer.AddMosaicId(builder, mosaicIdVector); MosaicCreationTransactionBuffer.AddParentId(builder, parentIdVector); MosaicCreationTransactionBuffer.AddNameLength(builder, (byte)(Encoding.UTF8.GetBytes(MosaicId.MosaicName).ToHexLower().Length / 2)); MosaicCreationTransactionBuffer.AddNumOptionalProperties(builder, 1); MosaicCreationTransactionBuffer.AddFlags(builder, flags); MosaicCreationTransactionBuffer.AddDivisibility(builder, (byte)Properties.Divisibility); MosaicCreationTransactionBuffer.AddMosaicName(builder, mosaicNameVector); MosaicCreationTransactionBuffer.AddIndicateDuration(builder, 2); MosaicCreationTransactionBuffer.AddDuration(builder, durationVector); // Calculate size var codedNamespace = NamespaceCreationTransactionBuffer.EndNamespaceCreationTransactionBuffer(builder); builder.Finish(codedNamespace.Value); return(new MosaicCreationTransactionSchema().Serialize(builder.SizedByteArray())); }
/// <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())); }