Bitcoin Forum
May 11, 2024, 03:15:37 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 »
281  Alternate cryptocurrencies / Altcoin Discussion / Re: [LTC] Happy birthday Litecoin! on: October 13, 2012, 06:25:28 PM
One year alive and well!

Who's the lead LTC developer these days? How active is he/they?

282  Alternate cryptocurrencies / Altcoin Discussion / Re: PPCoin: What does PPC mean? on: October 13, 2012, 06:22:59 PM
again... you guys are pathetic.

pee pee poo poo... great humor.

SunnyKing: Personal Profit Coin


I actually dont think its funny at all

Why not ?

because I dont support SunnyKing or the development of his Pirates Ponzi Coin

Why ?

why? why? why? why? why?

yay, i can also say why? why? why?.........................
again... you guys are pathetic.

pee pee poo poo... great humor.

SunnyKing: Personal Profit Coin


I actually dont think its funny at all

Why not ?

because I dont support SunnyKing or the development of his Pirates Ponzi Coin


Greedi/Dice, arnt you guys meant to be fixing your LTC dice scam thing? It's been over 1 month now with misleading/wrong odds .

I will be making a scammer thread if it's not fixed within the next few days, seems you have more time to spread hate about a competitive currency than to fix up your own.


Andy

283  Economy / Long-term offers / Re: > > > Sky Deposits (1.25%pw) > > > [0/60BTC available] on: October 13, 2012, 05:03:59 PM
Sending interest payments now (1 day early) as away tomorrow.

Still need to make waiting list, had ppl pm me - not looking to increase capacity.

Andy
284  Alternate cryptocurrencies / Altcoin Discussion / Re: Is Sunny King (of PPCoin) RealSolid (of SolidCoin)? on: October 13, 2012, 09:35:29 AM
+1 AndyRossy why don't you answer the man's questions as opposed to attacking LTC or myself?
I support LTC.


Why would there be a centralization within a supposedly "decentralized" system?

Why are you avoiding his questions AndyRossy?

I am not, the checkpoint question has been answered earlier on in this thread.

Andy
285  Alternate cryptocurrencies / Altcoin Discussion / Re: [ANN][PPC] Roulette, Sic Bo, Dice and other Games for PPC on: October 13, 2012, 08:55:58 AM
Yay i've placed a few bets to test / play around with it also.
286  Alternate cryptocurrencies / Altcoin Discussion / Re: Is Sunny King (of PPCoin) RealSolid (of SolidCoin)? on: October 13, 2012, 08:43:50 AM
@Op and Smoothie

Maybe you guys can explain the votes here: https://bitcointalk.org/index.php?topic=117744.0 for no,

Anybody who reads this forum knows people who are into other currencies, like LTC are just trying to disrespect any other currency.

Im all for as many alt currencise as possible, but, this thread makes no sense - see Jutarul's post.
287  Alternate cryptocurrencies / Altcoin Discussion / Re: Should SatoshiRoulette.com add PPC support on: October 12, 2012, 09:18:09 PM
Code Monkey:
Quote
unfortunately the current version of ppcoind does not support the rpc command getrawtranasction

As has been explained to me, with that feature missing we cannot support ppcoin at this time with our engine, but we now have games and ppcoins ready for when it is supported.

Hi

Here's a patch for getrawtransaction.

Next release will be forked from bitcoin 0.7.0 as I understand so no patch will be required.

Andy


Code:
diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp
index 3c39a30..adaedae 100644
--- a/src/bitcoinrpc.cpp
+++ b/src/bitcoinrpc.cpp
@@ -21,7 +21,7 @@
 #include <boost/iostreams/stream.hpp>
 #include <boost/algorithm/string.hpp>
 #include <boost/lexical_cast.hpp>
-#include <boost/asio/ssl.hpp>
+#include <boost/asio/ssl.hpp>
 #include <boost/filesystem/fstream.hpp>
 typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SSLStream;
 
@@ -113,6 +113,33 @@ HexBits(unsigned int nBits)
     return HexStr(BEGIN(uBits.cBits), END(uBits.cBits));
 }
 
+void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out)
+{
+    txnouttype type;
+    //vector<CTxDestination> addresses;
+    vector<CBitcoinAddress> addresses;
+    int nRequired;
+
+    out.push_back(Pair("asm", scriptPubKey.ToString()));
+    out.push_back(Pair("hex", HexStr(scriptPubKey.begin(), scriptPubKey.end())));
+
+    ExtractAddresses(scriptPubKey, type, addresses, nRequired);
+    /**if (!ExtractDestinations(scriptPubKey, type, addresses, nRequired))
+    {
+        out.push_back(Pair("type", GetTxnOutputType(TX_NONSTANDARD)));
+        return;
+    }**/
+
+    out.push_back(Pair("reqSigs", nRequired));
+    out.push_back(Pair("type", GetTxnOutputType(type)));
+
+    Array a;
+    BOOST_FOREACH(const CBitcoinAddress& addr, addresses)
+        a.push_back(addr.ToString());
+    out.push_back(Pair("addresses", a));
+
+}
+
 void WalletTxToJSON(const CWalletTx& wtx, Object& entry)
 {
     int confirms = wtx.GetDepthInMainChain();
@@ -172,6 +199,63 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPri
     return result;
 }
 
+void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry)
+{
+    entry.push_back(Pair("txid", tx.GetHash().GetHex()));
+    entry.push_back(Pair("version", tx.nVersion));
+    entry.push_back(Pair("locktime", (boost::int64_t)tx.nLockTime));
+    Array vin;
+    BOOST_FOREACH(const CTxIn& txin, tx.vin)
+    {
+        Object in;
+        if (tx.IsCoinBase())
+            in.push_back(Pair("coinbase", HexStr(txin.scriptSig.begin(), txin.scriptSig.end())));
+        else
+        {
+            in.push_back(Pair("txid", txin.prevout.hash.GetHex()));
+            in.push_back(Pair("vout", (boost::int64_t)txin.prevout.n));
+            Object o;
+            o.push_back(Pair("asm", txin.scriptSig.ToString()));
+            o.push_back(Pair("hex", HexStr(txin.scriptSig.begin(), txin.scriptSig.end())));
+            in.push_back(Pair("scriptSig", o));
+        }
+        in.push_back(Pair("sequence", (boost::int64_t)txin.nSequence));
+        vin.push_back(in);
+    }
+    entry.push_back(Pair("vin", vin));
+    Array vout;
+    for (unsigned int i = 0; i < tx.vout.size(); i++)
+    {
+        const CTxOut& txout = tx.vout[i];
+        Object out;
+        out.push_back(Pair("value", ValueFromAmount(txout.nValue)));
+        out.push_back(Pair("n", (boost::int64_t)i));
+        Object o;
+        ScriptPubKeyToJSON(txout.scriptPubKey, o);
+        out.push_back(Pair("scriptPubKey", o));
+        vout.push_back(out);
+    }
+    entry.push_back(Pair("vout", vout));
+
+    if (hashBlock != 0)
+    {
+        entry.push_back(Pair("blockhash", hashBlock.GetHex()));
+        map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock);
+        if (mi != mapBlockIndex.end() && (*mi).second)
+        {
+            CBlockIndex* pindex = (*mi).second;
+            if (pindex->IsInMainChain())
+            {
+                entry.push_back(Pair("confirmations", 1 + nBestHeight - pindex->nHeight));
+                entry.push_back(Pair("time", (boost::int64_t)pindex->nTime));
+                entry.push_back(Pair("blocktime", (boost::int64_t)pindex->nTime));
+            }
+            else
+                entry.push_back(Pair("confirmations", 0));
+        }
+     }
+  }
+
 
 
 ///
