From 9bbbf24f430adad3278cb870a6c5b17476a65182 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 15 May 2012 20:28:29 -0700 Subject: [PATCH] Fix Claim transaction to prove authority. --- src/RPCServer.cpp | 13 ++++++++++--- src/SerializedObject.h | 2 +- src/Transaction.cpp | 15 +++++++++------ src/Transaction.h | 10 ++++++---- src/TransactionFormats.cpp | 3 ++- 5 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index 22c4b71e8..b8d53a884 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -668,7 +668,9 @@ Json::Value RPCServer::doWalletClaim(Json::Value& params) else { // Trying to build: - // peer_wallet_claim [] [] + // peer_wallet_claim + // [] + // // // Which has no confidential information. @@ -703,13 +705,18 @@ Json::Value RPCServer::doWalletClaim(Json::Value& params) // hash of regular account #reserved public key. uint160 uGeneratorID = naRegularReservedPublic.getAccountID(); std::vector vucGeneratorCipher = naRegularReservedPrivate.accountPrivateEncrypt(naRegularReservedPublic, naMasterGenerator.getFamilyGenerator()); + std::vector vucGeneratorSig; + + // XXX Check result. + naRegularReservedPrivate.accountPrivateSign(Serializer::getSHA512Half(vucGeneratorCipher), vucGeneratorSig); Transaction::pointer trns = Transaction::sharedClaim( naAccountPublic, naAccountPrivate, naAccountPublic, uSourceTag, - naRegularReservedPublic, // GeneratorID - vucGeneratorCipher); + vucGeneratorCipher, + naRegularReservedPublic.getAccountPublic(), + vucGeneratorSig); (void) theApp->getOPs().processTransaction(trns); diff --git a/src/SerializedObject.h b/src/SerializedObject.h index 9202717c0..d66ef2587 100644 --- a/src/SerializedObject.h +++ b/src/SerializedObject.h @@ -32,7 +32,7 @@ enum SOE_Field sfBorrower, sfLender, sfLimit, sfOfferCurrency, sfLedgerHash, sfLastReceive, sfLastTxn, sfNextRate, sfNextRateLgr, sfNextRateExp, sfNickname, sfMinimumOffer, - sfAuthorizedKey, sfGenerator, sfGeneratorID, sfAccountID, + sfAuthorizedKey, sfGenerator, sfPubKey, sfSignature, sfGeneratorID, sfAccountID, // test fields sfTest1, sfTest2, sfTest3, sfTest4 diff --git a/src/Transaction.cpp b/src/Transaction.cpp index b86663f9d..1dd123e13 100644 --- a/src/Transaction.cpp +++ b/src/Transaction.cpp @@ -118,11 +118,13 @@ bool Transaction::sign(const NewcoinAddress& naAccountPrivate) Transaction::pointer Transaction::setClaim( const NewcoinAddress& naPrivateKey, - const NewcoinAddress& naGeneratorID, - const std::vector& vucGenerator) + const std::vector& vucGenerator, + const std::vector& vucPubKey, + const std::vector& vucSignature) { - mTransaction->setITFieldH160(sfGeneratorID, naGeneratorID.getAccountID()); mTransaction->setITFieldVL(sfGenerator, vucGenerator); + mTransaction->setITFieldVL(sfPubKey, vucPubKey); + mTransaction->setITFieldVL(sfSignature, vucSignature); sign(naPrivateKey); @@ -133,8 +135,9 @@ Transaction::pointer Transaction::sharedClaim( const NewcoinAddress& naPublicKey, const NewcoinAddress& naPrivateKey, const NewcoinAddress& naSourceAccount, uint32 uSourceTag, - const NewcoinAddress& naGeneratorID, - const std::vector& vucGenerator) + const std::vector& vucGenerator, + const std::vector& vucPubKey, + const std::vector& vucSignature) { pointer tResult = boost::make_shared(ttCLAIM, naPublicKey, naSourceAccount, @@ -142,7 +145,7 @@ Transaction::pointer Transaction::sharedClaim( 0, // Free. uSourceTag); - return tResult->setClaim(naPrivateKey, naGeneratorID, vucGenerator); + return tResult->setClaim(naPrivateKey, vucGenerator, vucPubKey, vucSignature); } // diff --git a/src/Transaction.h b/src/Transaction.h index 9a336db45..52c93471f 100644 --- a/src/Transaction.h +++ b/src/Transaction.h @@ -55,8 +55,9 @@ private: Transaction::pointer setClaim( const NewcoinAddress& naPrivateKey, - const NewcoinAddress& naGeneratorID, - const std::vector& vucGenerator); + const std::vector& vucGenerator, + const std::vector& vucPubKey, + const std::vector& vucSignature); public: Transaction(const SerializedTransaction::pointer st, bool bValidate); @@ -85,8 +86,9 @@ public: const NewcoinAddress& naPublicKey, const NewcoinAddress& naPrivateKey, const NewcoinAddress& naSourceAccount, uint32 uSourceTag, - const NewcoinAddress& naGeneratorID, - const std::vector& vucGenerator); + const std::vector& vucGenerator, + const std::vector& vucPubKey, + const std::vector& vucSignature); #if 0 Transaction(const NewcoinAddress& fromID, const NewcoinAddress& toID, CKey::pointer pubKey, uint64 uAmount, uint64 fee, uint32 fromSeq, uint32 fromLedger, diff --git a/src/TransactionFormats.cpp b/src/TransactionFormats.cpp index 7f0aa1518..c541322a0 100644 --- a/src/TransactionFormats.cpp +++ b/src/TransactionFormats.cpp @@ -18,8 +18,9 @@ TransactionFormat InnerTxnFormats[]= }, { "Claim", ttCLAIM, { { S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 }, - { S_FIELD(GeneratorID), STI_HASH160, SOE_REQUIRED, 0 }, { S_FIELD(Generator), STI_VL, SOE_REQUIRED, 0 }, + { S_FIELD(PubKey), STI_VL, SOE_REQUIRED, 0 }, + { S_FIELD(Signature), STI_VL, SOE_REQUIRED, 0 }, { S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 }, { S_FIELD(Extensions), STI_TL, SOE_IFFLAG, 0x02000000 }, { sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } }