Browse Source

Merge branch 'dev'

master v3.10.1
Duke 4 months ago
parent
commit
44b3d2b500
  1. 4
      configure.ac
  2. 21
      contrib/block_time.pl
  3. 2
      depends/packages/libcurl.mk
  4. 8
      doc/man/hush-cli.1
  5. 8
      doc/man/hush-tx.1
  6. 8
      doc/man/hushd.1
  7. 3
      doc/release-process.md
  8. 17
      doc/relnotes/README.md
  9. 2
      src/Makefile.am
  10. 2
      src/RandomX/CMakeLists.txt
  11. 20
      src/RandomX/src/virtual_memory.c
  12. 149
      src/chainparams.cpp
  13. 4
      src/clientversion.h
  14. 62
      src/deprecation.cpp
  15. 41
      src/deprecation.h
  16. 153
      src/gtest/test_deprecation.cpp
  17. 88
      src/hush_bitcoind.h
  18. 29
      src/hush_utils.h
  19. 2
      src/init.cpp
  20. 7
      src/main.cpp
  21. 27
      src/miner.cpp
  22. 4
      src/rpc/mining.cpp
  23. 29
      src/rpc/net.cpp
  24. 1
      src/rpc/rawtransaction.cpp
  25. 1
      src/rpc/server.cpp
  26. 1
      src/rpc/server.h

4
configure.ac

