* Update server HOWTO to Bitcoin 0.5.2

This commit is contained in:
Ovidiu Constantin 2012-02-16 13:31:05 +02:00
parent 81f25b5f87
commit 4fa237315e
2 changed files with 87 additions and 5 deletions

View File

@ -55,11 +55,11 @@ Step 2. Install a patched version of bitcoind
Electrum server requires some small modifications to the bitcoind daemon. The patch is included in the Electrum sources we just downloaded, now we will download the Bitcoin sources, patch, compile and install the binary to our ~/bin directory.
$ cd ~/src
$ wget https://github.com/bitcoin/bitcoin/tarball/v0.5.1 -O bitcoin-0.5.1.tgz
$ tar xvzf bitcoin-0.5.1.tgz
$ mv bitcoin-bitcoin-5623ee7 bitcoin-0.5.1
$ cd bitcoin-0.5.1/src
$ patch -p 2 < ~/src/electrum/server/patches/bitcoin-0.5.1.diff
$ wget https://github.com/bitcoin/bitcoin/tarball/v0.5.2 -O bitcoin-0.5.2.tgz
$ tar xvzf bitcoin-0.5.2.tgz
$ mv bitcoin-bitcoin-fb24b05 bitcoin-0.5.2
$ cd bitcoin-0.5.2/src
$ patch -p 2 < ~/src/electrum/server/patches/bitcoin-0.5.2.diff
$ make -f makefile.unix
$ strip bitcoind
$ mv bitcoind ~/bin

View File

@ -0,0 +1,82 @@
diff -ur bitcoin-0.5.2/src/bitcoinrpc.cpp bitcoin-0.5.2-electrum/src/bitcoinrpc.cpp
--- bitcoin-0.5.2/src/bitcoinrpc.cpp 2012-01-06 01:19:29.000000000 +0200
+++ bitcoin-0.5.2-electrum/src/bitcoinrpc.cpp 2012-02-16 12:59:03.000000000 +0200
@@ -1362,7 +1362,43 @@
return entry;
}
+Value importtransaction(const Array& params, bool fHelp)
+{
+ string hexdump;
+ if (fHelp || params.size() != 1 || (hexdump=params[0].get_str()).size()&1)
+ throw runtime_error(
+ "importtransaction <hexdata>\n"
+ "Import an offline transaction to announce it into the network");
+
+ std::vector<unsigned char> rawtx;
+ for (int i=0; i<hexdump.size(); i+=2)
+ {
+ int v;
+ if (sscanf(hexdump.substr(i,2).c_str(), "%x", &v)!=1)
+ throw JSONRPCError(-4, "Error in hex data.");
+ rawtx.push_back((unsigned char)v);
+ }
+try
+ {
+ CDataStream ss(rawtx);
+ CTransaction tx;
+ ss >> tx;
+ CInv inv(MSG_TX, tx.GetHash());
+ if(! tx.AcceptToMemoryPool(true)) throw JSONRPCError(-4, "Transaction not accepted to memory pool.");
+ CDataStream msg(rawtx);
+ RelayMessage(inv, msg);
+ return tx.GetHash().GetHex();
+ }
+ catch (std::exception& e)
+ {
+ throw JSONRPCError(-4, "Exception while parsing the transaction data.");
+ }
+
+}
+
+
+
Value backupwallet(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 1)
@@ -1846,6 +1882,7 @@
make_pair("settxfee", &settxfee),
make_pair("getmemorypool", &getmemorypool),
make_pair("listsinceblock", &listsinceblock),
+ make_pair("importtransaction", &importtransaction),
};
map<string, rpcfn_type> mapCallTable(pCallTable, pCallTable + sizeof(pCallTable)/sizeof(pCallTable[0]));
diff -ur bitcoin-0.5.2/src/main.cpp bitcoin-0.5.2-electrum/src/main.cpp
--- bitcoin-0.5.2/src/main.cpp 2012-01-06 01:19:29.000000000 +0200
+++ bitcoin-0.5.2-electrum/src/main.cpp 2012-02-16 13:02:55.000000000 +0200
@@ -2819,16 +2819,19 @@
// Size limits
unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK);
- if (nBlockSize + nTxSize >= MAX_BLOCK_SIZE_GEN)
- continue;
+ //if (nBlockSize + nTxSize >= MAX_BLOCK_SIZE_GEN)
+ // continue;
int nTxSigOps = tx.GetSigOpCount();
- if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS)
- continue;
+ //if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS)
+ // continue;
// Transaction fee required depends on block size
bool fAllowFree = (nBlockSize + nTxSize < 4000 || CTransaction::AllowFree(dPriority));
int64 nMinFee = tx.GetMinFee(nBlockSize, fAllowFree);
+ // Electrum server: do not check fees
+ nMinFee = 0;
+
// Connecting shouldn't fail due to dependency on other memory pool transactions
// because we're already processing them in order of dependency
map<uint256, CTxIndex> mapTestPoolTmp(mapTestPool);