コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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)));
        }
コード例 #4
0
        public override void SendRawTransaction(string aRawTX, DelegateOnSendTransactionCompleted aTxSentEventDelegate)
        {
            string lRawTxToSend = aRawTX.Contains("0x") ? aRawTX : string.Concat("0x", aRawTX);

            FServerConnection.DirectSendNewTransaction(aRawTX, FToken.ParentCurrencyID, aTxSentEventDelegate);
        }