@ -3,12 +3,12 @@ AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 3)
dnl Must be kept in sync with src/clientversion.h , ugh!
define(_CLIENT_VERSION_MINOR, 10)
define(_CLIENT_VERSION_REVISION, 0)
define(_CLIENT_VERSION_REVISION, 1)
define(_CLIENT_VERSION_BUILD, 50)
define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
define(_CLIENT_VERSION_IS_RELEASE, true)
define(_COPYRIGHT_YEAR, 2023)
define(_COPYRIGHT_YEAR, 2024)
AC_INIT([Hush],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_SUFFIX(_ZC_BUILD_VAL)],[https://git.hush.is/hush/hush3],[hush])
AC_CONFIG_SRCDIR([src/main.cpp])
AC_CONFIG_HEADERS([src/config/bitcoin-config.h])

21
contrib/block_time.pl

@ -7,14 +7,18 @@ use strict;
# Given a block time, estimate when it will happen
my $block = shift || die "Usage: $0 123";
my $coin = shift || '';
my $hush = "./src/hush-cli";
unless (-e $hush) {
die "$hush does not exist, aborting";
}
if ($coin) {
$hush .= " -ac_name=$coin";
}
my $blockcount = qx{$hush getblockcount};
unless ($blockcount = int($blockcount)) {
print "Invalid response from hush-cli\n";
print "Invalid response from $hush\n";
exit 1;
}
@ -22,13 +26,24 @@ if ($block <= $blockcount) {
die "That block has already happened!";
} else {
my $diff = $block - $blockcount;
my $minutes = $diff*1.25; # 75s in minutes
my $minpb = 1.25; # 75s in minutes for HUSH3
if ($coin eq 'DRAGONX') {
$minpb = 0.6; # minutes per block
} elsif ($coin) {
# TODO: support custom bloctimes
$minpb = 1; # assumes default blocktime of 60s
}
my $minutes = $diff*$minpb;
my $seconds = $minutes*60;
my $now = time;
my $then = $now + $seconds;
my $ldate = localtime($then);
my $gmdate = gmtime($then);
print "Hush Block $block will happen at roughly:\n";
if ($coin) {
print "$coin Block $block will happen at roughly:\n";
} else {
print "Hush Block $block will happen at roughly:\n";
}
print "$ldate Eastern # $then\n";
print "$gmdate GMT # $then\n";
}

2
depends/packages/libcurl.mk

@ -14,7 +14,7 @@ $(package)_dependencies=wolfssl
$(package)_download_path=https://curl.haxx.se/download
$(package)_config_opts_linux=--disable-shared --enable-static --without-ssl --prefix=$(host_prefix) --host=$(host)
$(package)_config_opts_mingw32=--enable-mingw --disable-shared --enable-static --with-wolfssl --without-ssl --prefix=$(host_prefix) --host=x86_64-w64-mingw32
$(package)_config_opts_darwin=--disable-shared --enable-static --with-wolfssl --without-ssl --prefix=$(host_prefix)
$(package)_config_opts_darwin=--disable-shared --enable-static --without-ssl --prefix=$(host_prefix)
$(package)_cflags_darwin=-mmacosx-version-min=10.9
$(package)_conf_tool=./configure

8
doc/man/hush-cli.1

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH HUSH-CLI "1" "November 2023" "hush-cli v3.10.0" "User Commands"
.TH HUSH-CLI "1" "January 2024" "hush-cli v3.10.1" "User Commands"
.SH NAME
hush-cli \- manual page for hush-cli v3.10.0
hush-cli \- manual page for hush-cli v3.10.1
.SH DESCRIPTION
Hush RPC client version v3.10.0\-4facbadc6\-dirty
Hush RPC client version v3.10.1\-05ee31891\-dirty
.PP
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://hush.is/security/>.
@ -75,7 +75,7 @@ Read extra arguments from standard input, one per line until EOF/Ctrl\-D
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://hush.is/security/>.
Copyright (C) 2016-2023 Duke Leto and The Hush Developers
Copyright (C) 2016-2024 Duke Leto and The Hush Developers
Copyright (C) 2016-2020 jl777 and SuperNET developers

8
doc/man/hush-tx.1

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH HUSH-TX "1" "November 2023" "hush-tx v3.10.0" "User Commands"
.TH HUSH-TX "1" "January 2024" "hush-tx v3.10.1" "User Commands"
.SH NAME
hush-tx \- manual page for hush-tx v3.10.0
hush-tx \- manual page for hush-tx v3.10.1
.SH DESCRIPTION
hush\-tx utility version v3.10.0\-4facbadc6\-dirty
hush\-tx utility version v3.10.1\-05ee31891\-dirty
.SS "Usage:"
.TP
hush\-tx [options] <hex\-tx> [commands]
@ -89,7 +89,7 @@ Set register NAME to given JSON\-STRING
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://hush.is/security/>.
Copyright (C) 2016-2023 Duke Leto and The Hush Developers
Copyright (C) 2016-2024 Duke Leto and The Hush Developers
Copyright (C) 2016-2020 jl777 and SuperNET developers

8
doc/man/hushd.1

@ -1,9 +1,9 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
.TH HUSHD "1" "November 2023" "hushd v3.10.0" "User Commands"
.TH HUSHD "1" "January 2024" "hushd v3.10.1" "User Commands"
.SH NAME
hushd \- manual page for hushd v3.10.0
hushd \- manual page for hushd v3.10.1
.SH DESCRIPTION
Hush Daemon version v3.10.0\-4facbadc6\-dirty
Hush Daemon version v3.10.1\-05ee31891\-dirty
.PP
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://hush.is/security/>.
@ -771,7 +771,7 @@ Enforce transaction\-rate limit, default 0
In order to ensure you are adequately protecting your privacy when using Hush,
please see <https://hush.is/security/>.
Copyright (C) 2016-2023 Duke Leto and The Hush Developers
Copyright (C) 2016-2024 Duke Leto and The Hush Developers
Copyright (C) 2016-2020 jl777 and SuperNET developers

3
doc/release-process.md

@ -26,7 +26,8 @@ If the last command has no output, congrats, there is nothing to do. If the last
```
git checkout master
git merge --no-ff dev # using the default commit message is fine
git push origin master
git tag vX.Y.Z # this creates a tag vX.Y.Z on current master, or you can let gitea do it later
git push --tags origin master
git checkout dev
git merge master
git push origin dev

17
doc/relnotes/README.md

@ -10,6 +10,23 @@ and no longer on Github, since they banned Duke Leto and
also because they censor many people around the world and work with
evil organizations.
# Hush 3.10.1 "Oneiric Octopus"
This is an OPTIONAL but RECOMMENDED release for Hush full nodes. It fixes an important bug
that affects new Hush nodes. It also makes syncing faster for both Hushd and DragonX nodes.
```
26 files changed, 257 insertions(+), 429 deletions(-)
```
* Fix the bug which causes "payment to wrong pubkey" error when syncing a new node
* Faster syncing of Hush and DragonX full nodes
* Slightly less memory usage in each Equihash/RandomX mining thread
* Fixed compiling issues related to RandomX v1.2.1
* Improved RPC docs for `getblocktemplate`
* Removed the `getdeprecationinfo` RPC
# Hush 3.10.0 "Sassy Siphonophore"
```

2
src/Makefile.am

@ -165,7 +165,6 @@ BITCOIN_CORE_H = \
consensus/validation.h \
core_io.h \
core_memusage.h \
deprecation.h \
fs.h \
hash.h \
httprpc.h \
@ -300,7 +299,6 @@ libbitcoin_server_a_SOURCES = \
fs.cpp \
crosschain.cpp \
crosschain_authority.cpp \
deprecation.cpp \
httprpc.cpp \
httpserver.cpp \
i2p.cpp \

2
src/RandomX/CMakeLists.txt

@ -96,7 +96,7 @@ function(add_flag flag)
endfunction()
# x86-64
if ((CMAKE_SIZEOF_VOID_P EQUAL 8) AND (ARCH_ID STREQUAL "x86_64" OR ARCH_ID STREQUAL "x86-64" OR ARCH_ID STREQUAL "amd64"))
if (ARCH_ID STREQUAL "x86_64" OR ARCH_ID STREQUAL "x86-64" OR ARCH_ID STREQUAL "amd64")
list(APPEND randomx_sources
src/jit_compiler_x86.cpp)

20
src/RandomX/src/virtual_memory.c

@ -148,9 +148,9 @@ void* allocMemoryPages(size_t bytes) {
mem = NULL;
#if defined(USE_PTHREAD_JIT_WP) && defined(MAC_OS_VERSION_11_0) \
&& MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_VERSION_11_0
if (__builtin_available(macOS 11.0, *)) {
//if (__builtin_available(macOS 11.0, *)) {
pthread_jit_write_protect_np(0);
}
//}
#endif
#endif
return mem;
@ -173,11 +173,11 @@ void setPagesRW(void* ptr, size_t bytes) {
char *errfunc;
#if defined(USE_PTHREAD_JIT_WP) && defined(MAC_OS_VERSION_11_0) \
&& MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_VERSION_11_0
if (__builtin_available(macOS 11.0, *)) {
//if (__builtin_available(macOS 11.0, *)) {
pthread_jit_write_protect_np(0);
} else {
pageProtect(ptr, bytes, PAGE_READWRITE, &errfunc);
}
//} else {
// pageProtect(ptr, bytes, PAGE_READWRITE, &errfunc);
//}
#else
pageProtect(ptr, bytes, PAGE_READWRITE, &errfunc);
#endif
@ -187,12 +187,12 @@ void setPagesRX(void* ptr, size_t bytes) {
char *errfunc;
#if defined(USE_PTHREAD_JIT_WP) && defined(MAC_OS_VERSION_11_0) \
&& MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_VERSION_11_0
if (__builtin_available(macOS 11.0, *)) {
//if (__builtin_available(macOS 11.0, *)) {
pthread_jit_write_protect_np(1);
__builtin___clear_cache((char*)ptr, ((char*)ptr) + bytes);
} else {
pageProtect(ptr, bytes, PAGE_EXECUTE_READ, &errfunc);
}
//} else {
// pageProtect(ptr, bytes, PAGE_EXECUTE_READ, &errfunc);
//}
#else
pageProtect(ptr, bytes, PAGE_EXECUTE_READ, &errfunc);
#endif

149
src/chainparams.cpp

@ -1877,9 +1877,53 @@ void *chainparams_commandline() {
(1576000, uint256S("0x00000001b67093fd107d5dd39e75e23103bceca5e32d7e4c27732897492780de"))
(1577000, uint256S("0x00000001cac9f3fd5737948e8cf2265ada33160ba67d94a66cd85f908cbab004"))
(1578000, uint256S("0x00000002db302bc36ed573796784357f4b4996c01d17a0eee0563c229060e1a8"))
,(int64_t) 1700673191, // time of last checkpointed block
(int64_t) 2400163, // total txs
(double) 1220 // txs in the last day before block 1578008
(1579000, uint256S("0x00000004a5aca25e8baeca9bd937e9c5bc27c075690c7d441d2a69b29392a31d"))
(1580000, uint256S("0x0000000897f1f891389334c3cc14841378246bd7666232b52a1a755ac092f8a5"))
(1581000, uint256S("0x00000003e996025437dcd844c62d5778c82bcc9768f2609493bda62ced535cc0"))
(1582000, uint256S("0x00000001ddcdc509e4fa43f34b0eb00308c23e21136c877c6befec8ba232ea95"))
(1583000, uint256S("0x00000003a30285bcb967ae31b97702f3ade300a208a6cdcc2c254ee4b2a66062"))
(1584000, uint256S("0x00000000ccb834eb790011a30aa33fdcdcb443296e3a3ec420e29d6413dce38c"))
(1585000, uint256S("0x00000002d227588d39f9217460a34da268f37aef8f28f9d53fc87314b1ec6b3c"))
(1586000, uint256S("0x00000003ba48bfa7d995099e122c9fbd2e19e42ec42e362d3142f66f8cfd967c"))
(1587000, uint256S("0x000000037ae95bb52e52286223b449519af9994ebc661926360b5813e4b5d560"))
(1588000, uint256S("0x00000005b95fa6cac7772e82f74b8f6130aede11308a0312f1c19cc16338f8f1"))
(1589000, uint256S("0x00000008f29dc9267430f9f3ee93c4893872295473a49e5fd05e19c07eba1fa2"))
(1590000, uint256S("0x0000000124680145c0bef5178b36aab191b7e59a456d7df83c4696eaaec17beb"))
(1591000, uint256S("0x000000042f3d814172a90ee7ff5e5b2125d5414d3f22397f31e42ea93847f4bc"))
(1592000, uint256S("0x000000042e67b7c474b8ea3e00ec14d245d1d1196eb7d4d3e0547f0970fa0707"))
(1593000, uint256S("0x0000000490834e0f188f2916ae426080ab797a5c3c00e2c5bd38a37f6915e544"))
(1594000, uint256S("0x00000007749b27607197da9d6c1daa0bde5ed075cf32c6b1d72dea83351d6a16"))
(1595000, uint256S("0x00000003359c0d869f01d60242d9a3de93e99ec2960b769d3d3ec163648189db"))
(1596000, uint256S("0x000000057dd0a8dfe17f502794b593a83559687dfeb24bf10122ab60c8bbc66b"))
(1597000, uint256S("0x000000050ba2b634de119fc24c363be0e28b0b2fd78c01ffbffed9bbb4d6a96d"))
(1598000, uint256S("0x000000065b982278187da90e228ac479cc355bca7f06c0b786598e93f6ed80f6"))
(1599000, uint256S("0x00000000b17078a591b4746be99aa02419400a9e04e78637db2997cf02350643"))
(1600000, uint256S("0x0000000e4dfb00523f8535e5bbc66401dc0aed33ffcba721c275ca0a35f2477b"))
(1601000, uint256S("0x0000000282b3506902c3b41d51dff89773966e4cf8d85131574a932cad335d6a"))
(1602000, uint256S("0x0000000148a726145cfc3c54927505e1a56be5892e55d5d9549827b95b473f03"))
(1603000, uint256S("0x00000006bab00e8b778e91376f9c6f09f293e5dcf829b58beeb517a89f1972e8"))
(1604000, uint256S("0x000000047ec28daa1ebd35d272006bb99be1bfc432e64fa9ba7558669a0beebc"))
(1605000, uint256S("0x00000002829e77226633eecc400ad22f7c0051e9acea26285ffb12cad1fd3461"))
(1606000, uint256S("0x00000005c2cb7675138e10f36971d9620254bc4781d07f0785c0567068e39ef5"))
(1607000, uint256S("0x00000005703e6b60f7004a502a54615df241f38e1b4f30856a21db2ab8e2a162"))
(1608000, uint256S("0x00000000397c7d1a709c8156ef2d3da4f63b06cef6e16656510e9fb07e398d94"))
(1609000, uint256S("0x000000031accfc8544bde0cf3d160e9c46186d1330bfbc2f075bda9e63e71058"))
(1610000, uint256S("0x00000000318ea4aea52e334b9b3f8bf91e63fe485468936bba68485ae1095a46"))
(1611000, uint256S("0x0000000197b39d70fb42cd31ddc99cc3993f8fcf143f4f13138908bad9be1dfb"))
(1612000, uint256S("0x000000032441e4bbf21affe0c75a11c2aa6e8527be12effc017cb0601dd0d88a"))
(1613000, uint256S("0x00000002ff16ad0bafee22be75b953357ac958b64aa74761017cf27ef349093f"))
(1614000, uint256S("0x00000003a313b96708612dd8223e7d1bf0384b6edc56320a9932f64d1d638db6"))
(1615000, uint256S("0x00000000d192d0150f90daa6b4e2e6f7236cd641314fdced99fce65fe30d48be"))
(1616000, uint256S("0x000000036a26bb9a2481f666975bd98a478b52eb98cc0719fea84bac424a7ba8"))
(1617000, uint256S("0x000000015b35b9e2df778aac51af83403d9f361c582ff8a91a3dc4fdfadf7018"))
(1618000, uint256S("0x0000000638029048e3dff9fba19fcf06b88543ecfe45980cfdb1282670095d85"))
(1619000, uint256S("0x000000025fcd19b079405d3037588012a9cdc138ee633dd5ab5cdef92a8de23d"))
(1620000, uint256S("0x000000048c6667a8724512cbd999bc491ec8522b1f3817001c7ba485dec46d10"))
(1621000, uint256S("0x00000005d981cd3473f8815d18965c0e0035993117390e9659fe8d3b9562c8dc"))
(1622000, uint256S("0x0000000371a1663973c7b19a0b4dd8673f1ddb14a0438c89de3908712437f688"))
,(int64_t) 1703996480, // time of last checkpointed block
(int64_t) 2450197, // total txs
(double) 1289 // txs in the last day before block 1622466
};
// END HUSH mainnet checkpoint data
} else if (strcmp(SMART_CHAIN_SYMBOL,"DRAGONX") == 0) {
@ -2783,9 +2827,102 @@ void *chainparams_commandline() {
(894000, uint256S("0x00003681261a9e354a6c39c450ed133e22759b32760d346941b1ffcf78c72637"))
(895000, uint256S("0x00003930f93e5f335699d76ed9feff63a7372c5e42215e2089b52ab06a76c5f7"))
(896000, uint256S("0x00004d0e19dce5d3faf528cb41b636cd405d54129260054fa7b5d047d97c6f7b"))
,(int64_t) 1700672140, // time of last checkpointed block
(int64_t) 915277, // total txs
(double) 2410 // txs in the last day before block 896461
(897000, uint256S("0x000034f1933d827c974fe0b463c2f47d03600b5286bee593a862dfdfbedabeab"))
(898000, uint256S("0x00003ac2943862684f1a753f8baa071d0b87bb37ac9653c0c5f5fd02868d0dc7"))
(899000, uint256S("0x000065bad08079b6c104460b7d3d2a4ff4a54ec89ecc0662649cf420e5388f04"))
(900000, uint256S("0x000023936469313daadbfb35bb1af3ca9c3a0a2f7341e3fd54c73e817bb2b586"))
(901000, uint256S("0x00009a42a0fd6e91c1b302ca778b33cd093c1996a5677efd6dadebf7f855b1fc"))
(902000, uint256S("0x0000510d7d2e2b03a68cb85f6fc053882d8ae05324cd571255c905f7dc2e4184"))
(903000, uint256S("0x00002a955c654e036531a05844298d72378a8cd1fc6c00dfa2b2105ea00edec5"))
(904000, uint256S("0x00003feb74a594eb7fdbca9ff4f54d81d4bbd2c20ac5ec78c52fe5c996ef4c1e"))
(905000, uint256S("0x000002a091febc5c4498e5334cbefe64ef08a0397a94b908253baee18b7193e6"))
(906000, uint256S("0x000022331700860809c0066e3329d18c0b3754ae2c8ebd6eeb0a42d83acccb48"))
(907000, uint256S("0x000009cda75fc593c641567f237ea453535ed3e5c851267a2b43b59b7d82a232"))
(908000, uint256S("0x00005d7fdf2fa669e27ffc8e9e230b36886364e60496108b9b73e166a48e4382"))
(909000, uint256S("0x000053376948fb992c82c3e56d648e8e3de70d3c55192a65b5f0c0a3db5b478d"))
(910000, uint256S("0x000033733d3f6613409f56627cee647bc85066a57b789b248d94fcafc3ba0479"))
(911000, uint256S("0x00000ecf2a1c9272c9f155be408b5fdfb3d41d8a67f5d4d4c9cf45c41731f61c"))
(912000, uint256S("0x00003d2c5c67bf69530bde65945a65296a611bbc09596f5ccfa1af84973e356a"))
(913000, uint256S("0x00000a50a4efcda624ddfe0f6160b14ed6e7dbce3f1f8c1a17967ed2ed1a6d29"))
(914000, uint256S("0x00002c13dad6c6e5bddabd391b3ed5da2f83993af5d9e9137cd777a2859bc934"))
(915000, uint256S("0x00007339913ca51cc74c064838beebd8ba81a92ad082a363e8993ebd44974cd6"))
(916000, uint256S("0x000062d5cf2992756ee1c996940beb97dc40dec98e911f4f101ec2e3c8ad4e40"))
(917000, uint256S("0x000062b4081cdeadd650f1aad8b123b7f7f33c9075bdcdfa3d5ab6e84324f6d9"))
(918000, uint256S("0x00005f4e81c679bd1e1c6dcb6cda0bc1bd024327224b76f614d2a2565b8ba17e"))
(919000, uint256S("0x00007fe72bd2c8d7d40c2dd97e36026d8a298754c9a7a8bfb4f1249fec14729b"))
(920000, uint256S("0x0000660a4c74a8c9d65df6dc9c7d22ced45d560c1d22cf3e248baa02cc773177"))
(921000, uint256S("0x000027a1ae24bf0bba3dadc225089f11146d8148f2d93e487881e3af235aada8"))
(922000, uint256S("0x00000026bf6572a65d7c42300ceee60286a0d0f1ca75da6285ccc81aaf20da33"))
(923000, uint256S("0x000055f21ee2ac27bc82fc8f3490a5e06c91d619a099643648ab2c0f485c784b"))
(924000, uint256S("0x00006606390d5f493eb1497b50ae859980d3ce958ef45e74112b8a1df26d0f8d"))
(925000, uint256S("0x000041fc67cef98bbdd6d9e3a13cb0cd5dd60ffc28de1e2f128e425ebc74ba86"))
(926000, uint256S("0x00004e378cd6512d0feffe6c6d40352ff7a275ca3d21c60633910d90d4fd619b"))
(927000, uint256S("0x00003d3dfafbe41cd72e98c993d61795739d12bbe73c3d88c381172fa687bffa"))
(928000, uint256S("0x000013a74075878f81afc451d5b8d7278aac05e9980feb6dd5d0cc2df05d3bcd"))
(929000, uint256S("0x00007b35381ebbc1aa79d9829aa8897a74e357c497f79b4e214523b28f5201d2"))
(930000, uint256S("0x00004990787bb80cd418e82f5ce14197ea53e4803b88d35233d0a9df06f08ed4"))
(931000, uint256S("0x00006353a8dc66f567c4865540d4d82f6aa323c239953070232436d816fe4239"))
(932000, uint256S("0x000046627e904e21eb12036c13af5260821233b6ce24255a7fd65b4d9f2811ed"))
(933000, uint256S("0x00007cbc4f3b750bc10f6bc51c67c392302259cbbf9d4e3de7e98ee2556d3e29"))
(934000, uint256S("0x000039494242b523c7eb4a8fd669227000654bebdb439793032dcfefa761e978"))
(935000, uint256S("0x00005e1d76e1f3f790d271260466b1cb7317a152e27f3eb3fa5ac02caa9de0b3"))
(936000, uint256S("0x0000803ebc34268fe221568bf74e86b7d00b306a5dcc74e58657eb0eabab4c48"))
(937000, uint256S("0x0000679acd510514d98cd755da8a5f84f86e6d3518e37b60c9d0d3f5360cd1b2"))
(938000, uint256S("0x0000724d82b0c4c8861faae85dbbf518325b5542fbc7838920fdafd69a30b5dd"))
(939000, uint256S("0x00004476db07e186aba89b7dca2e49dc35c967332a4f7d7299193a6d53eac479"))
(940000, uint256S("0x0000541d565f69359359a165f2d74ce18d098b439794e158da4ee6f3e1864bfb"))
(941000, uint256S("0x000058c831cee1349919ac75d2f98d7bc12358a2557cd875f0f57b8f3b7c6d17"))
(942000, uint256S("0x00007c99fb783ee71082d325fdd8ae1d181a4f05cd0034dccf3ff3ef695f1401"))
(943000, uint256S("0x00006596355090e9854b2f22ddf3ae1d1c6308e432311a26e03c92468d69c863"))
(944000, uint256S("0x0000b6659b828fa64d5a9556ded1fae73dbb81ea5d79cb91dc7077147016547c"))
(945000, uint256S("0x00002c0dfb6f97e2b7d1b18133469657a47d51c0daaa1a4925dd5f3708d8b10a"))
(946000, uint256S("0x00007f682e30326b11491e948162ac5c1f3633f52728136af8e961186871adce"))
(947000, uint256S("0x000074ee3cebb3ac37f141363939a33f60b28aebb78af26be86894fc38cc1399"))
(948000, uint256S("0x00001240ad57e861e4c7e06ce22b0c3d3fa1691ad8fd300645d4884d2b325450"))
(949000, uint256S("0x000003b2db4e1c8e07040d8eda6e8ee46faf7ea913610c04faeac8dc9b2a22fd"))
(950000, uint256S("0x000034fc8d33f91264f615b269dc33b5d47b426fc6754273ff7a459081b732dd"))
(951000, uint256S("0x000010b65debabd9db50513314df344d0bd3ea876d9fbb402f16437a8cb51552"))
(952000, uint256S("0x00008e3bd560f59d7b0b3cdac452aa844dc09c43e98f40b0a2c9c58fac76eb01"))
(953000, uint256S("0x000023685660a930b3d9832bad49e3af9415243efad5ab0dd4ed10d90449c36a"))
(954000, uint256S("0x000033172e6d0498112cdee86320a2e629615718e55a19dd26ab86f95e818b11"))
(955000, uint256S("0x00005bf6c2a199b4fab81bfd45a67fd8ce708f16792150450fda4c9918509bef"))
(956000, uint256S("0x00001216493d2732103fca24f1d291cd0c6b60bf6c38dbad1264fa67cfa5647f"))
(957000, uint256S("0x00006e78f92fbf4b78dfd02a7225465819f2dbfd211df95735c8a38ecae597d3"))
(958000, uint256S("0x000083a03bc5814718a089b49e5a8fc3e085a8ff6ea10d4429f0eccb6652cfea"))
(959000, uint256S("0x00005a66f76f9308b9ea2d4449d63bc054996b503d2fdff0c9327be670df82ff"))
(960000, uint256S("0x00001a07190de23bd4d3dd7c80d47b921c6814558afd639dee206d59db732432"))
(961000, uint256S("0x000037169673714f5b3730d71ae455852689ebfe5feecabf9e840fa3e6c81491"))
(962000, uint256S("0x0000406673e36aa298cbb04bf8e0dd663ad704b40db787791e196bb33827654a"))
(963000, uint256S("0x000003433d6f9cae3bef1393fbf0b5fdc8e6a0b694dcf7785b4297559fcd828c"))
(964000, uint256S("0x000068c78f3e12851372f11ea70b1162e7ec8dc8fee907782402a03b167b86c9"))
(965000, uint256S("0x00002343460755213710071c8e51565d7ec1d86dcb5b71b5e59ddd24f7a4344e"))
(966000, uint256S("0x0000772de803cd7c4ac8aa7f2ed1cd7ef13a59151424eef8f43e13798e9d7bda"))
(967000, uint256S("0x000083cbc5c8d1338caef2fdc4cea6b3ed1cd63f2eec1e81067c9fc657caf042"))
(968000, uint256S("0x00000f469df04f873d3a8c65c79dddb4a4bac26d5c4c2f38948350135bacb050"))
(969000, uint256S("0x000003aabfde9a844a47f0801fb8cc433af4143dd1d4b4f9763c20793493a267"))
(970000, uint256S("0x00000611c1529817df9ae09b4198578d920e2abced48945c4a366aee86e54f84"))
(971000, uint256S("0x000021f10926f8d23a1f093c1dc32d10f02b448296e265abcf1399f66d588a7b"))
(972000, uint256S("0x0000371066a71e81ade6c024361b3ea36dcd4a4d71e6fb1792670fd22cbf2651"))
(973000, uint256S("0x000003f7bd4e713edcc45931d57183da16842f3cee8ee424c037bd5db8c56eeb"))
(974000, uint256S("0x000089352ebd5def5f0c5f45c44bb202050a5bd8eb5f7be8afb2acff24ddaa95"))
(975000, uint256S("0x000024b561197358ab92e2c2f535207d81664b66b8bb4b2b4a6a02268570813e"))
(976000, uint256S("0x00006a53ed79e17b40cc042fd0a9e69947e9c46d4d543dcdc8c04e8bb8a120ba"))
(977000, uint256S("0x00001126e98094e28fc99747307f3614a81293ad48e0cf21615119148e4f023c"))
(978000, uint256S("0x00003ed71e9504cf37e0211f649efdbbe54e774a0e066e922a4b14a78499a747"))
(979000, uint256S("0x000028cab68c0404292dcd89f04cdcedd68fd8e66ea85fea84ac0fd978ec4429"))
(980000, uint256S("0x0000017214698c757c38cee40a6c14c6d2f5000dcfdb2de65e47956443d03be4"))
(981000, uint256S("0x000017d35857c636c16c765afbbd5755303270f5a4c4f4f3baa1c6ffcc07f25c"))
(982000, uint256S("0x0000290a27f6add114ab8f49812f57c606c2e3ae9ae8830d6fbb19d81a38c6b5"))
(983000, uint256S("0x00005ead64a87b9c14831a782517a7759b5bf05f28ca54b10fcacc7c626f28ad"))
(984000, uint256S("0x000022fafeb4da74660c4b44c2c6916151f7e158fdb8d9b4b238e74eb5e83641"))
(985000, uint256S("0x00000fedd91f10cf512535147e9706993fdcd7d5609c6d47fc8a2b9a2efd0f50"))
(986000, uint256S("0x000065dbfba59de0e52b772507169b0ebdac9f73369f794c0799738df30ea2a0"))
(987000, uint256S("0x00002723abb80e9ece84055c113e0caa507177ddc88cb6b8011ecba39b490dd8"))
(988000, uint256S("0x00001938e724c8033d1f60ddd27512f6f358847e96c63def28e85bd40616117c"))
(989000, uint256S("0x00003071ff9188d27f744395aefb1d406cccc15f61b7f79bba0ea9d100475a63"))
,(int64_t) 1704021429, // time of last checkpointed block
(int64_t) 1010830, // total txs
(double) 2419 // txs in the last day before block 989271
};
} else {
// all other HSC's with no checkpoints

4
src/clientversion.h

@ -30,7 +30,7 @@
// Must be kept in sync with configure.ac , ugh!
#define CLIENT_VERSION_MAJOR 3
#define CLIENT_VERSION_MINOR 10
#define CLIENT_VERSION_REVISION 0
#define CLIENT_VERSION_REVISION 1
#define CLIENT_VERSION_BUILD 50
//! Set to true for release, false for prerelease or test build
@ -40,7 +40,7 @@
* Copyright year (2009-this)
* Todo: update this when changing our copyright comments in the source
*/
#define COPYRIGHT_YEAR 2023
#define COPYRIGHT_YEAR 2024
#endif //HAVE_CONFIG_H

62
src/deprecation.cpp

@ -1,62 +0,0 @@
// Copyright (c) 2017 The Zcash developers
// Copyright (c) 2016-2023 The Hush developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************
* Copyright © 2014-2019 The SuperNET Developers. *
* *
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
* the top-level directory of this distribution for the individual copyright *
* holder information and the developer policies on copyright and licensing. *
* *
* Unless otherwise agreed in a custom licensing agreement, no part of the *
* SuperNET software, including this file may be copied, modified, propagated *
* or distributed except according to the terms contained in the LICENSE file *
* *
* Removal or modification of this copyright notice is prohibited. *
* *
******************************************************************************/
#include "deprecation.h"
#include "clientversion.h"
#include "init.h"
#include "ui_interface.h"
#include "util.h"
#include "chainparams.h"
static const std::string CLIENT_VERSION_STR = FormatVersion(CLIENT_VERSION);
extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN];
void EnforceNodeDeprecation(int nHeight, bool forceLogging, bool fThread) {
// Do not enforce deprecation in regtest or on testnet
std::string networkID = Params().NetworkIDString();
std::string msg;
if (networkID != "main" || SMART_CHAIN_SYMBOL[0] != 0 ) return;
int blocksToDeprecation = DEPRECATION_HEIGHT - nHeight;
if (blocksToDeprecation <= 0) {
// In order to ensure we only log once per process when deprecation is
// disabled (to avoid log spam), we only need to log in two cases:
// - The deprecating block just arrived
// - This can be triggered more than once if a block chain reorg
// occurs, but that's an irregular event that won't cause spam.
// - The node is starting
if (blocksToDeprecation == 0 || forceLogging) {
msg = strprintf(_("This version has been deprecated as of block height %d."),
DEPRECATION_HEIGHT) + " " +
_("You should upgrade to the latest version of Hush.");
LogPrintf("*** %s\n", msg);
uiInterface.ThreadSafeMessageBox(msg, "", CClientUIInterface::MSG_ERROR);
}
StartShutdown();
} else if (blocksToDeprecation == DEPRECATION_WARN_LIMIT || (blocksToDeprecation < DEPRECATION_WARN_LIMIT && forceLogging)) {
msg = strprintf(_("This version will be deprecated at block height %d, and will automatically shut down."),
DEPRECATION_HEIGHT) + " " +
_("You should upgrade to the latest version of Hush.");
LogPrintf("*** %s\n", msg);
uiInterface.ThreadSafeMessageBox(msg, "", CClientUIInterface::MSG_WARNING);
}
}

41
src/deprecation.h

@ -1,41 +0,0 @@
// Copyright (c) 2017 The Zcash developers
// Copyright (c) 2016-2023 The Hush developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************
* Copyright © 2014-2019 The SuperNET Developers. *
* *
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
* the top-level directory of this distribution for the individual copyright *
* holder information and the developer policies on copyright and licensing. *
* *
* Unless otherwise agreed in a custom licensing agreement, no part of the *
* SuperNET software, including this file may be copied, modified, propagated *
* or distributed except according to the terms contained in the LICENSE file *
* *
* Removal or modification of this copyright notice is prohibited. *
* *
******************************************************************************/
#ifndef ZCASH_DEPRECATION_H
#define ZCASH_DEPRECATION_H
// Deprecation policy:
// * Shut down WEEKS_UNTIL_DEPRECATION weeks' worth of blocks after the estimated release block height.
// * A warning is shown during the DEPRECATION_WARN_LIMIT worth of blocks prior to shut down.
static const int WEEKS_UNTIL_DEPRECATION = 52;
static const int DEPRECATION_HEIGHT = 5555555;
static const int APPROX_RELEASE_HEIGHT = DEPRECATION_HEIGHT - (WEEKS_UNTIL_DEPRECATION * 7 * 24 * 60);
// Number of blocks before deprecation to warn users
static const int DEPRECATION_WARN_LIMIT = 60 * 24 * 60; // 2 months
/**
* Checks whether the node is deprecated based on the current block height, and
* shuts down the node with an error if so (and deprecation is not disabled for
* the current client version).
*/
void EnforceNodeDeprecation(int nHeight, bool forceLogging=false, bool fThread=true);
#endif // ZCASH_DEPRECATION_H

153
src/gtest/test_deprecation.cpp

@ -1,153 +0,0 @@
// Copyright (c) 2016-2023 The Hush developers
// Distributed under the GPLv3 software license, see the accompanying
// Released under the GPLv3
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "chainparams.h"
#include "clientversion.h"
#include "deprecation.h"
#include "init.h"
#include "ui_interface.h"
#include "util.h"
#include "util/strencodings.h"
#include <boost/filesystem/operations.hpp>
#include <fstream>
using ::testing::StrictMock;
static const std::string CLIENT_VERSION_STR = FormatVersion(CLIENT_VERSION);
extern std::atomic<bool> fRequestShutdown;
class MockUIInterface {
public:
MOCK_METHOD3(ThreadSafeMessageBox, bool(const std::string& message,
const std::string& caption,
unsigned int style));
};
static bool ThreadSafeMessageBox(MockUIInterface *mock,
const std::string& message,
const std::string& caption,
unsigned int style)
{
return mock->ThreadSafeMessageBox(message, caption, style);
}
class DeprecationTest : public ::testing::Test {
protected:
virtual void SetUp() {
uiInterface.ThreadSafeMessageBox.disconnect_all_slots();
uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, &mock_, _1, _2, _3));
SelectParams(CBaseChainParams::MAIN);
}
virtual void TearDown() {
fRequestShutdown = false;
mapArgs.clear();
}
StrictMock<MockUIInterface> mock_;
static std::vector<std::string> read_lines(boost::filesystem::path filepath) {
std::vector<std::string> result;
std::ifstream f(filepath.string().c_str());
std::string line;
while (std::getline(f,line)) {
result.push_back(line);
}
return result;
}
};
TEST_F(DeprecationTest, NonDeprecatedNodeKeepsRunning) {
EXPECT_FALSE(ShutdownRequested());
EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT - 1);
EXPECT_FALSE(ShutdownRequested());
}
TEST_F(DeprecationTest, NodeNearDeprecationIsWarned) {
EXPECT_FALSE(ShutdownRequested());
EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_WARNING));
EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT);
EXPECT_FALSE(ShutdownRequested());
}
TEST_F(DeprecationTest, NodeNearDeprecationWarningIsNotDuplicated) {
EXPECT_FALSE(ShutdownRequested());
EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT + 1);
EXPECT_FALSE(ShutdownRequested());
}
TEST_F(DeprecationTest, NodeNearDeprecationWarningIsRepeatedOnStartup) {
EXPECT_FALSE(ShutdownRequested());
EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_WARNING));
EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT + 1, true);
EXPECT_FALSE(ShutdownRequested());
}
TEST_F(DeprecationTest, DeprecatedNodeShutsDown) {
EXPECT_FALSE(ShutdownRequested());
EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_ERROR));
EnforceNodeDeprecation(DEPRECATION_HEIGHT);
EXPECT_TRUE(ShutdownRequested());
}
TEST_F(DeprecationTest, DeprecatedNodeErrorIsNotDuplicated) {
EXPECT_FALSE(ShutdownRequested());
EnforceNodeDeprecation(DEPRECATION_HEIGHT + 1);
EXPECT_TRUE(ShutdownRequested());
}
TEST_F(DeprecationTest, DeprecatedNodeErrorIsRepeatedOnStartup) {
EXPECT_FALSE(ShutdownRequested());
EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_ERROR));
EnforceNodeDeprecation(DEPRECATION_HEIGHT + 1, true);
EXPECT_TRUE(ShutdownRequested());
}
TEST_F(DeprecationTest, DeprecatedNodeIgnoredOnRegtest) {
SelectParams(CBaseChainParams::REGTEST);
EXPECT_FALSE(ShutdownRequested());
EnforceNodeDeprecation(DEPRECATION_HEIGHT+1);
EXPECT_FALSE(ShutdownRequested());
}
TEST_F(DeprecationTest, DeprecatedNodeIgnoredOnTestnet) {
SelectParams(CBaseChainParams::TESTNET);
EXPECT_FALSE(ShutdownRequested());
EnforceNodeDeprecation(DEPRECATION_HEIGHT+1);
EXPECT_FALSE(ShutdownRequested());
}
TEST_F(DeprecationTest, AlertNotify) {
boost::filesystem::path temp = GetTempPath() /
boost::filesystem::unique_path("alertnotify-%%%%.txt");
mapArgs["-alertnotify"] = std::string("echo %s >> ") + temp.string();
EXPECT_CALL(mock_, ThreadSafeMessageBox(::testing::_, "", CClientUIInterface::MSG_WARNING));
EnforceNodeDeprecation(DEPRECATION_HEIGHT - DEPRECATION_WARN_LIMIT, false, false);
std::vector<std::string> r = read_lines(temp);
EXPECT_EQ(r.size(), 1u);
// -alertnotify restricts the message to safe characters.
auto expectedMsg = strprintf(
"This version will be deprecated at block height %d, and will automatically shut down. You should upgrade to the latest version of Hush.",
DEPRECATION_HEIGHT);
// Windows built-in echo semantics are different than posixy shells. Quotes and
// whitespace are printed literally.
#ifndef WIN32
EXPECT_EQ(r[0], expectedMsg);
#else
EXPECT_EQ(r[0], strprintf("'%s' ", expectedMsg));
#endif
boost::filesystem::remove(temp);
}

