diff --git a/qa/rpc-tests/wallet.py b/qa/rpc-tests/wallet.py index f2c8ea1ce..c4c14b2eb 100755 --- a/qa/rpc-tests/wallet.py +++ b/qa/rpc-tests/wallet.py @@ -293,6 +293,8 @@ class WalletTest (BitcoinTestFramework): mytxdetails = self.nodes[2].gettransaction(mytxid) myvjoinsplits = mytxdetails["vjoinsplit"] assert_equal(0, len(myvjoinsplits)) + assert("joinSplitPubKey" not in mytxdetails) + assert("joinSplitSig" not in mytxdetails) # z_sendmany is expected to fail if tx size breaks limit myzaddr = self.nodes[0].z_getnewaddress('sprout') @@ -360,13 +362,19 @@ class WalletTest (BitcoinTestFramework): assert_greater_than(len(myvjoinsplits), 0) # the first (probably only) joinsplit should take in all the public value - myjoinsplit = self.nodes[2].getrawtransaction(mytxid, 1)["vjoinsplit"][0] + mytxdetails = self.nodes[2].getrawtransaction(mytxid, 1) + myjoinsplit = mytxdetails["vjoinsplit"][0] assert_equal(myjoinsplit["vpub_old"], zsendmanynotevalue) assert_equal(myjoinsplit["vpub_new"], 0) assert("onetimePubKey" in myjoinsplit.keys()) assert("randomSeed" in myjoinsplit.keys()) assert("ciphertexts" in myjoinsplit.keys()) + assert(len(mytxdetails["joinSplitPubKey"]) == 64) + int(mytxdetails["joinSplitPubKey"], 16) # throws if not a hex string + assert(len(mytxdetails["joinSplitSig"]) == 128) + int(mytxdetails["joinSplitSig"], 16) # hex string + # send from private note to node 0 and node 2 node0balance = self.nodes[0].getbalance() # 25.99794745 node2balance = self.nodes[2].getbalance() # 16.99790000 @@ -374,7 +382,7 @@ class WalletTest (BitcoinTestFramework): recipients = [] recipients.append({"address":self.nodes[0].getnewaddress(), "amount":1}) recipients.append({"address":self.nodes[2].getnewaddress(), "amount":1.0}) - + wait_and_assert_operationid_status(self.nodes[2], self.nodes[2].z_sendmany(myzaddr, recipients)) self.sync_all() diff --git a/src/chainparams.cpp b/src/chainparams.cpp index fdc3cae5c..49752b0b5 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -154,6 +154,8 @@ public: vSeeds.clear(); vSeeds.push_back(CDNSSeedData("z.cash", "dnsseed.z.cash")); // Zcash vSeeds.push_back(CDNSSeedData("str4d.xyz", "dnsseed.str4d.xyz")); // @str4d + vSeeds.push_back(CDNSSeedData("zfnd.org", "mainnet.seeder.zfnd.org")); // Zcash Foundation + vSeeds.push_back(CDNSSeedData("yolo.money", "mainnet.is.yolo.money")); // gtank // guarantees the first 2 characters, when base58 encoded, are "t1" base58Prefixes[PUBKEY_ADDRESS] = {0x1C,0xB8}; @@ -390,6 +392,8 @@ public: vFixedSeeds.clear(); vSeeds.clear(); vSeeds.push_back(CDNSSeedData("z.cash", "dnsseed.testnet.z.cash")); // Zcash + vSeeds.push_back(CDNSSeedData("zfnd.org", "testnet.seeder.zfnd.org")); // Zcash Foundation + vSeeds.push_back(CDNSSeedData("yolo.money", "testnet.is.yolo.money")); // gtank // guarantees the first 2 characters, when base58 encoded, are "tm" base58Prefixes[PUBKEY_ADDRESS] = {0x1D,0x25}; diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 45c3adcfc..19543d1f4 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -231,6 +231,11 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) } } + if (tx.nVersion >= 2 && tx.vJoinSplit.size() > 0) { + entry.pushKV("joinSplitPubKey", tx.joinSplitPubKey.GetHex()); + entry.pushKV("joinSplitSig", HexStr(tx.joinSplitSig.begin(), tx.joinSplitSig.end())); + } + if (!hashBlock.IsNull()) { entry.pushKV("blockhash", hashBlock.GetHex()); BlockMap::iterator mi = mapBlockIndex.find(hashBlock); diff --git a/src/zcash/JoinSplit.cpp b/src/zcash/JoinSplit.cpp index 0a052209a..2382a28a8 100644 --- a/src/zcash/JoinSplit.cpp +++ b/src/zcash/JoinSplit.cpp @@ -20,8 +20,6 @@ namespace libzcash { -static CCriticalSection cs_ParamsIO; - template class JoinSplitCircuit : public JoinSplit { public: