/// <summary>
        /// Generates the bytes.
        /// </summary>
        /// <returns>System.Byte[].</returns>
        internal override byte[] GenerateBytes()
        {
            var builder = new FlatBufferBuilder(1);

            // create vectors
            var signatureVector = MosaicSupplyChangeTransactionBuffer.CreateSignatureVector(builder, new byte[64]);
            var signerVector    = MosaicSupplyChangeTransactionBuffer.CreateSignerVector(builder, GetSigner());
            var feeVector       = MosaicSupplyChangeTransactionBuffer.CreateFeeVector(builder, Fee.ToUInt8Array());
            var deadlineVector  = MosaicSupplyChangeTransactionBuffer.CreateDeadlineVector(builder, Deadline.Ticks.ToUInt8Array());
            var mosaicIdVector  = MosaicSupplyChangeTransactionBuffer.CreateMosaicIdVector(builder, MosaicId.Id.ToUInt8Array());
            var deltaVector     = MosaicSupplyChangeTransactionBuffer.CreateFeeVector(builder, Delta.ToUInt8Array());

            ushort version = ushort.Parse(NetworkType.GetNetworkByte().ToString("X") + "0" + Version.ToString("X"), System.Globalization.NumberStyles.HexNumber);

            // add vectors to buffer
            MosaicSupplyChangeTransactionBuffer.StartMosaicSupplyChangeTransactionBuffer(builder);
            MosaicSupplyChangeTransactionBuffer.AddSize(builder, 137);
            MosaicSupplyChangeTransactionBuffer.AddSignature(builder, signatureVector);
            MosaicSupplyChangeTransactionBuffer.AddSigner(builder, signerVector);
            MosaicSupplyChangeTransactionBuffer.AddVersion(builder, version);
            MosaicSupplyChangeTransactionBuffer.AddType(builder, TransactionTypes.Types.MosaicSupplyChange.GetValue());
            MosaicSupplyChangeTransactionBuffer.AddFee(builder, feeVector);
            MosaicSupplyChangeTransactionBuffer.AddDeadline(builder, deadlineVector);
            MosaicSupplyChangeTransactionBuffer.AddMosaicId(builder, mosaicIdVector);
            MosaicSupplyChangeTransactionBuffer.AddDirection(builder, SupplyType.GetValue());
            MosaicSupplyChangeTransactionBuffer.AddDelta(builder, deltaVector);


            // end build
            var codedTransfer = TransferTransactionBuffer.EndTransferTransactionBuffer(builder);

            builder.Finish(codedTransfer.Value);

            return(new MosaicSupplyChangeTransactionSchema().Serialize(builder.SizedByteArray()));
        }
        internal override byte[] GenerateBytes()
        {
            var builder         = new FlatBufferBuilder(1);
            var signatureVector = MosaicSupplyChangeTransactionBuffer.CreateSignatureVector(builder, new byte[64]);
            var signerVector    = MosaicSupplyChangeTransactionBuffer.CreateSignerVector(builder, GetSigner());
            var feeVector       = MosaicSupplyChangeTransactionBuffer.CreateMaxFeeVector(builder, MaxFee?.ToUInt8Array());
            var deadlineVector  =
                MosaicSupplyChangeTransactionBuffer.CreateDeadlineVector(builder, Deadline.Ticks.ToUInt8Array());
            var mosaicIdVector =
                MosaicSupplyChangeTransactionBuffer.CreateMosaicIdVector(builder, MosaicId.Id.ToUInt8Array());
            var deltaVector = MosaicSupplyChangeTransactionBuffer.CreateDeltaVector(builder, Delta.ToUInt8Array());

            // create version
            var version = GetTxVersionSerialization();

            int totalSize = GetSerializedSize();

            MosaicSupplyChangeTransactionBuffer.StartMosaicSupplyChangeTransactionBuffer(builder);
            MosaicSupplyChangeTransactionBuffer.AddSize(builder, (uint)totalSize);
            MosaicSupplyChangeTransactionBuffer.AddSignature(builder, signatureVector);
            MosaicSupplyChangeTransactionBuffer.AddSigner(builder, signerVector);
            MosaicSupplyChangeTransactionBuffer.AddVersion(builder, (uint)version);
            MosaicSupplyChangeTransactionBuffer.AddType(builder, TransactionType.GetValue());
            MosaicSupplyChangeTransactionBuffer.AddMaxFee(builder, feeVector);
            MosaicSupplyChangeTransactionBuffer.AddDeadline(builder, deadlineVector);
            MosaicSupplyChangeTransactionBuffer.AddMosaicId(builder, mosaicIdVector);
            MosaicSupplyChangeTransactionBuffer.AddDirection(builder, MosaicSupplyType.GetValueInByte());
            MosaicSupplyChangeTransactionBuffer.AddDelta(builder, deltaVector);

            var codedTransaction = MosaicSupplyChangeTransactionBuffer.EndMosaicSupplyChangeTransactionBuffer(builder);

            builder.Finish(codedTransaction.Value);

            var output = new MosaicSupplyChangeTransactionSchema().Serialize(builder.SizedByteArray());

            if (output.Length != totalSize)
            {
                throw new SerializationException("Serialized form has incorrect length");
            }

            return(output);
        }