public Task <CreateTransactionResponse> GetTransferTransaction(BitcoinAddress sourceAddress, BitcoinAddress destAddress, decimal amount, IAsset asset, Guid transactionId, bool shouldReserveFee = false) { return(Retry.Try(async() => { var context = new TransactionBuildContext(_connectionParams.Network, _pregeneratedOutputsQueueFactory); return await context.Build(async() => { var builder = new TransactionBuilder(); await TransferOneDirection(builder, context, sourceAddress, amount, asset, destAddress); await _transactionBuildHelper.AddFee(builder, context); var buildedTransaction = builder.BuildTransaction(true); await SaveSpentOutputs(transactionId, buildedTransaction); await _signRequestRepository.InsertTransactionId(transactionId); await SaveNewOutputs(transactionId, buildedTransaction, context); if (shouldReserveFee) { await _feeReserveMonitoringWriter.AddTransactionFeeReserve(transactionId, context.FeeCoins); } return new CreateTransactionResponse(buildedTransaction.ToHex(), transactionId); }); }, exception => (exception as BackendException)?.Code == ErrorCode.TransactionConcurrentInputsProblem, 3, _log)); }
public async Task <Guid> AddTransactionId(Guid?transactionId, string rawRequest) { await CheckDuplicatedTransactionId(transactionId); return(await _signRequestRepository.InsertTransactionId(transactionId, rawRequest)); }