Change "protect" terminology to "shield"
This commit is contained in:
parent
868c63f92d
commit
f0003239f8
|
@ -18,7 +18,7 @@ testScripts=(
|
||||||
'wallet_changeaddresses.py'
|
'wallet_changeaddresses.py'
|
||||||
'wallet_changeindicator.py'
|
'wallet_changeindicator.py'
|
||||||
'wallet_import_export.py'
|
'wallet_import_export.py'
|
||||||
'wallet_protectcoinbase.py'
|
'wallet_shieldingcoinbase.py'
|
||||||
'wallet_shieldcoinbase_sprout.py'
|
'wallet_shieldcoinbase_sprout.py'
|
||||||
'wallet_shieldcoinbase_sapling.py'
|
'wallet_shieldcoinbase_sapling.py'
|
||||||
'wallet_listreceived.py'
|
'wallet_listreceived.py'
|
||||||
|
|
|
@ -23,14 +23,14 @@ class Wallet1941RegressionTest (BitcoinTestFramework):
|
||||||
print("Initializing test directory "+self.options.tmpdir)
|
print("Initializing test directory "+self.options.tmpdir)
|
||||||
initialize_chain_clean(self.options.tmpdir, 1)
|
initialize_chain_clean(self.options.tmpdir, 1)
|
||||||
|
|
||||||
# Start nodes with -regtestprotectcoinbase to set fCoinbaseMustBeProtected to true.
|
# Start nodes with -regtestshieldcoinbase to set fCoinbaseMustBeShielded to true.
|
||||||
def setup_network(self, split=False):
|
def setup_network(self, split=False):
|
||||||
self.nodes = start_nodes(1, self.options.tmpdir, extra_args=[['-regtestprotectcoinbase','-debug=zrpc']] )
|
self.nodes = start_nodes(1, self.options.tmpdir, extra_args=[['-regtestshieldcoinbase','-debug=zrpc']] )
|
||||||
self.is_network_split=False
|
self.is_network_split=False
|
||||||
|
|
||||||
def add_second_node(self):
|
def add_second_node(self):
|
||||||
initialize_datadir(self.options.tmpdir, 1)
|
initialize_datadir(self.options.tmpdir, 1)
|
||||||
self.nodes.append(start_node(1, self.options.tmpdir, extra_args=['-regtestprotectcoinbase','-debug=zrpc']))
|
self.nodes.append(start_node(1, self.options.tmpdir, extra_args=['-regtestshieldcoinbase','-debug=zrpc']))
|
||||||
self.nodes[1].setmocktime(starttime + 9000)
|
self.nodes[1].setmocktime(starttime + 9000)
|
||||||
connect_nodes_bi(self.nodes,0,1)
|
connect_nodes_bi(self.nodes,0,1)
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
|
@ -38,7 +38,7 @@ class Wallet1941RegressionTest (BitcoinTestFramework):
|
||||||
def restart_second_node(self, extra_args=[]):
|
def restart_second_node(self, extra_args=[]):
|
||||||
self.nodes[1].stop()
|
self.nodes[1].stop()
|
||||||
bitcoind_processes[1].wait()
|
bitcoind_processes[1].wait()
|
||||||
self.nodes[1] = start_node(1, self.options.tmpdir, extra_args=['-regtestprotectcoinbase','-debug=zrpc'] + extra_args)
|
self.nodes[1] = start_node(1, self.options.tmpdir, extra_args=['-regtestshieldcoinbase','-debug=zrpc'] + extra_args)
|
||||||
self.nodes[1].setmocktime(starttime + 9000)
|
self.nodes[1].setmocktime(starttime + 9000)
|
||||||
connect_nodes_bi(self.nodes, 0, 1)
|
connect_nodes_bi(self.nodes, 0, 1)
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
|
|
|
@ -17,9 +17,9 @@ class WalletAnchorForkTest (BitcoinTestFramework):
|
||||||
print("Initializing test directory "+self.options.tmpdir)
|
print("Initializing test directory "+self.options.tmpdir)
|
||||||
initialize_chain_clean(self.options.tmpdir, 4)
|
initialize_chain_clean(self.options.tmpdir, 4)
|
||||||
|
|
||||||
# Start nodes with -regtestprotectcoinbase to set fCoinbaseMustBeProtected to true.
|
# Start nodes with -regtestshieldcoinbase to set fCoinbaseMustBeShielded to true.
|
||||||
def setup_network(self, split=False):
|
def setup_network(self, split=False):
|
||||||
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-regtestprotectcoinbase', '-debug=zrpc']] * 3 )
|
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-regtestshieldcoinbase', '-debug=zrpc']] * 3 )
|
||||||
connect_nodes_bi(self.nodes,0,1)
|
connect_nodes_bi(self.nodes,0,1)
|
||||||
connect_nodes_bi(self.nodes,1,2)
|
connect_nodes_bi(self.nodes,1,2)
|
||||||
connect_nodes_bi(self.nodes,0,2)
|
connect_nodes_bi(self.nodes,0,2)
|
||||||
|
@ -64,7 +64,7 @@ class WalletAnchorForkTest (BitcoinTestFramework):
|
||||||
# Relaunch nodes and partition network into two:
|
# Relaunch nodes and partition network into two:
|
||||||
# A: node 0
|
# A: node 0
|
||||||
# B: node 1, 2
|
# B: node 1, 2
|
||||||
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-regtestprotectcoinbase', '-debug=zrpc']] * 3 )
|
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-regtestshieldcoinbase', '-debug=zrpc']] * 3 )
|
||||||
connect_nodes_bi(self.nodes,1,2)
|
connect_nodes_bi(self.nodes,1,2)
|
||||||
|
|
||||||
# Partition B, node 1 mines an empty block
|
# Partition B, node 1 mines an empty block
|
||||||
|
@ -94,7 +94,7 @@ class WalletAnchorForkTest (BitcoinTestFramework):
|
||||||
wait_bitcoinds()
|
wait_bitcoinds()
|
||||||
|
|
||||||
# Relaunch nodes and reconnect the entire network
|
# Relaunch nodes and reconnect the entire network
|
||||||
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-regtestprotectcoinbase', '-debug=zrpc']] * 3 )
|
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-regtestshieldcoinbase', '-debug=zrpc']] * 3 )
|
||||||
connect_nodes_bi(self.nodes,0, 1)
|
connect_nodes_bi(self.nodes,0, 1)
|
||||||
connect_nodes_bi(self.nodes,1, 2)
|
connect_nodes_bi(self.nodes,1, 2)
|
||||||
connect_nodes_bi(self.nodes,0, 2)
|
connect_nodes_bi(self.nodes,0, 2)
|
||||||
|
|
|
@ -27,15 +27,15 @@ def check_value_pool(node, name, total):
|
||||||
assert_equal(pool['chainValueZat'], total * COIN)
|
assert_equal(pool['chainValueZat'], total * COIN)
|
||||||
assert(found)
|
assert(found)
|
||||||
|
|
||||||
class WalletProtectCoinbaseTest (BitcoinTestFramework):
|
class WalletShieldingCoinbaseTest (BitcoinTestFramework):
|
||||||
|
|
||||||
def setup_chain(self):
|
def setup_chain(self):
|
||||||
print("Initializing test directory "+self.options.tmpdir)
|
print("Initializing test directory "+self.options.tmpdir)
|
||||||
initialize_chain_clean(self.options.tmpdir, 4)
|
initialize_chain_clean(self.options.tmpdir, 4)
|
||||||
|
|
||||||
# Start nodes with -regtestprotectcoinbase to set fCoinbaseMustBeProtected to true.
|
# Start nodes with -regtestshieldcoinbase to set fCoinbaseMustBeShielded to true.
|
||||||
def setup_network(self, split=False):
|
def setup_network(self, split=False):
|
||||||
self.nodes = start_nodes(4, self.options.tmpdir, extra_args=[['-regtestprotectcoinbase', '-debug=zrpcunsafe']] * 4 )
|
self.nodes = start_nodes(4, self.options.tmpdir, extra_args=[['-regtestshieldcoinbase', '-debug=zrpcunsafe']] * 4 )
|
||||||
connect_nodes_bi(self.nodes,0,1)
|
connect_nodes_bi(self.nodes,0,1)
|
||||||
connect_nodes_bi(self.nodes,1,2)
|
connect_nodes_bi(self.nodes,1,2)
|
||||||
connect_nodes_bi(self.nodes,0,2)
|
connect_nodes_bi(self.nodes,0,2)
|
||||||
|
@ -86,7 +86,7 @@ class WalletProtectCoinbaseTest (BitcoinTestFramework):
|
||||||
|
|
||||||
wait_and_assert_operationid_status(self.nodes[3], myopid, "failed", "Insufficient funds, no UTXOs found for taddr from address.", 10)
|
wait_and_assert_operationid_status(self.nodes[3], myopid, "failed", "Insufficient funds, no UTXOs found for taddr from address.", 10)
|
||||||
|
|
||||||
# This send will fail because our wallet does not allow any change when protecting a coinbase utxo,
|
# This send will fail because our wallet does not allow any change when shielding a coinbase utxo,
|
||||||
# as it's currently not possible to specify a change address in z_sendmany.
|
# as it's currently not possible to specify a change address in z_sendmany.
|
||||||
recipients = []
|
recipients = []
|
||||||
recipients.append({"address":myzaddr, "amount":Decimal('1.23456789')})
|
recipients.append({"address":myzaddr, "amount":Decimal('1.23456789')})
|
||||||
|
@ -365,4 +365,4 @@ class WalletProtectCoinbaseTest (BitcoinTestFramework):
|
||||||
assert_equal(Decimal(resp), sum_of_notes)
|
assert_equal(Decimal(resp), sum_of_notes)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
WalletProtectCoinbaseTest().main()
|
WalletShieldingCoinbaseTest().main()
|
|
@ -19,9 +19,9 @@ class WalletTreeStateTest (BitcoinTestFramework):
|
||||||
print("Initializing test directory "+self.options.tmpdir)
|
print("Initializing test directory "+self.options.tmpdir)
|
||||||
initialize_chain_clean(self.options.tmpdir, 4)
|
initialize_chain_clean(self.options.tmpdir, 4)
|
||||||
|
|
||||||
# Start nodes with -regtestprotectcoinbase to set fCoinbaseMustBeProtected to true.
|
# Start nodes with -regtestshieldcoinbase to set fCoinbaseMustBeShielded to true.
|
||||||
def setup_network(self, split=False):
|
def setup_network(self, split=False):
|
||||||
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-regtestprotectcoinbase','-debug=zrpc']] * 3 )
|
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-regtestshieldcoinbase','-debug=zrpc']] * 3 )
|
||||||
connect_nodes_bi(self.nodes,0,1)
|
connect_nodes_bi(self.nodes,0,1)
|
||||||
connect_nodes_bi(self.nodes,1,2)
|
connect_nodes_bi(self.nodes,1,2)
|
||||||
connect_nodes_bi(self.nodes,0,2)
|
connect_nodes_bi(self.nodes,0,2)
|
||||||
|
|
|
@ -23,14 +23,14 @@ class JoinSplitTest(BitcoinTestFramework):
|
||||||
zcaddress = zckeypair["zcaddress"]
|
zcaddress = zckeypair["zcaddress"]
|
||||||
|
|
||||||
(total_in, inputs) = gather_inputs(self.nodes[0], 40)
|
(total_in, inputs) = gather_inputs(self.nodes[0], 40)
|
||||||
protect_tx = self.nodes[0].createrawtransaction(inputs, {})
|
shield_tx = self.nodes[0].createrawtransaction(inputs, {})
|
||||||
joinsplit_result = self.nodes[0].zcrawjoinsplit(protect_tx, {}, {zcaddress:39.99}, 39.99, 0)
|
joinsplit_result = self.nodes[0].zcrawjoinsplit(shield_tx, {}, {zcaddress:39.99}, 39.99, 0)
|
||||||
|
|
||||||
receive_result = self.nodes[0].zcrawreceive(zcsecretkey, joinsplit_result["encryptednote1"])
|
receive_result = self.nodes[0].zcrawreceive(zcsecretkey, joinsplit_result["encryptednote1"])
|
||||||
assert_equal(receive_result["exists"], False)
|
assert_equal(receive_result["exists"], False)
|
||||||
|
|
||||||
protect_tx = self.nodes[0].signrawtransaction(joinsplit_result["rawtxn"])
|
shield_tx = self.nodes[0].signrawtransaction(joinsplit_result["rawtxn"])
|
||||||
self.nodes[0].sendrawtransaction(protect_tx["hex"])
|
self.nodes[0].sendrawtransaction(shield_tx["hex"])
|
||||||
self.nodes[0].generate(1)
|
self.nodes[0].generate(1)
|
||||||
|
|
||||||
receive_result = self.nodes[0].zcrawreceive(zcsecretkey, joinsplit_result["encryptednote1"])
|
receive_result = self.nodes[0].zcrawreceive(zcsecretkey, joinsplit_result["encryptednote1"])
|
||||||
|
|
|
@ -84,7 +84,7 @@ public:
|
||||||
strNetworkID = "main";
|
strNetworkID = "main";
|
||||||
strCurrencyUnits = "ZEC";
|
strCurrencyUnits = "ZEC";
|
||||||
bip44CoinType = 133; // As registered in https://github.com/satoshilabs/slips/blob/master/slip-0044.md
|
bip44CoinType = 133; // As registered in https://github.com/satoshilabs/slips/blob/master/slip-0044.md
|
||||||
consensus.fCoinbaseMustBeProtected = true;
|
consensus.fCoinbaseMustBeShielded = true;
|
||||||
consensus.nSubsidySlowStartInterval = 20000;
|
consensus.nSubsidySlowStartInterval = 20000;
|
||||||
consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_HALVING_INTERVAL;
|
consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_HALVING_INTERVAL;
|
||||||
consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_HALVING_INTERVAL;
|
consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_HALVING_INTERVAL;
|
||||||
|
@ -279,7 +279,7 @@ public:
|
||||||
strNetworkID = "test";
|
strNetworkID = "test";
|
||||||
strCurrencyUnits = "TAZ";
|
strCurrencyUnits = "TAZ";
|
||||||
bip44CoinType = 1;
|
bip44CoinType = 1;
|
||||||
consensus.fCoinbaseMustBeProtected = true;
|
consensus.fCoinbaseMustBeShielded = true;
|
||||||
consensus.nSubsidySlowStartInterval = 20000;
|
consensus.nSubsidySlowStartInterval = 20000;
|
||||||
consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_HALVING_INTERVAL;
|
consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_HALVING_INTERVAL;
|
||||||
consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_HALVING_INTERVAL;
|
consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_HALVING_INTERVAL;
|
||||||
|
@ -418,7 +418,7 @@ public:
|
||||||
strNetworkID = "regtest";
|
strNetworkID = "regtest";
|
||||||
strCurrencyUnits = "REG";
|
strCurrencyUnits = "REG";
|
||||||
bip44CoinType = 1;
|
bip44CoinType = 1;
|
||||||
consensus.fCoinbaseMustBeProtected = false;
|
consensus.fCoinbaseMustBeShielded = false;
|
||||||
consensus.nSubsidySlowStartInterval = 0;
|
consensus.nSubsidySlowStartInterval = 0;
|
||||||
consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_REGTEST_HALVING_INTERVAL;
|
consensus.nPreBlossomSubsidyHalvingInterval = Consensus::PRE_BLOSSOM_REGTEST_HALVING_INTERVAL;
|
||||||
consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_REGTEST_HALVING_INTERVAL;
|
consensus.nPostBlossomSubsidyHalvingInterval = Consensus::POST_BLOSSOM_REGTEST_HALVING_INTERVAL;
|
||||||
|
@ -553,8 +553,8 @@ void SelectParams(const std::string& network)
|
||||||
pCurrentParams = &Params(network);
|
pCurrentParams = &Params(network);
|
||||||
|
|
||||||
// Some python qa rpc tests need to enforce the coinbase consensus rule
|
// Some python qa rpc tests need to enforce the coinbase consensus rule
|
||||||
if (network == CBaseChainParams::REGTEST && mapArgs.count("-regtestprotectcoinbase")) {
|
if (network == CBaseChainParams::REGTEST && mapArgs.count("-regtestshieldcoinbase")) {
|
||||||
regTestParams.SetRegTestCoinbaseMustBeProtected();
|
regTestParams.SetRegTestCoinbaseMustBeShielded();
|
||||||
}
|
}
|
||||||
|
|
||||||
// When a developer is debugging turnstile violations in regtest mode, enable ZIP209
|
// When a developer is debugging turnstile violations in regtest mode, enable ZIP209
|
||||||
|
|
|
@ -101,7 +101,7 @@ public:
|
||||||
CScript GetFoundersRewardScriptAtHeight(int height) const;
|
CScript GetFoundersRewardScriptAtHeight(int height) const;
|
||||||
std::string GetFoundersRewardAddressAtIndex(int i) const;
|
std::string GetFoundersRewardAddressAtIndex(int i) const;
|
||||||
/** Enforce coinbase consensus rule in regtest mode */
|
/** Enforce coinbase consensus rule in regtest mode */
|
||||||
void SetRegTestCoinbaseMustBeProtected() { consensus.fCoinbaseMustBeProtected = true; }
|
void SetRegTestCoinbaseMustBeShielded() { consensus.fCoinbaseMustBeShielded = true; }
|
||||||
protected:
|
protected:
|
||||||
CChainParams() {}
|
CChainParams() {}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ struct Params {
|
||||||
|
|
||||||
uint256 hashGenesisBlock;
|
uint256 hashGenesisBlock;
|
||||||
|
|
||||||
bool fCoinbaseMustBeProtected;
|
bool fCoinbaseMustBeShielded;
|
||||||
|
|
||||||
/** Needs to evenly divide MAX_SUBSIDY to avoid rounding errors. */
|
/** Needs to evenly divide MAX_SUBSIDY to avoid rounding errors. */
|
||||||
int nSubsidySlowStartInterval;
|
int nSubsidySlowStartInterval;
|
||||||
|
|
|
@ -75,7 +75,7 @@ bool fPruneMode = false;
|
||||||
bool fIsBareMultisigStd = DEFAULT_PERMIT_BAREMULTISIG;
|
bool fIsBareMultisigStd = DEFAULT_PERMIT_BAREMULTISIG;
|
||||||
bool fCheckBlockIndex = false;
|
bool fCheckBlockIndex = false;
|
||||||
bool fCheckpointsEnabled = DEFAULT_CHECKPOINTS_ENABLED;
|
bool fCheckpointsEnabled = DEFAULT_CHECKPOINTS_ENABLED;
|
||||||
bool fCoinbaseEnforcedProtectionEnabled = true;
|
bool fCoinbaseEnforcedShieldingEnabled = true;
|
||||||
size_t nCoinCacheUsage = 5000 * 300;
|
size_t nCoinCacheUsage = 5000 * 300;
|
||||||
uint64_t nPruneTarget = 0;
|
uint64_t nPruneTarget = 0;
|
||||||
bool fAlerts = DEFAULT_ALERTS;
|
bool fAlerts = DEFAULT_ALERTS;
|
||||||
|
@ -2114,8 +2114,8 @@ bool CheckTxInputs(const CTransaction& tx, CValidationState& state, const CCoins
|
||||||
|
|
||||||
// Ensure that coinbases cannot be spent to transparent outputs
|
// Ensure that coinbases cannot be spent to transparent outputs
|
||||||
// Disabled on regtest
|
// Disabled on regtest
|
||||||
if (fCoinbaseEnforcedProtectionEnabled &&
|
if (fCoinbaseEnforcedShieldingEnabled &&
|
||||||
consensusParams.fCoinbaseMustBeProtected &&
|
consensusParams.fCoinbaseMustBeShielded &&
|
||||||
!tx.vout.empty()) {
|
!tx.vout.empty()) {
|
||||||
return state.Invalid(
|
return state.Invalid(
|
||||||
error("CheckInputs(): tried to spend coinbase with transparent outputs"),
|
error("CheckInputs(): tried to spend coinbase with transparent outputs"),
|
||||||
|
|
|
@ -172,7 +172,7 @@ extern bool fCheckBlockIndex;
|
||||||
extern bool fCheckpointsEnabled;
|
extern bool fCheckpointsEnabled;
|
||||||
// TODO: remove this flag by structuring our code such that
|
// TODO: remove this flag by structuring our code such that
|
||||||
// it is unneeded for testing
|
// it is unneeded for testing
|
||||||
extern bool fCoinbaseEnforcedProtectionEnabled;
|
extern bool fCoinbaseEnforcedShieldingEnabled;
|
||||||
extern size_t nCoinCacheUsage;
|
extern size_t nCoinCacheUsage;
|
||||||
extern CFeeRate minRelayTxFee;
|
extern CFeeRate minRelayTxFee;
|
||||||
extern bool fAlerts;
|
extern bool fAlerts;
|
||||||
|
|
|
@ -151,7 +151,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
|
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
fCheckpointsEnabled = false;
|
fCheckpointsEnabled = false;
|
||||||
fCoinbaseEnforcedProtectionEnabled = false;
|
fCoinbaseEnforcedShieldingEnabled = false;
|
||||||
|
|
||||||
// We can't make transactions until we have inputs
|
// We can't make transactions until we have inputs
|
||||||
// Therefore, load 100 blocks :)
|
// Therefore, load 100 blocks :)
|
||||||
|
@ -451,7 +451,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
delete tx;
|
delete tx;
|
||||||
|
|
||||||
fCheckpointsEnabled = true;
|
fCheckpointsEnabled = true;
|
||||||
fCoinbaseEnforcedProtectionEnabled = true;
|
fCoinbaseEnforcedShieldingEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
|
@ -3147,11 +3147,11 @@ bool CWallet::SelectCoins(const CAmount& nTargetValue, set<pair<const CWalletTx*
|
||||||
fOnlyCoinbaseCoinsRet = vCoinsNoCoinbase.size() == 0 && vCoinsWithCoinbase.size() > 0;
|
fOnlyCoinbaseCoinsRet = vCoinsNoCoinbase.size() == 0 && vCoinsWithCoinbase.size() > 0;
|
||||||
|
|
||||||
// If coinbase utxos can only be sent to zaddrs, exclude any coinbase utxos from coin selection.
|
// If coinbase utxos can only be sent to zaddrs, exclude any coinbase utxos from coin selection.
|
||||||
bool fProtectCoinbase = Params().GetConsensus().fCoinbaseMustBeProtected;
|
bool fShieldCoinbase = Params().GetConsensus().fCoinbaseMustBeShielded;
|
||||||
vector<COutput> vCoins = (fProtectCoinbase) ? vCoinsNoCoinbase : vCoinsWithCoinbase;
|
vector<COutput> vCoins = (fShieldCoinbase) ? vCoinsNoCoinbase : vCoinsWithCoinbase;
|
||||||
|
|
||||||
// Output parameter fNeedCoinbaseCoinsRet is set to true if coinbase utxos need to be spent to meet target amount
|
// Output parameter fNeedCoinbaseCoinsRet is set to true if coinbase utxos need to be spent to meet target amount
|
||||||
if (fProtectCoinbase && vCoinsWithCoinbase.size() > vCoinsNoCoinbase.size()) {
|
if (fShieldCoinbase && vCoinsWithCoinbase.size() > vCoinsNoCoinbase.size()) {
|
||||||
CAmount value = 0;
|
CAmount value = 0;
|
||||||
for (const COutput& out : vCoinsNoCoinbase) {
|
for (const COutput& out : vCoinsNoCoinbase) {
|
||||||
if (!out.fSpendable) {
|
if (!out.fSpendable) {
|
||||||
|
@ -3393,7 +3393,7 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend, CWalletTx& wt
|
||||||
bool fNeedCoinbaseCoins = false;
|
bool fNeedCoinbaseCoins = false;
|
||||||
if (!SelectCoins(nTotalValue, setCoins, nValueIn, fOnlyCoinbaseCoins, fNeedCoinbaseCoins, coinControl))
|
if (!SelectCoins(nTotalValue, setCoins, nValueIn, fOnlyCoinbaseCoins, fNeedCoinbaseCoins, coinControl))
|
||||||
{
|
{
|
||||||
if (fOnlyCoinbaseCoins && Params().GetConsensus().fCoinbaseMustBeProtected) {
|
if (fOnlyCoinbaseCoins && Params().GetConsensus().fCoinbaseMustBeShielded) {
|
||||||
strFailReason = _("Coinbase funds can only be sent to a zaddr");
|
strFailReason = _("Coinbase funds can only be sent to a zaddr");
|
||||||
} else if (fNeedCoinbaseCoins) {
|
} else if (fNeedCoinbaseCoins) {
|
||||||
strFailReason = _("Insufficient funds, coinbase funds can only be spent after they have been sent to a zaddr");
|
strFailReason = _("Insufficient funds, coinbase funds can only be spent after they have been sent to a zaddr");
|
||||||
|
|
Loading…
Reference in New Issue