private string PrepareNewTransaction(string aToAddress, decimal aAmount, decimal aTxFee, ICurrencyItem aCurrencyItem, TransactionUnit[] aUnspentOutputs, out CurrencyTransaction aCurrencyTransaction) { if (!FServerConnection.DirectCheckAddress(aCurrencyItem.Id, aToAddress)) { throw new ClientExceptions.InvalidAddressException("Address provided not valid. Please verify"); } var lTxOutputs = new List <TransactionUnit>(); lTxOutputs.Add(new TransactionUnit(0, aCurrencyItem.AmountToBigInteger(aAmount), aToAddress)); BigInteger lTotal = 0; foreach (var lOutput in aUnspentOutputs) { lTotal += lOutput.Amount; } var lSendTotal = aCurrencyItem.AmountToDecimal(lTotal); if (lSendTotal < (aAmount + aTxFee)) { throw new InvalidOperationException($"The amount to send '{aAmount + aTxFee}' is greater than the balance of transactions '{aCurrencyItem.AmountToDecimal(lTotal)}'."); } else if (lSendTotal > (aAmount + aTxFee)) { lTxOutputs.Add(new TransactionUnit(0, lTotal - aCurrencyItem.AmountToBigInteger(aAmount + aTxFee), FServerConnection.GetCoinAddress(aCurrencyItem.Id))); } aCurrencyTransaction = new CurrencyTransaction(aUnspentOutputs, lTxOutputs.ToArray(), aCurrencyItem.AmountToLong(aTxFee), aCurrencyItem.Id); return(FServerConnection.DirectCreateTransaction(aCurrencyTransaction)); }
public override string CreateSignedTransaction(string aToAddress, decimal aAmount, decimal aTxFee, params object[] aExtParams) { string lNonce = null; if (aExtParams != null && aExtParams.Any()) { var lCustomTxFee = aExtParams.FirstOrDefault() as decimal?; if (lCustomTxFee.HasValue && lCustomTxFee.Value != aTxFee && lCustomTxFee.Value > 0) { aTxFee = lCustomTxFee.Value; } if (aExtParams.Length >= 2) { lNonce = aExtParams[1] as string; } } var lParentCurrency = FServerConnection.GetCurrency(FToken.ParentCurrencyID); var lParentCurrencyAdvocacy = FKeyManager.GetCurrencyAdvocacy(lParentCurrency.Id, lParentCurrency.ChainParamaters); var lFromAddress = lParentCurrencyAdvocacy.GetAddress(1); var lTransaction = PrepareNewTransaction(lFromAddress, aToAddress, aAmount, aTxFee); if (string.IsNullOrEmpty(lNonce)) { lNonce = FServerConnection.DirectCreateTransaction(lTransaction); } return(SignTransactionData(lNonce, lTransaction, lParentCurrencyAdvocacy)); }
public override string CreateSignedTransaction(string aToAddress, decimal aAmount, decimal aTxFee, params object[] aExtParams) { var lUnspents = FServerConnection.GetUnspentOutputs(FCurrencyItem.Id); if (aExtParams != null && aExtParams.Any()) { var lCustomTxFee = aExtParams.FirstOrDefault() as decimal?; if (lCustomTxFee.HasValue && lCustomTxFee.Value != aTxFee && lCustomTxFee.Value > 0) { aTxFee = lCustomTxFee.Value; } } string lData = PrepareNewTransaction(aToAddress, aAmount, aTxFee, FCurrencyItem, lUnspents, out CurrencyTransaction lCurrencyTransaction); return(SignTransactionData(lData, lCurrencyTransaction, FKeyManager.GetCurrencyAdvocacy(FCurrencyItem.Id, FCurrencyItem.ChainParamaters))); }
public override void SendRawTransaction(string aRawTX, DelegateOnSendTransactionCompleted aTxSentEventDelegate) { string lRawTxToSend = aRawTX.Contains("0x") ? aRawTX : string.Concat("0x", aRawTX); FServerConnection.DirectSendNewTransaction(aRawTX, FToken.ParentCurrencyID, aTxSentEventDelegate); }