Exemplo n.º 1
0
        /// <summary>
        ///     Signs the aggregate transaction with cosigners.
        /// </summary>
        /// <param name="initiatorAccount">The initiator account.</param>
        /// <param name="cosignatories">The cosignatories.</param>
        /// <returns>SignedTransaction.</returns>
        /// <exception cref="ArgumentNullException">
        ///     initiatorAccount
        ///     or
        ///     cosignatories
        /// </exception>
        public SignedTransaction SignTransactionWithCosigners(Account initiatorAccount, List <Account> cosignatories, string generationHash)
        {
            if (initiatorAccount == null)
            {
                throw new ArgumentNullException(nameof(initiatorAccount));
            }
            if (cosignatories == null)
            {
                throw new ArgumentNullException(nameof(cosignatories));
            }

            var signedTransaction = SignWith(initiatorAccount, generationHash);
            var payload           = signedTransaction.Payload.FromHex();

            foreach (var cosignatory in cosignatories)
            {
                var bytes = signedTransaction.Hash.FromHex();

                var signatureBytes = TransactionExtensions.SignHash(cosignatory.KeyPair, bytes);

                payload = payload.Concat(cosignatory.KeyPair.PublicKey.Concat(signatureBytes)).ToArray();

                Cosignatures.Add(new AggregateTransactionCosignature(signatureBytes.ToHexLower(),
                                                                     new PublicAccount(cosignatory.KeyPair.PublicKey.ToHexLower(),
                                                                                       initiatorAccount.Address.NetworkType)));
            }

            payload = BitConverter.GetBytes(payload.Length).Concat(payload.Take(4, payload.Length - 4).ToArray())
                      .ToArray();

            return(SignedTransaction.Create(payload, signedTransaction.Hash.FromHex(),
                                            initiatorAccount.PublicKey.FromHex(), TransactionType, initiatorAccount.Address.NetworkType));
        }
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="networkType"></param>
 /// <param name="version"></param>
 /// <param name="deadline"></param>
 /// <param name="maxFee"></param>
 /// <param name="mosaic"></param>
 /// <param name="duration"></param>
 /// <param name="transaction"></param>
 /// <param name="signature"></param>
 /// <param name="signer"></param>
 /// <param name="transactionInfo"></param>
 public HashLockTransaction(NetworkType networkType, int version, Deadline deadline, ulong maxFee, Mosaic mosaic,
                            ulong duration, SignedTransaction transaction, string signature = null, PublicAccount signer = null,
                            TransactionInfo transactionInfo = null)
     : base(networkType, version, deadline, maxFee, mosaic, duration, transaction, signature, signer,
            transactionInfo)
 {
 }
Exemplo n.º 3
0
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="networkType"></param>
 /// <param name="version"></param>
 /// <param name="deadline"></param>
 /// <param name="maxFee"></param>
 /// <param name="mosaic"></param>
 /// <param name="duration"></param>
 /// <param name="transaction"></param>
 /// <param name="signature"></param>
 /// <param name="signer"></param>
 /// <param name="transactionInfo"></param>
 public LockFundsTransaction(NetworkType networkType, int version, Deadline deadline, ulong?maxFee,
                             Mosaic mosaic, ulong duration, SignedTransaction transaction, string signature = null,
                             PublicAccount signer = null, TransactionInfo transactionInfo = null)
     : base(networkType, version, EntityType.LOCK, deadline, maxFee, signature, signer, transactionInfo)
 {
     Mosaic      = mosaic;
     Duration    = duration;
     Transaction = transaction;
 }
        /// <summary>
        ///     Signs the transaction with the given <see cref="Account" />.
        /// </summary>
        /// <param name="account"></param>
        /// <returns></returns>
        public SignedTransaction SignWith(Account account, string generationHash)
        {
            if (account == null)
            {
                throw new ArgumentNullException(nameof(account));
            }

            var generationHashBytes = generationHash.DecodeHexString();

            //Org.BouncyCastle.Utilities.Encoders.Hex.Decode(generationHash);
            ///var testHash = generationHash.DecodeHexString();

            Bytes = GenerateBytes();

            var signingBytes = new byte[Bytes.Length - 100 + 32];

            Buffer.BlockCopy(generationHashBytes, 0, signingBytes, 0, 32);

            Buffer.BlockCopy(Bytes, 100, signingBytes, 32, Bytes.Length - 100);

            Signer = PublicAccount.CreateFromPublicKey(account.KeyPair.PublicKeyString, NetworkType);

            var signature = TransactionExtensions.SignTransaction(account.KeyPair, signingBytes);

            var payload = new byte[Bytes.Length];

            Buffer.BlockCopy(Bytes, 0, payload, 0, 4);

            Buffer.BlockCopy(signature, 0, payload, 4, signature.Length);

            var rawSignerPublicKey = account.KeyPair.PublicKey;

            Buffer.BlockCopy(rawSignerPublicKey, 0, payload, 64 + 4, rawSignerPublicKey.Length);

            Buffer.BlockCopy(Bytes, 100, payload, 100, Bytes.Length - 100);

            var hash = CreateTransactionHash(payload, generationHashBytes);

            return(SignedTransaction.Create(payload, hash,
                                            account.KeyPair.PublicKey, TransactionType, NetworkType));
        }
Exemplo n.º 5
0
 /// <summary>
 ///     Creates LockFundsTransaction
 /// </summary>
 /// <param name="deadline"></param>
 /// <param name="mosaic"></param>
 /// <param name="duration"></param>
 /// <param name="signedTransaction"></param>
 /// <param name="networkType"></param>
 /// <returns></returns>
 public static LockFundsTransaction Create(Deadline deadline, Mosaic mosaic, ulong duration,
                                           SignedTransaction signedTransaction, NetworkType networkType)
 {
     return(new LockFundsTransaction(networkType, EntityVersion.LOCK.GetValue(), deadline, 0, mosaic,
                                     duration, signedTransaction));
 }