public ColdStakingTransactionResponse BuildTransaction(string sourceMultiSigAddress, List <Recipient> recipients, bool sign, string passphrase = null, List <Burn> burns = null) { var builder = new TransactionBuilder(this.network); foreach (var r in recipients) { Script scriptPubKey = r.Address.GetScriptPubKey(); builder.Send(scriptPubKey, r.Amount); } if (burns != null) { foreach (Burn burn in burns) { builder.Send(TxNullDataTemplate.Instance.GenerateScriptPubKey(burn.Data), burn.Amount); } } var scriptCoins = GetAllCoinsForMultiSigAccount(sourceMultiSigAddress, passphrase, out Script scriptPubKeyForChange, out Key ownPrivateKey); builder.AddCoins(scriptCoins); builder.AddKeys(ownPrivateKey); builder.SetChange(scriptPubKeyForChange); var estimatedFee = builder.EstimateFees(new FeeRate(this.feePer1000VBytes)) * 5; // TODO builder.SendFees(estimatedFee); var transaction = builder.BuildTransaction(sign); if (sign) { transaction = builder.CombineSignatures(transaction); } bool isVerifyPassing = builder.Verify(transaction, out var errors); foreach (var err in errors) { this.logger.LogError(err.ToString()); } this.logger.LogInformation($"isVerifyPassing: {isVerifyPassing}"); this.logger.LogInformation(transaction.ToString()); var response = new ColdStakingTransactionResponse { Transaction = transaction, Hex = transaction.ToHex(), Fee = estimatedFee, VirtualSize = transaction.GetVirtualSize(), SerializedSize = transaction.GetSerializedSize(), TransactionId = transaction.GetHash(), BroadcastState = BroadcastState.NotSet }; return(response); }
public ColdStakingTransactionResponse BuildColdStakingTransaction(ColdStakingTransactionRequest request) { WaitForWallet(); ColdStakingTransactionResponse response = GetColdStakingTransactionService().BuildTransaction(null, request.Recipients, request.Sign, request.Passphrase, request.Burns); response.BroadcastState = request.Send ? BroadCast(response.Transaction) : BroadcastState.NotRequested; return(response); }