@@ -425,6 +509,133 @@ Value getnewaddress(const Array& params, bool fHelp)
 }
 
 
+Value getrawtransaction(const Array& params, bool fHelp) {
+ if (fHelp || params.size() < 1 || params.size() > 2)
+        throw runtime_error(
+            "getrawtransaction <txid> [verbose=0]\n"
+            "If verbose=0, returns a string that is "
+            "serialized, hex-encoded data for <txid>. "
+            "If verbose is non-zero, returns an Object "
+            "with information about <txid>.");
+
+ uint256 hash;
+ hash.SetHex(params[0].get_str());
+ bool fVerbose = false;
+ if (params.size() > 1) fVerbose = (params[1].get_int() != 0);
+
+ CTransaction tx;
+ uint256 hashBlock = 0; //Block which contained the tx.
+ if (!GetTransaction(hash, tx, hashBlock))
+    throw JSONRPCError(-5, "No information available about transaction");
+
+  CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
+    ssTx << tx;
+    string strHex = HexStr(ssTx.begin(), ssTx.end());
+
+    if (!fVerbose)
+        return strHex;
+
+    Object result;
+    result.push_back(Pair("hex", strHex));
+    //TxToJSON(tx, hashBlock, result);
+    return result;
+}
+
+Value listunspent(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() > 3)
+        throw runtime_error(
+            "listunspent [minconf=1] [maxconf=9999999]  [\"address\",...]\n"
+            "Returns array of unspent transaction outputs\n"
+            "with between minconf and maxconf (inclusive) confirmations.\n"
+            "Optionally filtered to only include txouts paid to specified addresses.\n"
+            "Results are an array of Objects, each of which has:\n"
+            "{txid, vout, scriptPubKey, amount, confirmations}");
+
+  Object result;
+  return result;
+}
+
+Value createrawtransaction(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() != 2)
+        throw runtime_error(
+            "createrawtransaction [{\"txid\":txid,\"vout\":n},...] {address:amount,...}\n"
+            "Create a transaction spending given inputs\n"
+            "(array of objects containing transaction id and output number),\n"
+            "sending to given address(es).\n"
+            "Returns hex-encoded raw transaction.\n"
+            "Note that the transaction's inputs are not signed, and\n"
+            "it is not stored in the wallet or transmitted to the network.");
+
+   Object result;
+   return result;
+}
+
+Value signrawtransaction(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() < 1 || params.size() > 4)
+        throw runtime_error(
+            "signrawtransaction <hex string> [{\"txid\":txid,\"vout\":n,\"scriptPubKey\":hex},...] [<privatekey1>,...] [sighashtype=\"ALL\"]\n"
+            "Sign inputs for raw transaction (serialized, hex-encoded).\n"
+            "Second optional argument (may be null) is an array of previous transaction outputs that\n"
+            "this transaction depends on but may not yet be in the blockchain.\n"
+            "Third optional argument (may be null) is an array of base58-encoded private\n"
+            "keys that, if given, will be the only keys used to sign the transaction.\n"
+            "Fourth optional argument is a string that is one of six values; ALL, NONE, SINGLE or\n"
+            "ALL|ANYONECANPAY, NONE|ANYONECANPAY, SINGLE|ANYONECANPAY.\n"
+            "Returns json object with keys:\n"
+            "  hex : raw transaction with signature(s) (hex-encoded string)\n"
+            "  complete : 1 if transaction has a complete set of signature (0 if not)"
+            "UPDATE ME");
+
+
+    Object result;
+
+    return result;
+}
+
+Value sendrawtransaction(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() < 1 || params.size() > 1)
+        throw runtime_error(
+            "sendrawtransaction <hex string>\n"
+            "Submits raw transaction (serialized, hex-encoded) to local node and network.");
+  Object result;
+
+  return result;
+}
+
+Value decoderawtransaction(const Array& params, bool fHelp)
+{
+  if (fHelp || params.size() != 1)
+        throw runtime_error(
+            "decoderawtransaction <hex string>\n"
+            "Return a JSON object representing the serialized, hex-encoded transaction.");
+   //RPCTypeCheck(params, list_of(str_type));
+
+    vector<unsigned char> txData(ParseHex(params[0].get_str()));
+    CDataStream ssData(txData, SER_NETWORK, PROTOCOL_VERSION);
+    CTransaction tx;
+    try {
+        ssData >> tx;
+    }
+    catch (std::exception &e) {
+        throw JSONRPCError(-22, "TX decode failed");
+    }
+
+    Object result;
+    TxToJSON(tx, 0, result);
+
+    return result;
+
+
+}
+
+
+
+
+
 CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false)
 {
     CWalletDB walletdb(pwalletMain->strWalletFile);
@@ -976,7 +1187,7 @@ Value sendmany(const Array& params, bool fHelp)
 
         CScript scriptPubKey;
         scriptPubKey.SetBitcoinAddress(address);
-        int64 nAmount = AmountFromValue(s.value_);
+        int64 nAmount = AmountFromValue(s.value_);
         if (nAmount < MIN_TXOUT_AMOUNT)
             throw JSONRPCError(-101, "Send amount too small");
         totalAmount += nAmount;
@@ -1361,7 +1572,7 @@ Value listtransactions(const Array& params, bool fHelp)
         if (ret.size() >= (nCount+nFrom)) break;
     }
     // ret is newest to oldest
-   
+
     if (nFrom > (int)ret.size())
         nFrom = ret.size();
     if ((nFrom + nCount) > (int)ret.size())
@@ -2043,9 +2254,9 @@ Value getcheckpoint(const Array& params, bool fHelp)
 
     Object result;
     CBlockIndex* pindexCheckpoint;
-   
+
     result.push_back(Pair("synccheckpoint", Checkpoints::hashSyncCheckpoint.ToString().c_str()));
-    pindexCheckpoint = mapBlockIndex[Checkpoints::hashSyncCheckpoint];       
+    pindexCheckpoint = mapBlockIndex[Checkpoints::hashSyncCheckpoint];
     result.push_back(Pair("height", pindexCheckpoint->nHeight));
     result.push_back(Pair("timestamp", DateTimeStrFormat(pindexCheckpoint->GetBlockTime()).c_str()));
     if (mapArgs.count("-checkpointkey"))
@@ -2154,7 +2365,7 @@ Value makekeypair(const Array& params, bool fHelp)
     string strPrefix = "";
     if (params.size() > 0)
         strPrefix = params[0].get_str();
-
+
     CKey key;
     int nCount = 0;
     do
@@ -2176,7 +2387,7 @@ Value makekeypair(const Array& params, bool fHelp)
 extern CCriticalSection cs_mapAlerts;
 extern map<uint256, CAlert> mapAlerts;
 