88
src/hush_bitcoind.h

@ -551,34 +551,6 @@ CScript hush_makeopret(CBlock *pblock, bool fNew)
return(opret);
}
/*uint256 hush_getblockhash(int32_t height)
{
uint256 hash; char params[128],*hexstr,*jsonstr; cJSON *result; int32_t i; uint8_t revbuf[32];
memset(&hash,0,sizeof(hash));
sprintf(params,"[%d]",height);
if ( (jsonstr= hush_issuemethod(HUSHUSERPASS,(char *)"getblockhash",params,BITCOIND_RPCPORT)) != 0 )
{
if ( (result= cJSON_Parse(jsonstr)) != 0 )
{
if ( (hexstr= jstr(result,(char *)"result")) != 0 )
{
if ( is_hexstr(hexstr,0) == 64 )
{
decode_hex(revbuf,32,hexstr);
for (i=0; i<32; i++)
((uint8_t *)&hash)[i] = revbuf[31-i];
}
}
free_json(result);
}
printf("HUSH3 hash.%d (%s) %x\n",height,jsonstr,*(uint32_t *)&hash);
free(jsonstr);
}
return(hash);
}
uint256 _hush_getblockhash(int32_t height);*/
uint64_t hush_seed(int32_t height)
{
uint64_t seed = 0;
@ -724,6 +696,7 @@ int32_t hush_block2height(CBlock *block)
return(height);
}
// return true if the first output of the first tx in a block is valid
int32_t hush_block2pubkey33(uint8_t *pubkey33,CBlock *block)
{
int32_t n;
@ -976,7 +949,7 @@ CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams);
// 10% of all block rewards go towards Hush core team
// If you do not like this, you are encouraged to fork the chain
// or start your own Hush Smart Chain: https://git.hush.is/hush/hush-smart-chains
// HUSH supply curve cannot be exactly represented via KMD AC CLI args, so we do it ourselves.
// HUSH supply curve cannot be exactly represented via CLI args, so we do it ourselves.
// You specify the BR, and the FR % gets added so 10% of 12.5 is 1.25
// but to tell the AC params, I need to say "11% of 11.25" is 1.25
// 11% ie. 1/9th cannot be exactly represented and so the FR has tiny amounts of error unless done manually
@ -1619,7 +1592,10 @@ int64_t hush_checkcommission(CBlock *pblock,int32_t height)
if(fDebug)
fprintf(stderr,"%s at height=%d\n",__func__,height);
int64_t checktoshis=0; uint8_t *script,scripthex[8192]; int32_t scriptlen,matched = 0; static bool didinit = false;
ASSETCHAINS_SCRIPTPUB = devtax_scriptpub_for_height(height);
// Create a local variable instead of modifying the global ASSETCHAINS_SCRIPTPUB
auto assetchains_scriptpub = devtax_scriptpub_for_height(height);
if ( ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD != 0 )
{
checktoshis = the_commission(pblock,height);
@ -1639,19 +1615,22 @@ int64_t hush_checkcommission(CBlock *pblock,int32_t height)
fprintf(stderr,"%02x",script[i]);
fprintf(stderr," vout[1] %.8f vs %.8f\n",(double)checktoshis/COIN,(double)pblock->vtx[0].vout[1].nValue/COIN);
}
if ( ASSETCHAINS_SCRIPTPUB.size() > 1 )
if ( assetchains_scriptpub.size() > 1 )
{
static bool didinit = false;
if ( !didinit && height > HUSH_EARLYTXID_HEIGHT && HUSH_EARLYTXID != zeroid && hush_appendACscriptpub() )
{
fprintf(stderr, "appended CC_op_return to ASSETCHAINS_SCRIPTPUB.%s\n", ASSETCHAINS_SCRIPTPUB.c_str());
fprintf(stderr, "appended CC_op_return to assetchains_scriptpub.%s\n", assetchains_scriptpub.c_str());
didinit = true;
}
if ( ASSETCHAINS_SCRIPTPUB.size()/2 == scriptlen && scriptlen < sizeof(scripthex) )
if ( assetchains_scriptpub.size()/2 == scriptlen && scriptlen < sizeof(scripthex) )
{
decode_hex(scripthex,scriptlen,(char *)ASSETCHAINS_SCRIPTPUB.c_str());
if ( memcmp(scripthex,script,scriptlen) == 0 )
decode_hex(scripthex,scriptlen,(char *)assetchains_scriptpub.c_str());
if ( memcmp(scripthex,script,scriptlen) == 0 ) {
matched = scriptlen;
} else {
fprintf(stderr, "%s: assetchains_scriptpub != scripthex scriptlen=%d\n", __func__, scriptlen);
}
}
}
else if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,ASSETCHAINS_OVERRIDE_PUBKEY33,33) == 0 )
@ -1660,13 +1639,19 @@ int64_t hush_checkcommission(CBlock *pblock,int32_t height)
matched = 25;
if ( matched == 0 )
{
if ( 0 && ASSETCHAINS_SCRIPTPUB.size() > 1 )
if ( assetchains_scriptpub.size() > 1 )
{
int32_t i;
for (i=0; i<ASSETCHAINS_SCRIPTPUB.size(); i++)
fprintf(stderr,"%02x",ASSETCHAINS_SCRIPTPUB[i]);
fprintf(stderr,"%s: assetchains_scriptpub=", __func__);
for (i=0; i<assetchains_scriptpub.size(); i++) {
fprintf(stderr,"%02x",assetchains_scriptpub[i]);
}
fprintf(stderr," vs script=");
for (i=0; i<scriptlen; i++) {
fprintf(stderr,"%02x",script[i]);
}
}
fprintf(stderr," -ac[%d] payment to wrong pubkey scriptlen.%d, scriptpub[%d] checktoshis.%llu\n",(int32_t)ASSETCHAINS_SCRIPTPUB.size(),scriptlen,(int32_t)ASSETCHAINS_SCRIPTPUB.size()/2,(long long)checktoshis);
fprintf(stderr," -ac[%d] payment to wrong pubkey scriptlen.%d, scriptpub[%d] checktoshis.%llu\n",(int32_t)assetchains_scriptpub.size(),scriptlen,(int32_t)assetchains_scriptpub.size()/2,(long long)checktoshis);
return(-1);
}
@ -1686,7 +1671,8 @@ bool HUSH_TEST_ASSETCHAIN_SKIP_POW = 0;
int32_t hush_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height)
{
uint256 hash,merkleroot; arith_uint256 bnTarget,bhash; bool fNegative,fOverflow; uint8_t *script,pubkey33[33],pubkeys[64][33]; int32_t i,scriptlen,possible,PoSperc,is_PoSblock=0,n,failed = 0,notaryid = -1; int64_t checktoshis,value; CBlockIndex *pprev;
uint256 hash,merkleroot; arith_uint256 bnTarget,bhash; bool fNegative,fOverflow; uint8_t *script,pubkey33[33];
int32_t i,scriptlen,possible,PoSperc,is_PoSblock=0,n,failed = 0,notaryid = -1; int64_t checktoshis,value; CBlockIndex *pprev;
if ( HUSH_TEST_ASSETCHAIN_SKIP_POW == 0 && Params().NetworkIDString() == "regtest" )
HUSH_TEST_ASSETCHAIN_SKIP_POW = 1;
if ( !CheckEquihashSolution(pblock, Params()) )
@ -1712,18 +1698,7 @@ int32_t hush_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height)
if ( (SMART_CHAIN_SYMBOL[0] != 0) && bhash > bnTarget ) {
failed = 1;
if ( height > 0 && SMART_CHAIN_SYMBOL[0] == 0 ) // for the fast case
{
if ( (n= hush_notaries(pubkeys,height,pblock->nTime)) > 0 )
{
for (i=0; i<n; i++)
if ( memcmp(pubkey33,pubkeys[i],33) == 0 )
{
notaryid = i;
break;
}
}
} else if ( possible == 0 || SMART_CHAIN_SYMBOL[0] != 0 ) {
if ( possible == 0 || SMART_CHAIN_SYMBOL[0] != 0 ) {
if ( HUSH_TEST_ASSETCHAIN_SKIP_POW )
return(0);
if ( ASSETCHAINS_STAKED == 0 )
@ -1732,13 +1707,14 @@ int32_t hush_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height)
}
if ( failed == 0 && ASSETCHAINS_COMMISSION != 0 ) {
if ( height == 1 ) {
ASSETCHAINS_SCRIPTPUB = devtax_scriptpub_for_height(height);
if ( ASSETCHAINS_SCRIPTPUB.size() > 1 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()] != 49 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()-1] != 51 ) {
// Create a local variable instead of modifying the global assetchains_scriptpub
auto assetchains_scriptpub = devtax_scriptpub_for_height(height);
if ( assetchains_scriptpub.size() > 1 && assetchains_scriptpub[assetchains_scriptpub.back()] != 49 && assetchains_scriptpub[assetchains_scriptpub.back()-1] != 51 ) {
int32_t scriptlen; uint8_t scripthex[10000];
script = (uint8_t *)&pblock->vtx[0].vout[0].scriptPubKey[0];
scriptlen = (int32_t)pblock->vtx[0].vout[0].scriptPubKey.size();
if ( ASSETCHAINS_SCRIPTPUB.size()/2 == scriptlen && scriptlen < sizeof(scripthex) ) {
decode_hex(scripthex,scriptlen,(char *)ASSETCHAINS_SCRIPTPUB.c_str());
if ( assetchains_scriptpub.size()/2 == scriptlen && scriptlen < sizeof(scripthex) ) {
decode_hex(scripthex,scriptlen,(char *)assetchains_scriptpub.c_str());
if ( memcmp(scripthex,script,scriptlen) != 0 )
return(-1);
} else return(-1);

29
src/hush_utils.h

@ -858,7 +858,7 @@ int32_t unhex(char c)
int32_t hex;
if ( (hex= _unhex(c)) < 0 )
{
//printf("unhex: illegal hexchar.(%c)\n",c);
fprintf(stderr,"unhex: illegal hexchar.(%c)\n",c);
}
return(hex);
}
@ -1513,14 +1513,6 @@ int32_t hush_whoami(char *pubkeystr,int32_t height,uint32_t timestamp)
return(notaryid);
}
char *argv0suffix[] = {
(char *)"fuckjl777d", (char *)"fuckjl777-cli", (char *)"fuckjl777d.exe", (char *)"fuckjl777-cli.exe", (char *)"btchd", (char *)"btch-cli", (char *)"btchd.exe", (char *)"btch-cli.exe"
};
char *argv0names[] = {
(char *)"FUCKJL777", (char *)"FUCKJL777", (char *)"FUCKJL777", (char *)"FUCKJL777", (char *)"BTCH", (char *)"BTCH", (char *)"BTCH", (char *)"BTCH"
};
// Large total supplies lead to numerical errors, beware!
uint64_t hush_max_money()
{
@ -1528,7 +1520,7 @@ uint64_t hush_max_money()
}
// This implements the Hush Emission Curve, the miner subsidy part,
// and must be kept in sync with hush_commision() in komoto_bitcoind.h!
// and must be kept in sync with hush_commision() in hush_bitcoind.h!
// Changing these functions are consensus changes!
// Here Be Dragons! -- Duke Leto
uint64_t hush_block_subsidy(int height)
@ -1803,21 +1795,6 @@ void hush_args(char *argv0)
name = GetArg("-ac_name","HUSH3");
fprintf(stderr,".oO Starting %s Full Node (Extreme Privacy!) with genproc=%d notary=%d\n",name.c_str(),HUSH_MININGTHREADS, IS_HUSH_NOTARY);
if ( argv0 != 0 )
{
len = (int32_t)strlen(argv0);
for (i=0; i<sizeof(argv0suffix)/sizeof(*argv0suffix); i++)
{
n = (int32_t)strlen(argv0suffix[i]);
if ( strcmp(&argv0[len - n],argv0suffix[i]) == 0 )
{
//printf("ARGV0.(%s) -> matches suffix (%s) -> ac_name.(%s)\n",argv0,argv0suffix[i],argv0names[i]);
name = argv0names[i];
break;
}
}
}
vector<string> HUSH_nodes= {"node1.hush.is","node2.hush.is","node3.hush.is",
"node4.hush.is","node5.hush.is","node6.hush.is",
"node7.hush.is","node8.hush.is","node1.hush.land", "node2.hush.land", "node3.hush.land", "node4.hush.land", "node5.hush.land"};
@ -1899,7 +1876,7 @@ void hush_args(char *argv0)
printf("ASSETCHAINS_ALGO, %s not supported. using equihash\n", selectedAlgo.c_str());
}
// Set our symobl from -ac_name value
// Set our symbol from -ac_name value
strncpy(SMART_CHAIN_SYMBOL,name.c_str(),sizeof(SMART_CHAIN_SYMBOL)-1);
bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;

2
src/init.cpp

@ -1633,7 +1633,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
return InitError(strprintf("User Agent comment (%s) contains unsafe characters.", cmt));
uacomments.push_back(SanitizeString(cmt, SAFE_CHARS_UA_COMMENT));
}
strSubVersion = FormatSubVersion(GetArg("-clientname","GoldenSandrout"), CLIENT_VERSION, uacomments);
strSubVersion = FormatSubVersion(GetArg("-clientname","GoldenSandtrout"), CLIENT_VERSION, uacomments);
if (strSubVersion.size() > MAX_SUBVERSION_LENGTH) {
return InitError(strprintf("Total length of network version string %i exceeds maximum of %i characters. Reduce the number and/or size of uacomments.",
strSubVersion.size(), MAX_SUBVERSION_LENGTH));

7
src/main.cpp

@ -27,7 +27,6 @@
#include "checkqueue.h"
#include "consensus/upgrades.h"
#include "consensus/validation.h"
#include "deprecation.h"
#include "init.h"
#include "merkleblock.h"
#include "metrics.h"
@ -3713,9 +3712,12 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) {
// Now that we have written the block indices to the database, we do not
// need to store solutions for these CBlockIndex objects in memory.
// cs_main must be held here.
uint32_t nTrimmed = 0;
for (CBlockIndex *pblockindex : vBlocks) {
pblockindex->TrimSolution();
++nTrimmed;
}
LogPrintf("%s: trimmed %d solutions from block index mode=%d\n", __func__, nTrimmed, mode);
}
// Finally remove any pruned files
if (fFlushForPrune)
@ -4027,8 +4029,6 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *
recentlyConflictedTxs.insert(std::make_pair(pindexNew, txConflicted));
nRecentlyConflictedSequence += 1;
EnforceNodeDeprecation(pindexNew->GetHeight());
int64_t nTime6 = GetTimeMicros(); nTimePostConnect += nTime6 - nTime5; nTimeTotal += nTime6 - nTime1;
LogPrint("bench", " - Connect postprocess: %.2fms [%.2fs]\n", (nTime6 - nTime5) * 0.001, nTimePostConnect * 0.000001);
LogPrint("bench", "- Connect block: %.2fms [%.2fs]\n", (nTime6 - nTime1) * 0.001, nTimeTotal * 0.000001);
@ -5992,7 +5992,6 @@ bool static LoadBlockIndexDB()
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.LastTip()->GetBlockTime()),
progress);
EnforceNodeDeprecation(chainActive.Height(), true);
CBlockIndex *pindex;
if ( (pindex= chainActive.LastTip()) != 0 )
{

27
src/miner.cpp

@ -660,27 +660,29 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32
pblock->vtx[0] = txNew;
ASSETCHAINS_SCRIPTPUB = devtax_scriptpub_for_height(nHeight);
if ( nHeight > 1 && SMART_CHAIN_SYMBOL[0] != 0 && (ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 || ASSETCHAINS_SCRIPTPUB.size() > 1) && (ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD != 0) && (commission= the_commission((CBlock*)&pblocktemplate->block,(int32_t)nHeight)) != 0 )
// Create a local variable instead of modifying the global ASSETCHAINS_SCRIPTPUB
auto assetchains_scriptpub = devtax_scriptpub_for_height(nHeight);
if ( nHeight > 1 && SMART_CHAIN_SYMBOL[0] != 0 && (ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 || assetchains_scriptpub.size() > 1) && (ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD != 0) && (commission= the_commission((CBlock*)&pblocktemplate->block,(int32_t)nHeight)) != 0 )
{
int32_t i; uint8_t *ptr;
txNew.vout.resize(2);
txNew.vout[1].nValue = commission;
if ( ASSETCHAINS_SCRIPTPUB.size() > 1 )
if ( assetchains_scriptpub.size() > 1 )
{
static bool didinit = false;
if ( !didinit && nHeight > HUSH_EARLYTXID_HEIGHT && HUSH_EARLYTXID != zeroid && hush_appendACscriptpub() )
{
fprintf(stderr, "appended ccopreturn to ASSETCHAINS_SCRIPTPUB.%s\n", ASSETCHAINS_SCRIPTPUB.c_str());
fprintf(stderr, "appended ccopreturn to assetchains_scriptpub.%s\n", assetchains_scriptpub.c_str());
didinit = true;
}
//fprintf(stderr,"mine to -ac_script\n");
//txNew.vout[1].scriptPubKey = CScript() << ParseHex();
int32_t len = strlen(ASSETCHAINS_SCRIPTPUB.c_str());
int32_t len = strlen(assetchains_scriptpub.c_str());
len >>= 1;
txNew.vout[1].scriptPubKey.resize(len);
ptr = (uint8_t *)&txNew.vout[1].scriptPubKey[0];
decode_hex(ptr,len,(char *)ASSETCHAINS_SCRIPTPUB.c_str());
decode_hex(ptr,len,(char *)assetchains_scriptpub.c_str());
} else {
txNew.vout[1].scriptPubKey.resize(35);
ptr = (uint8_t *)&txNew.vout[1].scriptPubKey[0];
@ -850,8 +852,10 @@ CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey, int32_t nHeight,
{
CPubKey pubkey; CScript scriptPubKey; uint8_t *script,*ptr; int32_t i,len;
// fprintf(stderr,"%s: with nHeight=%d\n", __func__, nHeight);
ASSETCHAINS_SCRIPTPUB = devtax_scriptpub_for_height(nHeight);
if ( nHeight == 1 && ASSETCHAINS_COMMISSION != 0 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()] != 49 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()-1] != 51 )
// Create a local variable instead of modifying the global assetchains_scriptpub
auto assetchains_scriptpub = devtax_scriptpub_for_height(nHeight);
if ( nHeight == 1 && ASSETCHAINS_COMMISSION != 0 && assetchains_scriptpub[assetchains_scriptpub.back()] != 49 && assetchains_scriptpub[assetchains_scriptpub.back()-1] != 51 )
{
if ( ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 )
{
@ -859,11 +863,11 @@ CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey, int32_t nHeight,
scriptPubKey = CScript() << ParseHex(HexStr(pubkey)) << OP_CHECKSIG;
// fprintf(stderr,"%s: with pubkey=%s\n", __func__, HexStr(pubkey).c_str() );
} else {
len = strlen(ASSETCHAINS_SCRIPTPUB.c_str());
len = strlen(assetchains_scriptpub.c_str());
len >>= 1;
scriptPubKey.resize(len);
ptr = (uint8_t *)&scriptPubKey[0];
decode_hex(ptr,len,(char *)ASSETCHAINS_SCRIPTPUB.c_str());
decode_hex(ptr,len,(char *)assetchains_scriptpub.c_str());
}
} else if ( USE_EXTERNAL_PUBKEY != 0 ) {
//fprintf(stderr,"use notary pubkey\n");
@ -1266,7 +1270,6 @@ void static RandomXMiner()
LogPrintf("Running HushRandomXMiner with %u transactions in block (%u bytes)\n",pblock->vtx.size(),::GetSerializeSize(*pblock,SER_NETWORK,PROTOCOL_VERSION));
// Search
uint8_t pubkeys[66][33]; arith_uint256 bnMaxPoSdiff; uint32_t blocktimes[66]; int mids[256],nonzpkeys,i,j,externalflag;
uint32_t savebits;
int64_t nStart = GetTime();
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, Params().GetConsensus());
@ -1613,7 +1616,7 @@ void static BitcoinMiner()
LogPrintf("Running HushMiner.%s with %u transactions in block (%u bytes)\n",solver.c_str(),pblock->vtx.size(),::GetSerializeSize(*pblock,SER_NETWORK,PROTOCOL_VERSION));
// Search
uint8_t pubkeys[66][33]; arith_uint256 bnMaxPoSdiff; uint32_t blocktimes[66]; int mids[256],nonzpkeys,i,j,externalflag; uint32_t savebits; int64_t nStart = GetTime();
uint32_t savebits; int64_t nStart = GetTime();
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, Params().GetConsensus());
savebits = pblock->nBits;
HASHTarget = arith_uint256().SetCompact(savebits);

4
src/rpc/mining.cpp

@ -544,7 +544,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp, const CPubKey& myp
"\nArguments:\n"
"1. \"jsonrequestobject\" (string, optional) A json object in the following spec\n"
" {\n"
" \"mode\":\"template\" (string, optional) This must be set to \"template\" or omitted\n"
" \"mode\":\"template\" (string, optional) This must be set to \"template\", \"proposal\", \"disablecb\". Default is \"template\" \n"
" \"capabilities\":[ (array, optional) A list of strings\n"
" \"support\" (string) client side supported feature, 'longpoll', 'coinbasetxn', 'coinbasevalue', 'proposal', 'serverlist', 'workid'\n"
" ,...\n"
@ -572,7 +572,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp, const CPubKey& myp
" ,...\n"
" ],\n"
// " \"coinbasevalue\" : n, (numeric) maximum allowable input to coinbase transaction, including the generation award and transaction fees (in Satoshis)\n"
" \"coinbasetxn\" : { ... }, (json object) information for coinbase transaction\n"
" \"coinbasetxn\" : { ... }, (json object) information for coinbase transaction. Not present when mode=disablecb\n"
" \"target\" : \"xxxx\", (string) The hash target\n"
" \"mintime\" : xxx, (numeric) The minimum timestamp appropriate for next block time in seconds since epoch (Jan 1 1970 GMT)\n"
" \"mutable\" : [ (array of string) list of ways the block template may be changed \n"

29
src/rpc/net.cpp

@ -27,7 +27,6 @@
#include "timedata.h"
#include "util.h"
#include "version.h"
#include "deprecation.h"
#include "hush/utiltls.h"
#include <boost/foreach.hpp>
#include <univalue.h>
@ -495,33 +494,6 @@ static UniValue GetNetworksInfo()
return networks;
}
UniValue getdeprecationinfo(const UniValue& params, bool fHelp, const CPubKey& mypk)
{
const CChainParams& chainparams = Params();
if (fHelp || params.size() != 0 || chainparams.NetworkIDString() != "main")
throw runtime_error(
"getdeprecationinfo\n"
"Returns an object containing current version and deprecation block height. Applicable only on mainnet.\n"
"\nResult:\n"
"{\n"
" \"version\": xxxxx, (numeric) the server version\n"
" \"subversion\": \"/GoldenSandtrout:x.y.z[-v]/\", (string) the server subversion string\n"
" \"deprecationheight\": xxxxx, (numeric) the block height at which this version will deprecate and shut down\n"
"}\n"
"\nExamples:\n"
+ HelpExampleCli("getdeprecationinfo", "")
+ HelpExampleRpc("getdeprecationinfo", "")
);
UniValue obj(UniValue::VOBJ);
obj.push_back(Pair("version", CLIENT_VERSION));
obj.push_back(Pair("subversion",
FormatSubVersion(GetArg("-clientname","GoldenSandtrout"), CLIENT_VERSION, std::vector<string>())));
obj.push_back(Pair("deprecationheight", DEPRECATION_HEIGHT));
return obj;
}
UniValue getnetworkinfo(const UniValue& params, bool fHelp, const CPubKey& mypk)
{
if (fHelp || params.size() != 0)
@ -710,7 +682,6 @@ static const CRPCCommand commands[] =
{ // category name actor (function) okSafeMode
// --------------------- ------------------------ ----------------------- ----------
{ "network", "getconnectioncount", &getconnectioncount, true },
{ "network", "getdeprecationinfo", &getdeprecationinfo, true },
{ "network", "ping", &ping, true },
{ "network", "getpeerlist", &getpeerlist, true },
{ "network", "getpeerinfo", &getpeerinfo, true },

1
src/rpc/rawtransaction.cpp

@ -21,7 +21,6 @@
#include "consensus/validation.h"
#include "core_io.h"
#include "init.h"
#include "deprecation.h"
#include "key_io.h"
#include "keystore.h"
#include "main.h"

1
src/rpc/server.cpp

@ -299,7 +299,6 @@ static const CRPCCommand vRPCCommands[] =
/* P2P networking */
{ "network", "getnetworkinfo", &getnetworkinfo, true },
{ "network", "getdeprecationinfo", &getdeprecationinfo, true },
{ "network", "addnode", &addnode, true },
{ "network", "disconnectnode", &disconnectnode, true },
{ "network", "getaddednodeinfo", &getaddednodeinfo, true },

1
src/rpc/server.h

@ -391,7 +391,6 @@ extern UniValue setstakingsplit(const UniValue& params, bool fHelp, const CPubKe
extern UniValue getwalletinfo(const UniValue& params, bool fHelp, const CPubKey& mypk);
extern UniValue getblockchaininfo(const UniValue& params, bool fHelp, const CPubKey& mypk);
extern UniValue getnetworkinfo(const UniValue& params, bool fHelp, const CPubKey& mypk);
extern UniValue getdeprecationinfo(const UniValue& params, bool fHelp, const CPubKey& mypk);
extern UniValue setmocktime(const UniValue& params, bool fHelp, const CPubKey& mypk);
extern UniValue resendwallettransactions(const UniValue& params, bool fHelp, const CPubKey& mypk);

Loading…
Cancel
Save