Commit Graph

31378 Commits

Author SHA1 Message Date
Duke
7eb9d75b94 Support * or ANY_ZADDR in z_mergetoaddress 2023-10-30 09:31:48 -04:00
Duke
f0395196ec Do not resend wallet txs during IBD, rescan or loading blocks 2023-10-29 21:45:30 -04:00
Duke
b73297f1f5 More debugging when resending txs 2023-10-25 13:17:10 -04:00
Duke
f48181a120 Add help for -consolidationinterval which was missing 2023-10-25 13:16:47 -04:00
Duke
ac315bcb0d Merge remote-tracking branch 'origin/dev' into duke 2023-10-25 12:44:00 -04:00
duke
95b4371aa4 Merge pull request 'Reduce memory usage' (#332) from reduce_memory into dev
Reviewed-on: https://git.hush.is/hush/hush3/pulls/332
2023-10-25 15:11:51 +00:00
Duke
d99ab44bfb Fix implementation of GetBlockHash in CBlockIndex and CDiskBlockIndex 2023-10-23 22:41:29 -04:00
Duke
4642a35f06 Stop building witnesses if abortrescan is called #331 2023-10-23 10:47:12 -04:00
Duke
ae0ff73548 Stop building witnesses if shutdown requested, fixes #330 2023-10-23 09:49:50 -04:00
Duke
41d6d037d8 Log number of SpendDescriptions and note value if an invalid sapling spend happens 2023-10-23 09:43:40 -04:00
Duke
a1cf2ef976 Log txid being relayed to stdout 2023-10-23 09:43:01 -04:00
Duke
1dc4920186 Merge branch 'dev' of https://git.hush.is/hush/hush3 into dev 2023-10-17 14:18:20 -04:00
Duke
e03582e856 Fix shell quoting of dragonx-cli 2023-10-17 14:18:14 -04:00
duke
30a436dcd1 Merge pull request 'Upgrade curl to 8.4.0' (#328) from jahway603 into dev
Reviewed-on: https://git.hush.is/hush/hush3/pulls/328
2023-10-17 12:18:34 +00:00
jahway603
be92d4ce42 Merge branch 'dev' into jahway603 2023-10-16 21:17:00 +00:00
Duke
4256e7d835 Suppress 'Ignoring nbits' debug 2023-10-16 10:36:57 -04:00
Duke
31a6b72caf Merge branch 'dev' into reduce_memory 2023-10-16 06:04:56 -04:00
jahway603
b92cc1efbb Upgraded curl to 8.4.0 to resolve Issue #325 2023-10-14 22:47:27 -04:00
jahway603
12b87365bf Merge branch 'dev' into jahway603 2023-10-14 22:19:07 -04:00
duke
fb5563d06a Merge pull request 'Reject ztxs with duplicate zkproofs' (#327) from duplicate_proofs into dev
Reviewed-on: https://git.hush.is/hush/hush3/pulls/327
2023-10-13 11:58:00 +00:00
Duke
14d3ae1785 Reject ztxs with duplicate zkproofs
This is a greatly simplified and slightly tweaked version of
af2e3713e2

Their version will detect duplicate zkproofs across transactions while
this code will only detect duplicate zkproofs in a single ztx. If dupes
are found, the tx will be denied entry into the mempool.

This provides most of the benefit (increased CPU cost to attackers) with the
least code change and no annoyance to full node operators. Detecting
duplicate zkproofs across transactions requires a one-time reindex of
all of history, which means significant downtime for nodes.

Since Hush + HSCs have a much more strict policy on number of shielded
outputs and shielded inputs, only detecting duplicate zkproofs in
individual ztxs seems sufficient for now.

No correctly functioning node or wallet will ever create duplicate
zkproofs, so there is no worry of this accidentally affecting normal
users. Currently this is not a consensus rule but it could become one
in the future.
2023-10-13 04:31:41 -07:00
duke
70fa319fd9 Merge pull request 'Fix randomx mining memleak' (#326) from memleak into dev
Reviewed-on: https://git.hush.is/hush/hush3/pulls/326
2023-10-13 11:18:29 +00:00
Duke
80bd3f262c Verbosify randomx debug logging in case that helps debug mismatched height coinbase issue 2023-10-12 10:01:01 -04:00
Duke
fc6745129d Fix randomx memory leak but create some mining errors
This change lifts the declaration of the randomx VM out of an inner loop
into the main function body of RandomXMiner(), which allows us to destroy
it later on when catching exceptions. We cannot lift the allocation of it's
memory (randomx_create_vm) because it depends on things that change in every
iteration of the inner loop. Otherwise, the VM will only sometimes
be destroyed, which is what I think causes the memleak.

But this seems to create one invalid block when mining each block height :

STDOUT:

TestBlockValidity: failure C checkPOW=1
RandomXMiner: Invalid randomx block mined, try again 05f30f419133b2d862106b89c20059967639e4f2699dd5afc5d2b0832f1ac76a

debug.log:
2023-10-11 16:10:41 CreateNewBlock(): total size 1000 blocktime.1697040642 nBits.200e77d1
2023-10-11 16:10:41 Running HushRandomXMiner with 1 transactions in block (260 bytes)
2023-10-11 16:10:41 ERROR: ContextualCheckBlock: block height mismatch in coinbase

Mining does seem to continue normally when testing with -testnode=1
2023-10-11 12:07:40 -04:00
Duke
963ce1e444 Release randomx dataset+cache when mining is interrupted or errors 2023-10-10 22:04:15 -04:00
Duke
7db6745056 s/zouts/zins/ in debug log 2023-10-10 12:05:53 -04:00
Duke
b200dcb2c7 Update test_antispam 2023-10-10 12:03:41 -04:00
duke
38699a7d47 Merge pull request 'Antispam defenses' (#322) from antispam into dev
Reviewed-on: https://git.hush.is/hush/hush3/pulls/322
2023-10-10 15:55:11 +00:00
Duke
84a0c2c35e antispam test 2023-10-07 14:16:59 -04:00
Duke
b386cd1acf Scripts to test this branch 2023-10-07 14:15:12 -04:00
Duke
c8a88e1168 Check null randomx dataset before calling randomx_dataset_item_count 2023-10-07 14:07:34 -04:00
Duke
aa5cbee69c Remove dead code 2023-09-18 20:57:47 -04:00
Duke
d7cbdcab28 Always log when skipping a zaddr during z_importwallet 2023-09-18 20:44:16 -04:00
Duke
2308db22ee Antispam defenses
This code is inspired by
db292a49dd
with various improvements that will be documented below.

The largest improvement is that this code will defend against a spammer using shielded inputs (zins)
or shielded outputs (zouts) while the Pirate code only defends against zout spam.

We wrote a new RPC called z_getstats to study exactly what the distribution of shielded inputs (zins)
and shielded outputs (zouts) look like on HUSH mainnet. Sietch will never make a ztx that contains
more than 9 zouts and so transactions with 10 or more zouts are extremely rare. They correspond to custom
transactions created via code or CLI or mining pool payouts. We allow at most one of these per block. If
there are two, one will remain in the mempool and be mined in the subsequent block. Our code is more strict,
as Pirate will allow up to 6 of these transactions in a single block.

Transactions with many shielded inputs do occur normally when users spend many small shielded unspent outputs
(zutxos) in one transaction, but we determined that a cutoff of 50 zins is quite rare. Between blocks
14000000 and 15000000 only 27 ztxs had 50 or more zins, which is 0.03% . We allow at most one of these
per block and if there are more, they will wait to be mined in a subsequent block.

Also note that a transaction can match both criteria of having large zins and large zouts, so for instance,
if there is a transaction with 50 zins and 10 zouts, it counts towards both requirements and no other
transactions with >=50 zins or >=10 zouts will be mined in that block.

If >=200 transactions with either large zins or large zouts are broadcast to the network it will take at least
200 blocks for them to be mined and so via existing rules for ztx expiration they will expire and be removed
from the mempool, since by default all ztxs expire after 200 blocks. Since normal ztxs that match these
criteria are very rare, the only case when this might happen is during a spam attack and so the attackers
transactions expiring is another part of these defenses.

Other improvements are that we log txids of transactions with large zins or zouts and we do not support a
command line option to turn this protection off. This forces a potential attacker to compile their own custom
code if they want to subvert these protections on their own node and blocks they mine.

Similar to Pirate, these changes are not consensus changes but may be made consensus requirements
in the future.

These protections are not specific to HUSH and are enabled for all HSC's, including DragonX.
2023-09-18 13:30:40 -04:00
Duke
09555fbee2 Allow abortrescan during RPC warmup
If we don't, we can get the hilarious error message that the node is Rescanning...
when trying to run abortrescan when the node automatically does a rescan on boot.
2023-09-18 12:43:27 -04:00
duke
f2ae9a354a Merge pull request 'z_getstats RPC' (#321) from z_getstats into dev
Reviewed-on: https://git.hush.is/hush/hush3/pulls/321
2023-09-09 15:08:52 +00:00
Duke
7c45e66fbe Also return start and ending height in z_getstats json 2023-09-08 08:28:14 -04:00
Duke
4aca3493e3 Even more zstats
Example data for the entire history of the current HUSH mainnet :

  ./src/hush-cli z_getstats 1 1487622
{
  "total_ztxs": 414962,
  "total_zins": 798083,
  "total_zouts": 3312131,
  "total_ztxs_10_or_more_zins": 6789,
  "total_ztxs_25_or_more_zins": 1779,
  "total_ztxs_50_or_more_zins": 688,
  "total_ztxs_100_or_more_zins": 174,
  "total_ztxs_10_or_more_zouts": 2855,
  "total_ztxs_25_or_more_zouts": 394,
  "total_ztxs_50_or_more_zouts": 314,
  "total_ztxs_100_or_more_zouts": 208,
  "avg_zins": 1.923267672702561,
  "avg_zouts": 7.981769415030774,
  "largest_zins": 517,
  "largest_zins_txid": "69f126edd5a0189fbbe84b0824eb48e16eddf180e7d5d4f34c4296d0f868ac7f",
  "largest_zouts": 210,
  "largest_zouts_txid": "2a3155f73fab9191978e77e03be8ec7167372c4549113a6eb3f8a9d343f749ba"
}
2023-09-05 11:30:27 -04:00
Duke
ff7a597032 Lots of more data for z_getstats 2023-09-05 00:35:11 -04:00
Duke
7ea88bb303 Return total zins+zouts in json 2023-09-04 09:03:06 -04:00
Duke
8eaba566fd Force avg zins/zouts to be a double 2023-09-04 08:57:23 -04:00
Duke
0f4956dcd5 Initialize variables in z_getstats correctly 2023-09-04 08:50:05 -04:00
Duke
96ae2d61ca z_getstats RPC that calculates various stats about ztxs in a block range 2023-09-04 08:22:12 -04:00
Duke
1c45a71b05 Remove dead code 2023-09-03 08:52:28 -04:00
Duke
e2521ac2fa Remove unused sproutfunds argument 2023-09-03 08:48:06 -04:00
Duke
bd38a12512 Remove useless sprout key from coinsupply RPC 2023-09-03 08:40:06 -04:00
Duke
bacc08e817 Remove sprout data from valuePools
This codebase does not support sprout, the data will always be zero/empty
and is essentially useless cruft, so we delete it.
2023-09-03 08:37:19 -04:00
Duke
a90f03ce6d Fix build-debian-package.sh docs and document how to make an aarch64 deb 2023-08-16 10:37:23 -04:00
duke
c6859b676e Update 'doc/developer-notes.md' 2023-08-09 00:05:00 +00:00
Duke
4d3d880036 Add docs for adding a new PoW algo 2023-08-08 15:40:52 -04:00