/// <summary>	Sell bit asset. </summary>
        ///
        /// <remarks>	Paul, 16/02/2015. </remarks>
        ///
        /// <param name="l">		The BitsharesLedgerEntry to process. </param>
        /// <param name="s2d">      The 2D. </param>
        /// <param name="trxId">	Identifier for the trx. </param>
        protected virtual void SellBitAsset(BitsharesLedgerEntry l, SenderToDepositRow s2d, string trxId)
        {
            decimal oldBid = m_market.bid;

            try
            {
                if (m_market.price_discovery)
                {
                    //
                    // adjust prices based on order
                    //

                    decimal informed = m_asset.GetAmountFromLarimers(l.amount.amount) / m_market.bid_max;
                    m_market.bid = m_prices.GetBidForSell(informed);
                }

                string btcAddress = s2d.receiving_address;
                SendBitcoinsToDepositor(btcAddress, trxId, l.amount.amount, m_asset, s2d.deposit_address, MetaOrderType.sell, m_currency.uia);

                if (m_market.price_discovery)
                {
                    // update database with new prices
                    m_isDirty = true;
                }
            }
            catch (Exception e)
            {
                // also lets now ignore this transaction so we don't keep failing
                RefundBitsharesDeposit(l.from_account, l.amount.amount, trxId, e.Message, m_asset, s2d.deposit_address, MetaOrderType.sell);

                // restore this
                m_market.bid = oldBid;
            }
        }