-// ppcoin: send alert. 
+// ppcoin: send alert.
 // There is a known deadlock situation with ThreadMessageHandler
 // ThreadMessageHandler: holds cs_vSend and acquiring cs_main in SendMessages()
 // ThreadRPCServer: holds cs_main and acquiring cs_vSend in alert.RelayTo()/PushMessage()/BeginMessage()
@@ -2211,13 +2422,13 @@ Value sendalert(const Array& params, bool fHelp)
     CDataStream sMsg(SER_NETWORK, PROTOCOL_VERSION);
     sMsg << (CUnsignedAlert)alert;
     alert.vchMsg = vector<unsigned char>(sMsg.begin(), sMsg.end());
-   
+
     vector<unsigned char> vchPrivKey = ParseHex(params[1].get_str());
     key.SetPrivKey(CPrivKey(vchPrivKey.begin(), vchPrivKey.end())); // if key is not correct openssl may crash
     if (!key.Sign(Hash(alert.vchMsg.begin(), alert.vchMsg.end()), alert.vchSig))
         throw runtime_error(
-            "Unable to sign alert, check private key?\n"); 
-    if(!alert.ProcessAlert())
+            "Unable to sign alert, check private key?\n");
+    if(!alert.ProcessAlert())
         throw runtime_error(
             "Failed to process alert.\n");
     // Relay alert
@@ -2301,6 +2512,12 @@ static const CRPCCommand vRPCCommands[] =
     { "repairwallet",           &repairwallet,           false},
     { "makekeypair",            &makekeypair,            false},
     { "sendalert",              &sendalert,              false},
+    { "getrawtransaction",      &getrawtransaction,      false},
+    { "listunspent",            &listunspent,            false},
+    { "createrawtransaction",   &createrawtransaction,   false},
+    { "signrawtransaction",     &signrawtransaction,     false},
+    { "sendrawtransaction",     &sendrawtransaction,     false},
+    { "decoderawtransaction",   &decoderawtransaction,   false},
 };
 
 CRPCTable::CRPCTable()
@@ -2849,15 +3066,19 @@ Object CallRPC(const string& strMethod, const Array& params)
 
 
 template<typename T>
-void ConvertTo(Value& value)
+void ConvertTo(Value& value, bool fAllowNull=false)
 {
+    if (fAllowNull && value.type() == null_type)
+        return;
     if (value.type() == str_type)
     {
         // reinterpret string as unquoted json value
         Value value2;
-        if (!read_string(value.get_str(), value2))
-            throw runtime_error("type mismatch");
-        value = value2.get_value<T>();
+        string strJSON = value.get_str();
+        if (!read_string(strJSON, value2))
+            throw runtime_error(string("Error parsing JSON:")+strJSON);
+        ConvertTo<T>(value2, fAllowNull);
+        value = value2;
     }
     else
     {
@@ -2940,6 +3161,15 @@ int CommandLineRPC(int argc, char *argv[])
                 throw runtime_error("type mismatch "+s);
             params[1] = v.get_array();
         }
+        if (strMethod == "listunspent"            && n > 0) ConvertTo<boost::int64_t>(params[0]);
+        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 == "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);
+        if (strMethod == "signrawtransaction"     && n > 2) ConvertTo<Array>(params[2], true);
+
 
         // Execute
         Object reply = CallRPC(strMethod, params);
diff --git a/src/main.cpp b/src/main.cpp
index a419f7f..6f0603d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -133,6 +133,33 @@ void static SyncWithWallets(const CTransaction& tx, const CBlock* pblock = NULL,
         pwallet->AddToWalletIfInvolvingMe(tx, pblock, fUpdate);
 }
 
+// Return transaction in tx, and if it was found inside a block, its hash is placed in hashBlock
+bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock)
+{
+    {
+        LOCK(cs_main);
+        {
+            LOCK(mempool.cs);
+            if (mempool.exists(hash))
+            {
+                tx = mempool.lookup(hash);
+                return true;
+            }
+        }
+        CTxDB txdb("r");
+        CTxIndex txindex;
+        if (tx.ReadFromDisk(txdb, COutPoint(hash, 0), txindex))
+        {
+            CBlock block;
+            if (block.ReadFromDisk(txindex.pos.nFile, txindex.pos.nBlockPos, false))
+                hashBlock = block.GetHash();
+            return true;
+        }
+    }
+    return false;
+}
+
+
 // notify wallets about a new best chain
 void static SetBestChain(const CBlockLocator& loc)
 {
@@ -1683,7 +1710,7 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew)
 //          more difficult
 //   txPrev.block.nTime: prevent nodes from guessing a good timestamp to
 //                       generate transaction for future advantage
-//   txPrev.offset: offset of txPrev inside block, to reduce the chance of
+//   txPrev.offset: offset of txPrev inside block, to reduce the chance of
 //                  nodes generating coinstake at the same time
 //   txPrev.nTime: reduce the chance of nodes generating coinstake at the same
 //                 time
@@ -1697,7 +1724,7 @@ bool CTransaction::CheckProofOfStake(unsigned int nBits) const
 {
     CBigNum bnTargetPerCoinDay;
     bnTargetPerCoinDay.SetCompact(nBits);
-
+
     if (!IsCoinStake())
         return true;
 
@@ -1739,7 +1766,7 @@ bool CTransaction::CheckProofOfStake(unsigned int nBits) const
 // ppcoin: total coin age spent in transaction, in the unit of coin-days.
 // Only those coins meeting minimum age requirement counts. As those
 // transactions not in main chain are not currently indexed so we
-// might not find out about their coin age. Older transactions are
+// might not find out about their coin age. Older transactions are
 // guaranteed to be in main chain by sync-checkpoint. This rule is
 // introduced to help nodes establish a consistent view of the coin
 // age (trust score) of competing branches.
@@ -1817,7 +1844,7 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos)
     if (!pindexNew)
         return error("AddToBlockIndex() : new CBlockIndex failed");
     map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first;
-    if (pindexNew->fProofOfStake)
+    if (pindexNew->fProofOfStake)
         setStakeSeen.insert(make_pair(pindexNew->prevoutStake, pindexNew->nStakeTime));
 
     pindexNew->phashBlock = &((*mi).first);
@@ -1910,7 +1937,7 @@ bool CBlock::CheckBlock() const
 
     // Check coinbase reward
     if (vtx[0].GetValueOut() > (IsProofOfWork()? (GetProofOfWorkReward(nBits) - vtx[0].GetMinFee() + MIN_TX_FEE) : 0))
