summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Grønager <gronager@ceptacle.com>2012-02-02 09:32:24 +0100
committerbitcoindev <bitcoindev@gnusha.org>2012-02-02 08:32:36 +0000
commit172596ce4fc9f5f8f1f1421bcdc1f740e6e69f76 (patch)
treee6f03fb9e61c466d01ab642995a43607e91bacd1
parent255111092008d9c69a2e6276c3af6a52806d8892 (diff)
downloadpi-bitcoindev-172596ce4fc9f5f8f1f1421bcdc1f740e6e69f76.tar.gz
pi-bitcoindev-172596ce4fc9f5f8f1f1421bcdc1f740e6e69f76.zip
Re: [Bitcoin-development] Announcement: libcoin
-rw-r--r--e0/a1876f6974f23b7e7c0701bb5fe0cc2a469411192
1 files changed, 192 insertions, 0 deletions
diff --git a/e0/a1876f6974f23b7e7c0701bb5fe0cc2a469411 b/e0/a1876f6974f23b7e7c0701bb5fe0cc2a469411
new file mode 100644
index 000000000..86041721d
--- /dev/null
+++ b/e0/a1876f6974f23b7e7c0701bb5fe0cc2a469411
@@ -0,0 +1,192 @@
+Received: from sog-mx-2.v43.ch3.sourceforge.com ([172.29.43.192]
+ helo=mx.sourceforge.net)
+ by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.76)
+ (envelope-from <gronager@ceptacle.com>) id 1Rss5s-0002lr-LA
+ for bitcoin-development@lists.sourceforge.net;
+ Thu, 02 Feb 2012 08:32:36 +0000
+X-ACL-Warn:
+Received: from 2508ds5-oebr.0.fullrate.dk ([95.166.54.49]
+ helo=mail.ceptacle.com)
+ by sog-mx-2.v43.ch3.sourceforge.com with esmtp (Exim 4.76)
+ id 1Rss5o-0004bB-Ad for bitcoin-development@lists.sourceforge.net;
+ Thu, 02 Feb 2012 08:32:36 +0000
+Received: from localhost (localhost [127.0.0.1])
+ by mail.ceptacle.com (Postfix) with ESMTP id 929731696A2A;
+ Thu, 2 Feb 2012 09:32:26 +0100 (CET)
+X-Virus-Scanned: amavisd-new at ceptacle.com
+Received: from mail.ceptacle.com ([127.0.0.1])
+ by localhost (server.ceptacle.private [127.0.0.1]) (amavisd-new,
+ port 10024)
+ with ESMTP id s2yDxW1llbDu; Thu, 2 Feb 2012 09:32:25 +0100 (CET)
+Received: from [10.0.1.28] (2508ds5-oebr.0.fullrate.dk [95.166.54.49])
+ by mail.ceptacle.com (Postfix) with ESMTPSA id 5B5E81696A1A;
+ Thu, 2 Feb 2012 09:32:25 +0100 (CET)
+Mime-Version: 1.0 (Apple Message framework v1251.1)
+Content-Type: text/plain; charset=us-ascii
+From: =?iso-8859-1?Q?Michael_Gr=F8nager?= <gronager@ceptacle.com>
+In-Reply-To: <CAD2Ti29cto8wS1jO5yOkORbE48c+t6Of2vysXcA0xM9LKCOCgg@mail.gmail.com>
+Date: Thu, 2 Feb 2012 09:32:24 +0100
+Content-Transfer-Encoding: quoted-printable
+Message-Id: <4CE9708D-0627-480C-B928-3F812544CD90@ceptacle.com>
+References: <D55C3D18-8286-44E9-B877-6FCE7C05E980@ceptacle.com>
+ <CAJna-HiS34V5rNrRfFOMRJ6JhRmS1aeEE3oA=o07Hgf4S6qNfw@mail.gmail.com>
+ <54950761-EBFB-402E-8D7B-0B54A08260D2@ceptacle.com>
+ <CAD2Ti29cto8wS1jO5yOkORbE48c+t6Of2vysXcA0xM9LKCOCgg@mail.gmail.com>
+To: grarpamp <grarpamp@gmail.com>
+X-Mailer: Apple Mail (2.1251.1)
+X-Spam-Score: 0.0 (/)
+X-Spam-Report: Spam Filtering performed by mx.sourceforge.net.
+ See http://spamassassin.org/tag/ for more details.
+X-Headers-End: 1Rss5o-0004bB-Ad
+Cc: Bitcoin Dev <bitcoin-development@lists.sourceforge.net>
+Subject: Re: [Bitcoin-development] Announcement: libcoin
+X-BeenThere: bitcoin-development@lists.sourceforge.net
+X-Mailman-Version: 2.1.9
+Precedence: list
+List-Id: <bitcoin-development.lists.sourceforge.net>
+List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
+ <mailto:bitcoin-development-request@lists.sourceforge.net?subject=unsubscribe>
+List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development>
+List-Post: <mailto:bitcoin-development@lists.sourceforge.net>
+List-Help: <mailto:bitcoin-development-request@lists.sourceforge.net?subject=help>
+List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
+ <mailto:bitcoin-development-request@lists.sourceforge.net?subject=subscribe>
+X-List-Received-Date: Thu, 02 Feb 2012 08:32:36 -0000
+
+I agree on your architectural considerations - and with libcoin you can =
+have several wallets in the same application ( and several RPC servers =
+for that matter). And ... they all use the same Node / blockchain.
+
+You will also find the RPC server in libcoin blistering fast compared to =
+the Satoshi client. (It was actually what got me to write libcoin in the =
+first place...). The Satoshi client HTTP server executes all rpc =
+commands in its own thread, but to do so, it needs to stop the thread of =
+the Node, even though the command executed is just a query (i.e. not a =
+SendTo), you hence have two threads blocking each other and when they =
+wait, you wait... In libcoin all the query methods access the blockChain =
+as a const object and they can hence safely query it without intervening =
+the work of the Node thread. The exception are the SendTo methods that =
+first query if a transaction can take place, then pushes it to the =
+work-queue of the Node thread and again exits immediately. The actual =
+execution then follows once the Node has finished its current tasks =
+(e.g. validating a block).
+
+I have attached the code for a very simple one node, two wallet, libcoin =
+client below (~30 lines), and I have added it to the libcoin source as =
+an example (example name: extrawallets).
+
+Once running, you can access your extra wallet using the RPC interface:
+./extrawallet extragetbalance
+And youy normal wallet by:
+./extrawallet getbalance
+
+I'll leave the generalization to an n-wallet gui application to the =
+reader ;)
+
+Cheers,
+
+Michael
+
+....
+
+// The derived classes below are only to get other class names (using =
+the auto rpc name feature)
+// I will put adding a "setName" method to the Method class on the todo.=20=
+
+class ExtraGetBalance : public GetBalance {
+public:
+ ExtraGetBalance(Wallet& wallet) : GetBalance(wallet) {}
+};
+class ExtraSendToAddress : public GetBalance {
+public:
+ ExtraSendToAddress(Wallet& wallet) : GetBalance(wallet) {}
+};
+
+int main(int argc, char* argv[])
+{ =20
+ logfile =3D CDB::dataDir(bitcoin.dataDirSuffix()) + "/debug.log";
+
+ Node node; // deafult chain is bitcoin
+
+ Wallet wallet(node, "wallet.dat"); // add the wallet
+ Wallet extra_wallet(node, "extra_wallet.dat"); // add the extra =
+wallet
+
+ thread nodeThread(&Node::run, &node); // run this as a background =
+thread
+
+ Server server;
+
+ // Register Server methods.
+ server.registerMethod(method_ptr(new Stop(server)));
+
+ // Register Node methods.
+ server.registerMethod(method_ptr(new GetBlockCount(node)));
+ server.registerMethod(method_ptr(new GetConnectionCount(node)));
+ server.registerMethod(method_ptr(new GetDifficulty(node)));
+ server.registerMethod(method_ptr(new GetInfo(node)));
+
+ // Register Wallet methods. - note that we don't have any auth, so =
+anyone (on localhost) can read your balance!
+ server.registerMethod(method_ptr(new GetBalance(wallet)));
+ server.registerMethod(method_ptr(new SendToAddress(wallet)), =
+Auth("username","password"));
+ server.registerMethod(method_ptr(new ExtraGetBalance(wallet)));
+ server.registerMethod(method_ptr(new ExtraSendToAddress(wallet)), =
+Auth("username","password"));
+ server.run();
+
+ node.shutdown();
+ nodeThread.join();
+}
+
+
+On 02/02/2012, at 00:50, grarpamp wrote:
+
+>> However, I think perhaps the bitcoin project should be split into a =
+library, with a prototype client and the actual clients. This library =
+facilitates this.
+>=20
+> I'll be trying your implementation soon. And libbitcoin/subvertx too.
+> Partly because they're also non-interpreted, and partly to what seems
+> better architected...
+>=20
+> To the minimal extent of my understanding... I'd like to see wallet
+> ops completely separated from background chain ops. ie: have
+> a chain daemon doing it's thing, updating, verifying, etc. The
+> generator doing it's thing. And a wallet app that can independently
+> manage separate wallets in parallel, referencing the live chain files
+> as needed. It seems a library would allow quality focus on the =
+separate
+> functions and let apps/ui's use the fn's as desired on top. Right now, =
+it
+> seems I have to run bitcoind and can only deal with one wallet at a =
+time,
+> having to stop it, deal with state issues, swap in a new wallet, start
+> it, and repeat till illness ensues :( And when the chain is being =
+processed
+> hard by the daemon cpuwise, bitcoin RPC takes minutes to respond, if =
+ever
+> or errors out. If wallet ops or statistical queries on the chain need =
+it for
+> integrity or reading, a db checkpoint/lock/logroll could be =
+implemented into
+> the chain demon processes with a client lib api to trigger it as =
+needed.
+> Don't know, just saying.
+>=20
+> fyi... boost 1.48 and db 4.8.30 work fine with 0.5.2, 0.5.x, and =
+master,
+> you just need to compile and include it by hand if you want it and
+> your package manager doesn't have it.
+
+Michael Gronager, PhD
+Director, Ceptacle
+Jens Juels Gade 33
+2100 Copenhagen E
+Mobile: +45 31 45 14 01
+E-mail: gronager@ceptacle.com
+Web: http://www.ceptacle.com/
+
+
+