bitcoind + levelDB processor integration
[electrum-server.git] / patch / patch
index f0b8f53..eadd113 100644 (file)
@@ -1,3 +1,23 @@
+diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp
+index 21e37c7..1ce91c9 100644
+--- a/src/bitcoinrpc.cpp
++++ b/src/bitcoinrpc.cpp
+@@ -1147,6 +1147,7 @@ Array RPCConvertValues(const std::string &strMethod, const std::vector<std::stri
+     if (strMethod == "listreceivedbyaccount"  && n > 1) ConvertTo<bool>(params[1]);
+     if (strMethod == "getbalance"             && n > 1) ConvertTo<boost::int64_t>(params[1]);
+     if (strMethod == "getblockhash"           && n > 0) ConvertTo<boost::int64_t>(params[0]);
++    if (strMethod == "getblock"               && n > 1) ConvertTo<boost::int64_t>(params[1]);
+     if (strMethod == "move"                   && n > 2) ConvertTo<double>(params[2]);
+     if (strMethod == "move"                   && n > 3) ConvertTo<boost::int64_t>(params[3]);
+     if (strMethod == "sendfrom"               && n > 2) ConvertTo<double>(params[2]);
+@@ -1167,6 +1168,7 @@ Array RPCConvertValues(const std::string &strMethod, const std::vector<std::stri
+     if (strMethod == "listunspent"            && n > 1) ConvertTo<boost::int64_t>(params[1]);
+     if (strMethod == "listunspent"            && n > 2) ConvertTo<Array>(params[2]);
+     if (strMethod == "getrawtransaction"      && n > 1) ConvertTo<boost::int64_t>(params[1]);
++    if (strMethod == "getrawtransaction"      && n > 2) ConvertTo<boost::int64_t>(params[2]);
+     if (strMethod == "createrawtransaction"   && n > 0) ConvertTo<Array>(params[0]);
+     if (strMethod == "createrawtransaction"   && n > 1) ConvertTo<Object>(params[1]);
+     if (strMethod == "signrawtransaction"     && n > 1) ConvertTo<Array>(params[1], true);
 diff --git a/src/main.cpp b/src/main.cpp
 index 43bd5dd..b38ce88 100644
 --- a/src/main.cpp
@@ -35,6 +55,67 @@ index d810bff..fba793c 100644
  bool SetBestChain(CBlockIndex* pindexNew);
  bool ConnectBestBlock();
  CBlockIndex * InsertBlockIndex(uint256 hash);
+diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp
+index 3fde463..e60b71e 100644
+--- a/src/rpcblockchain.cpp
++++ b/src/rpcblockchain.cpp
+@@ -41,7 +41,7 @@ double GetDifficulty(const CBlockIndex* blockindex)
+ }
+-Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex)
++Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool is_raw=false)
+ {
+     Object result;
+     result.push_back(Pair("hash", block.GetHash().GetHex()));
+@@ -53,8 +53,16 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex)
+     result.push_back(Pair("version", block.nVersion));
+     result.push_back(Pair("merkleroot", block.hashMerkleRoot.GetHex()));
+     Array txs;
+-    BOOST_FOREACH(const CTransaction&tx, block.vtx)
+-        txs.push_back(tx.GetHash().GetHex());
++    BOOST_FOREACH(const CTransaction&tx, block.vtx) {
++      if(is_raw){
++      CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
++        ssTx << tx;
++        string strHex = HexStr(ssTx.begin(), ssTx.end());
++        txs.push_back(strHex);
++      }
++      else txs.push_back(tx.GetHash().GetHex());
++    }
++
+     result.push_back(Pair("tx", txs));
+     result.push_back(Pair("time", (boost::int64_t)block.GetBlockTime()));
+     result.push_back(Pair("nonce", (boost::uint64_t)block.nNonce));
+@@ -141,7 +149,7 @@ Value getblockhash(const Array& params, bool fHelp)
+ Value getblock(const Array& params, bool fHelp)
+ {
+-    if (fHelp || params.size() != 1)
++    if (fHelp || params.size() < 1)
+         throw runtime_error(
+             "getblock <hash>\n"
+             "Returns details of a block with given block-hash.");
+@@ -149,6 +157,10 @@ Value getblock(const Array& params, bool fHelp)
+     std::string strHash = params[0].get_str();
+     uint256 hash(strHash);
++    bool is_raw = false;
++    if (params.size() == 2)
++        is_raw = params[1].get_int() != 0;
++
+     if (mapBlockIndex.count(hash) == 0)
+         throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found");
+@@ -156,7 +168,7 @@ Value getblock(const Array& params, bool fHelp)
+     CBlockIndex* pblockindex = mapBlockIndex[hash];
+     block.ReadFromDisk(pblockindex, true);
+-    return blockToJSON(block, pblockindex);
++    return blockToJSON(block, pblockindex, is_raw);
+ }
+ Value gettxoutsetinfo(const Array& params, bool fHelp)
 diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp
 index e82f4ad..624675f 100644
 --- a/src/rpcrawtransaction.cpp