-        return DoS(50, error("CheckBlock() : coinbase reward exceeded %s > %s",
+        return DoS(50, error("CheckBlock() : coinbase reward exceeded %s > %s",
                    FormatMoney(vtx[0].GetValueOut()).c_str(),
                    FormatMoney(IsProofOfWork()? GetProofOfWorkReward(nBits) : 0).c_str()));
 
@@ -2433,7 +2460,7 @@ void PrintBlockTree()
 map<uint256, CAlert> mapAlerts;
 CCriticalSection cs_mapAlerts;
 
-static string strMintMessage = _("Info: Minting suspended due to locked wallet.");
+static string strMintMessage = _("Info: Minting suspended due to locked wallet.");
 static string strMintWarning;
 
 string GetWarnings(string strFor)
@@ -2882,7 +2909,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
                         // and we want it right after the last block so they don't
                         // wait for other stuff first.
                         // ppcoin: send latest proof-of-work block to allow the
-                        // download node to accept as orphan (proof-of-stake
+                        // download node to accept as orphan (proof-of-stake
                         // block might be rejected by stake connection check)
                         vector<CInv> vInv;
                         vInv.push_back(CInv(MSG_BLOCK, GetLastBlockIndex(pindexBest, false)->GetBlockHash()));
@@ -3959,7 +3986,7 @@ void BitcoinMiner(CWallet *pwallet, bool fProofOfStake)
                     continue;
                 }
                 strMintWarning = "";
-                printf("CPUMiner : proof-of-stake block found %s\n", pblock->GetHash().ToString().c_str());
+                printf("CPUMiner : proof-of-stake block found %s\n", pblock->GetHash().ToString().c_str());
                 SetThreadPriority(THREAD_PRIORITY_NORMAL);
                 CheckWork(pblock.get(), *pwalletMain, reservekey);
                 SetThreadPriority(THREAD_PRIORITY_LOWEST);
diff --git a/src/main.h b/src/main.h
index 60e4832..c5ab56d 100644
--- a/src/main.h
+++ b/src/main.h
@@ -119,8 +119,7 @@ std::string GetWarnings(std::string strFor);
 uint256 WantedByOrphan(const CBlock* pblockOrphan);
 const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfStake);
 void BitcoinMiner(CWallet *pwallet, bool fProofOfStake);
-
-
+bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock);
 
 
 
@@ -856,7 +855,7 @@ public:
         return !(a == b);
     }
     int GetDepthInMainChain() const;
-
+
 };
 

Codemonkey:

Thanks for the patch, we are nearly there.
Unfortunately this patch does not send back the verbose output that we use for bitcoind and litecoind.

Code:
# ~/git/ppcoin/src$ ./ppcoind getrawtransaction 91d2f49cf53a92010bf46428b4d15f21213291a9f37d0cdd9358473abb58629f 1
{
    "hex" : "01000000b851785001b1e2c809e1783060da96dec47e014273ac3e74d1b353da95f2194165af99b045000000006b483045022100f3d6c5f298b245e07139ac8c9c5aec3e24e0a4ee259675cfb89255c0bc4f637202200ae54063969eb6474b59cff90fe65b5eec8abf75acf08207dcbf7b4eef2426be0121032f9b5ddfc4207549f3c6831edac8e9fa5ad14070a0f2bf958a9f79cddfcd3085ffffffff02d0344a59020000001976a91460a611543f000e04f5a3d44027ef14cc9540316a88ac40420f00000000001976a91449314cc24bbdc74882bcd1180142a584700e036988ac00000000"
}

is it possible to enable this ?



Aha, I can have a look but wont be until Monday, let me exact what idm making a patch if it's relatively simple (sounds like it is).  What exactly do you mean? You've looked at decoderawtransaction right?
288  Alternate cryptocurrencies / Altcoin Discussion / Re: Should SatoshiRoulette.com add PPC support on: October 12, 2012, 05:42:18 PM
Code Monkey:
Quote
unfortunately the current version of ppcoind does not support the rpc command getrawtranasction

As has been explained to me, with that feature missing we cannot support ppcoin at this time with our engine, but we now have games and ppcoins ready for when it is supported.

Hi

Here's a patch for getrawtransaction.

Next release will be forked from bitcoin 0.7.0 as I understand so no patch will be required.

Andy


Code:
diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp
index 3c39a30..adaedae 100644
--- a/src/bitcoinrpc.cpp
+++ b/src/bitcoinrpc.cpp
@@ -21,7 +21,7 @@
 #include <boost/iostreams/stream.hpp>
 #include <boost/algorithm/string.hpp>
 #include <boost/lexical_cast.hpp>
-#include <boost/asio/ssl.hpp>
+#include <boost/asio/ssl.hpp>
 #include <boost/filesystem/fstream.hpp>
 typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SSLStream;
 
@@ -113,6 +113,33 @@ HexBits(unsigned int nBits)
     return HexStr(BEGIN(uBits.cBits), END(uBits.cBits));
 }
 
+void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out)
+{
+    txnouttype type;
+    //vector<CTxDestination> addresses;
+    vector<CBitcoinAddress> addresses;
+    int nRequired;
+
+    out.push_back(Pair("asm", scriptPubKey.ToString()));
+    out.push_back(Pair("hex", HexStr(scriptPubKey.begin(), scriptPubKey.end())));
+
+    ExtractAddresses(scriptPubKey, type, addresses, nRequired);
+    /**if (!ExtractDestinations(scriptPubKey, type, addresses, nRequired))
+    {
+        out.push_back(Pair("type", GetTxnOutputType(TX_NONSTANDARD)));
+        return;
+    }**/
+
+    out.push_back(Pair("reqSigs", nRequired));
+    out.push_back(Pair("type", GetTxnOutputType(type)));
+
+    Array a;
+    BOOST_FOREACH(const CBitcoinAddress& addr, addresses)
+        a.push_back(addr.ToString());
+    out.push_back(Pair("addresses", a));
+
+}
+
 void WalletTxToJSON(const CWalletTx& wtx, Object& entry)
 {
     int confirms = wtx.GetDepthInMainChain();
@@ -172,6 +199,63 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPri
     return result;
 }
 
+void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry)
+{
+    entry.push_back(Pair("txid", tx.GetHash().GetHex()));
+    entry.push_back(Pair("version", tx.nVersion));
+    entry.push_back(Pair("locktime", (boost::int64_t)tx.nLockTime));
+    Array vin;
+    BOOST_FOREACH(const CTxIn& txin, tx.vin)
+    {
+        Object in;
+        if (tx.IsCoinBase())
+            in.push_back(Pair("coinbase", HexStr(txin.scriptSig.begin(), txin.scriptSig.end())));
+        else
+        {
+            in.push_back(Pair("txid", txin.prevout.hash.GetHex()));
+            in.push_back(Pair("vout", (boost::int64_t)txin.prevout.n));
+            Object o;
+            o.push_back(Pair("asm", txin.scriptSig.ToString()));
+            o.push_back(Pair("hex", HexStr(txin.scriptSig.begin(), txin.scriptSig.end())));
+            in.push_back(Pair("scriptSig", o));
+        }
+        in.push_back(Pair("sequence", (boost::int64_t)txin.nSequence));
+        vin.push_back(in);
+    }
+    entry.push_back(Pair("vin", vin));
+    Array vout;
+    for (unsigned int i = 0; i < tx.vout.size(); i++)
+    {
+        const CTxOut& txout = tx.vout[i];
+        Object out;
+        out.push_back(Pair("value", ValueFromAmount(txout.nValue)));
+        out.push_back(Pair("n", (boost::int64_t)i));
+        Object o;
+        ScriptPubKeyToJSON(txout.scriptPubKey, o);
+        out.push_back(Pair("scriptPubKey", o));
+        vout.push_back(out);
+    }
+    entry.push_back(Pair("vout", vout));
+
+    if (hashBlock != 0)
+    {
+        entry.push_back(Pair("blockhash", hashBlock.GetHex()));
+        map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(hashBlock);
+        if (mi != mapBlockIndex.end() && (*mi).second)
+        {
+            CBlockIndex* pindex = (*mi).second;
+            if (pindex->IsInMainChain())
+            {
+                entry.push_back(Pair("confirmations", 1 + nBestHeight - pindex->nHeight));
+                entry.push_back(Pair("time", (boost::int64_t)pindex->nTime));
+                entry.push_back(Pair("blocktime", (boost::int64_t)pindex->nTime));
+            }
+            else
+                entry.push_back(Pair("confirmations", 0));
+        }
+     }
+  }
+
 
 
 ///
