* Update server HOWTO to Bitcoin 0.5.2
authorOvidiu Constantin <ovidiu@mybox.ro>
Thu, 16 Feb 2012 11:31:05 +0000 (13:31 +0200)
committerOvidiu Constantin <ovidiu@mybox.ro>
Thu, 16 Feb 2012 11:31:05 +0000 (13:31 +0200)
HOWTO
patches/bitcoin-0.5.2.diff [new file with mode: 0644]

diff --git a/HOWTO b/HOWTO
index 842c87b..f72f598 100644 (file)
--- a/HOWTO
+++ b/HOWTO
@@ -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
diff --git a/patches/bitcoin-0.5.2.diff b/patches/bitcoin-0.5.2.diff
new file mode 100644 (file)
index 0000000..bb2d438
--- /dev/null
@@ -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);