Right but you don't know whether bitcoind is running or not.
You can look for it in the OS process list. As said... that's unreliable/undesirable.
|
|
|
Made a new client. Looking for testers and feedback. https://github.com/genjix/spesmiloAnd showing off internationalisation (slightly newer than above... made some minor corrections), # as of version 47908a890726f424371c9784b8508cff163c2c78 (Gavin Andresen) Thu Feb 10 19:24:22 2011 -0500 # Visual C++ compatibility fixes git clone https://github.com/bitcoin/bitcoin
# apply the bitcoin.patch in this directory make -f makefile.unix bitcoind # copy to /usr/local/bin sudo cp bitcoind /usr/local/bin
# install pyside for your distro, http://developer.qt.nokia.com/wiki/PySide_Binaries_Linux sudo add-apt-repository ppa:pyside sudo apt-get update sudo apt-get install python-pyside
# run the program python main.py
# Esperanto translation: # uncomment the 5th line from the bottom of main.py
Still got lots of features planned.
|
|
|
happy birthday to you happy birthday to you happy birthday to bitcoin happy birthday to you
|
|
|
Right but you don't know whether bitcoind is running or not.
You can start it but then you don't know if it crashed. Checking the PID's is unreliable too.
And periodically having to check whether bitcoind has finished initialisation by recreating new connections then querying an RPC method to see whether it throws an exception is bad.
|
|
|
mtgox has low volume- everybody buying up
|
|
|
Everything I ever need is on thepiratebay
What's so good about demonoid?
|
|
|
I did "Copy to Clipboard" of my Bitcoin address and then hit Pay, paid myself 20 btc. Is this supposed to work?
It sort of worked and sort of didn't. The transaction displays as "Payment to yourself" with Debit -20.00 and Credit +20.00. But Status is stuck at "0/offline?". I'm online and I've never had a problem sending a transaction before.
yes it works. Just wait a while.
|
|
|
Thanks! I've been looking for something like this (from a new persons perspective).
|
|
|
I've updated the OP with a new version of the patch that adds an error message. http://pastebin.com/W41J5K0Min the few seconds before the rpc server has started and bitcoin is running, I need to know bitcoin is running but not initialised... So I put the RPC server at the very beginning and add isinitialised (all other rpc methods except help/isinitialized will send an error when isinitialized is false)
|
|
|
Why: Currently it is hard for a GUI wrapping bitcoind by means of the RPC-server to detect when bitcoin is running but still initialising. This seeks to resolve that.
Or you could just deduce same from getinfo's "blocks" and "connections" output... I don't mean downloading the block chain, or finding connections, I mean the completion of AppInit(...)
|
|
|
Why: Currently it is hard for a GUI wrapping bitcoind by means of the RPC-server to detect when bitcoin is running but still initialising. This seeks to resolve that. What does it do: - Moves RPC server startup to very beginning. - Adds isinitialized method. Change made to bitcoin/bitcoin from github http://pastebin.com/LYtBRXgkdiff --git a/init.cpp b/init.cpp index 04bdd68..52cf7a1 100644 --- a/init.cpp +++ b/init.cpp @@ -115,6 +115,7 @@ bool AppInit(int argc, char* argv[]) } catch (...) { PrintException(NULL, "AppInit()"); } + fInitializationCompleted = true; if (!fRet) Shutdown(NULL); return fRet; @@ -122,6 +123,9 @@ bool AppInit(int argc, char* argv[]) bool AppInit2(int argc, char* argv[]) { + if (GetBoolArg("-server") || fDaemon) + CreateThread(ThreadRPCServer, NULL); + #ifdef _MSC_VER // Turn off microsoft heap dump noise _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); @@ -443,9 +447,6 @@ bool AppInit2(int argc, char* argv[]) if (!CreateThread(StartNode, NULL)) wxMessageBox("Error: CreateThread(StartNode) failed", "Bitcoin"); - if (GetBoolArg("-server") || fDaemon) - CreateThread(ThreadRPCServer, NULL); - #if defined(__WXMSW__) && defined(GUI) if (fFirstRun) SetStartOnSystemStartup(true); diff --git a/rpc.cpp b/rpc.cpp index 69b09bc..72fc9a8 100644 --- a/rpc.cpp +++ b/rpc.cpp @@ -28,6 +28,8 @@ void ThreadRPCServer2(void* parg); typedef Value(*rpcfn_type)(const Array& params, bool fHelp); extern map<string, rpcfn_type> mapCallTable; +bool fInitializationCompleted = false; + Object JSONRPCError(int code, const string& message) { @@ -146,7 +148,6 @@ Value help(const Array& params, bool fHelp) return strRet; } - Value stop(const Array& params, bool fHelp) { if (fHelp || params.size() != 0) @@ -277,18 +278,22 @@ Value getinfo(const Array& params, bool fHelp) Object obj; obj.push_back(Pair("version", (int)VERSION)); - obj.push_back(Pair("balance", (double)GetBalance() / (double)COIN)); - obj.push_back(Pair("blocks", (int)nBestHeight)); - obj.push_back(Pair("connections", (int)vNodes.size())); - obj.push_back(Pair("proxy", (fUseProxy ? addrProxy.ToStringIPPort() : string()))); - obj.push_back(Pair("generate", (bool)fGenerateBitcoins)); - obj.push_back(Pair("genproclimit", (int)(fLimitProcessors ? nLimitProcessors : -1))); - obj.push_back(Pair("difficulty", (double)GetDifficulty())); - obj.push_back(Pair("hashespersec", gethashespersec(params, false))); - obj.push_back(Pair("testnet", fTestNet)); - obj.push_back(Pair("keypoololdest", (boost::int64_t)GetOldestKeyPoolTime())); - obj.push_back(Pair("paytxfee", (double)nTransactionFee / (double)COIN)); - obj.push_back(Pair("errors", GetWarnings("statusbar"))); + obj.push_back(Pair("isinitialized", (bool)fInitializationCompleted)); + if (fInitializationCompleted) + { + obj.push_back(Pair("balance", (double)GetBalance() / (double)COIN)); + obj.push_back(Pair("blocks", (int)nBestHeight)); + obj.push_back(Pair("connections", (int)vNodes.size())); + obj.push_back(Pair("proxy", (fUseProxy ? addrProxy.ToStringIPPort() : string()))); + obj.push_back(Pair("generate", (bool)fGenerateBitcoins)); + obj.push_back(Pair("genproclimit", (int)(fLimitProcessors ? nLimitProcessors : -1))); + obj.push_back(Pair("difficulty", (double)GetDifficulty())); + obj.push_back(Pair("hashespersec", gethashespersec(params, false))); + obj.push_back(Pair("testnet", fTestNet)); + obj.push_back(Pair("keypoololdest", (boost::int64_t)GetOldestKeyPoolTime())); + obj.push_back(Pair("paytxfee", (double)nTransactionFee / (double)COIN)); + obj.push_back(Pair("errors", GetWarnings("statusbar"))); + } return obj; } @@ -1806,6 +1811,8 @@ void ThreadRPCServer2(void* parg) if (valMethod.type() != str_type) throw JSONRPCError(-32600, "Method must be a string"); string strMethod = valMethod.get_str(); + if (!fInitializationCompleted && strMethod != "help" && strMethod != "getinfo") + throw JSONRPCError(-42000, "Still initializing"); if (strMethod != "getwork") printf("ThreadRPCServer method=%s\n", strMethod.c_str()); diff --git a/rpc.h b/rpc.h index 48a7b8a..85c3ef3 100644 --- a/rpc.h +++ b/rpc.h @@ -4,3 +4,4 @@ void ThreadRPCServer(void* parg); int CommandLineRPC(int argc, char *argv[]); +extern bool fInitializationCompleted;
PS plz add .patch to allowed attachments PSS upload folder is full! i cannot upload the patch file.
|
|
|
Can I guarantee that txids will only ever occur once or twice in listtransactions? IIRC I cannot, right? (because you can split payments or something- not too clear on this).
|
|
|
hrrnnngg... back to the top
|
|
|
|