@@ -425,6 +509,133 @@ Value getnewaddress(const Array& params, bool fHelp)
 }
 
 
+Value getrawtransaction(const Array& params, bool fHelp) {
+ if (fHelp || params.size() < 1 || params.size() > 2)
+        throw runtime_error(
+            "getrawtransaction <txid> [verbose=0]\n"
+            "If verbose=0, returns a string that is "
+            "serialized, hex-encoded data for <txid>. "
+            "If verbose is non-zero, returns an Object "
+            "with information about <txid>.");
+
+ uint256 hash;
+ hash.SetHex(params[0].get_str());
+ bool fVerbose = false;
+ if (params.size() > 1) fVerbose = (params[1].get_int() != 0);
+
+ CTransaction tx;
+ uint256 hashBlock = 0; //Block which contained the tx.
+ if (!GetTransaction(hash, tx, hashBlock))
+    throw JSONRPCError(-5, "No information available about transaction");
+
+  CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
+    ssTx << tx;
+    string strHex = HexStr(ssTx.begin(), ssTx.end());
+
+    if (!fVerbose)
+        return strHex;
+
+    Object result;
+    result.push_back(Pair("hex", strHex));
+    //TxToJSON(tx, hashBlock, result);
+    return result;
+}
+
+Value listunspent(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() > 3)
+        throw runtime_error(
+            "listunspent [minconf=1] [maxconf=9999999]  [\"address\",...]\n"
+            "Returns array of unspent transaction outputs\n"
+            "with between minconf and maxconf (inclusive) confirmations.\n"
+            "Optionally filtered to only include txouts paid to specified addresses.\n"
+            "Results are an array of Objects, each of which has:\n"
+            "{txid, vout, scriptPubKey, amount, confirmations}");
+
+  Object result;
+  return result;
+}
+
+Value createrawtransaction(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() != 2)
+        throw runtime_error(
+            "createrawtransaction [{\"txid\":txid,\"vout\":n},...] {address:amount,...}\n"
+            "Create a transaction spending given inputs\n"
+            "(array of objects containing transaction id and output number),\n"
+            "sending to given address(es).\n"
+            "Returns hex-encoded raw transaction.\n"
+            "Note that the transaction's inputs are not signed, and\n"
+            "it is not stored in the wallet or transmitted to the network.");
+
+   Object result;
+   return result;
+}
+
+Value signrawtransaction(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() < 1 || params.size() > 4)
+        throw runtime_error(
+            "signrawtransaction <hex string> [{\"txid\":txid,\"vout\":n,\"scriptPubKey\":hex},...] [<privatekey1>,...] [sighashtype=\"ALL\"]\n"
+            "Sign inputs for raw transaction (serialized, hex-encoded).\n"
+            "Second optional argument (may be null) is an array of previous transaction outputs that\n"
+            "this transaction depends on but may not yet be in the blockchain.\n"
+            "Third optional argument (may be null) is an array of base58-encoded private\n"
+            "keys that, if given, will be the only keys used to sign the transaction.\n"
+            "Fourth optional argument is a string that is one of six values; ALL, NONE, SINGLE or\n"
+            "ALL|ANYONECANPAY, NONE|ANYONECANPAY, SINGLE|ANYONECANPAY.\n"
+            "Returns json object with keys:\n"
+            "  hex : raw transaction with signature(s) (hex-encoded string)\n"
+            "  complete : 1 if transaction has a complete set of signature (0 if not)"
+            "UPDATE ME");
+
+
+    Object result;
+
+    return result;
+}
+
+Value sendrawtransaction(const Array& params, bool fHelp)
+{
+    if (fHelp || params.size() < 1 || params.size() > 1)
+        throw runtime_error(
+            "sendrawtransaction <hex string>\n"
+            "Submits raw transaction (serialized, hex-encoded) to local node and network.");
+  Object result;
+
+  return result;
+}
+
+Value decoderawtransaction(const Array& params, bool fHelp)
+{
+  if (fHelp || params.size() != 1)
+        throw runtime_error(
+            "decoderawtransaction <hex string>\n"
+            "Return a JSON object representing the serialized, hex-encoded transaction.");
+   //RPCTypeCheck(params, list_of(str_type));
+
+    vector<unsigned char> txData(ParseHex(params[0].get_str()));
+    CDataStream ssData(txData, SER_NETWORK, PROTOCOL_VERSION);
+    CTransaction tx;
+    try {
+        ssData >> tx;
+    }
+    catch (std::exception &e) {
+        throw JSONRPCError(-22, "TX decode failed");
+    }
+
+    Object result;
+    TxToJSON(tx, 0, result);
+
+    return result;
+
+
+}
+
+
+
+
+
 CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false)
 {
     CWalletDB walletdb(pwalletMain->strWalletFile);
@@ -976,7 +1187,7 @@ Value sendmany(const Array& params, bool fHelp)
 
         CScript scriptPubKey;
         scriptPubKey.SetBitcoinAddress(address);
-        int64 nAmount = AmountFromValue(s.value_);
+        int64 nAmount = AmountFromValue(s.value_);
         if (nAmount < MIN_TXOUT_AMOUNT)
             throw JSONRPCError(-101, "Send amount too small");
         totalAmount += nAmount;
@@ -1361,7 +1572,7 @@ Value listtransactions(const Array& params, bool fHelp)
         if (ret.size() >= (nCount+nFrom)) break;
     }
     // ret is newest to oldest
-   
+
     if (nFrom > (int)ret.size())
         nFrom = ret.size();
     if ((nFrom + nCount) > (int)ret.size())
@@ -2043,9 +2254,9 @@ Value getcheckpoint(const Array& params, bool fHelp)
 
     Object result;
     CBlockIndex* pindexCheckpoint;
-   
+
     result.push_back(Pair("synccheckpoint", Checkpoints::hashSyncCheckpoint.ToString().c_str()));
-    pindexCheckpoint = mapBlockIndex[Checkpoints::hashSyncCheckpoint];       
+    pindexCheckpoint = mapBlockIndex[Checkpoints::hashSyncCheckpoint];
     result.push_back(Pair("height", pindexCheckpoint->nHeight));
     result.push_back(Pair("timestamp", DateTimeStrFormat(pindexCheckpoint->GetBlockTime()).c_str()));
     if (mapArgs.count("-checkpointkey"))
@@ -2154,7 +2365,7 @@ Value makekeypair(const Array& params, bool fHelp)
     string strPrefix = "";
     if (params.size() > 0)
         strPrefix = params[0].get_str();
-
+
     CKey key;
     int nCount = 0;
     do
@@ -2176,7 +2387,7 @@ Value makekeypair(const Array& params, bool fHelp)
 extern CCriticalSection cs_mapAlerts;
 extern map<uint256, CAlert> mapAlerts;
 
-// ppcoin: send alert. 
+// ppcoin: send alert.
 // There is a known deadlock situation with ThreadMessageHandler
 // ThreadMessageHandler: holds cs_vSend and acquiring cs_main in SendMessages()
 // ThreadRPCServer: holds cs_main and acquiring cs_vSend in alert.RelayTo()/PushMessage()/BeginMessage()
@@ -2211,13 +2422,13 @@ Value sendalert(const Array& params, bool fHelp)
     CDataStream sMsg(SER_NETWORK, PROTOCOL_VERSION);
     sMsg << (CUnsignedAlert)alert;
     alert.vchMsg = vector<unsigned char>(sMsg.begin(), sMsg.end());
-   
+
     vector<unsigned char> vchPrivKey = ParseHex(params[1].get_str());
     key.SetPrivKey(CPrivKey(vchPrivKey.begin(), vchPrivKey.end())); // if key is not correct openssl may crash
     if (!key.Sign(Hash(alert.vchMsg.begin(), alert.vchMsg.end()), alert.vchSig))
         throw runtime_error(
-            "Unable to sign alert, check private key?\n"); 
-    if(!alert.ProcessAlert())
+            "Unable to sign alert, check private key?\n");
+    if(!alert.ProcessAlert())
         throw runtime_error(
             "Failed to process alert.\n");
     // Relay alert
@@ -2301,6 +2512,12 @@ static const CRPCCommand vRPCCommands[] =
     { "repairwallet",           &repairwallet,           false},
     { "makekeypair",            &makekeypair,            false},
     { "sendalert",              &sendalert,              false},
+    { "getrawtransaction",      &getrawtransaction,      false},
+    { "listunspent",            &listunspent,            false},
+    { "createrawtransaction",   &createrawtransaction,   false},
+    { "signrawtransaction",     &signrawtransaction,     false},
+    { "sendrawtransaction",     &sendrawtransaction,     false},
+    { "decoderawtransaction",   &decoderawtransaction,   false},
 };
 
 CRPCTable::CRPCTable()
@@ -2849,15 +3066,19 @@ Object CallRPC(const string& strMethod, const Array& params)
 
 
 template<typename T>
-void ConvertTo(Value& value)
+void ConvertTo(Value& value, bool fAllowNull=false)
 {
+    if (fAllowNull && value.type() == null_type)
+        return;
     if (value.type() == str_type)
     {
         // reinterpret string as unquoted json value
         Value value2;
-        if (!read_string(value.get_str(), value2))
-            throw runtime_error("type mismatch");
-        value = value2.get_value<T>();
+        string strJSON = value.get_str();
+        if (!read_string(strJSON, value2))
+            throw runtime_error(string("Error parsing JSON:")+strJSON);
+        ConvertTo<T>(value2, fAllowNull);
+        value = value2;
     }
     else
     {
@@ -2940,6 +3161,15 @@ int CommandLineRPC(int argc, char *argv[])
                 throw runtime_error("type mismatch "+s);
             params[1] = v.get_array();
         }
+        if (strMethod == "listunspent"            && n > 0) ConvertTo<boost::int64_t>(params[0]);
+        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 == "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);
+        if (strMethod == "signrawtransaction"     && n > 2) ConvertTo<Array>(params[2], true);
+
 
         // Execute
         Object reply = CallRPC(strMethod, params);
diff --git a/src/main.cpp b/src/main.cpp
index a419f7f..6f0603d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -133,6 +133,33 @@ void static SyncWithWallets(const CTransaction& tx, const CBlock* pblock = NULL,
         pwallet->AddToWalletIfInvolvingMe(tx, pblock, fUpdate);
 }
 
+// Return transaction in tx, and if it was found inside a block, its hash is placed in hashBlock
+bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock)
+{
+    {
+        LOCK(cs_main);
+        {
+            LOCK(mempool.cs);
+            if (mempool.exists(hash))
+            {
+                tx = mempool.lookup(hash);
+                return true;
+            }
+        }
+        CTxDB txdb("r");
+        CTxIndex txindex;
+        if (tx.ReadFromDisk(txdb, COutPoint(hash, 0), txindex))
+        {
+            CBlock block;
+            if (block.ReadFromDisk(txindex.pos.nFile, txindex.pos.nBlockPos, false))
+                hashBlock = block.GetHash();
+            return true;
+        }
+    }
+    return false;
+}
+
+
 // notify wallets about a new best chain
 void static SetBestChain(const CBlockLocator& loc)
 {
@@ -1683,7 +1710,7 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew)
 //          more difficult
 //   txPrev.block.nTime: prevent nodes from guessing a good timestamp to
 //                       generate transaction for future advantage
-//   txPrev.offset: offset of txPrev inside block, to reduce the chance of
+//   txPrev.offset: offset of txPrev inside block, to reduce the chance of
 //                  nodes generating coinstake at the same time
 //   txPrev.nTime: reduce the chance of nodes generating coinstake at the same
 //                 time
