Clean up sprout turdz
This commit is contained in:
@@ -58,11 +58,7 @@ class ZkeyImportExportTest (BitcoinTestFramework):
|
|||||||
try:
|
try:
|
||||||
assert_equal(amts, [tx["amount"] for tx in txs])
|
assert_equal(amts, [tx["amount"] for tx in txs])
|
||||||
for tx in txs:
|
for tx in txs:
|
||||||
# make sure JoinSplit keys exist and have valid values
|
# TODO: make sure spend keys exist and have valid values
|
||||||
assert_equal("jsindex" in tx, True)
|
|
||||||
assert_equal("jsoutindex" in tx, True)
|
|
||||||
assert_greater_than(tx["jsindex"], -1)
|
|
||||||
assert_greater_than(tx["jsoutindex"], -1)
|
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
logging.error(
|
logging.error(
|
||||||
'Expected amounts: %r; txs: %r',
|
'Expected amounts: %r; txs: %r',
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ void CCoinsViewCache::AbstractPushAnchor(
|
|||||||
|
|
||||||
// We don't want to overwrite an anchor we already have.
|
// We don't want to overwrite an anchor we already have.
|
||||||
// This occurs when a block doesn't modify mapAnchors at all,
|
// This occurs when a block doesn't modify mapAnchors at all,
|
||||||
// because there are no joinsplits. We could get around this a
|
// because there are no ShieldedSpends. We could get around this a
|
||||||
// different way (make all blocks modify mapAnchors somehow)
|
// different way (make all blocks modify mapAnchors somehow)
|
||||||
// but this is simpler to reason about.
|
// but this is simpler to reason about.
|
||||||
if (currentRoot != newrt) {
|
if (currentRoot != newrt) {
|
||||||
@@ -212,6 +212,7 @@ void CCoinsViewCache::AbstractPushAnchor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO: delete
|
//TODO: delete
|
||||||
|
/*
|
||||||
template<> void CCoinsViewCache::PushAnchor(const SproutMerkleTree &tree)
|
template<> void CCoinsViewCache::PushAnchor(const SproutMerkleTree &tree)
|
||||||
{
|
{
|
||||||
AbstractPushAnchor<SproutMerkleTree, CAnchorsSproutMap, CAnchorsSproutMap::iterator, CAnchorsSproutCacheEntry>(
|
AbstractPushAnchor<SproutMerkleTree, CAnchorsSproutMap, CAnchorsSproutMap::iterator, CAnchorsSproutCacheEntry>(
|
||||||
@@ -221,6 +222,7 @@ template<> void CCoinsViewCache::PushAnchor(const SproutMerkleTree &tree)
|
|||||||
hashSproutAnchor
|
hashSproutAnchor
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
template<> void CCoinsViewCache::PushAnchor(const SaplingMerkleTree &tree)
|
template<> void CCoinsViewCache::PushAnchor(const SaplingMerkleTree &tree)
|
||||||
{
|
{
|
||||||
@@ -614,9 +616,9 @@ double CCoinsViewCache::GetPriority(const CTransaction &tx, int nHeight) const
|
|||||||
// Shielded transfers do not reveal any information about the value or age of a note, so we
|
// Shielded transfers do not reveal any information about the value or age of a note, so we
|
||||||
// cannot apply the priority algorithm used for transparent utxos. Instead, we just
|
// cannot apply the priority algorithm used for transparent utxos. Instead, we just
|
||||||
// use the maximum priority for all (partially or fully) shielded transactions.
|
// use the maximum priority for all (partially or fully) shielded transactions.
|
||||||
// (Note that coinbase transactions cannot contain JoinSplits, or Sapling shielded Spends or Outputs.)
|
// (Note that coinbase transactions cannot contain Sapling shielded Spends or Outputs.)
|
||||||
|
|
||||||
if (tx.vjoinsplit.size() > 0 || tx.vShieldedSpend.size() > 0 || tx.vShieldedOutput.size() > 0 || tx.IsCoinImport() || tx.IsPegsImport()) {
|
if (tx.vShieldedSpend.size() > 0 || tx.vShieldedOutput.size() > 0 || tx.IsCoinImport() || tx.IsPegsImport()) {
|
||||||
return MAX_PRIORITY;
|
return MAX_PRIORITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
src/main.cpp
16
src/main.cpp
@@ -1405,8 +1405,7 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio
|
|||||||
if (!tx.fOverwintered && tx.nVersion < SPROUT_MIN_TX_VERSION) {
|
if (!tx.fOverwintered && tx.nVersion < SPROUT_MIN_TX_VERSION) {
|
||||||
return state.DoS(100, error("CheckTransaction(): version too low"),
|
return state.DoS(100, error("CheckTransaction(): version too low"),
|
||||||
REJECT_INVALID, "bad-txns-version-too-low");
|
REJECT_INVALID, "bad-txns-version-too-low");
|
||||||
}
|
} else if (tx.fOverwintered) {
|
||||||
else if (tx.fOverwintered) {
|
|
||||||
if (tx.nVersion < OVERWINTER_MIN_TX_VERSION) {
|
if (tx.nVersion < OVERWINTER_MIN_TX_VERSION) {
|
||||||
return state.DoS(100, error("CheckTransaction(): overwinter version too low"),
|
return state.DoS(100, error("CheckTransaction(): overwinter version too low"),
|
||||||
REJECT_INVALID, "bad-tx-overwinter-version-too-low");
|
REJECT_INVALID, "bad-tx-overwinter-version-too-low");
|
||||||
@@ -1422,16 +1421,13 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: desprout
|
// Transactions containing empty `vin` must have non-empty `vShieldedSpend`.
|
||||||
// Transactions containing empty `vin` must have either non-empty
|
if (tx.vin.empty() && tx.vShieldedSpend.empty())
|
||||||
// `vjoinsplit` or non-empty `vShieldedSpend`.
|
|
||||||
if (tx.vin.empty() && tx.vjoinsplit.empty() && tx.vShieldedSpend.empty())
|
|
||||||
return state.DoS(10, error("CheckTransaction(): vin empty"),
|
return state.DoS(10, error("CheckTransaction(): vin empty"),
|
||||||
REJECT_INVALID, "bad-txns-vin-empty");
|
REJECT_INVALID, "bad-txns-vin-empty");
|
||||||
|
|
||||||
// Transactions containing empty `vout` must have either non-empty
|
// Transactions containing empty `vout` must have non-empty `vShieldedOutput`.
|
||||||
// `vjoinsplit` or non-empty `vShieldedOutput`.
|
if (tx.vout.empty() && tx.vShieldedOutput.empty())
|
||||||
if (tx.vout.empty() && tx.vjoinsplit.empty() && tx.vShieldedOutput.empty())
|
|
||||||
return state.DoS(10, error("CheckTransaction(): vout empty"),
|
return state.DoS(10, error("CheckTransaction(): vout empty"),
|
||||||
REJECT_INVALID, "bad-txns-vout-empty");
|
REJECT_INVALID, "bad-txns-vout-empty");
|
||||||
|
|
||||||
@@ -4434,10 +4430,12 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
|||||||
// pool. So we invert the sign here.
|
// pool. So we invert the sign here.
|
||||||
saplingValue += -tx.valueBalance;
|
saplingValue += -tx.valueBalance;
|
||||||
|
|
||||||
|
/*
|
||||||
for (auto js : tx.vjoinsplit) {
|
for (auto js : tx.vjoinsplit) {
|
||||||
sproutValue += js.vpub_old;
|
sproutValue += js.vpub_old;
|
||||||
sproutValue -= js.vpub_new;
|
sproutValue -= js.vpub_new;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// Ignore following stats unless -zindex enabled
|
// Ignore following stats unless -zindex enabled
|
||||||
if (!fZindex)
|
if (!fZindex)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||||
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||||
|
// Copyright (c) 2016-2021 The Hush developers
|
||||||
// Distributed under the GPLv3 software license, see the accompanying
|
// Distributed under the GPLv3 software license, see the accompanying
|
||||||
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
|
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Copyright © 2014-2019 The SuperNET Developers. *
|
* Copyright © 2014-2019 The SuperNET Developers. *
|
||||||
* *
|
* *
|
||||||
@@ -19,9 +19,7 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include <cryptoconditions.h>
|
#include <cryptoconditions.h>
|
||||||
|
|
||||||
#include "interpreter.h"
|
#include "interpreter.h"
|
||||||
|
|
||||||
#include "consensus/upgrades.h"
|
#include "consensus/upgrades.h"
|
||||||
#include "primitives/transaction.h"
|
#include "primitives/transaction.h"
|
||||||
#include "cc/eval.h"
|
#include "cc/eval.h"
|
||||||
@@ -32,8 +30,6 @@
|
|||||||
#include "script/script.h"
|
#include "script/script.h"
|
||||||
#include "uint256.h"
|
#include "uint256.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
typedef vector<unsigned char> valtype;
|
typedef vector<unsigned char> valtype;
|
||||||
|
|||||||
@@ -2234,7 +2234,7 @@ UniValue gettransaction(const UniValue& params, bool fHelp, const CPubKey& mypk)
|
|||||||
if (fHelp || params.size() < 1 || params.size() > 2)
|
if (fHelp || params.size() < 1 || params.size() > 2)
|
||||||
throw runtime_error(
|
throw runtime_error(
|
||||||
"gettransaction \"txid\" ( includeWatchonly )\n"
|
"gettransaction \"txid\" ( includeWatchonly )\n"
|
||||||
"\nGet detailed information about in-wallet transaction <txid>\n"
|
"\nGet detailed information about in-wallet transaction <txid>. Also see z_viewtransaction for ztx details\n"
|
||||||
"\nArguments:\n"
|
"\nArguments:\n"
|
||||||
"1. \"txid\" (string, required) The transaction id\n"
|
"1. \"txid\" (string, required) The transaction id\n"
|
||||||
"2. \"includeWatchonly\" (bool, optional, default=false) Whether to include watchonly addresses in balance calculation and details[]\n"
|
"2. \"includeWatchonly\" (bool, optional, default=false) Whether to include watchonly addresses in balance calculation and details[]\n"
|
||||||
@@ -2258,17 +2258,6 @@ UniValue gettransaction(const UniValue& params, bool fHelp, const CPubKey& mypk)
|
|||||||
" }\n"
|
" }\n"
|
||||||
" ,...\n"
|
" ,...\n"
|
||||||
" ],\n"
|
" ],\n"
|
||||||
" \"vjoinsplit\" : [\n"
|
|
||||||
" {\n"
|
|
||||||
" \"anchor\" : \"treestateref\", (string) Merkle root of note commitment tree\n"
|
|
||||||
" \"nullifiers\" : [ string, ... ] (string) Nullifiers of input notes\n"
|
|
||||||
" \"commitments\" : [ string, ... ] (string) Note commitments for note outputs\n"
|
|
||||||
" \"macs\" : [ string, ... ] (string) Message authentication tags\n"
|
|
||||||
" \"vpub_old\" : x.xxx (numeric) The amount removed from the transparent value pool\n"
|
|
||||||
" \"vpub_new\" : x.xxx, (numeric) The amount added to the transparent value pool\n"
|
|
||||||
" }\n"
|
|
||||||
" ,...\n"
|
|
||||||
" ],\n"
|
|
||||||
" \"hex\" : \"data\" (string) Raw data for transaction\n"
|
" \"hex\" : \"data\" (string) Raw data for transaction\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
|
|
||||||
@@ -4842,7 +4831,7 @@ UniValue z_sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk)
|
|||||||
if (toSapling) {
|
if (toSapling) {
|
||||||
mtx.vShieldedOutput.push_back(OutputDescription());
|
mtx.vShieldedOutput.push_back(OutputDescription());
|
||||||
} else {
|
} else {
|
||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, sprout zaddr not valid");
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, not a Sapling zaddr!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CTransaction tx(mtx);
|
CTransaction tx(mtx);
|
||||||
@@ -5123,7 +5112,7 @@ UniValue z_shieldcoinbase(const UniValue& params, bool fHelp, const CPubKey& myp
|
|||||||
contextualTx.nLockTime = chainActive.LastTip()->GetHeight();
|
contextualTx.nLockTime = chainActive.LastTip()->GetHeight();
|
||||||
|
|
||||||
if (contextualTx.nVersion == 1) {
|
if (contextualTx.nVersion == 1) {
|
||||||
contextualTx.nVersion = 2; // Tx format should support vjoinsplits
|
contextualTx.nVersion = 2; // Tx format should support ztx's
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create operation and add to global queue
|
// Create operation and add to global queue
|
||||||
|
|||||||
Reference in New Issue
Block a user