Beispiel #1
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()));
        }
Beispiel #2
0
        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);
        }