/// <summary>	Buy bit asset. </summary>
        ///
        /// <remarks>	Paul, 16/02/2015. </remarks>
        ///
        /// <param name="t">    The TransactionSinceBlock to process. </param>
        /// <param name="s2d">	The 2D. </param>
        protected virtual void BuyBitAsset(TransactionSinceBlock t, SenderToDepositRow s2d)
        {
            decimal oldAsk = m_market.ask;

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

                    decimal informed = t.Amount / m_market.ask_max;
                    m_market.ask = m_prices.GetAskForBuy(informed);
                }

                SendBitAssetsToDepositor(t, m_asset, s2d, MetaOrderType.buy);

                if (m_market.price_discovery)
                {
                    // update database with new prices
                    m_isDirty = true;
                }
            }
            catch (Exception e)
            {
                // lets hear about what went wrong
                m_daemon.LogGeneralException(e.ToString());

                // also lets now ignore this transaction so we don't keep failing
                RefundBitcoinDeposit(t, e.Message, s2d, MetaOrderType.buy);

                // restore this
                m_market.ask = oldAsk;
            }
        }