/// <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()));
        }
示例#2
0
        /// <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()));
        }