diff -ur bitcoin-0.6.0/src/bitcoinrpc.cpp bitcoin-0.6.0-electrum/src/bitcoinrpc.cpp --- bitcoin-0.6.0/src/bitcoinrpc.cpp 2012-03-29 22:11:04.000000000 +0300 +++ bitcoin-0.6.0-electrum/src/bitcoinrpc.cpp 2012-03-31 12:30:50.631339067 +0300 @@ -1486,7 +1486,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 \n" + "Import an offline transaction to announce it into the network"); + + std::vector rawtx; + for (int i=0; i> 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) @@ -2047,7 +2083,8 @@ make_pair("getmemorypool", &getmemorypool), make_pair("listsinceblock", &listsinceblock), make_pair("dumpprivkey", &dumpprivkey), - make_pair("importprivkey", &importprivkey) + make_pair("importprivkey", &importprivkey), + make_pair("importtransaction", &importtransaction) }; map mapCallTable(pCallTable, pCallTable + sizeof(pCallTable)/sizeof(pCallTable[0])); diff -ur bitcoin-0.6.0/src/main.cpp bitcoin-0.6.0-electrum/src/main.cpp --- bitcoin-0.6.0/src/main.cpp 2012-03-29 22:11:04.000000000 +0300 +++ bitcoin-0.6.0-electrum/src/main.cpp 2012-03-31 12:36:41.711339168 +0300 @@ -3164,18 +3164,21 @@ // 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; // Legacy limits on sigOps: int nTxSigOps = tx.GetLegacySigOpCount(); - 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, GMF_BLOCK); + // 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 mapTestPoolTmp(mapTestPool);