@@ -1697,7 +1724,7 @@ bool CTransaction::CheckProofOfStake(unsigned int nBits) const
 {
     CBigNum bnTargetPerCoinDay;
     bnTargetPerCoinDay.SetCompact(nBits);
-
+
     if (!IsCoinStake())
         return true;
 
@@ -1739,7 +1766,7 @@ bool CTransaction::CheckProofOfStake(unsigned int nBits) const
 // ppcoin: total coin age spent in transaction, in the unit of coin-days.
 // Only those coins meeting minimum age requirement counts. As those
 // transactions not in main chain are not currently indexed so we
-// might not find out about their coin age. Older transactions are
+// might not find out about their coin age. Older transactions are
 // guaranteed to be in main chain by sync-checkpoint. This rule is
 // introduced to help nodes establish a consistent view of the coin
 // age (trust score) of competing branches.
@@ -1817,7 +1844,7 @@ bool CBlock::AddToBlockIndex(unsigned int nFile, unsigned int nBlockPos)
     if (!pindexNew)
         return error("AddToBlockIndex() : new CBlockIndex failed");
     map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first;
-    if (pindexNew->fProofOfStake)
+    if (pindexNew->fProofOfStake)
         setStakeSeen.insert(make_pair(pindexNew->prevoutStake, pindexNew->nStakeTime));
 
     pindexNew->phashBlock = &((*mi).first);
@@ -1910,7 +1937,7 @@ bool CBlock::CheckBlock() const
 
     // Check coinbase reward
     if (vtx[0].GetValueOut() > (IsProofOfWork()? (GetProofOfWorkReward(nBits) - vtx[0].GetMinFee() + MIN_TX_FEE) : 0))
-        return DoS(50, error("CheckBlock() : coinbase reward exceeded %s > %s",
+        return DoS(50, error("CheckBlock() : coinbase reward exceeded %s > %s",
                    FormatMoney(vtx[0].GetValueOut()).c_str(),
                    FormatMoney(IsProofOfWork()? GetProofOfWorkReward(nBits) : 0).c_str()));
 
@@ -2433,7 +2460,7 @@ void PrintBlockTree()
 map<uint256, CAlert> mapAlerts;
 CCriticalSection cs_mapAlerts;
 
-static string strMintMessage = _("Info: Minting suspended due to locked wallet.");
+static string strMintMessage = _("Info: Minting suspended due to locked wallet.");
 static string strMintWarning;
 
 string GetWarnings(string strFor)
@@ -2882,7 +2909,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
                         // and we want it right after the last block so they don't
                         // wait for other stuff first.
                         // ppcoin: send latest proof-of-work block to allow the
-                        // download node to accept as orphan (proof-of-stake
+                        // download node to accept as orphan (proof-of-stake
                         // block might be rejected by stake connection check)
                         vector<CInv> vInv;
                         vInv.push_back(CInv(MSG_BLOCK, GetLastBlockIndex(pindexBest, false)->GetBlockHash()));
@@ -3959,7 +3986,7 @@ void BitcoinMiner(CWallet *pwallet, bool fProofOfStake)
                     continue;
                 }
                 strMintWarning = "";
-                printf("CPUMiner : proof-of-stake block found %s\n", pblock->GetHash().ToString().c_str());
+                printf("CPUMiner : proof-of-stake block found %s\n", pblock->GetHash().ToString().c_str());
                 SetThreadPriority(THREAD_PRIORITY_NORMAL);
                 CheckWork(pblock.get(), *pwalletMain, reservekey);
                 SetThreadPriority(THREAD_PRIORITY_LOWEST);
diff --git a/src/main.h b/src/main.h
index 60e4832..c5ab56d 100644
--- a/src/main.h
+++ b/src/main.h
@@ -119,8 +119,7 @@ std::string GetWarnings(std::string strFor);
 uint256 WantedByOrphan(const CBlock* pblockOrphan);
 const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfStake);
 void BitcoinMiner(CWallet *pwallet, bool fProofOfStake);
-
-
+bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock);
 
 
 
@@ -856,7 +855,7 @@ public:
         return !(a == b);
     }
     int GetDepthInMainChain() const;
-
+
 };
 
289  Alternate cryptocurrencies / Announcements (Altcoins) / Re: [ANN] [PPC] PPCoin Released! - First Long-Term Energy-Efficient Crypto-Currency on: October 12, 2012, 12:19:34 PM
We need PPC on https://btc-e.com/  Cheesy



+1, although doublec's bitparking exchange is still nice.  
290  Alternate cryptocurrencies / Altcoin Discussion / Re: PPcoin: Are there many people mining for PPC? on: October 11, 2012, 01:02:04 PM
Hi guys!

I was wondering, are there many people actually mining por PPC?
Just checked http://coinotron.com and in their pool there are (in this moment) 9 people mining.

So far as I can see PPCoin is relatively recent. At least according to http://www.proofofstake.com/ I can only see information for a couple of months only.
For now mining for PPC is kind of easy. However, it's value is very low. For example, in this very moment, comparing to BTC it has a value of 0.000173.

I can see some improvements have been made, and there's a PPC wallet software very similar to BTC wallet, which is very easy to use, both for Windows and Linux.
Windows: http://www.ppcointalk.org/index.php?q=node/15
Linux: https://bitcointalk.org/index.php?topic=101820.260

Do you think that many people will start mining for PPC?

Cheers!

I think it's a new currency, which, brings new things to the table Smiley.  Over the last month there have been quite a lot of people mining it. I think it's possible, to, from the difficulty figure out how much GH/s is being thrown at it at the moment - I think it's quite a bit.
291  Alternate cryptocurrencies / Altcoin Discussion / Re: Should SatoshiRoulette.com add PPC support on: October 11, 2012, 11:42:34 AM
I think it's a good idea, Smiley I cant think of a valid reason why not.

292  Alternate cryptocurrencies / Altcoin Discussion / Re: Bitparking PPCoin Exchange on: October 10, 2012, 09:27:10 PM
I think there's a slight bug on the withdrawal of PPC, if i copy / paste the max withdrawal amount it states to me, im left with 0.009 in my account Smiley I think the withdrawal for fee, that's coded is 10 times too small, as opposed to the one given to the user on the page.
293  Alternate cryptocurrencies / Altcoin Discussion / Re: PPCoin Aux Transactions Proposal on: October 10, 2012, 09:25:34 PM

Well just an idea of what a good aux chain for PPC might also do Smiley if I get enough time I might setup a MailCoin, where by mining gives you more credits to use the system, or you can buy them, it's distributed and encrypted. 


Sounds great so we can touch base again when you have more concrete plan and requirements  Smiley

Sounds good.  I'll start cracking together a few things.
294  Alternate cryptocurrencies / Altcoin Discussion / Re: PPC block explorer (WWW.PPCEXPLORE.ORG) on: October 10, 2012, 09:24:15 PM
Is there any chance on PoS blocks, we have a count of how many coins generated in PoS transaction in the top / header?
295  Alternate cryptocurrencies / Announcements (Altcoins) / Re: [ANN] [PPC] PPCoin Released! - First Long-Term Energy-Efficient Crypto-Currency on: October 10, 2012, 09:22:24 PM
woop thanks to doublec, ppc has now been actively traded on bitparking exchange for just over a month, with most days having volumes in the hundreds of thousands Smiley
296  Alternate cryptocurrencies / Altcoin Discussion / Re: [PPC] NothinG's Pool (Beta Testing) on: October 10, 2012, 09:20:25 PM
I am back, sorry I've been gone for so long. My laptop died and I couldn't get it to a working condition (took me almost 2 weeks to accept that my laptop was actually dead). After that, I decided to go ahead and start working on my new computer.

I just got all the parts in Friday, starting working on installing basic drivers and software (as well as going into Saturday after work). I'm still getting everything upgraded (software like filezilla, winscp, notepad++, and VS12) so I should be able to push out payments hopefully tomorrow if not, Tuesday.

good to hear!
297  Alternate cryptocurrencies / Altcoin Discussion / Re: ppcoin offline coinstake creation on: October 10, 2012, 10:57:50 AM
This was explained in the design paper, if block is not signed an attacker can reuse other blocks' coinstake in his own block.
I see. Even though the attacker would not get the benefit of the POS reward, he could utilize it as mining power. Is there a reason why the key for the coinstake transaction has to be the same as the key for block signing?

The signing key must belong to the stake owner. If in the future a separation of spending key and stake key can be implemented then block can be signed by stake owner's stake key.

Right, if we did this, how would this negate the positive effects of PoS vs a 51% attack?
298  Alternate cryptocurrencies / Altcoin Discussion / Re: PPC Charts on: October 08, 2012, 09:09:38 PM
Really nice charts and great work! I would love to see these charts added:
  • money supply
  • market capitalization


