SampleEscrowTransactionPtr SampleEscrowServerZmq::GetClientTransaction(const std::string &client, const u_int64_t txIndex)
{
    if(!this->isClient)
        return SampleEscrowServer::GetClientTransaction(client, txIndex);

    BtcNetMsgGetTxPtr message = BtcNetMsgGetTxPtr(new BtcNetMsgGetTx());
    memcpy(message->client, client.c_str(), 20);
    message->txIndex = txIndex;

    BtcNetMsg* rawReply = SendData((BtcNetMsg*)message.get());
    if(rawReply == NULL)
        return SampleEscrowTransactionPtr();

    BtcNetMsgTxPtr reply = BtcNetMsgTxPtr(new BtcNetMsgTx());
    memcpy(reply->data, rawReply->data, NetMsgTxSize);

    SampleEscrowTransactionPtr tx = SampleEscrowTransactionPtr(new SampleEscrowTransaction(reply->amount, BtcModulesPtr()));
    tx->txId = reply->txId;
    tx->targetAddr = reply->toAddress;
    tx->type = (SampleEscrowTransaction::Type)reply->type;
    tx->status = (SampleEscrowTransaction::SUCCESS)reply->status;

    delete[] rawReply;

    return tx;
}
int main(int argc, char *argv[])
{
    // NB: you don't really have to do this if your library links ok
    // but I tested it and it works and gives a nice message, rw.
    //
    //QLibrary otapi("libotapi.so");     // <===== FIRST constructor called.
    //if (!otapi.load())
    //    qDebug() << otapi.errorString();
    //if (otapi.load())
    //    qDebug() << "otapi loaded";
    // ----------------------------------------
    // AppInit() is called here by this object's constructor. (And
    // AppCleanup() will be called automatically when we exit main(),
    // by this same object's destructor.)
    //
    __OTclient_RAII the_client_cleanup;  // <===== SECOND constructor is called here.
    // ----------------------------------------
    if (NULL == opentxs::OTAPI_Wrap::It())
    {
        opentxs::Log::vError(0, "Error, exiting: opentxs::OTAPI_Wrap::AppInit() call must have failed.\n");
        return -1;
    }
    // ----------------------------------------
    //Init qApp
    MTApplicationMC theApplication(argc, argv);  // <====== THIRD constructor (they are destroyed in reverse order.)
    theApplication.setQuitOnLastWindowClosed(false);

    { Modules modules; }    // run constructor once, initialize static pointers
    BtcModulesPtr btcModules = BtcModulesPtr(new BtcModules());

    //Set language
    Translation appTranslation;
    QTranslator translator;
    appTranslation.updateLanguage(theApplication, translator);

    QTimer::singleShot(0, &theApplication, SLOT(appStarting()));
    // ----------------------------------------------------------------

// ----------------------------------------------------------------
// NOTE: What's this about?
//
// For the Mac version only (and ONLY for actual release dmg's) we
// want the scripts folder to be found inside the application directory,
// near the binary itself.
//
// This is because we get problems with the MacOS .dmg where especially on
// Mavericks, the sandbox prevents us from opening the scripts (ot_commands.ot, etc)
// which on UNIX systems, are normally found in /usr/local/lib/opentxs
//
// There are several solutions at play. First, we are eliminating the scripts entirely,
// by converting them to C++. But in the meantime, until that's done, we have to live with
// the scripts, so we are putting them in a place where the application CAN open them:
// the application folder itself. That is, the "AppBinaryFolder".
//
// Here we use QCoreApplication::applicationDirPath() to get the application folder path,
// and we tell OT to use that as the "AppBinaryFolder". OT doesn't use that variable except
// in one place: when setting the Scripts directory -- and ONLY if the variable is set (and
// we ARE setting it here below.)
//
// If the variable is set (and in this case, it is) then OT will use the AppBinaryFolder instead
// of the PrefixPath, to prepend to the Scripts path. This will cause OT to look for the scripts
// in the ApplicationDirPath/lib/opentxs folder instead of /usr/local/lib/opentxs
//
// Notice also we are checking the path to see if it contains "clang" and "build", and we only
// set the AppBinaryFolder in the case where those substrings are both NOT found. That way this
// fix will not impact developer builds, but only actual release DMGs.
//
// This fix assumes that the DMG contains, in the MacOS folder, next to moneychanger-qt and mc_db,
// a folder "lib", which contains a folder "opentxs", which contains the scripts. If those files
// are not placed there in the DMG, then this code would obviously cause OT to fail trying to load
// its scripts.
//
#ifdef Q_OS_MAC
    QString qstrAppDirPath = QCoreApplication::applicationDirPath();

    if (!qstrAppDirPath.isEmpty())
    {
        int nIndexClang = qstrAppDirPath.indexOf("clang", 0);
        int nIndexBuild = qstrAppDirPath.indexOf("build", 0);

        if ((-1 == nIndexClang) && (-1 == nIndexBuild))
            opentxs::OTPaths::SetAppBinaryFolder(qstrAppDirPath.toStdString().c_str());
    }
//  QMessageBox::information(NULL, "", QString::fromStdString(std::string(opentxs::OTPaths::ScriptsFolder().Get())));
#endif
// ----------------------------------------------------------------
    int nExec = theApplication.exec(); // <=== Here's where we run the QApplication...
    // ----------------------------------------------------------------

    Moneychanger::It(NULL, true); // bShuttingDown=true.

    // ----------------------------------------------------------------
    opentxs::Log::vOutput(0, "Finished executing the QApplication!\n(AppCleanup should occur "
                   "immediately after this point.)\nReturning: %d\n", nExec);
    // ----------------------------------------------------------------
    return nExec;
}