コード例 #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));
        }
コード例 #2
0
        public CosignatureSignedTransaction SignWith(Account account)
        {
            if (account == null)
            {
                throw new ArgumentNullException(nameof(account));
            }
            var bytes          = TransactionToCosign.TransactionInfo.Hash.FromHex();
            var signatureBytes = TransactionExtensions.SignHash(account.KeyPair, bytes);

            return(new CosignatureSignedTransaction(TransactionToCosign.TransactionInfo.Hash,
                                                    signatureBytes.ToHexLower(), account.PublicKey));
        }