Market Cap, added Smiley

Note/Warning, currently this graph works based on avg price over hour, not avg weighted price (e.g. should really be avg(price*volume)/sum(volume) ), but does include PoS obv.  Will update this in future to be weighted in the next couple days.
299  Economy / Long-term offers / Re: > > > Sky Deposits (1.25%pw) > > > [30/60BTC available] on: October 08, 2012, 07:11:54 PM
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

1CAwfrfsdKuGJinjFbDEryu155uUdNHG95
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iQIcBAEBAgAGBQJQcv5IAAoJELgPbyyzoNmb3yYP/1/PpEOS8PQESSVNtMmusFp2
keHe2mVDjexZTzGIgvig92CDKIiK/5pAQ7zQnHEfVZf/OK0sya9e8cAdNEKcl1F6
bx+2BLibVdKsrOb+x3Lt2Oxt4mdsQ0fvAG3HY5UuS3JyHZfR4rPqC45VwJaIwfWv
meok/qx5px0gEjD4HCJozVjYhV9HFZLUpUbNT8NbRtxYcUDGb+kBI5b8PuaAEJrn
npoirSXrwMGKyGuHD6w2RyE8WGoqopURfuWiC2JweJK3rQFkO0wEQc+s682VTWFa
3fEE5ZHb66SbAL3nItx2B/wt59HDo/r7Vr/w9AHjpOTJHv+BrMlAdtfq66jya9Xi
ZYyXbweZ9RoKFZqx1w6n8lF6w/ffj1vH2dECGFRVy7qL2rrXHCkeS1u0oIhDd0/a
Py/GFGnpGfLkCFQJizQflqz0YcQkLP/gLhRRJLoCTSe6/goiiWE9noHMIK2TgsQL
ZIF2Y+M0gg+70h+WHRFzyFZBD1sXhHShUPiDuYH1wL17IzKLt9GKEFnU0QDNEB2z
s8V1rcRieSGQC9JARuYgcaqygns4anoHW0/U/kA64Ng9cSzyT4QNvPGa5o2afGXy
2oZufEb3zJWQIkdkJb18NfNUZhJXMMWUd95+aCKZtO6xW4x9kSN/orlAav3hIVjf
5rxZFGib3vGK/kXtEmDg
=U0AY
-----END PGP SIGNATURE-----
That's it. Smiley

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

30 BTC sent

Status: 0/not confirmed, broadcast through 6 node(s)
Date: 8 Oct 2012 17:40
To: Andy Rossy Deposit Address 1CAwfrfsdKuGJinjFbDEryu155uUdNHG95
Debit: -30.00 BTC
Net amount: -30.00 BTC
Transaction ID: b8c261e88ef1136b99399c23abd803305b587ffa94f503c7d6faff3238cceb2b

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAEBAgAGBQJQcwJPAAoJEIlXzn4OyzNEH1sP/joadLOYgCcW36dqDQ8RYfVw
mUApE2zVksZJryksnnaeYehpjUJYBYvXEE/Q3hQqUYDpW9+qI+90MvzrbpgE4YHf
OFWC77Ui43zmV+hN14jRlMnKVzY7ocZ7aGVu+ogQw21c66CJKWFgYR4myJcsdOZF
UxHksXtBeRi/JkgnOLlWHJzW3DNFrCVoo2nBnbCCVt0p4XJjFkhDie8GM5RR8yHe
G49NZt6YRKU/x9jMXZRNFDlT/FVFjFgCQ78912iqUBKZcDg/2zo08pfV0O6Az135
rDVGDbI9fG1ODC6hHfaEA6bDehvXJG7CXzlnX41IwrT4kNIDXRVYCdFRy5zhukfE
S+5PFY0ZDrD5FHRlcXmWbxXk4yUkQWUYQ3FY7dX12izm0oSIySdmQTIwVjVLs3C+
7scGdP3vNQBY7oZ2RcSZKD8X5Is4mI+6eGR3mikVuCOGu3LbBRPhwNz/rfU6Rm6v
L7wrx6CjfYSKODIgKdVqqs/MCXdF5ijd3Bsta1Vi70fINoSeiLuTV+IezAAyVyWj
eGQbDXDHMizj6VFW7YaAl2VW2tBJfBSaO2kYj6dpvnVIMoYnkTroAWJIIkH8w/qq
YIzy7IwCETuJW+db5U2o5AUOO9Fq2dTKXh5twZ28mRiDGlqwjGM3v3afIevcfhbC
gTuezmYOpg++Cry62mod
=L53A
-----END PGP SIGNATURE-----



Received, closed for deposits for now, will add waiting list.
300  Economy / Long-term offers / Re: > > > Sky Deposits (1.25%pw) > > > [30/60BTC available] on: October 08, 2012, 04:25:28 PM
That's not a signature. That's a message that can probably be decrypted only by yourself.



Sorry Smiley Im not a GPG expert I must admit.  I was using gpg -s -a

Here's the output from clearsign.  I assume this is what you want?

Andy

Code:
 echo "1CAwfrfsdKuGJinjFbDEryu155uUdNHG95" | gpg --clearsign

You need a passphrase to unlock the secret key for
user: "Andrew Ross <...@...>"
4096-bit RSA key, ID B3A0D99B, created 2012-07-25

gpg: gpg-agent is not available in this session
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

1CAwfrfsdKuGJinjFbDEryu155uUdNHG95
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iQIcBAEBAgAGBQJQcv5IAAoJELgPbyyzoNmb3yYP/1/PpEOS8PQESSVNtMmusFp2
keHe2mVDjexZTzGIgvig92CDKIiK/5pAQ7zQnHEfVZf/OK0sya9e8cAdNEKcl1F6
bx+2BLibVdKsrOb+x3Lt2Oxt4mdsQ0fvAG3HY5UuS3JyHZfR4rPqC45VwJaIwfWv
meok/qx5px0gEjD4HCJozVjYhV9HFZLUpUbNT8NbRtxYcUDGb+kBI5b8PuaAEJrn
npoirSXrwMGKyGuHD6w2RyE8WGoqopURfuWiC2JweJK3rQFkO0wEQc+s682VTWFa
3fEE5ZHb66SbAL3nItx2B/wt59HDo/r7Vr/w9AHjpOTJHv+BrMlAdtfq66jya9Xi
ZYyXbweZ9RoKFZqx1w6n8lF6w/ffj1vH2dECGFRVy7qL2rrXHCkeS1u0oIhDd0/a
Py/GFGnpGfLkCFQJizQflqz0YcQkLP/gLhRRJLoCTSe6/goiiWE9noHMIK2TgsQL
ZIF2Y+M0gg+70h+WHRFzyFZBD1sXhHShUPiDuYH1wL17IzKLt9GKEFnU0QDNEB2z
s8V1rcRieSGQC9JARuYgcaqygns4anoHW0/U/kA64Ng9cSzyT4QNvPGa5o2afGXy
2oZufEb3zJWQIkdkJb18NfNUZhJXMMWUd95+aCKZtO6xW4x9kSN/orlAav3hIVjf
5rxZFGib3vGK/kXtEmDg
=U0AY
-----END PGP SIGNATURE-----
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!