commit
c7089d2086
|
@ -36,7 +36,7 @@ Please provide a general summary of the issue you're experiencing
|
||||||
Tell us what should happen
|
Tell us what should happen
|
||||||
|
|
||||||
### Actual behaviour + errors
|
### Actual behaviour + errors
|
||||||
Tell us what happens instead including any noticable error output (any messages
|
Tell us what happens instead including any noticeable error output (any messages
|
||||||
displayed on-screen when e.g. a crash occurred)
|
displayed on-screen when e.g. a crash occurred)
|
||||||
|
|
||||||
### The version of Zcash you were using:
|
### The version of Zcash you were using:
|
||||||
|
|
|
@ -5,7 +5,7 @@ where possible.
|
||||||
|
|
||||||
## Adding new dependencies in online-Rust mode
|
## Adding new dependencies in online-Rust mode
|
||||||
|
|
||||||
The `zcashd` build system pins all dependencies, and in order to faciliate
|
The `zcashd` build system pins all dependencies, and in order to facilitate
|
||||||
deterministic builds, `cargo` is configured to run in offline mode with vendored
|
deterministic builds, `cargo` is configured to run in offline mode with vendored
|
||||||
crates. This means that if, for example, you add the `foobar` crate to
|
crates. This means that if, for example, you add the `foobar` crate to
|
||||||
`Cargo.toml`, you will likely see an error similar to this:
|
`Cargo.toml`, you will likely see an error similar to this:
|
||||||
|
|
|
@ -32,7 +32,7 @@ Check that dependencies are up-to-date or have been postponed:
|
||||||
$ ./qa/zcash/updatecheck.py
|
$ ./qa/zcash/updatecheck.py
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are missing the `.updatecheck-token` file requried to run this script,
|
If you are missing the `.updatecheck-token` file required to run this script,
|
||||||
please ask Taylor or another Zcash developer for a copy, or create an
|
please ask Taylor or another Zcash developer for a copy, or create an
|
||||||
unprivileged personal access token for a github account and save it to the
|
unprivileged personal access token for a github account and save it to the
|
||||||
file in the format `username:hex-token`.
|
file in the format `username:hex-token`.
|
||||||
|
|
|
@ -43,7 +43,7 @@ class FinalSaplingRootTest(BitcoinTestFramework):
|
||||||
self.nodes[0].generate(200)
|
self.nodes[0].generate(200)
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
|
|
||||||
# Verfify genesis block contains null field for what is now called the final sapling root field.
|
# Verify genesis block contains null field for what is now called the final sapling root field.
|
||||||
blk = self.nodes[0].getblock("0")
|
blk = self.nodes[0].getblock("0")
|
||||||
assert_equal(blk["finalsaplingroot"], NULL_FIELD)
|
assert_equal(blk["finalsaplingroot"], NULL_FIELD)
|
||||||
treestate = self.nodes[0].z_gettreestate("0")
|
treestate = self.nodes[0].z_gettreestate("0")
|
||||||
|
|
|
@ -73,7 +73,7 @@ class RawTransactionsTest(BitcoinTestFramework):
|
||||||
rawtxfund = self.nodes[2].fundrawtransaction(rawtx)
|
rawtxfund = self.nodes[2].fundrawtransaction(rawtx)
|
||||||
fee = rawtxfund['fee']
|
fee = rawtxfund['fee']
|
||||||
dec_tx = self.nodes[2].decoderawtransaction(rawtxfund['hex'])
|
dec_tx = self.nodes[2].decoderawtransaction(rawtxfund['hex'])
|
||||||
assert_equal(len(dec_tx['vin']) > 0, True) #test if we have enought inputs
|
assert_equal(len(dec_tx['vin']) > 0, True) #test if we have enough inputs
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
# simple test with two coins #
|
# simple test with two coins #
|
||||||
|
|
|
@ -75,7 +75,7 @@ class MerkleBlockTest(BitcoinTestFramework):
|
||||||
txid_spent = txin_spent["txid"]
|
txid_spent = txin_spent["txid"]
|
||||||
txid_unspent = txid1 if txin_spent["txid"] != txid1 else txid2
|
txid_unspent = txid1 if txin_spent["txid"] != txid1 else txid2
|
||||||
|
|
||||||
# We cant find the block from a fully-spent tx
|
# We can't find the block from a fully-spent tx
|
||||||
assert_raises(JSONRPCException, self.nodes[2].gettxoutproof, [txid_spent])
|
assert_raises(JSONRPCException, self.nodes[2].gettxoutproof, [txid_spent])
|
||||||
# ...but we can if we specify the block
|
# ...but we can if we specify the block
|
||||||
assert_equal(self.nodes[2].verifytxoutproof(self.nodes[2].gettxoutproof([txid_spent], blockhash)), [txid_spent])
|
assert_equal(self.nodes[2].verifytxoutproof(self.nodes[2].gettxoutproof([txid_spent], blockhash)), [txid_spent])
|
||||||
|
|
|
@ -27,7 +27,7 @@ class NodeHandlingTest (BitcoinTestFramework):
|
||||||
###########################
|
###########################
|
||||||
assert_equal(len(self.nodes[2].getpeerinfo()), 4) #we should have 4 nodes at this point
|
assert_equal(len(self.nodes[2].getpeerinfo()), 4) #we should have 4 nodes at this point
|
||||||
self.nodes[2].setban("127.0.0.1", "add")
|
self.nodes[2].setban("127.0.0.1", "add")
|
||||||
time.sleep(3) #wait till the nodes are disconected
|
time.sleep(3) #wait till the nodes are disconnected
|
||||||
assert_equal(len(self.nodes[2].getpeerinfo()), 0) #all nodes must be disconnected at this point
|
assert_equal(len(self.nodes[2].getpeerinfo()), 0) #all nodes must be disconnected at this point
|
||||||
assert_equal(len(self.nodes[2].listbanned()), 1)
|
assert_equal(len(self.nodes[2].listbanned()), 1)
|
||||||
self.nodes[2].clearbanned()
|
self.nodes[2].clearbanned()
|
||||||
|
|
|
@ -159,7 +159,7 @@ class FullBlockTest(ComparisonTestFramework):
|
||||||
yield test
|
yield test
|
||||||
|
|
||||||
|
|
||||||
# Start by bulding a couple of blocks on top (which output is spent is in parentheses):
|
# Start by building a couple of blocks on top (which output is spent is in parentheses):
|
||||||
# genesis -> b1 (0) -> b2 (1)
|
# genesis -> b1 (0) -> b2 (1)
|
||||||
out0 = get_spendable_output()
|
out0 = get_spendable_output()
|
||||||
block(1, spend=out0)
|
block(1, spend=out0)
|
||||||
|
|
|
@ -152,7 +152,7 @@ class PruneTest(BitcoinTestFramework):
|
||||||
print("Invalidating block at height:",invalidheight,badhash)
|
print("Invalidating block at height:",invalidheight,badhash)
|
||||||
self.nodes[1].invalidateblock(badhash)
|
self.nodes[1].invalidateblock(badhash)
|
||||||
|
|
||||||
# We've now switched to our previously mined-24 block fork on node 1, but thats not what we want
|
# We've now switched to our previously mined-24 block fork on node 1, but that's not what we want
|
||||||
# So invalidate that fork as well, until we're on the same chain as node 0/2 (but at an ancestor 288 blocks ago)
|
# So invalidate that fork as well, until we're on the same chain as node 0/2 (but at an ancestor 288 blocks ago)
|
||||||
mainchainhash = self.nodes[0].getblockhash(invalidheight - 1)
|
mainchainhash = self.nodes[0].getblockhash(invalidheight - 1)
|
||||||
curhash = self.nodes[1].getblockhash(invalidheight - 1)
|
curhash = self.nodes[1].getblockhash(invalidheight - 1)
|
||||||
|
@ -210,7 +210,7 @@ class PruneTest(BitcoinTestFramework):
|
||||||
goalbesthash = self.mainchainhash2
|
goalbesthash = self.mainchainhash2
|
||||||
|
|
||||||
# As of 0.10 the current block download logic is not able to reorg to the original chain created in
|
# As of 0.10 the current block download logic is not able to reorg to the original chain created in
|
||||||
# create_chain_with_stale_blocks because it doesn't know of any peer thats on that chain from which to
|
# create_chain_with_stale_blocks because it doesn't know of any peer that's on that chain from which to
|
||||||
# redownload its missing blocks.
|
# redownload its missing blocks.
|
||||||
# Invalidate the reorg_test chain in node 0 as well, it can successfully switch to the original chain
|
# Invalidate the reorg_test chain in node 0 as well, it can successfully switch to the original chain
|
||||||
# because it has all the block data.
|
# because it has all the block data.
|
||||||
|
|
|
@ -29,7 +29,7 @@ def satoshi_round(amount):
|
||||||
def small_txpuzzle_randfee(from_node, conflist, unconflist, amount, min_fee, fee_increment):
|
def small_txpuzzle_randfee(from_node, conflist, unconflist, amount, min_fee, fee_increment):
|
||||||
'''
|
'''
|
||||||
Create and send a transaction with a random fee.
|
Create and send a transaction with a random fee.
|
||||||
The transaction pays to a trival P2SH script, and assumes that its inputs
|
The transaction pays to a trivial P2SH script, and assumes that its inputs
|
||||||
are of the same form.
|
are of the same form.
|
||||||
The function takes a list of confirmed outputs and unconfirmed outputs
|
The function takes a list of confirmed outputs and unconfirmed outputs
|
||||||
and attempts to use the confirmed list first for its inputs.
|
and attempts to use the confirmed list first for its inputs.
|
||||||
|
|
|
@ -44,7 +44,7 @@ class UpgradeGoldenTest(BitcoinTestFramework):
|
||||||
logging.info("Initializing the network in "+self.options.tmpdir)
|
logging.info("Initializing the network in "+self.options.tmpdir)
|
||||||
|
|
||||||
# Node 0 will always be running with the most recent network upgrade version.
|
# Node 0 will always be running with the most recent network upgrade version.
|
||||||
# The remaining nodes start with the nework upgrade versions in order that they
|
# The remaining nodes start with the network upgrade versions in order that they
|
||||||
# are specified in the upgrades list.
|
# are specified in the upgrades list.
|
||||||
upgrade_args = [self.upgrades[-1].extra_args] + [u.extra_args for u in self.upgrades]
|
upgrade_args = [self.upgrades[-1].extra_args] + [u.extra_args for u in self.upgrades]
|
||||||
self.nodes = start_nodes(len(self.upgrades) + 1, self.options.tmpdir, extra_args=upgrade_args)
|
self.nodes = start_nodes(len(self.upgrades) + 1, self.options.tmpdir, extra_args=upgrade_args)
|
||||||
|
|
|
@ -51,14 +51,14 @@ class WalletImportExportTest (BitcoinTestFramework):
|
||||||
assert_true(sapling_address0 in sapling_keys1)
|
assert_true(sapling_address0 in sapling_keys1)
|
||||||
assert_true(sapling_address2 in sapling_keys1)
|
assert_true(sapling_address2 in sapling_keys1)
|
||||||
|
|
||||||
# make sure we have perserved the metadata
|
# make sure we have preserved the metadata
|
||||||
for sapling_key0 in sapling_keys0.splitlines():
|
for sapling_key0 in sapling_keys0.splitlines():
|
||||||
assert_true(sapling_key0 in sapling_keys1)
|
assert_true(sapling_key0 in sapling_keys1)
|
||||||
|
|
||||||
# Helper functions
|
# Helper functions
|
||||||
def parse_wallet_file(dump_path):
|
def parse_wallet_file(dump_path):
|
||||||
file_lines = open(dump_path, "r", encoding="utf8").readlines()
|
file_lines = open(dump_path, "r", encoding="utf8").readlines()
|
||||||
# We expect information about the HDSeed and fingerpring in the header
|
# We expect information about the HDSeed and fingerprint in the header
|
||||||
assert_true("HDSeed" in file_lines[4], "Expected HDSeed")
|
assert_true("HDSeed" in file_lines[4], "Expected HDSeed")
|
||||||
assert_true("fingerprint" in file_lines[4], "Expected fingerprint")
|
assert_true("fingerprint" in file_lines[4], "Expected fingerprint")
|
||||||
seed_comment_line = file_lines[4][2:].split() # ["HDSeed=...", "fingerprint=..."]
|
seed_comment_line = file_lines[4][2:].split() # ["HDSeed=...", "fingerprint=..."]
|
||||||
|
|
|
@ -36,7 +36,7 @@ class WalletPersistenceTest (BitcoinTestFramework):
|
||||||
# Verify Sapling address is persisted in wallet
|
# Verify Sapling address is persisted in wallet
|
||||||
sapling_addr = self.nodes[0].z_getnewaddress('sapling')
|
sapling_addr = self.nodes[0].z_getnewaddress('sapling')
|
||||||
|
|
||||||
# Make sure the node has the addresss
|
# Make sure the node has the address
|
||||||
addresses = self.nodes[0].z_listaddresses()
|
addresses = self.nodes[0].z_listaddresses()
|
||||||
assert_true(sapling_addr in addresses, "Should contain address before restart")
|
assert_true(sapling_addr in addresses, "Should contain address before restart")
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ class ZapWalletTXesTest (BitcoinTestFramework):
|
||||||
print(e)
|
print(e)
|
||||||
aException = True
|
aException = True
|
||||||
|
|
||||||
assert_equal(aException, True) # there must be a expection because the unconfirmed wallettx0 must be gone by now
|
assert_equal(aException, True) # there must be an exception because the unconfirmed wallet tx0 must be gone by now
|
||||||
|
|
||||||
tx0 = self.nodes[0].gettransaction(txid0)
|
tx0 = self.nodes[0].gettransaction(txid0)
|
||||||
assert_equal(tx0['txid'], txid0) # tx0 (confirmed) must still be available because it was confirmed
|
assert_equal(tx0['txid'], txid0) # tx0 (confirmed) must still be available because it was confirmed
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
# Name : checksec.sh
|
# Name : checksec.sh
|
||||||
# Version : 1.7.0
|
# Version : 1.7.0
|
||||||
# Author : Brian Davis
|
# Author : Brian Davis
|
||||||
# Date : Feburary 2014
|
# Date : February 2014
|
||||||
# Download: https://github.com/slimm609/checksec.sh
|
# Download: https://github.com/slimm609/checksec.sh
|
||||||
#
|
#
|
||||||
# --- Modified Version ---
|
# --- Modified Version ---
|
||||||
|
@ -298,9 +298,9 @@ echo_message() {
|
||||||
# check selinux status
|
# check selinux status
|
||||||
getsestatus() {
|
getsestatus() {
|
||||||
local status
|
local status
|
||||||
${debug} && echo -e "\n***fuction getsestatus"
|
${debug} && echo -e "\n***function getsestatus"
|
||||||
if (command_exists getenforce); then
|
if (command_exists getenforce); then
|
||||||
${debug} && echo "***fuction getsestatus->getenforce"
|
${debug} && echo "***function getsestatus->getenforce"
|
||||||
sestatus=$(getenforce)
|
sestatus=$(getenforce)
|
||||||
if [[ "${sestatus}" == "Disabled" ]]; then
|
if [[ "${sestatus}" == "Disabled" ]]; then
|
||||||
status=0
|
status=0
|
||||||
|
@ -310,7 +310,7 @@ getsestatus() {
|
||||||
status=2
|
status=2
|
||||||
fi
|
fi
|
||||||
elif (command_exists sestatus); then
|
elif (command_exists sestatus); then
|
||||||
${debug} && echo "***fuction getsestatus->sestatus"
|
${debug} && echo "***function getsestatus->sestatus"
|
||||||
sestatus=$(sestatus | grep "SELinux status" | awk '{ print $3}')
|
sestatus=$(sestatus | grep "SELinux status" | awk '{ print $3}')
|
||||||
if [[ "${sestatus}" == "disabled" ]]; then
|
if [[ "${sestatus}" == "disabled" ]]; then
|
||||||
status=0
|
status=0
|
||||||
|
@ -328,7 +328,7 @@ return ${status}
|
||||||
|
|
||||||
# check if directory exists
|
# check if directory exists
|
||||||
dir_exists () {
|
dir_exists () {
|
||||||
${debug} && echo "fuction dir_exists"
|
${debug} && echo "function dir_exists"
|
||||||
if [[ -d "${1}" ]] ; then
|
if [[ -d "${1}" ]] ; then
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
|
@ -842,7 +842,7 @@ kernelcheck() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo_message " Kernel heap randomization: " "" "" ""
|
echo_message " Kernel heap randomization: " "" "" ""
|
||||||
# NOTE: y means it turns off kernel heap randomization for backwards compatability (libc5)
|
# NOTE: y means it turns off kernel heap randomization for backwards compatibility (libc5)
|
||||||
if ${kconfig} | grep -qi 'CONFIG_COMPAT_BRK=y'; then
|
if ${kconfig} | grep -qi 'CONFIG_COMPAT_BRK=y'; then
|
||||||
echo_message "\033[31mDisabled\033[m\n" "Disabled," " kernel_heap_randomization='no'" ', "kernel_heap_randomization":"no"'
|
echo_message "\033[31mDisabled\033[m\n" "Disabled," " kernel_heap_randomization='no'" ', "kernel_heap_randomization":"no"'
|
||||||
else
|
else
|
||||||
|
@ -1123,7 +1123,7 @@ kernelcheck() {
|
||||||
sestatus=$?
|
sestatus=$?
|
||||||
if [[ ${sestatus} == 0 ]]; then
|
if [[ ${sestatus} == 0 ]]; then
|
||||||
echo_message "\033[31mDisabled\033[m\n" "Disabled,," " <selinux enabled='no'" '"selinux":{ "enabled":"no"'
|
echo_message "\033[31mDisabled\033[m\n" "Disabled,," " <selinux enabled='no'" '"selinux":{ "enabled":"no"'
|
||||||
echo_message "\n SELinux infomation available here: \n" "" "" ""
|
echo_message "\n SELinux information available here: \n" "" "" ""
|
||||||
echo_message " https://selinuxproject.org/\n" "" "" ""
|
echo_message " https://selinuxproject.org/\n" "" "" ""
|
||||||
elif [[ ${sestatus} == 1 ]]; then
|
elif [[ ${sestatus} == 1 ]]; then
|
||||||
echo_message "\033[33mPermissive\033[m\n" "Permissive," " <selinux enabled='yes' mode='permissive'" '"selinux":{ "enabled":"yes", "mode":"permissive"'
|
echo_message "\033[33mPermissive\033[m\n" "Permissive," " <selinux enabled='yes' mode='permissive'" '"selinux":{ "enabled":"yes", "mode":"permissive"'
|
||||||
|
@ -1132,7 +1132,7 @@ kernelcheck() {
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo_message "\033[31mNo SELinux\033[m\n" "Disabled,," " <selinux enabled='no'" '"selinux":{ "enabled":"no"'
|
echo_message "\033[31mNo SELinux\033[m\n" "Disabled,," " <selinux enabled='no'" '"selinux":{ "enabled":"no"'
|
||||||
echo_message "\n SELinux infomation available here: \n" "" "" ""
|
echo_message "\n SELinux information available here: \n" "" "" ""
|
||||||
echo_message " https://selinuxproject.org/\n" "" "" ""
|
echo_message " https://selinuxproject.org/\n" "" "" ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#if defined(__i386__) || defined(__x86_64__)
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
|
|
||||||
/* These architectures support quering the cycle counter
|
/* These architectures support querying the cycle counter
|
||||||
* from user space, no need for any syscall overhead.
|
* from user space, no need for any syscall overhead.
|
||||||
*/
|
*/
|
||||||
void perf_init(void) { }
|
void perf_init(void) { }
|
||||||
|
|
|
@ -1453,7 +1453,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
// cache size calculations
|
// cache size calculations
|
||||||
int64_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20);
|
int64_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20);
|
||||||
nTotalCache = std::max(nTotalCache, nMinDbCache << 20); // total cache cannot be less than nMinDbCache
|
nTotalCache = std::max(nTotalCache, nMinDbCache << 20); // total cache cannot be less than nMinDbCache
|
||||||
nTotalCache = std::min(nTotalCache, nMaxDbCache << 20); // total cache cannot be greated than nMaxDbcache
|
nTotalCache = std::min(nTotalCache, nMaxDbCache << 20); // total cache cannot be greater than nMaxDbcache
|
||||||
int64_t nBlockTreeDBCache = nTotalCache / 8;
|
int64_t nBlockTreeDBCache = nTotalCache / 8;
|
||||||
if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", DEFAULT_TXINDEX))
|
if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", DEFAULT_TXINDEX))
|
||||||
nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB
|
nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB
|
||||||
|
|
|
@ -6181,7 +6181,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
|
||||||
if ((mi->second->nVersion <= 4) != (inv.type == MSG_TX)) {
|
if ((mi->second->nVersion <= 4) != (inv.type == MSG_TX)) {
|
||||||
Misbehaving(pfrom->GetId(), 100);
|
Misbehaving(pfrom->GetId(), 100);
|
||||||
LogPrint("net", "Wrong INV message type used for v%d tx", mi->second->nVersion);
|
LogPrint("net", "Wrong INV message type used for v%d tx", mi->second->nVersion);
|
||||||
// Break so that this inv mesage will be erased from the queue
|
// Break so that this inv message will be erased from the queue
|
||||||
// (otherwise the peer would repeatedly hit this case until its
|
// (otherwise the peer would repeatedly hit this case until its
|
||||||
// Misbehaving level rises above -banscore, no matter what the
|
// Misbehaving level rises above -banscore, no matter what the
|
||||||
// user set it to).
|
// user set it to).
|
||||||
|
@ -6202,7 +6202,7 @@ void static ProcessGetData(CNode* pfrom, const Consensus::Params& consensusParam
|
||||||
if ((txinfo.tx->nVersion <= 4) != (inv.type == MSG_TX)) {
|
if ((txinfo.tx->nVersion <= 4) != (inv.type == MSG_TX)) {
|
||||||
Misbehaving(pfrom->GetId(), 100);
|
Misbehaving(pfrom->GetId(), 100);
|
||||||
LogPrint("net", "Wrong INV message type used for v%d tx", txinfo.tx->nVersion);
|
LogPrint("net", "Wrong INV message type used for v%d tx", txinfo.tx->nVersion);
|
||||||
// Break so that this inv mesage will be erased from the queue.
|
// Break so that this inv message will be erased from the queue.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Ensure we only reply with a transaction if it is exactly what
|
// Ensure we only reply with a transaction if it is exactly what
|
||||||
|
@ -7201,7 +7201,7 @@ bool static ProcessMessage(const CChainParams& chainparams, CNode* pfrom, string
|
||||||
LogPrint("net", "Reject %s\n", SanitizeString(ss.str()));
|
LogPrint("net", "Reject %s\n", SanitizeString(ss.str()));
|
||||||
} catch (const std::ios_base::failure&) {
|
} catch (const std::ios_base::failure&) {
|
||||||
// Avoid feedback loops by preventing reject messages from triggering a new reject message.
|
// Avoid feedback loops by preventing reject messages from triggering a new reject message.
|
||||||
LogPrint("net", "Unparseable reject message received\n");
|
LogPrint("net", "Unparsable reject message received\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ void WeightedTxTree::remove(const uint256& txId)
|
||||||
size_t removeIndex = txIdToIndexMap[txId];
|
size_t removeIndex = txIdToIndexMap[txId];
|
||||||
|
|
||||||
// We reduce the size at the start of this method to avoid saying size - 1
|
// We reduce the size at the start of this method to avoid saying size - 1
|
||||||
// when refering to the last element of the array below
|
// when referring to the last element of the array below
|
||||||
size -= 1;
|
size -= 1;
|
||||||
|
|
||||||
TxWeight lastChildWeight = txIdAndWeights[size].txWeight;
|
TxWeight lastChildWeight = txIdAndWeights[size].txWeight;
|
||||||
|
|
|
@ -331,7 +331,7 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const MinerAddre
|
||||||
|
|
||||||
// Largest block you're willing to create:
|
// Largest block you're willing to create:
|
||||||
unsigned int nBlockMaxSize = GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE);
|
unsigned int nBlockMaxSize = GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE);
|
||||||
// Limit to betweeen 1K and MAX_BLOCK_SIZE-1K for sanity:
|
// Limit to between 1K and MAX_BLOCK_SIZE-1K for sanity:
|
||||||
nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SIZE-1000), nBlockMaxSize));
|
nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SIZE-1000), nBlockMaxSize));
|
||||||
|
|
||||||
// How much of the block should be dedicated to high-priority transactions,
|
// How much of the block should be dedicated to high-priority transactions,
|
||||||
|
|
|
@ -690,7 +690,7 @@ public:
|
||||||
static bool BannedSetIsDirty();
|
static bool BannedSetIsDirty();
|
||||||
//!set the "dirty" flag for the banlist
|
//!set the "dirty" flag for the banlist
|
||||||
static void SetBannedSetDirty(bool dirty=true);
|
static void SetBannedSetDirty(bool dirty=true);
|
||||||
//!clean unused entires (if bantime has expired)
|
//!clean unused entries (if bantime has expired)
|
||||||
static void SweepBanned();
|
static void SweepBanned();
|
||||||
|
|
||||||
void copyStats(CNodeStats &stats);
|
void copyStats(CNodeStats &stats);
|
||||||
|
|
|
@ -93,13 +93,13 @@ private:
|
||||||
// Count the total # of txs in each bucket
|
// Count the total # of txs in each bucket
|
||||||
// Track the historical moving average of this total over blocks
|
// Track the historical moving average of this total over blocks
|
||||||
std::vector<double> txCtAvg;
|
std::vector<double> txCtAvg;
|
||||||
// and calcuate the total for the current block to update the moving average
|
// and calculate the total for the current block to update the moving average
|
||||||
std::vector<int> curBlockTxCt;
|
std::vector<int> curBlockTxCt;
|
||||||
|
|
||||||
// Count the total # of txs confirmed within Y blocks in each bucket
|
// Count the total # of txs confirmed within Y blocks in each bucket
|
||||||
// Track the historical moving average of theses totals over blocks
|
// Track the historical moving average of these totals over blocks
|
||||||
std::vector<std::vector<double> > confAvg; // confAvg[Y][X]
|
std::vector<std::vector<double> > confAvg; // confAvg[Y][X]
|
||||||
// and calcuate the totals for the current block to update the moving averages
|
// and calculate the totals for the current block to update the moving averages
|
||||||
std::vector<std::vector<int> > curBlockConf; // curBlockConf[Y][X]
|
std::vector<std::vector<int> > curBlockConf; // curBlockConf[Y][X]
|
||||||
|
|
||||||
// Sum the total priority/fee of all txs in each bucket
|
// Sum the total priority/fee of all txs in each bucket
|
||||||
|
|
|
@ -374,7 +374,7 @@ struct equi {
|
||||||
struct collisiondata {
|
struct collisiondata {
|
||||||
#ifdef XBITMAP
|
#ifdef XBITMAP
|
||||||
#if NSLOTS > 64
|
#if NSLOTS > 64
|
||||||
#error cant use XBITMAP with more than 64 slots
|
#error can't use XBITMAP with more than 64 slots
|
||||||
#endif
|
#endif
|
||||||
u64 xhashmap[NRESTS];
|
u64 xhashmap[NRESTS];
|
||||||
u64 xmap;
|
u64 xmap;
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
-------------
|
-------------
|
||||||
Clang -std=c++2a enables it. GCC has it enabled without -std=c++2a
|
Clang -std=c++2a enables it. GCC has it enabled without -std=c++2a
|
||||||
but warns "__VA_OPT__ is not available until C++2a" if another -std
|
but warns "__VA_OPT__ is not available until C++2a" if another -std
|
||||||
flag is supplied along with -pedantic (dont know how to supress it).
|
flag is supplied along with -pedantic (dont know how to suppress it).
|
||||||
MSVC TBD
|
MSVC TBD
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
|
|
|
@ -21,7 +21,7 @@ void memory_cleanse(void *ptr, size_t len)
|
||||||
|
|
||||||
/* In order to prevent the compiler from optimizing out the memset, this uses an
|
/* In order to prevent the compiler from optimizing out the memset, this uses an
|
||||||
* unremovable (see https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Volatile )
|
* unremovable (see https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Volatile )
|
||||||
* asm block that the compiler must assume could access arbitary memory, including
|
* asm block that the compiler must assume could access arbitrary memory, including
|
||||||
* the zero bytes written by std::memset.
|
* the zero bytes written by std::memset.
|
||||||
*
|
*
|
||||||
* Quoting Adam Langley <agl@google.com> in commit ad1907fe73334d6c696c8539646c21b11178f20f
|
* Quoting Adam Langley <agl@google.com> in commit ad1907fe73334d6c696c8539646c21b11178f20f
|
||||||
|
|
|
@ -392,7 +392,7 @@ BOOST_AUTO_TEST_CASE(addrman_getaddr)
|
||||||
size_t percent23 = (addrman.size() * 23) / 100;
|
size_t percent23 = (addrman.size() * 23) / 100;
|
||||||
BOOST_CHECK(vAddr.size() == percent23);
|
BOOST_CHECK(vAddr.size() == percent23);
|
||||||
BOOST_CHECK(vAddr.size() == 461);
|
BOOST_CHECK(vAddr.size() == 461);
|
||||||
// (Addrman.size() < number of addresses added) due to address collisons.
|
// (Addrman.size() < number of addresses added) due to address collisions.
|
||||||
BOOST_CHECK(addrman.size() == 2007);
|
BOOST_CHECK(addrman.size() == 2007);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ help_text="""Test framework for bitcoin utils.
|
||||||
|
|
||||||
Runs automatically during `make check`.
|
Runs automatically during `make check`.
|
||||||
|
|
||||||
Can also be run manually from the src directory by specifiying the source directory:
|
Can also be run manually from the src directory by specifying the source directory:
|
||||||
|
|
||||||
test/bitcoin-util-test.py --srcdir='srcdir' [--verbose]
|
test/bitcoin-util-test.py --srcdir='srcdir' [--verbose]
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -302,7 +302,7 @@ BOOST_AUTO_TEST_CASE(test_CheckQueue_UniqueCheck)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Test that blocks which might allocate lots of memory free their memory agressively.
|
// Test that blocks which might allocate lots of memory free their memory aggressively.
|
||||||
//
|
//
|
||||||
// This test attempts to catch a pathological case where by lazily freeing
|
// This test attempts to catch a pathological case where by lazily freeing
|
||||||
// checks might mean leaving a check un-swapped out, and decreasing by 1 each
|
// checks might mean leaving a check un-swapped out, and decreasing by 1 each
|
||||||
|
|
|
@ -665,7 +665,7 @@
|
||||||
["0 0x02 0x0000 0", "CHECKMULTISIGVERIFY 1", ""],
|
["0 0x02 0x0000 0", "CHECKMULTISIGVERIFY 1", ""],
|
||||||
|
|
||||||
["While not really correctly DER encoded, the empty signature is allowed by"],
|
["While not really correctly DER encoded, the empty signature is allowed by"],
|
||||||
["STRICTENC to provide a compact way to provide a delibrately invalid signature."],
|
["STRICTENC to provide a compact way to provide a deliberately invalid signature."],
|
||||||
["0", "0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 CHECKSIG NOT", "STRICTENC"],
|
["0", "0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 CHECKSIG NOT", "STRICTENC"],
|
||||||
["0 0", "1 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 1 CHECKMULTISIG NOT", "STRICTENC"],
|
["0 0", "1 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 1 CHECKMULTISIG NOT", "STRICTENC"],
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 NOP2 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000fe64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000fe64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["By-time locks, with argument just beyond tx nLockTime (but within numerical boundries)"],
|
["By-time locks, with argument just beyond tx nLockTime (but within numerical boundaries)"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000001 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000001 NOP2 1"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 NOP2 1"]],
|
||||||
|
|
|
@ -102,7 +102,7 @@
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["By-time locks, with argument just beyond tx nLockTime (but within numerical boundries)"],
|
["By-time locks, with argument just beyond tx nLockTime (but within numerical boundaries)"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 NOP2 1"]],
|
||||||
|
|
|
@ -47,7 +47,7 @@ BOOST_AUTO_TEST_CASE(limitedmap_test)
|
||||||
// make sure the item is present
|
// make sure the item is present
|
||||||
BOOST_CHECK(map.count(i) == 1);
|
BOOST_CHECK(map.count(i) == 1);
|
||||||
|
|
||||||
// use the iterator to check for the expected key adn value
|
// use the iterator to check for the expected key and value
|
||||||
BOOST_CHECK(it->first == i);
|
BOOST_CHECK(it->first == i);
|
||||||
BOOST_CHECK(it->second == i + 1);
|
BOOST_CHECK(it->second == i + 1);
|
||||||
|
|
||||||
|
|
|
@ -221,7 +221,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
equi eq(1);
|
equi eq(1);
|
||||||
eq.setstate(curr_state.state);
|
eq.setstate(curr_state.state);
|
||||||
|
|
||||||
// Intialization done, start algo driver.
|
// Initialization done, start algo driver.
|
||||||
eq.digit0(0);
|
eq.digit0(0);
|
||||||
eq.xfull = eq.bfull = eq.hfull = 0;
|
eq.xfull = eq.bfull = eq.hfull = 0;
|
||||||
eq.showbsizes(0);
|
eq.showbsizes(0);
|
||||||
|
|
|
@ -360,7 +360,7 @@ static std::map<std::string,std::string> ParseTorReplyMapping(const std::string
|
||||||
|
|
||||||
/** Read full contents of a file and return them in a std::string.
|
/** Read full contents of a file and return them in a std::string.
|
||||||
* Returns a pair <status, string>.
|
* Returns a pair <status, string>.
|
||||||
* If an error occured, status will be false, otherwise status will be true and the data will be returned in string.
|
* If an error occurred, status will be false, otherwise status will be true and the data will be returned in string.
|
||||||
*
|
*
|
||||||
* @param maxsize Puts a maximum size limit on the file that is read. If the file is larger than this, truncated data
|
* @param maxsize Puts a maximum size limit on the file that is read. If the file is larger than this, truncated data
|
||||||
* (with len > maxsize) will be returned.
|
* (with len > maxsize) will be returned.
|
||||||
|
|
|
@ -1232,7 +1232,7 @@ TEST(WalletTests, CachedWitnessesEmptyChain) {
|
||||||
EXPECT_TRUE((bool) sproutWitnesses[1]);
|
EXPECT_TRUE((bool) sproutWitnesses[1]);
|
||||||
EXPECT_TRUE((bool) saplingWitnesses[0]);
|
EXPECT_TRUE((bool) saplingWitnesses[0]);
|
||||||
|
|
||||||
// Until #1302 is implemented, this should triggger an assertion
|
// Until #1302 is implemented, this should trigger an assertion
|
||||||
EXPECT_DEATH(wallet.DecrementNoteWitnesses(&index),
|
EXPECT_DEATH(wallet.DecrementNoteWitnesses(&index),
|
||||||
".*nWitnessCacheSize > 0.*");
|
".*nWitnessCacheSize > 0.*");
|
||||||
}
|
}
|
||||||
|
|
|
@ -2210,7 +2210,7 @@ UniValue z_listunspent(const UniValue& params, bool fHelp)
|
||||||
" \"spendable\" : true|false, (boolean) true if note can be spent by wallet, false if address is watchonly\n"
|
" \"spendable\" : true|false, (boolean) true if note can be spent by wallet, false if address is watchonly\n"
|
||||||
" \"address\" : \"address\", (string) the shielded address\n"
|
" \"address\" : \"address\", (string) the shielded address\n"
|
||||||
" \"amount\": xxxxx, (numeric) the amount of value in the note\n"
|
" \"amount\": xxxxx, (numeric) the amount of value in the note\n"
|
||||||
" \"memo\": xxxxx, (string) hexademical string representation of memo field\n"
|
" \"memo\": xxxxx, (string) hexadecimal string representation of memo field\n"
|
||||||
" \"change\": true|false, (boolean) true if the address that received the note is also one of the sending addresses\n"
|
" \"change\": true|false, (boolean) true if the address that received the note is also one of the sending addresses\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" ,...\n"
|
" ,...\n"
|
||||||
|
@ -3359,7 +3359,7 @@ UniValue z_viewtransaction(const UniValue& params, bool fHelp)
|
||||||
" \"outgoing\" : true|false (boolean, sapling) True if the output is not for an address in the wallet\n"
|
" \"outgoing\" : true|false (boolean, sapling) True if the output is not for an address in the wallet\n"
|
||||||
" \"value\" : x.xxx (numeric) The amount in " + CURRENCY_UNIT + "\n"
|
" \"value\" : x.xxx (numeric) The amount in " + CURRENCY_UNIT + "\n"
|
||||||
" \"valueZat\" : xxxx (numeric) The amount in zatoshis\n"
|
" \"valueZat\" : xxxx (numeric) The amount in zatoshis\n"
|
||||||
" \"memo\" : \"hexmemo\", (string) Hexademical string representation of the memo field\n"
|
" \"memo\" : \"hexmemo\", (string) hexadecimal string representation of the memo field\n"
|
||||||
" \"memoStr\" : \"memo\", (string) Only returned if memo contains valid UTF-8 text.\n"
|
" \"memoStr\" : \"memo\", (string) Only returned if memo contains valid UTF-8 text.\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" ,...\n"
|
" ,...\n"
|
||||||
|
|
|
@ -875,7 +875,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test Aysnc RPC queue and operations.
|
* Test Async RPC queue and operations.
|
||||||
*/
|
*/
|
||||||
BOOST_AUTO_TEST_CASE(rpc_wallet_async_operations)
|
BOOST_AUTO_TEST_CASE(rpc_wallet_async_operations)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue