From ce043aaac42fb69c0726dfea420ecd4453d2a66e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 11 Oct 2019 22:16:12 -0400 Subject: [PATCH 001/277] Debug stuff to track down what is up with this sync bug --- src/coins.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/coins.cpp b/src/coins.cpp index eac89c030..a3cb5753e 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -561,7 +561,10 @@ unsigned int CCoinsViewCache::GetCacheSize() const { const CTxOut &CCoinsViewCache::GetOutputFor(const CTxIn& input) const { const CCoins* coins = AccessCoins(input.prevout.hash); + fprintf(stderr, "GetOutputFor: input=%s", input.ToString().c_str()); + fprintf(stderr, "GetOutputFor: prevout n=%d,txid=%s\n", input.prevout.n, input.prevout.hash.ToString().c_str()); assert(coins && coins->IsAvailable(input.prevout.n)); + fprintf(stderr, "GetOutputFor: IsAvailable\n"); return coins->vout[input.prevout.n]; } From b6158023fea00d0829300ad9f51e2aa735d99979 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 12 Oct 2019 10:28:58 -0400 Subject: [PATCH 002/277] more debug infoz --- src/coins.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/coins.h b/src/coins.h index d7e357e9e..32f959f78 100644 --- a/src/coins.h +++ b/src/coins.h @@ -245,6 +245,7 @@ public: //! check whether a particular output is still available bool IsAvailable(unsigned int nPos) const { + fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li, vout[%d].IsNull()=%d", nPos, vout.size(), nPos, vout[nPos].IsNull() ); return (nPos < vout.size() && !vout[nPos].IsNull()); } From ac048028c36c645b080836b68a3d733913eee466 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 12 Oct 2019 23:29:30 -0400 Subject: [PATCH 003/277] wip --- src/coins.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/coins.h b/src/coins.h index 32f959f78..dd5019aab 100644 --- a/src/coins.h +++ b/src/coins.h @@ -245,7 +245,9 @@ public: //! check whether a particular output is still available bool IsAvailable(unsigned int nPos) const { - fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li, vout[%d].IsNull()=%d", nPos, vout.size(), nPos, vout[nPos].IsNull() ); + //fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li, vout[%d].IsNull()=%d", nPos, vout.size(), nPos, vout[nPos].IsNull() ); + //fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li, vout[%d]=%d", nPos, vout.size(), nPos, vout[nPos] ); + fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li", nPos, vout.size() ); return (nPos < vout.size() && !vout[nPos].IsNull()); } From 75424936e3022700299e307766bbc3680397e1c6 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 19 Nov 2020 07:11:10 -0500 Subject: [PATCH 004/277] Set new season + DPoW activation height to 340420 Hard fork heights must form a well-ordered set such that a < b, for every, pair of heights listed in increasing order. There cannot be a fork height which is less than a previous fork height, various boolean logic in deep places will fail. So we choose a height just after the z2z halving, approximately 9 hours later at our new blocktime of 75 seconds. --- src/hush_defs.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/hush_defs.h b/src/hush_defs.h index bfc937d06..67ac7132a 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -44,6 +44,7 @@ // 7113400 = 5x current KMD blockheight. // to add seasons, change NUM_HUSH_SEASONS, and add timestamp and height of activation to these arrays. +// Always define one more season than is actually needed, which has a block activation in the far future #define NUM_HUSH_SEASONS 7 //TODO: some parts of the codebase assume 64 and do not use this constant #define NUM_HUSH_NOTARIES 64 @@ -58,7 +59,7 @@ const uint32_t nHushHardforkHeight = 166250; const uint32_t nHushHardforkHeight2 = 245055; // This height begins Hush DPoW from Hush notaries -const uint32_t nHushHardforkHeight3 = 320000; +const uint32_t nHushHardforkHeight3 = 340420; // No coins/code are currently using timestamp activated fork const uint32_t nHushHardforkTimestamp = 1580303652; // Jan 29nd 1pm GMT @@ -71,6 +72,7 @@ static const int32_t HUSH_SEASON_HEIGHTS[NUM_HUSH_SEASONS] = {1,2,nHushHardf static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = { { + // season 1 { "0_jl777_testA", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, { "0_jl777_testB", "02ebfc784a4ba768aad88d44d1045d240d47b26e248cafaf1c5169a42d7a61d344" }, { "0_kolo_testA", "0287aa4b73988ba26cf6565d815786caf0d2c4af704d7883d163ee89cd9977edec" }, @@ -137,6 +139,7 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = { "xxspot2_XX", "03d85b221ea72ebcd25373e7961f4983d12add66a92f899deaf07bab1d8b6f5573" } }, { + // season 2 {"0dev1_jl777", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, {"0dev2_kolo", "030f34af4b908fb8eb2099accb56b8d157d49f6cfb691baa80fdd34f385efed961" }, {"0dev3_kolo", "025af9d2b2a05338478159e9ac84543968fd18c45fd9307866b56f33898653b014" }, @@ -204,6 +207,7 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = }, { + // season 3 {"madmax_NA", "0237e0d3268cebfa235958808db1efc20cc43b31100813b1f3e15cc5aa647ad2c3" }, // 0 {"alright_AR", "020566fe2fb3874258b2d3cf1809a5d650e0edc7ba746fa5eec72750c5188c9cc9" }, {"strob_NA", "0206f7a2e972d9dfef1c424c731503a0a27de1ba7a15a91a362dc7ec0d0fb47685" }, @@ -271,7 +275,7 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = }, { - // Season 3.5 third party NN pubkeys from https://github.com/KomodoPlatform/dPoW/blob/master/dragon/3rd_party + // Season 4 third party NN pubkeys from https://github.com/KomodoPlatform/dPoW/blob/master/dragon/3rd_party {"madmax_NA", "02ef81a360411adf71184ff04d0c5793fc41fd1d7155a28dd909f21f35f4883ac1" }, {"alright_AR", "036a6bca1c2a8166f79fa8a979662892742346cc972b432f8e61950a358d705517" }, {"strob_NA", "02049202f3872877e81035549f6f3a0f868d0ad1c9b0e0d2b48b1f30324255d26d" }, @@ -339,7 +343,7 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = }, { - // Season 4 https://github.com/KomodoPlatform/dPoW/blob/s4/dragon/3rd_party + // Season 5 (fuck season 3.5) https://github.com/KomodoPlatform/dPoW/blob/s4/dragon/3rd_party {"alien_AR", "024f20c096b085308e21893383f44b4faf1cdedea9ad53cc7d7e7fbfa0c30c1e71" }, {"alien_EU", "022b85908191788f409506ebcf96a892f3274f352864c3ed566c5a16de63953236" }, {"alien_NA", "022f62b56ddfd07c9860921c701285ac39bb3ac8f6f083d1b59c8f4943be3de162" }, @@ -406,7 +410,7 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = {"zatjum_SH", "0241c5660ca540780be66603b1791127a1261d56abbcb7562c297eec8e4fc078fb" } }, { - // Hush Delayed Proof of Work + // Hush Delayed Proof of Work, Season 6 In The Great History Of DPoW // NOTE: Hush notaries are anon, where KMD notaries doxx themselves, lulz // TODO: Fill in production pubkeys, these are placeholders {"notary01", "024f20c096b085308e21893383f4404faf1cdedea9ad53cc7d7e7fbfa0c30c1e70" }, From c0fdc062d39568c3f2ab9a1e143bf1278c5ff8d1 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 14 Nov 2020 04:08:57 -0500 Subject: [PATCH 005/277] Remove discord from readme --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 95c8999fe..4adcbf929 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ ![Logo](doc/hush/hush.png "Logo") -HUSH (originally Zdash) is a code fork of [ZCash](https://z.cash/) which has -it's own genesis block. It is not a fork of another network. Based on +HUSH (originally Zdash) is a source code fork of [ZCash](https://z.cash/) and has +it's own genesis block. It is not a chain fork of another coin. Based on Bitcoin's code, it intends to offer a far higher standard of privacy through a sophisticated zero-knowledge proving scheme that preserves confidentiality of transaction metadata. @@ -17,10 +17,12 @@ or more once the blockchain has reached a significant size. **HUSH is unfinished and highly experimental.** Use at your own risk! -## Discord +## Telegram -Please feel free to join us on Discord at https://myhush.org/discord -There are many channels, some you might enjoy are #general, #support and #mining. +Please feel free to join us on Telegram : + * Main group: https://hush.is/telegram + * Support group: https://hush.is/telegram_support + * Mining group: https://hush.is/telegram_support ## Claiming Funds From Old Hush Wallets From a90002e1ad116c7245294b98442e8f34090ee466 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 19 Nov 2020 10:24:12 -0500 Subject: [PATCH 006/277] Update links --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4adcbf929..5ba089ea2 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ or more once the blockchain has reached a significant size. Please feel free to join us on Telegram : * Main group: https://hush.is/telegram * Support group: https://hush.is/telegram_support - * Mining group: https://hush.is/telegram_support + * Mining group: https://hush.is/telegram_mining ## Claiming Funds From Old Hush Wallets @@ -45,7 +45,7 @@ with `t1` and now they begin with `R`. To see what an old HUSH v2 address looks like on the new chain, this online tool can be used: https://dexstats.info/addressconverter.php -or this command line tool: https://github.com/MyHush/hush3/blob/duke/contrib/convert_address.py +or this command line tool: https://git.hush.is/hush/hush3/src/duke/contrib/convert_address.py ### Using an old wallet.dat @@ -120,7 +120,7 @@ The source code for the Hush web wallet is here: https://github.com/MyHush/myhus Installing ---------- -See [INSTALL.md](https://github.com/MyHush/hush3/blob/master/INSTALL.md). +See [INSTALL.md](https://git.hush.is/hush/hush3/src/master/INSTALL.md). License From 17183a82ae337a84cbb716171dc282f673f6edec Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 14 Nov 2020 04:25:43 -0500 Subject: [PATCH 007/277] Nope --- README.md | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/README.md b/README.md index 5ba089ea2..0c08a5416 100644 --- a/README.md +++ b/README.md @@ -96,27 +96,6 @@ You can also transport funds one address at a time via private keys. Agama Desktop Wallet WIF-to-WIF Tool can convert between old HUSH and new HUSH3 private keys. -### Web Wallet Seed Phrase - -Nothing needs to be done, and if you use the Hush web wallet with a seed phrase, -you can unlock your new funds on the new Hush mainnet with the same seedphrase. - -This web wallet is hosted on a best-effort basis to give newcomers an easy way -to make addresses for mining and other uses. Please heed this advice to keep -your funds safe: - - * DO NOT USE FOR LARGE AMOUNTS, use a full node or light wallet - * ALWAYS ACCESS VIA https:// - * DO NOT USE FROM PUBLIC WIFI - * DO NOT USE ON A COMPUTER OTHER PEOPLE USE - * BACK UP YOUR SEED PHRASE (multiple paper copies) - -Even if you follow all those rules, due to web wallets relying on DNS and IP -addresss, there are still potential attacks. You have been warned: https://wallet.myhush.org - -The source code for the Hush web wallet is here: https://github.com/MyHush/myhushwallet - - Installing ---------- From 95166409a9f184d165e24490eb57b805fd00b6b6 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 05:35:09 -0500 Subject: [PATCH 008/277] update example config --- contrib/debian/examples/HUSH3.conf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/contrib/debian/examples/HUSH3.conf b/contrib/debian/examples/HUSH3.conf index 656a43533..2bc32b170 100644 --- a/contrib/debian/examples/HUSH3.conf +++ b/contrib/debian/examples/HUSH3.conf @@ -1,6 +1,4 @@ -## -## komodo.conf configuration file. Lines beginning with # are comments. -## +## HUSH3.conf configuration file. Lines beginning with # are comments. # Network-related settings: From 5574fd3a995040495b70a8ac373e934f00ef5ef7 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 05:35:29 -0500 Subject: [PATCH 009/277] this config example is not needed --- contrib/debian/examples/komodo.conf | 140 ---------------------------- 1 file changed, 140 deletions(-) delete mode 100644 contrib/debian/examples/komodo.conf diff --git a/contrib/debian/examples/komodo.conf b/contrib/debian/examples/komodo.conf deleted file mode 100644 index 656a43533..000000000 --- a/contrib/debian/examples/komodo.conf +++ /dev/null @@ -1,140 +0,0 @@ -## -## komodo.conf configuration file. Lines beginning with # are comments. -## - -# Network-related settings: - -# Run a regression test network -#regtest=0 - -# Connect via a SOCKS5 proxy -#proxy=127.0.0.1:9050 - -# Bind to given address and always listen on it. Use [host]:port notation for IPv6 -#bind= - -# Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6 -#whitebind= - -############################################################## -## Quick Primer on addnode vs connect ## -## Let's say for instance you use addnode=4.2.2.4 ## -## addnode will connect you to and tell you about the ## -## nodes connected to 4.2.2.4. In addition it will tell ## -## the other nodes connected to it that you exist so ## -## they can connect to you. ## -## connect will not do the above when you 'connect' to it. ## -## It will *only* connect you to 4.2.2.4 and no one else.## -## ## -## So if you're behind a firewall, or have other problems ## -## finding nodes, add some using 'addnode'. ## -## ## -## If you want to stay private, use 'connect' to only ## -## connect to "trusted" nodes. ## -## ## -## If you run multiple nodes on a LAN, there's no need for ## -## all of them to open lots of connections. Instead ## -## 'connect' them all to one node that is port forwarded ## -## and has lots of connections. ## -## Thanks goes to [Noodle] on Freenode. ## -############################################################## - -# Use as many addnode= settings as you like to connect to specific peers -#addnode=69.164.218.197 -#addnode=10.0.0.2:8233 - -# Alternatively use as many connect= settings as you like to connect ONLY to specific peers -#connect=69.164.218.197 -#connect=10.0.0.1:8233 - -# Listening mode, enabled by default except when 'connect' is being used -#listen=1 - -# Maximum number of inbound+outbound connections. -#maxconnections= - -# -# JSON-RPC options (for controlling a running Komodo/komodod process) -# - -# server=1 tells komodod to accept JSON-RPC commands (set as default if not specified) -#server=1 - -# Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. -# This option can be specified multiple times (default: bind to all interfaces) -#rpcbind= - -# You must set rpcuser and rpcpassword to secure the JSON-RPC api -#rpcuser=Ulysses -#rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593 - -# How many seconds komodo will wait for a complete RPC HTTP request. -# after the HTTP connection is established. -#rpcclienttimeout=30 - -# By default, only RPC connections from localhost are allowed. -# Specify as many rpcallowip= settings as you like to allow connections from other hosts, -# either as a single IPv4/IPv6 or with a subnet specification. - -# NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED, -# because the rpcpassword is transmitted over the network unencrypted and also because anyone -# that can authenticate on the RPC port can steal your keys + take over the account running komodod -# For more information see https://github.com/zcash/zcash/issues/1497 - -#rpcallowip=10.1.1.34/255.255.255.0 -#rpcallowip=1.2.3.4/24 -#rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96 - -# Listen for RPC connections on this TCP port: -#rpcport=8232 - -# You can use Komodo or komodod to send commands to Komodo/komodod -# running on another host using this option: -#rpcconnect=127.0.0.1 - -# Transaction Fee - -# Send transactions as zero-fee transactions if possible (default: 0) -#sendfreetransactions=0 - -# Create transactions that have enough fees (or priority) so they are likely to # begin confirmation within n blocks (default: 1). -# This setting is overridden by the -paytxfee option. -#txconfirmtarget=n - -# Miscellaneous options - -# Enable attempt to mine komodo. -#gen=0 - -# Set the number of threads to be used for mining komodo (-1 = all cores). -#genproclimit=1 - -# Specify a different Equihash solver (e.g. "tromp") to try to mine komodo -# faster when gen=1. -#equihashsolver=default - -# Pre-generate this many public/private key pairs, so wallet backups will be valid for -# both prior transactions and several dozen future transactions. -#keypool=100 - -# Pay an optional transaction fee every time you send komodo. Transactions with fees -# are more likely than free transactions to be included in generated blocks, so may -# be validated sooner. This setting does not affect private transactions created with -# 'z_sendmany'. -#paytxfee=0.00 - -#Rewind the chain to specific block height. This is useful for creating snapshots at a given block height. -#rewind=777777 - -#Stop the chain a specific block height. This is useful for creating snapshots at a given block height. -#stopat=1000000 - -#Set an address to use as change address for all transactions. This value must be set to a 33 byte pubkey. All mined coins will also be sent to this address. -#pubkey=027dc7b5cfb5efca96674b45e9fda18df069d040b9fd9ff32c35df56005e330392 - -#Forfeit all user rewards to miners. Set this to explicitly not claim user rewards. -#exchange=1 - -#Donate all user rewards to a a specific address. This value must be set to a 33 byte pubkey. -#donation=027dc7b5cfb5efca96674b45e9fda18df069d040b9fd9ff32c35df56005e330392 - From 209d0732047cbb55c1535d2647585ad100242281 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 05:36:10 -0500 Subject: [PATCH 010/277] Update link to gitea --- src/bitcoind.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 0fcf8c14c..f2e0b2d18 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -199,7 +199,7 @@ bool AppInit(int argc, char* argv[]) GetConfigFile().string().c_str(), "contrib/debian/examples/HUSH3.conf", "/usr/share/doc/hush/examples/HUSH3.conf", - "https://github.com/MyHush/hush3/blob/master/contrib/debian/examples/HUSH3.conf"); + "https://git.hush.is/hush/hush3/src/branch/master/contrib/debian/examples/HUSH3.conf"); return false; } catch (const std::exception& e) { fprintf(stderr,"Error reading configuration file: %s\n", e.what()); From ed8f8c534eb9e14a58823b3755764da1a994df7a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 05:41:33 -0500 Subject: [PATCH 011/277] Improved logging --- src/bitcoind.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index f2e0b2d18..93840ecc6 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -131,11 +131,7 @@ bool AppInit(int argc, char* argv[]) bool fRet = false; - //fprintf(stderr, "%s start, argc=%d\n", __FUNCTION__, argc); - // // Parameters - // - // If Qt is used, parameters/komodo.conf are parsed in qt/bitcoin.cpp's main() ParseParameters(argc, argv); // Process help and version before taking care about datadir @@ -146,11 +142,9 @@ bool AppInit(int argc, char* argv[]) if (mapArgs.count("-version")) { strUsage += LicenseInfo(); - } - else - { + } else { strUsage += "\n" + _("Usage:") + "\n" + - " komodod [options] " + _("Start Hush-flavored Komodo Daemon") + "\n"; + " hushd [options] " + _("Start a Hush Daemon") + "\n"; strUsage += "\n" + HelpMessage(HMM_BITCOIND); } @@ -166,12 +160,12 @@ bool AppInit(int argc, char* argv[]) fprintf(stderr, "Error: Invalid combination of -regtest and -testnet.\n"); return false; } - void komodo_args(char *argv0); - komodo_args(argv[0]); + void hush_args(char *argv0); + hush_args(argv[0]); void chainparams_commandline(); chainparams_commandline(); - fprintf(stderr,"call komodo_args.(%s) NOTARY_PUBKEY.(%s)\n",argv[0],NOTARY_PUBKEY.c_str()); + fprintf(stderr,"hush_args.(%s) NOTARY_PUBKEY.(%s) argc=%d\n",argv[0],NOTARY_PUBKEY.c_str(), argc); printf("initialized %s at %u\n",SMART_CHAIN_SYMBOL,(uint32_t)time(NULL)); if (!boost::filesystem::is_directory(GetDataDir(false))) { @@ -209,15 +203,15 @@ bool AppInit(int argc, char* argv[]) // Command-line RPC bool fCommandLine = false; for (int i = 1; i < argc; i++) { - //TODO: should this be hush: or komodo: ?? - if (!IsSwitchChar(argv[i][0]) && !boost::algorithm::istarts_with(argv[i], "komodo:")) { + // detect accidental use of RPC in hushd + if (!IsSwitchChar(argv[i][0]) && !boost::algorithm::istarts_with(argv[i], "hush:")) { fCommandLine = true; } } if (fCommandLine) { - fprintf(stderr, "Error: There is no RPC client functionality in komodod. Use the komodo-cli utility instead.\n"); + fprintf(stderr, "Error: Ooops! There is no RPC client functionality in hushd. Use the hush-cli utility instead.\n"); exit(EXIT_FAILURE); } @@ -225,7 +219,7 @@ bool AppInit(int argc, char* argv[]) fDaemon = GetBoolArg("-daemon", false); if (fDaemon) { - fprintf(stdout, "Komodo %s server starting\n",SMART_CHAIN_SYMBOL); + fprintf(stdout, "Hush %s server starting\n",SMART_CHAIN_SYMBOL); // Daemonize pid_t pid = fork(); From d834c6697ff6dd73c61bc858ba4b34ebd90c5fba Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 05:43:13 -0500 Subject: [PATCH 012/277] My voice is my passport --- src/bitcoind.cpp | 6 +++--- src/komodo_gateway.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 93840ecc6..c21e551f3 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -60,7 +60,7 @@ static bool fDaemon; extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; extern int32_t ASSETCHAINS_BLOCKTIME; extern uint64_t ASSETCHAINS_CBOPRET; -void komodo_passport_iteration(); +void hush_passport_iteration(); uint64_t komodo_interestsum(); int32_t komodo_longestchain(); void komodo_cbopretupdate(int32_t forceflag); @@ -81,7 +81,7 @@ void WaitForShutdown(boost::thread_group* threadGroup) if ( SMART_CHAIN_SYMBOL[0] == 0 ) { if ( KOMODO_NSPV_FULLNODE ) - komodo_passport_iteration(); + hush_passport_iteration(); for (i=0; i<10; i++) { fShutdown = ShutdownRequested(); @@ -121,7 +121,7 @@ extern int32_t IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY; extern uint32_t ASSETCHAIN_INIT; extern std::string NOTARY_PUBKEY; int32_t komodo_is_issuer(); -void komodo_passport_iteration(); +void hush_passport_iteration(); bool AppInit(int argc, char* argv[]) { diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 52035d2cc..0b2d21e21 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -678,7 +678,7 @@ int32_t komodo_bannedset(int32_t *indallvoutsp,uint256 *array,int32_t max) return(i); } -void komodo_passport_iteration(); +void hush_passport_iteration(); int32_t komodo_check_deposit(int32_t height,const CBlock& block,uint32_t prevtime) // verify above block is valid pax pricing { @@ -1423,7 +1423,7 @@ int32_t komodo_faststateinit(struct komodo_state *sp,char *fname,char *symbol,ch uint64_t komodo_interestsum(); -void komodo_passport_iteration() +void hush_passport_iteration() { static long lastpos[34]; static char userpass[33][1024]; static uint32_t lasttime,callcounter,lastinterest; int32_t maxseconds = 10; From 08de67d3ec81c8414c1579c264842a5e7ac96307 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 05:52:37 -0500 Subject: [PATCH 013/277] Re-license to GPLv3 --- src/cryptoconditions/AUTHORS | 9 + src/cryptoconditions/LICENSE | 626 ++++++++++++++++++++++++++++++++- src/cryptoconditions/README.md | 4 + 3 files changed, 629 insertions(+), 10 deletions(-) create mode 100644 src/cryptoconditions/AUTHORS diff --git a/src/cryptoconditions/AUTHORS b/src/cryptoconditions/AUTHORS new file mode 100644 index 000000000..06ada955e --- /dev/null +++ b/src/cryptoconditions/AUTHORS @@ -0,0 +1,9 @@ +# Original Author + +Copyright 2017 Scott Sadler + +# Current Authors + +Copyright 2017-2020 The Hush Developers + +Relicensed to GPLv3 on Nov 21st 2020. diff --git a/src/cryptoconditions/LICENSE b/src/cryptoconditions/LICENSE index bd423f56e..febd8b6d9 100644 --- a/src/cryptoconditions/LICENSE +++ b/src/cryptoconditions/LICENSE @@ -1,13 +1,619 @@ -Copyright 2017 Scott Sadler + GENERAL GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. - http://www.apache.org/licenses/LICENSE-2.0 + Preamble -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. + The GENERAL General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GENERAL General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GENERAL General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GENERAL GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GENERAL General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GENERAL Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GENERAL Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GENERAL Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GENERAL General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GENERAL General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GENERAL General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GENERAL General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. diff --git a/src/cryptoconditions/README.md b/src/cryptoconditions/README.md index 9ec2a6a5f..c1971a2b5 100644 --- a/src/cryptoconditions/README.md +++ b/src/cryptoconditions/README.md @@ -163,3 +163,7 @@ cryptoconditions signTreeSecp256k1 '{ } } ``` + +# License + +GPLv3 From e8586158808145e6a077ba2de8e8197a25708e76 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 05:53:31 -0500 Subject: [PATCH 014/277] Hush those args --- src/hush_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hush_utils.h b/src/hush_utils.h index f89dd7e66..4ac5453c0 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1765,7 +1765,7 @@ int8_t equihash_params_possible(uint64_t n, uint64_t k) return(-1); } -void komodo_args(char *argv0) +void hush_args(char *argv0) { std::string name,addn,hexstr,symbol; char *dirname,fname[512],arg0str[64],magicstr[9]; uint8_t magic[4],extrabuf[32756],disablebits[32],*extraptr=0; FILE *fp; uint64_t val; uint16_t port; int32_t i,nonz=0,baseid,len,n,extralen = 0; uint64_t ccenables[256], ccEnablesHeight[512] = {0}; CTransaction earlytx; uint256 hashBlock; From 4e299080013a3ea59721a89d8462ad3346c4da1b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 06:01:33 -0500 Subject: [PATCH 015/277] Update git clone URLs --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 4e2a3325b..0c4095e5c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -36,7 +36,7 @@ sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib \ autoconf libtool ncurses-dev unzip git python zlib1g-dev wget \ bsdmainutils automake curl unzip nano libsodium-dev # pull -git clone https://github.com/MyHush/hush3.git +git clone https://git.hush.is/hush/hush3 cd hush3 # Build ./build.sh -j$(nproc) @@ -61,7 +61,7 @@ Downloading Git source repo, building and running Hush: ```sh # pull -git clone https://github.com/MyHush/hush3.git +git clone https://git.hush.is/hush/hush3 cd hush # Build ./build-win.sh -j$(nproc) From 22ed7bb6017e68b5f0ebbde85e3f87823652be1e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 06:03:56 -0500 Subject: [PATCH 016/277] update copyright --- src/cc/dapps/cJSON.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cc/dapps/cJSON.c b/src/cc/dapps/cJSON.c index e1d7801a1..2ed27443a 100644 --- a/src/cc/dapps/cJSON.c +++ b/src/cc/dapps/cJSON.c @@ -1,4 +1,6 @@ - +// Copyright (c) 2019-2020 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 (c) 2009 Dave Gamble From 7ae5af4def9f7354562eb7955a73fd4eab68b737 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 06:07:55 -0500 Subject: [PATCH 017/277] Placeholder for now --- src/cc/dapps/hushdex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/hushdex.c b/src/cc/dapps/hushdex.c index bf97e658b..9230402d5 100644 --- a/src/cc/dapps/hushdex.c +++ b/src/cc/dapps/hushdex.c @@ -17,7 +17,7 @@ // build hushdex and put in path: git pull; gcc cc/dapps/hushdex.c -lm -o hushdex; cp hushdex /usr/bin // alice sends relcoin and gets basecoin -#define DEXP2P_CHAIN ((char *)"ZEX") +#define DEXP2P_CHAIN ((char *)"TODO") #define DEXP2P_PUBKEYS ((char *)"hushdex") #include "dappinc.h" From 3fbba38c0d24720ec699e12edb748b9ae9f21067 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 06:11:58 -0500 Subject: [PATCH 018/277] HushDEX supports only zaddr coins --- src/cc/dapps/hushdex.c | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/src/cc/dapps/hushdex.c b/src/cc/dapps/hushdex.c index 9230402d5..a7496a6e2 100644 --- a/src/cc/dapps/hushdex.c +++ b/src/cc/dapps/hushdex.c @@ -152,9 +152,10 @@ char *hushdex_checkname(char *tmpstr,struct msginfo *mp,int32_t baserel,char *co int32_t hushdex_zonly(struct coininfo *coin) { - if ( strcmp(coin->coin,"PIRATE") == 0 ) + if ( strcmp(coin->coin,"HUSH3") == 0 ) return(1); - else return(coin->iszaddr); + + return 0; } // //////////////////////////////// the four key functions needed to support a new item for hushdexs @@ -229,24 +230,8 @@ int64_t hushdex_getbalance(struct coininfo *coin) retval = SATOSHIDEN; } return(retval); - } - else if ( hushdex_zonly(coin) != 0 ) + } else if ( hushdex_zonly(coin) != 0 ) { return(z_getbalance(coinstr,acname,DPOW_recvZaddr)); - else - { - if ( coin->istoken != 0 ) - { - if ( get_getbalance(coinstr,acname) < SUBATOMIC_TXFEE ) - { - fprintf(stderr,"not enough balance to send token\n"); - return(0); - } - //fprintf(stderr,"token balance %s\n",coin->tokenid); - return(get_tokenbalance(coinstr,acname,coin->tokenid) * SATOSHIDEN); - } - else if ( coin->isexternal == 0 ) - return(get_getbalance(coinstr,acname)); - else return(_hushdex_getbalance(coin)); } } From c8f9ec1620468d88c7b005ca472d072a9d3416c9 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 21 Nov 2020 07:22:40 -0500 Subject: [PATCH 019/277] The smart chain to store swap data will be called HUSHDEX --- src/cc/dapps/hushdex.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc/dapps/hushdex.c b/src/cc/dapps/hushdex.c index a7496a6e2..2933f5acd 100644 --- a/src/cc/dapps/hushdex.c +++ b/src/cc/dapps/hushdex.c @@ -17,7 +17,7 @@ // build hushdex and put in path: git pull; gcc cc/dapps/hushdex.c -lm -o hushdex; cp hushdex /usr/bin // alice sends relcoin and gets basecoin -#define DEXP2P_CHAIN ((char *)"TODO") +#define DEXP2P_CHAIN ((char *)"HUSHDEX") #define DEXP2P_PUBKEYS ((char *)"hushdex") #include "dappinc.h" @@ -155,6 +155,9 @@ int32_t hushdex_zonly(struct coininfo *coin) if ( strcmp(coin->coin,"HUSH3") == 0 ) return(1); + if ( strcmp(coin->coin,"HUSHFILE") == 0 ) + return(1); + return 0; } From f7ae064845248ac7bcb9fdf841f52e293e46c57a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 07:31:07 -0500 Subject: [PATCH 020/277] Update security doc, fuck sprout --- ...de-reference-komodo.conf => beefy-HUSH3.conf} | 0 doc/security-warnings.md | 16 +++++++--------- 2 files changed, 7 insertions(+), 9 deletions(-) rename doc/{beefy-node-reference-komodo.conf => beefy-HUSH3.conf} (100%) diff --git a/doc/beefy-node-reference-komodo.conf b/doc/beefy-HUSH3.conf similarity index 100% rename from doc/beefy-node-reference-komodo.conf rename to doc/beefy-HUSH3.conf diff --git a/doc/security-warnings.md b/doc/security-warnings.md index 52f046343..14d045982 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -3,27 +3,25 @@ ## Security Audits Hush has not been subjected to a formal third-party security review! But the -Zcash source code has. For security -announcements, audit results and other general security information, see -https://z.cash/support/security.html +some of the Zcash and Komodo source code it is based on has. -Hush does our best to integrate fixes and recommendations from Zcash audits +Hush does our best to integrate fixes and recommendations from upstream audits to our own code, such as audits on ZecWallet that apply to SilentDragon. -Hush also reports many new bugs and issues to upstream Zcash and many other -Zcash Protocol coins. +Hush used to report many new bugs and CVEs to upstream Zcash and Komodo but +those relations have broken down. Additionally, Hush itself finds many CVE's and things-that-should-be-CVE's in Zcash internals. Since Zcash community treats Hush people so poorly, we keep these bugs and fixes to ourselves. If you want to know some of them, -let us know and bring your wallet. - +let us know and bring your wallet. Public information available at +attackingzcash.com ## Wallet Encryption Wallet encryption is disabled, for several reasons: - Encrypted wallets are unable to correctly detect shielded spends (due to the - nature of unlinkability of JoinSplits) and can incorrectly show larger + nature of unlinkability of ShieldedSpends) and can incorrectly show larger available shielded balances until the next time the wallet is unlocked. This problem was not limited to failing to recognize the spend; it was possible for the shown balance to increase by the amount of change from a spend, without From 45ad4121fc858d04aa598345fc2b64099e3ebe3d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 07:33:37 -0500 Subject: [PATCH 021/277] Git relnotes, yay --- doc/release-notes.md | 6 ------ doc/relnotes/README.md | 8 ++++++++ 2 files changed, 8 insertions(+), 6 deletions(-) delete mode 100644 doc/release-notes.md create mode 100644 doc/relnotes/README.md diff --git a/doc/release-notes.md b/doc/release-notes.md deleted file mode 100644 index b6b0ce326..000000000 --- a/doc/release-notes.md +++ /dev/null @@ -1,6 +0,0 @@ -# Notable changes - -(note: this is a temporary file, to be added-to by anybody, and moved to -release-notes at release time) - - diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md new file mode 100644 index 000000000..fed5ee907 --- /dev/null +++ b/doc/relnotes/README.md @@ -0,0 +1,8 @@ +# Official Hush Release Notes + +Hush release notes were done on Github until 3.5.2, +and now are officially part of our Git repo. + +# 3.6.0 + +Coming Soon From 38cd244ab72044a90a6cd2ce11c3868856732622 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 07:35:44 -0500 Subject: [PATCH 022/277] basic outline of 3.6.0 --- doc/relnotes/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index fed5ee907..8f7527735 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -1,8 +1,13 @@ # Official Hush Release Notes -Hush release notes were done on Github until 3.5.2, +Hush release notes were done on Github until 3.5.2, and now are officially part of our Git repo. # 3.6.0 Coming Soon + + * Fixes sync issues! + * New Hush DPoW + * Faster binaries + * More secure+private TLS implementation From 3c4b1eefb35f27f1cbe0a422577a36e8349d7be9 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 07:50:35 -0500 Subject: [PATCH 023/277] translation doc now reflects reality --- doc/translation_strings_policy.md | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/doc/translation_strings_policy.md b/doc/translation_strings_policy.md index abcf1c2e5..0911ec25b 100644 --- a/doc/translation_strings_policy.md +++ b/doc/translation_strings_policy.md @@ -1,12 +1,8 @@ -*** Warning: This document has not been updated for Hush and may be inaccurate. *** +# Translation Strings Policy -Translation Strings Policy -=========================== +This document provides guidelines for internationalization of hushd full node software. -This document provides guidelines for internationalization of the Bitcoin Core software. - -How to translate? ------------------- +## How to translate? To mark a message as translatable @@ -14,8 +10,7 @@ To mark a message as translatable No internationalization is used for e.g. developer scripts outside `src`. -Strings to be translated -------------------------- +## Strings to be translated On a high level, these strings are to be translated: @@ -36,8 +31,7 @@ Make sure that default values do not end up in the string, but use string format Do not translate messages that are only shown to developers, such as those that only appear when `--help-debug` is used. -General recommendations ------------------------- +## General recommendations ### Avoid unnecessary translation strings From 6112a3c2fcd64b7fd2e435b94c2c05d30a6657b9 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 07:55:34 -0500 Subject: [PATCH 024/277] update the How To Shield Coinbase Funds doc --- doc/shield-coinbase.md | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/doc/shield-coinbase.md b/doc/shield-coinbase.md index 68a1ee156..6acd9393f 100644 --- a/doc/shield-coinbase.md +++ b/doc/shield-coinbase.md @@ -72,7 +72,7 @@ The number of coinbase UTXOs selected for shielding can be adjusted by setting t If the limit parameter is set to zero, the zcashd `mempooltxinputlimit` option will be used instead, where the default value for `mempooltxinputlimit` is zero, which means no limit. -Any limit is constrained by a hard limit due to the consensus rule defining a maximum transaction size of 100,000 bytes. +Any limit is constrained by a hard limit due to the consensus rule defining a maximum transaction size. In general, the more UTXOs that are selected, the longer it takes for the transaction to be verified. Due to the quadratic hashing problem, some miners use the `mempooltxinputlimit` option to reject transactions with a large number of UTXO inputs. @@ -80,22 +80,8 @@ Currently, as of November 2017, there is no commonly agreed upon limit, but as a ### Anatomy of a z_shieldcoinbase transaction -The transaction created is a shielded transaction. It consists of a single joinsplit, which consumes coinbase UTXOs as input, and deposits value at a shielded address, minus any fee. +The transaction created is a shielded transaction. It consists of a single ShieldedSpend, which consumes coinbase UTXOs as input, and deposits value at a shielded address, minus any fee. The number of coinbase UTXOs is determined by a user configured limit. -If no limit is set (in the case when limit parameter and `mempooltxinputlimit` options are set to zero) the behaviour of z_shieldcoinbase is to consume as many UTXOs as possible, with `z_shieldcoinbase` constructing a transaction up to the size limit of 100,000 bytes. - -As a result, the maximum number of inputs that can be selected is: - -- P2PKH coinbase UTXOs ~ 662 -- 2-of-3 multisig P2SH coinbase UTXOs ~ 244. - -Here is an example of using `z_shieldcoinbase` on testnet to shield multi-sig coinbase UTXOs. - -- Block 141042 is almost ~2 MB in size (the maximum size for a block) and contains 1 coinbase reward transaction and 20 transactions, each indivually created by a call to z_shieldcoinbase. - - https://explorer.testnet.z.cash/block/0050552a78e97c89f666713c8448d49ad1d7263274422272696187dedf6c0d03 -- Drilling down into a transaction, you can see there is one joinsplit, with 244 inputs (vin) and 0 outputs (vout). - - https://explorer.testnet.z.cash/tx/cf4f3da2e434f68b6e361303403344e22a9ff9a8fda9abc180d9520d0ca6527d - - +If no limit is set (in the case when limit parameter and `mempooltxinputlimit` options are set to zero) the behaviour of z_shieldcoinbase is to consume as many UTXOs as possible, with `z_shieldcoinbase` constructing a transaction up to the maximum size. From 3f3d305ed87fd60c4dd755d3436fc5427834cb15 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 07:59:40 -0500 Subject: [PATCH 025/277] update wallet backup docs --- doc/wallet-backup.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/wallet-backup.md b/doc/wallet-backup.md index 24cd416b0..b229211ab 100644 --- a/doc/wallet-backup.md +++ b/doc/wallet-backup.md @@ -16,13 +16,13 @@ These instructions are specific for the officially supported Hush Linux client. There are multiple ways to make sure you have at least one other copy of the private keys needed to spend your HUSH and view your shielded HUSH. -For all methods, you will need to include an export directory setting in your config file (`zcash.conf` located in the data directory which is `~/.zcash/` unless it's been overridden with `datadir=` setting): +For all methods, you will need to include an export directory setting in your config file (`HUSH3.conf` located in the data directory which is `~/.komodo/HUSH3` unless it's been overridden with `datadir=` setting): `exportdir=path/to/chosen/export/directory` You may chose any directory within the home directory as the location for export & backup files. If the directory doesn't exist, it will be created. -Note that zcashd will need to be stopped and restarted for edits in the config file to take effect. +Note that hushd will need to be stopped and restarted for edits in the config file to take effect. ### Using `backupwallet` @@ -88,4 +88,4 @@ See the command's help documentation for instructions on fine-tuning the wallet ### Using `dumpwallet` -This command inherited from Bitcoin is deprecated. It will export private keys in a similar fashion as `z_exportwallet` but only for transparent addresses. \ No newline at end of file +This command inherited from Bitcoin is deprecated. It will export private keys in a similar fashion as `z_exportwallet` but only for transparent addresses. From e7b3bb90f75ecca773338402a35a3ff6d28c2b14 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 08:32:24 -0500 Subject: [PATCH 026/277] update docs --- doc/reducing-memory-usage.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/reducing-memory-usage.md b/doc/reducing-memory-usage.md index 333ea0086..60d578ad8 100644 --- a/doc/reducing-memory-usage.md +++ b/doc/reducing-memory-usage.md @@ -1,5 +1,4 @@ -In-memory caches ----------------- +# In-memory caches The size of some in-memory caches can be reduced. As caches trade off memory usage for performance, usually reducing these have a negative effect on performance. From fb1facc82191cd7140d08731ff4cc008dd1ccbe4 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 08:36:28 -0500 Subject: [PATCH 027/277] delete more sprout shite, faster syncing --- src/coins.cpp | 31 +++++-------------------------- src/txdb.cpp | 4 ---- src/txdb.h | 13 +++++++------ src/txmempool.h | 8 ++++---- 4 files changed, 16 insertions(+), 40 deletions(-) diff --git a/src/coins.cpp b/src/coins.cpp index 1231b101e..95600f224 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -19,14 +19,12 @@ ******************************************************************************/ #include "coins.h" - #include "memusage.h" #include "random.h" #include "version.h" #include "policy/fees.h" #include "hush_defs.h" #include "importcoin.h" - #include /** @@ -112,9 +110,7 @@ CCoinsViewCache::~CCoinsViewCache() size_t CCoinsViewCache::DynamicMemoryUsage() const { return memusage::DynamicUsage(cacheCoins) + - memusage::DynamicUsage(cacheSproutAnchors) + memusage::DynamicUsage(cacheSaplingAnchors) + - memusage::DynamicUsage(cacheSproutNullifiers) + memusage::DynamicUsage(cacheSaplingNullifiers) + cachedCoinsUsage; } @@ -162,10 +158,9 @@ bool CCoinsViewCache::GetSaplingAnchorAt(const uint256 &rt, SaplingMerkleTree &t bool CCoinsViewCache::GetNullifier(const uint256 &nullifier, ShieldedType type) const { CNullifiersMap* cacheToUse; + // SAPLING is the only current supported type but we may + // have more in The Future switch (type) { - case SPROUT: - cacheToUse = &cacheSproutNullifiers; - break; case SAPLING: cacheToUse = &cacheSaplingNullifiers; break; @@ -219,6 +214,7 @@ void CCoinsViewCache::AbstractPushAnchor( } } +//TODO: delete template<> void CCoinsViewCache::PushAnchor(const SproutMerkleTree &tree) { AbstractPushAnchor( @@ -290,14 +286,6 @@ void CCoinsViewCache::AbstractPopAnchor( void CCoinsViewCache::PopAnchor(const uint256 &newrt, ShieldedType type) { switch (type) { - case SPROUT: - AbstractPopAnchor( - newrt, - SPROUT, - cacheSproutAnchors, - hashSproutAnchor - ); - break; case SAPLING: AbstractPopAnchor( newrt, @@ -388,11 +376,6 @@ uint256 CCoinsViewCache::GetBestBlock() const { uint256 CCoinsViewCache::GetBestAnchor(ShieldedType type) const { switch (type) { - case SPROUT: - if (hashSproutAnchor.IsNull()) - hashSproutAnchor = base->GetBestAnchor(type); - return hashSproutAnchor; - break; case SAPLING: if (hashSaplingAnchor.IsNull()) hashSaplingAnchor = base->GetBestAnchor(type); @@ -508,24 +491,20 @@ bool CCoinsViewCache::BatchWrite(CCoinsMap &mapCoins, mapCoins.erase(itOld); } - //::BatchWriteAnchors(mapSproutAnchors, cacheSproutAnchors, cachedCoinsUsage); ::BatchWriteAnchors(mapSaplingAnchors, cacheSaplingAnchors, cachedCoinsUsage); - //::BatchWriteNullifiers(mapSproutNullifiers, cacheSproutNullifiers); ::BatchWriteNullifiers(mapSaplingNullifiers, cacheSaplingNullifiers); - hashSproutAnchor = hashSproutAnchorIn; + hashSproutAnchor = hashSproutAnchorIn; hashSaplingAnchor = hashSaplingAnchorIn; - hashBlock = hashBlockIn; + hashBlock = hashBlockIn; return true; } bool CCoinsViewCache::Flush() { bool fOk = base->BatchWrite(cacheCoins, hashBlock, hashSproutAnchor, hashSaplingAnchor, cacheSproutAnchors, cacheSaplingAnchors, cacheSproutNullifiers, cacheSaplingNullifiers); cacheCoins.clear(); - //cacheSproutAnchors.clear(); cacheSaplingAnchors.clear(); - //cacheSproutNullifiers.clear(); cacheSaplingNullifiers.clear(); cachedCoinsUsage = 0; return fOk; diff --git a/src/txdb.cpp b/src/txdb.cpp index b007b96d0..fdae60306 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -1,7 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers // Copyright (c) 2019-2020 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 @@ -21,16 +20,13 @@ ******************************************************************************/ #include "txdb.h" - #include "chainparams.h" #include "hash.h" #include "main.h" #include "pow.h" #include "uint256.h" #include "core_io.h" - #include - #include using namespace std; diff --git a/src/txdb.h b/src/txdb.h index 4af616d58..b36f20151 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -18,13 +18,14 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ +// jl777 is a KYC traitor and he told me that I knew more about the tx db than +// he did, lulz -- Duke -#ifndef BITCOIN_TXDB_H -#define BITCOIN_TXDB_H +#ifndef HUSH_TXDB_H +#define HUSH_TXDB_H #include "coins.h" #include "dbwrapper.h" - #include #include #include @@ -48,7 +49,7 @@ struct CSpentIndexValue; class uint256; //! -dbcache default (MiB) -static const int64_t nDefaultDbCache = 450; +static const int64_t nDefaultDbCache = 512; //! max. -dbcache (MiB) static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024; //! min. -dbcache in (MiB) @@ -63,13 +64,13 @@ protected: public: CCoinsViewDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); - //bool GetSproutAnchorAt(const uint256 &rt, SproutMerkleTree &tree) const; bool GetSaplingAnchorAt(const uint256 &rt, SaplingMerkleTree &tree) const; bool GetNullifier(const uint256 &nf, ShieldedType type) const; bool GetCoins(const uint256 &txid, CCoins &coins) const; bool HaveCoins(const uint256 &txid) const; uint256 GetBestBlock() const; uint256 GetBestAnchor(ShieldedType type) const; + // TODO: get rid of this fucking sprout shite bool BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock, const uint256 &hashSproutAnchor, @@ -120,4 +121,4 @@ public: bool Snapshot2(std::map &addressAmounts, UniValue *ret); }; -#endif // BITCOIN_TXDB_H +#endif // HUSH_TXDB_H diff --git a/src/txmempool.h b/src/txmempool.h index 966ee087b..f98680dcb 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -19,11 +19,10 @@ * * ******************************************************************************/ -#ifndef BITCOIN_TXMEMPOOL_H -#define BITCOIN_TXMEMPOOL_H +#ifndef HUSH_TXMEMPOOL_H +#define HUSH_TXMEMPOOL_H #include - #include "addressindex.h" #include "spentindex.h" #include "amount.h" @@ -153,6 +152,7 @@ private: uint64_t nRecentlyAddedSequence = 0; uint64_t nNotifiedSequence = 0; + //TODO: remove, requires refactoring std::map mapSproutNullifiers; std::map mapSaplingNullifiers; @@ -298,4 +298,4 @@ public: bool HaveCoins(const uint256 &txid) const; }; -#endif // BITCOIN_TXMEMPOOL_H +#endif // HUSH_TXMEMPOOL_H From c2fedd30488bdf8b910c125d65e68b005569a666 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 08:47:33 -0500 Subject: [PATCH 028/277] Update protocol version --- src/protocol.cpp | 2 -- src/protocol.h | 6 +++--- src/version.h | 23 ++++++----------------- 3 files changed, 9 insertions(+), 22 deletions(-) diff --git a/src/protocol.cpp b/src/protocol.cpp index f065c5699..674c23ac0 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -20,7 +19,6 @@ ******************************************************************************/ #include "protocol.h" - #include "util.h" #include "utilstrencodings.h" diff --git a/src/protocol.h b/src/protocol.h index b2570b151..ed76d0616 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -22,8 +22,8 @@ #error This header can only be compiled as C++. #endif -#ifndef BITCOIN_PROTOCOL_H -#define BITCOIN_PROTOCOL_H +#ifndef HUSH_PROTOCOL_H +#define HUSH_PROTOCOL_H #include "netbase.h" #include "serialize.h" @@ -175,4 +175,4 @@ enum { MSG_FILTERED_BLOCK, }; -#endif // BITCOIN_PROTOCOL_H +#endif // HUSH_PROTOCOL_H diff --git a/src/version.h b/src/version.h index a7fc5e1ea..92676105b 100644 --- a/src/version.h +++ b/src/version.h @@ -2,7 +2,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,35 +17,25 @@ * * ******************************************************************************/ -#ifndef BITCOIN_VERSION_H -#define BITCOIN_VERSION_H - -/** - * network protocol versioning - */ - -static const int PROTOCOL_VERSION = 170010; +#ifndef HUSH_VERSION_H +#define HUSH_VERSION_H +// network protocol versioning +static const int PROTOCOL_VERSION = 1987420; //! initial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 209; - //! In this version, 'getheaders' was introduced. static const int GETHEADERS_VERSION = 31800; - //! disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION = 170008; - +static const int MIN_PEER_PROTO_VERSION = 170010; //! nTime field added to CAddress, starting with this version; //! if possible, avoid requesting addresses nodes older than this static const int CADDR_TIME_VERSION = 31402; - //! BIP 0031, pong message, is enabled for all versions AFTER this one static const int BIP0031_VERSION = 60000; - //! "mempool" command, enhanced "getdata" behavior starts with this version static const int MEMPOOL_GD_VERSION = 60002; - //! "filter*" commands are disabled without NODE_BLOOM after and including this version static const int NO_BLOOM_VERSION = 170004; -#endif // BITCOIN_VERSION_H +#endif // HUSH_VERSION_H From 5f81723a26d7074c82b184939a59d9f1d88ae4af Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:18:13 -0500 Subject: [PATCH 029/277] update unix man pages --- doc/man/hush-cli.1 | 24 ++++++++++-------------- doc/man/hush-tx.1 | 22 +++++++++------------- doc/man/hushd.1 | 43 ++++++++++++++++++++++++------------------- 3 files changed, 43 insertions(+), 46 deletions(-) diff --git a/doc/man/hush-cli.1 b/doc/man/hush-cli.1 index 87714f8ee..114b519a5 100644 --- a/doc/man/hush-cli.1 +++ b/doc/man/hush-cli.1 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10. -.TH HUSH-CLI "1" "October 2020" "hush-cli v3.5.1" "User Commands" +.TH HUSH-CLI "1" "December 2020" "hush-cli v3.6.0" "User Commands" .SH NAME -hush-cli \- manual page for hush-cli v3.5.1 +hush-cli \- manual page for hush-cli v3.6.0 .SH DESCRIPTION -Hush RPC client version v3.5.1\-dd8ab3df6 +Hush RPC client version v3.6.0\-c2fedd304 .PP In order to ensure you are adequately protecting your privacy when using Hush, -please see . +please see . .SS "Usage:" .TP hush\-cli [options] [params] @@ -71,21 +71,17 @@ Timeout in seconds during HTTP requests, or 0 for no timeout. (default: Read extra arguments from standard input, one per line until EOF/Ctrl\-D (recommended for sensitive information such as passphrases) .SH COPYRIGHT -Hush Daemon version v3.5.1-dd8ab3df6 +Hush Daemon version v3.6.0-c2fedd304 In order to ensure you are adequately protecting your privacy when using Hush, -please see . +please see . Copyright (C) 2009-2020 The Bitcoin Core Developers Copyright (C) 2015-2020 The Zcash Developers Copyright (C) 2015-2020 jl777 and SuperNET developers -Copyright (C) 2018-2020 The Hush developers +Copyright (C) 2018-2020 Duke Leto and The Hush developers -This is experimental software!!! +This is experimental Free Software! Fuck Yeah!! -Distributed under the MIT software license, see the accompanying file COPYING -or . - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young. +Distributed under the GPLv3 software license, see the accompanying file COPYING +or . diff --git a/doc/man/hush-tx.1 b/doc/man/hush-tx.1 index 382d54642..423e085b5 100644 --- a/doc/man/hush-tx.1 +++ b/doc/man/hush-tx.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10. -.TH HUSH-TX "1" "October 2020" "hush-tx v3.5.2" "User Commands" +.TH HUSH-TX "1" "December 2020" "hush-tx v3.6.0" "User Commands" .SH NAME -hush-tx \- manual page for hush-tx v3.5.2 +hush-tx \- manual page for hush-tx v3.6.0 .SH DESCRIPTION -Hush komodo\-tx utility version v3.5.2\-d19cf21f9 +Hush komodo\-tx utility version v3.6.0\-c2fedd304 .SS "Usage:" .TP komodo\-tx [options] [commands] @@ -84,21 +84,17 @@ set=NAME:JSON\-STRING .IP Set register NAME to given JSON\-STRING .SH COPYRIGHT -Hush Daemon version v3.5.2-d19cf21f9 +Hush Daemon version v3.6.0-c2fedd304 In order to ensure you are adequately protecting your privacy when using Hush, -please see . +please see . Copyright (C) 2009-2020 The Bitcoin Core Developers Copyright (C) 2015-2020 The Zcash Developers Copyright (C) 2015-2020 jl777 and SuperNET developers -Copyright (C) 2018-2020 The Hush developers +Copyright (C) 2018-2020 Duke Leto and The Hush developers -This is experimental software!!! +This is experimental Free Software! Fuck Yeah!! -Distributed under the MIT software license, see the accompanying file COPYING -or . - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young. +Distributed under the GPLv3 software license, see the accompanying file COPYING +or . diff --git a/doc/man/hushd.1 b/doc/man/hushd.1 index fe90b937e..e1f7abd2f 100644 --- a/doc/man/hushd.1 +++ b/doc/man/hushd.1 @@ -1,17 +1,17 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10. -.TH HUSHD "1" "October 2020" "hushd v3.5.2" "User Commands" +.TH HUSHD "1" "December 2020" "hushd v3.6.0" "User Commands" .SH NAME -hushd \- manual page for hushd v3.5.2 +hushd \- manual page for hushd v3.6.0 .SH DESCRIPTION Found binary: ./komodod -Hush Daemon version v3.5.2\-d19cf21f9 +Hush Daemon version v3.6.0\-c2fedd304 .PP In order to ensure you are adequately protecting your privacy when using Hush, -please see . +please see . .SS "Usage:" .TP -komodod [options] -Start Hush\-flavored Komodo Daemon +hushd [options] +Start a Hush Daemon .SH OPTIONS .HP \-? @@ -62,7 +62,7 @@ Specify directory to be used when exporting data .HP \fB\-dbcache=\fR .IP -Set database cache size in megabytes (4 to 16384, default: 450) +Set database cache size in megabytes (4 to 16384, default: 512) .HP \fB\-loadblock=\fR .IP @@ -264,6 +264,15 @@ Tor control port password (default: empty) Specify TLS usage (default: 1 => enabled and preferred, yet compatible); other options are \fB\-tls\fR=\fI\,0\/\fR to disable TLS and \fB\-tls\fR=\fI\,only\/\fR to enforce it .HP +\fB\-tlsfallbacknontls=\fR<0 or 1> +.IP +If a TLS connection fails, the next connection attempt of the same peer +(based on IP address) takes place without TLS (default: 1) +.HP +\fB\-tlsvalidate=\fR<0 or 1> +.IP +Connect to peers only with valid certificates (default: 0) +.HP \fB\-tlskeypath=\fR .IP Full path to a private key @@ -433,8 +442,8 @@ Output debugging information (default: 0, supplying is optional). If is not supplied or if = 1, output all debugging information. can be: addrman, alert, bench, coindb, db, deletetx, estimatefee, http, libevent, lock, mempool, net, -partitioncheck, pow, proxy, prune, rand, reindex, rpc, selectcoins, tor, -zmq, zrpc, zrpcunsafe (implies zrpc). +tls, partitioncheck, pow, proxy, prune, rand, reindex, rpc, selectcoins, +tor, zmq, zrpc, zrpcunsafe (implies zrpc). .HP \fB\-experimentalfeatures\fR .IP @@ -673,21 +682,17 @@ Starting supply, default is 0 .IP Enforce transaction\-rate limit, default 0 .SH COPYRIGHT -Hush Daemon version v3.5.2-d19cf21f9 +Hush Daemon version v3.6.0-c2fedd304 In order to ensure you are adequately protecting your privacy when using Hush, -please see . +please see . Copyright (C) 2009-2020 The Bitcoin Core Developers Copyright (C) 2015-2020 The Zcash Developers Copyright (C) 2015-2020 jl777 and SuperNET developers -Copyright (C) 2018-2020 The Hush developers +Copyright (C) 2018-2020 Duke Leto and The Hush developers -This is experimental software!!! +This is experimental Free Software! Fuck Yeah!! -Distributed under the MIT software license, see the accompanying file COPYING -or . - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written -by Eric Young. +Distributed under the GPLv3 software license, see the accompanying file COPYING +or . From dde9b780a1d250052366eb3167c2ab6b1f5e8f7d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:31:44 -0500 Subject: [PATCH 030/277] hush-cli updates for 3.6.0 --- src/hush-cli | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/hush-cli b/src/hush-cli index 9cc47207a..6721b64ec 100755 --- a/src/hush-cli +++ b/src/hush-cli @@ -13,10 +13,11 @@ NAME=HUSH3 CLI=${KOMODOCLI:-./komodo-cli} if [ -f $CLI ]; then - $CLI -ac_name=$NAME "$@" + $CLI -ac_name=$NAME "$@" else - # We prefix our binary when installed - # system wide on Debain system, to prevent clashes - CLI=hush-komodo-cli + # We prefix our binary when installed + # system wide on Debain systems, to prevent clashes, + # because we are classy like that. Fuck jl777, The KYC Traitor. + CLI=hush-komodo-cli $CLI -ac_name=$NAME "$@" fi From dc04dc975e6e04fe36521cee9edcd9eb05c47adf Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:31:56 -0500 Subject: [PATCH 031/277] hushd changes for 3.6.0 --- src/hushd | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/hushd b/src/hushd index ca3f28319..04b514a1a 100755 --- a/src/hushd +++ b/src/hushd @@ -32,10 +32,14 @@ END=128,340000,5422111 SUPPLY=6178674 FOUNDERS=1 CLIENTNAME=GoldenSandtrout -NODE1=188.165.212.101 # EU -NODE2=64.120.113.130 # AR -NODE3=209.58.144.205 # NA -NODE4=94.130.35.94 # EU +NODE1=node1.hush.is +NODE2=node2.hush.is +NODE3=node3.hush.is +NODE4=node4.hush.is +NODE5=node5.hush.is +NODE6=node6.hush.is +NODE7=node7.hush.is +NODE8=node8.hush.is CCLIB=hush3 # CryptoConditions/Custom Consensus params @@ -63,6 +67,8 @@ else fi fi +# jl777 disgraced his village and so Duke The Elder journeys on +# with the True Cypherpunks $KMD -ac_name=$NAME \ -ac_sapling=$SAPLING \ -ac_reward=$REWARD \ From a2feeac002f025f0f078c3f33baa4a483eeae2af Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:32:15 -0500 Subject: [PATCH 032/277] update testnet scripts for funzies --- src/hush-cli-testnet | 2 +- src/hushd-testnet | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/hush-cli-testnet b/src/hush-cli-testnet index 722a19b4e..3635876ae 100755 --- a/src/hush-cli-testnet +++ b/src/hush-cli-testnet @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019 Hush developers +# Copyright (c) 2019-2020 Hush developers # set working directory to the location of this script DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" diff --git a/src/hushd-testnet b/src/hushd-testnet index 67d724fce..03427317b 100755 --- a/src/hushd-testnet +++ b/src/hushd-testnet @@ -19,10 +19,9 @@ FOUNDERS=1 REWARD=0,1125000000,562500000 PERC=11111111 HALVING=129,340000,840000 -# NOTE: keep in sync with komodo_bitcoind.h END=128,340000,5422111 CLIENTNAME=GoldenSandtrout -SEEDNODE=188.165.212.101 +SEEDNODE=1.2.3.4 CCLIB=hush3 # CryptoConditions/Custom Consensus params From 49ab8471b1d7633ce68ad211c4ca5b7cc91e6221 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:40:34 -0500 Subject: [PATCH 033/277] Update DNS seeds --- src/chainparams.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 0b2052ce7..2c46661ff 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -22,14 +21,10 @@ #include "key_io.h" #include "main.h" #include "crypto/equihash.h" - #include "util.h" #include "utilstrencodings.h" - #include - #include - #include "chainparamsseeds.h" static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesisOutputScript, uint32_t nTime, const uint256& nNonce, const std::vector& nSolution, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward) @@ -182,9 +177,12 @@ public: assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); vFixedSeeds.clear(); vSeeds.clear(); - vSeeds.push_back(CDNSSeedData("node1", "dnsseed.hush.is")); - vSeeds.push_back(CDNSSeedData("node2", "dnsseed2.hush.is")); - // TODO: set up bootstrapping for mainnet + // Hush Official DNS Seeds + vSeeds.push_back(CDNSSeedData("node1", "seed1.hush.is")); + vSeeds.push_back(CDNSSeedData("node2", "seed2.hush.is")); + // Community run DNS Seeds + vSeeds.push_back(CDNSSeedData("node3", "dns.leto.net")); + base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,60); base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,85); base58Prefixes[SECRET_KEY] = std::vector(1,188); @@ -197,6 +195,7 @@ public: // guarantees the first two characters, when base58 encoded, are "SK" base58Prefixes[ZCSPENDING_KEY] = {171,54}; + // guarantees the first two characters, when base58 encoded, are "zs" bech32HRPs[SAPLING_PAYMENT_ADDRESS] = "zs"; bech32HRPs[SAPLING_FULL_VIEWING_KEY] = "zviews"; bech32HRPs[SAPLING_INCOMING_VIEWING_KEY] = "zivks"; From abc0b55d052ea43876e506d3d8b7f85516b9b3ae Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:42:59 -0500 Subject: [PATCH 034/277] Hush Hush Hush --- src/addressindex.h | 6 +++--- src/addrman.h | 6 +++--- src/alert.h | 6 +++--- src/alertkeys.h | 4 ++-- src/amount.h | 6 +++--- src/arith_uint256.h | 6 +++--- src/base58.h | 6 +++--- src/bech32.h | 6 +++--- src/bloom.h | 6 +++--- src/chain.h | 6 +++--- src/chainparams.h | 6 +++--- src/chainparamsbase.h | 6 +++--- src/chainparamsseeds.h | 6 +++--- src/checkpoints.h | 6 +++--- src/checkqueue.h | 6 +++--- src/clientversion.h | 6 +++--- src/coincontrol.h | 6 +++--- src/coins.h | 6 +++--- src/compat.h | 6 +++--- src/compressor.h | 6 +++--- src/core_io.h | 6 +++--- src/core_memusage.h | 6 +++--- src/dbwrapper.h | 6 +++--- src/hash.h | 6 +++--- src/httprpc.h | 4 ++-- src/httpserver.h | 6 +++--- src/init.h | 6 +++--- src/key.h | 6 +++--- src/key_io.h | 6 +++--- src/keystore.h | 6 +++--- src/limitedmap.h | 6 +++--- src/main.h | 6 +++--- src/memusage.h | 4 ++-- src/merkleblock.h | 6 +++--- src/miner.h | 6 +++--- src/mruset.h | 6 +++--- src/net.h | 6 +++--- src/netbase.h | 6 +++--- src/noui.h | 6 +++--- src/pow.h | 6 +++--- src/prevector.h | 4 ++-- src/pubkey.h | 6 +++--- src/random.h | 6 +++--- src/reverselock.h | 6 +++--- src/scheduler.h | 4 ++-- src/serialize.h | 6 +++--- src/spentindex.h | 6 +++--- src/streams.h | 6 +++--- src/sync.h | 6 +++--- src/threadsafety.h | 6 +++--- src/timedata.h | 6 +++--- src/torcontrol.h | 6 +++--- src/ui_interface.h | 6 +++--- src/uint256.h | 6 +++--- src/undo.h | 6 +++--- src/util.h | 6 +++--- src/utilmoneystr.h | 6 +++--- src/utilstrencodings.h | 6 +++--- src/utiltime.h | 6 +++--- src/validationinterface.h | 6 +++--- 60 files changed, 175 insertions(+), 175 deletions(-) diff --git a/src/addressindex.h b/src/addressindex.h index b39f36c12..f3b1f5118 100644 --- a/src/addressindex.h +++ b/src/addressindex.h @@ -4,8 +4,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_ADDRESSINDEX_H -#define BITCOIN_ADDRESSINDEX_H +#ifndef HUSH_ADDRESSINDEX_H +#define HUSH_ADDRESSINDEX_H #include "uint256.h" #include "amount.h" @@ -80,4 +80,4 @@ struct CMempoolAddressDeltaKeyCompare } }; -#endif // BITCOIN_ADDRESSINDEX_H +#endif // HUSH_ADDRESSINDEX_H diff --git a/src/addrman.h b/src/addrman.h index 752abb27c..92051abd1 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_ADDRMAN_H -#define BITCOIN_ADDRMAN_H +#ifndef HUSH_ADDRMAN_H +#define HUSH_ADDRMAN_H #include "netbase.h" #include "protocol.h" @@ -645,4 +645,4 @@ public: }; -#endif // BITCOIN_ADDRMAN_H +#endif // HUSH_ADDRMAN_H diff --git a/src/alert.h b/src/alert.h index 9f10d3781..c1a103c3f 100644 --- a/src/alert.h +++ b/src/alert.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_ALERT_H -#define BITCOIN_ALERT_H +#ifndef HUSH_ALERT_H +#define HUSH_ALERT_H #include "serialize.h" #include "sync.h" @@ -125,4 +125,4 @@ public: static CAlert getAlertByHash(const uint256 &hash); }; -#endif // BITCOIN_ALERT_H +#endif // HUSH_ALERT_H diff --git a/src/alertkeys.h b/src/alertkeys.h index 1c4bcbc2c..f76f9b87e 100644 --- a/src/alertkeys.h +++ b/src/alertkeys.h @@ -14,8 +14,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_ALERTKEYS_H -#define BITCOIN_ALERTKEYS_H +#ifndef HUSH_ALERTKEYS_H +#define HUSH_ALERTKEYS_H // REMINDER: DO NOT COMMIT YOUR PRIVATE KEYS TO THE GIT REPOSITORY, lulz diff --git a/src/amount.h b/src/amount.h index 56eecf78f..e1d66ba96 100644 --- a/src/amount.h +++ b/src/amount.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_AMOUNT_H -#define BITCOIN_AMOUNT_H +#ifndef HUSH_AMOUNT_H +#define HUSH_AMOUNT_H #include "serialize.h" @@ -79,4 +79,4 @@ public: } }; -#endif // BITCOIN_AMOUNT_H +#endif // HUSH_AMOUNT_H diff --git a/src/arith_uint256.h b/src/arith_uint256.h index 437b95c74..dd62241cf 100644 --- a/src/arith_uint256.h +++ b/src/arith_uint256.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_ARITH_UINT256_H -#define BITCOIN_ARITH_UINT256_H +#ifndef HUSH_ARITH_UINT256_H +#define HUSH_ARITH_UINT256_H #include #include @@ -303,4 +303,4 @@ public: uint256 ArithToUint256(const arith_uint256 &); arith_uint256 UintToArith256(const uint256 &); -#endif // BITCOIN_ARITH_UINT256_H +#endif // HUSH_ARITH_UINT256_H diff --git a/src/base58.h b/src/base58.h index 48badc597..6fa3f457f 100644 --- a/src/base58.h +++ b/src/base58.h @@ -26,8 +26,8 @@ * - E-mail usually won't line-break if there's no punctuation to break at. * - Double-clicking selects the whole string as one word if it's all alphanumeric. */ -#ifndef BITCOIN_BASE58_H -#define BITCOIN_BASE58_H +#ifndef HUSH_BASE58_H +#define HUSH_BASE58_H #include "chainparams.h" #include "key.h" @@ -224,4 +224,4 @@ public: typedef CBitcoinExtKeyBase CBitcoinExtKey; typedef CBitcoinExtKeyBase CBitcoinExtPubKey; -#endif // BITCOIN_BASE58_H +#endif // HUSH_BASE58_H diff --git a/src/bech32.h b/src/bech32.h index 081fd2f46..a4751aef0 100644 --- a/src/bech32.h +++ b/src/bech32.h @@ -10,8 +10,8 @@ // // For more information, see BIP 173. -#ifndef BITCOIN_BECH32_H -#define BITCOIN_BECH32_H +#ifndef HUSH_BECH32_H +#define HUSH_BECH32_H #include #include @@ -28,4 +28,4 @@ std::pair> Decode(const std::string& str); } // namespace bech32 -#endif // BITCOIN_BECH32_H +#endif // HUSH_BECH32_H diff --git a/src/bloom.h b/src/bloom.h index 69e507943..22f3bd396 100644 --- a/src/bloom.h +++ b/src/bloom.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_BLOOM_H -#define BITCOIN_BLOOM_H +#ifndef HUSH_BLOOM_H +#define HUSH_BLOOM_H #include "serialize.h" @@ -150,4 +150,4 @@ private: }; -#endif // BITCOIN_BLOOM_H +#endif // HUSH_BLOOM_H diff --git a/src/chain.h b/src/chain.h index f6b6fa11f..3ecc2776e 100644 --- a/src/chain.h +++ b/src/chain.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CHAIN_H -#define BITCOIN_CHAIN_H +#ifndef HUSH_CHAIN_H +#define HUSH_CHAIN_H class CChainPower; @@ -777,4 +777,4 @@ public: const CBlockIndex *FindFork(const CBlockIndex *pindex) const; }; -#endif // BITCOIN_CHAIN_H +#endif // HUSH_CHAIN_H diff --git a/src/chainparams.h b/src/chainparams.h index d56f8d095..f8275ca53 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CHAINPARAMS_H -#define BITCOIN_CHAINPARAMS_H +#ifndef HUSH_CHAINPARAMS_H +#define HUSH_CHAINPARAMS_H #include "chainparamsbase.h" #include "consensus/params.h" @@ -182,4 +182,4 @@ bool SelectParamsFromCommandLine(); */ void UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex idx, int nActivationHeight); -#endif // BITCOIN_CHAINPARAMS_H +#endif // HUSH_CHAINPARAMS_H diff --git a/src/chainparamsbase.h b/src/chainparamsbase.h index 88e928e14..9379e95b4 100644 --- a/src/chainparamsbase.h +++ b/src/chainparamsbase.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CHAINPARAMSBASE_H -#define BITCOIN_CHAINPARAMSBASE_H +#ifndef HUSH_CHAINPARAMSBASE_H +#define HUSH_CHAINPARAMSBASE_H #include #include @@ -75,4 +75,4 @@ bool SelectBaseParamsFromCommandLine(); */ bool AreBaseParamsConfigured(); -#endif // BITCOIN_CHAINPARAMSBASE_H +#endif // HUSH_CHAINPARAMSBASE_H diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h index e3dac3ca6..5d539bbb7 100644 --- a/src/chainparamsseeds.h +++ b/src/chainparamsseeds.h @@ -13,8 +13,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CHAINPARAMSSEEDS_H -#define BITCOIN_CHAINPARAMSSEEDS_H +#ifndef HUSH_CHAINPARAMSSEEDS_H +#define HUSH_CHAINPARAMSSEEDS_H /** * List of fixed seed nodes for the bitcoin network * AUTOGENERATED by contrib/seeds/generate-seeds.py @@ -33,4 +33,4 @@ static SeedSpec6 pnSeed6_main[] = { static SeedSpec6 pnSeed6_test[] = { }; -#endif // BITCOIN_CHAINPARAMSSEEDS_H +#endif // HUSH_CHAINPARAMSSEEDS_H diff --git a/src/checkpoints.h b/src/checkpoints.h index d25db20b4..87cd869b8 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CHECKPOINTS_H -#define BITCOIN_CHECKPOINTS_H +#ifndef HUSH_CHECKPOINTS_H +#define HUSH_CHECKPOINTS_H #include "uint256.h" #include "chainparams.h" @@ -57,4 +57,4 @@ double GuessVerificationProgress(const CChainParams::CCheckpointData& data, CBlo } //namespace Checkpoints -#endif // BITCOIN_CHECKPOINTS_H +#endif // HUSH_CHECKPOINTS_H diff --git a/src/checkqueue.h b/src/checkqueue.h index 0480d2cb3..deff2e63a 100644 --- a/src/checkqueue.h +++ b/src/checkqueue.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CHECKQUEUE_H -#define BITCOIN_CHECKQUEUE_H +#ifndef HUSH_CHECKQUEUE_H +#define HUSH_CHECKQUEUE_H #include #include @@ -228,4 +228,4 @@ public: } }; -#endif // BITCOIN_CHECKQUEUE_H +#endif // HUSH_CHECKQUEUE_H diff --git a/src/clientversion.h b/src/clientversion.h index 0a066c7ec..e277e0fd2 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CLIENTVERSION_H -#define BITCOIN_CLIENTVERSION_H +#ifndef HUSH_CLIENTVERSION_H +#define HUSH_CLIENTVERSION_H #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -86,4 +86,4 @@ std::string FormatSubVersion(const std::string& name, int nClientVersion, const #endif // WINDRES_PREPROC -#endif // BITCOIN_CLIENTVERSION_H +#endif // HUSH_CLIENTVERSION_H diff --git a/src/coincontrol.h b/src/coincontrol.h index 24228d529..952ea2de2 100644 --- a/src/coincontrol.h +++ b/src/coincontrol.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_COINCONTROL_H -#define BITCOIN_COINCONTROL_H +#ifndef HUSH_COINCONTROL_H +#define HUSH_COINCONTROL_H #include "primitives/transaction.h" @@ -78,4 +78,4 @@ private: std::set setSelected; }; -#endif // BITCOIN_COINCONTROL_H +#endif // HUSH_COINCONTROL_H diff --git a/src/coins.h b/src/coins.h index 1c735336c..d5503d4ba 100644 --- a/src/coins.h +++ b/src/coins.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_COINS_H -#define BITCOIN_COINS_H +#ifndef HUSH_COINS_H +#define HUSH_COINS_H #define KOMODO_ENABLE_INTEREST //enabling this is a hardfork, activate with new RR method @@ -604,4 +604,4 @@ private: ); }; -#endif // BITCOIN_COINS_H +#endif // HUSH_COINS_H diff --git a/src/compat.h b/src/compat.h index 25f81eccd..61ac03dd4 100644 --- a/src/compat.h +++ b/src/compat.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_COMPAT_H -#define BITCOIN_COMPAT_H +#ifndef HUSH_COMPAT_H +#define HUSH_COMPAT_H #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -116,4 +116,4 @@ bool static inline IsSelectableSocket(SOCKET s) { #endif } -#endif // BITCOIN_COMPAT_H +#endif // HUSH_COMPAT_H diff --git a/src/compressor.h b/src/compressor.h index d1b4e9fda..5c6bc4381 100644 --- a/src/compressor.h +++ b/src/compressor.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_COMPRESSOR_H -#define BITCOIN_COMPRESSOR_H +#ifndef HUSH_COMPRESSOR_H +#define HUSH_COMPRESSOR_H #include "primitives/transaction.h" #include "script/script.h" @@ -133,4 +133,4 @@ public: } }; -#endif // BITCOIN_COMPRESSOR_H +#endif // HUSH_COMPRESSOR_H diff --git a/src/core_io.h b/src/core_io.h index 51c7c2a28..cc4445b9a 100644 --- a/src/core_io.h +++ b/src/core_io.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CORE_IO_H -#define BITCOIN_CORE_IO_H +#ifndef HUSH_CORE_IO_H +#define HUSH_CORE_IO_H #include #include @@ -44,4 +44,4 @@ extern std::string EncodeHexTx(const CTransaction& tx); extern void ScriptPubKeyToUniv(const CScript& scriptPubKey, UniValue& out, bool fIncludeHex); extern void TxToUniv(const CTransaction& tx, const uint256& hashBlock, UniValue& entry); -#endif // BITCOIN_CORE_IO_H +#endif // HUSH_CORE_IO_H diff --git a/src/core_memusage.h b/src/core_memusage.h index bf3ccfaaa..eca1d823b 100644 --- a/src/core_memusage.h +++ b/src/core_memusage.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_CORE_MEMUSAGE_H -#define BITCOIN_CORE_MEMUSAGE_H +#ifndef HUSH_CORE_MEMUSAGE_H +#define HUSH_CORE_MEMUSAGE_H #include "primitives/transaction.h" #include "primitives/block.h" @@ -59,4 +59,4 @@ static inline size_t RecursiveDynamicUsage(const CBlockLocator& locator) { return memusage::DynamicUsage(locator.vHave); } -#endif // BITCOIN_CORE_MEMUSAGE_H +#endif // HUSH_CORE_MEMUSAGE_H diff --git a/src/dbwrapper.h b/src/dbwrapper.h index dedd4fbe1..fb5514340 100644 --- a/src/dbwrapper.h +++ b/src/dbwrapper.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_DBWRAPPER_H -#define BITCOIN_DBWRAPPER_H +#ifndef HUSH_DBWRAPPER_H +#define HUSH_DBWRAPPER_H #include "clientversion.h" #include "serialize.h" @@ -276,5 +276,5 @@ public: bool IsEmpty(); }; -#endif // BITCOIN_DBWRAPPER_H +#endif // HUSH_DBWRAPPER_H diff --git a/src/hash.h b/src/hash.h index 3e912f051..675429512 100644 --- a/src/hash.h +++ b/src/hash.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_HASH_H -#define BITCOIN_HASH_H +#ifndef HUSH_HASH_H +#define HUSH_HASH_H #include "crypto/ripemd160.h" #include "crypto/sha256.h" @@ -234,4 +234,4 @@ unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector #include diff --git a/src/httpserver.h b/src/httpserver.h index f805dcb79..41456ba6d 100644 --- a/src/httpserver.h +++ b/src/httpserver.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_HTTPSERVER_H -#define BITCOIN_HTTPSERVER_H +#ifndef HUSH_HTTPSERVER_H +#define HUSH_HTTPSERVER_H #include #include @@ -152,4 +152,4 @@ private: struct event* ev; }; -#endif // BITCOIN_HTTPSERVER_H +#endif // HUSH_HTTPSERVER_H diff --git a/src/init.h b/src/init.h index 7c273a47f..333b8cafa 100644 --- a/src/init.h +++ b/src/init.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_INIT_H -#define BITCOIN_INIT_H +#ifndef HUSH_INIT_H +#define HUSH_INIT_H #include @@ -49,4 +49,4 @@ enum HelpMessageMode { /** Help for options shared between UI and daemon (for -help) */ std::string HelpMessage(HelpMessageMode mode); -#endif // BITCOIN_INIT_H +#endif // HUSH_INIT_H diff --git a/src/key.h b/src/key.h index 508438daf..fe242f8f5 100644 --- a/src/key.h +++ b/src/key.h @@ -20,8 +20,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_KEY_H -#define BITCOIN_KEY_H +#ifndef HUSH_KEY_H +#define HUSH_KEY_H #include "pubkey.h" #include "serialize.h" @@ -220,4 +220,4 @@ void ECC_Stop(void); /** Check that required EC support is available at runtime. */ bool ECC_InitSanityCheck(void); -#endif // BITCOIN_KEY_H +#endif // HUSH_KEY_H diff --git a/src/key_io.h b/src/key_io.h index ff73f88cb..4ca7aa3de 100644 --- a/src/key_io.h +++ b/src/key_io.h @@ -5,8 +5,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_KEYIO_H -#define BITCOIN_KEYIO_H +#ifndef HUSH_KEYIO_H +#define HUSH_KEYIO_H #include #include @@ -42,4 +42,4 @@ libzcash::ViewingKey DecodeViewingKey(const std::string& str); std::string EncodeSpendingKey(const libzcash::SpendingKey& zkey); libzcash::SpendingKey DecodeSpendingKey(const std::string& str); -#endif // BITCOIN_KEYIO_H +#endif // HUSH_KEYIO_H diff --git a/src/keystore.h b/src/keystore.h index 9c6d07856..a1971b9c8 100644 --- a/src/keystore.h +++ b/src/keystore.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_KEYSTORE_H -#define BITCOIN_KEYSTORE_H +#ifndef HUSH_KEYSTORE_H +#define HUSH_KEYSTORE_H #include "key.h" #include "pubkey.h" @@ -245,4 +245,4 @@ typedef std::map > > Crypt //! Sapling typedef std::map > CryptedSaplingSpendingKeyMap; -#endif // BITCOIN_KEYSTORE_H +#endif // HUSH_KEYSTORE_H diff --git a/src/limitedmap.h b/src/limitedmap.h index 5af7dcd4e..b1b521c86 100644 --- a/src/limitedmap.h +++ b/src/limitedmap.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_LIMITEDMAP_H -#define BITCOIN_LIMITEDMAP_H +#ifndef HUSH_LIMITEDMAP_H +#define HUSH_LIMITEDMAP_H #include #include @@ -91,4 +91,4 @@ public: } }; -#endif // BITCOIN_LIMITEDMAP_H +#endif // HUSH_LIMITEDMAP_H diff --git a/src/main.h b/src/main.h index 4b9efa1e5..f11e88053 100644 --- a/src/main.h +++ b/src/main.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_MAIN_H -#define BITCOIN_MAIN_H +#ifndef HUSH_MAIN_H +#define HUSH_MAIN_H #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -953,4 +953,4 @@ std::pair>, uint64_t> DrainRecent void SetChainNotifiedSequence(uint64_t recentlyConflictedSequence); bool ChainIsFullyNotified(); -#endif // BITCOIN_MAIN_H +#endif // HUSH_MAIN_H diff --git a/src/memusage.h b/src/memusage.h index 052ddc278..9f97828df 100644 --- a/src/memusage.h +++ b/src/memusage.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_MEMUSAGE_H -#define BITCOIN_MEMUSAGE_H +#ifndef HUSH_MEMUSAGE_H +#define HUSH_MEMUSAGE_H #include diff --git a/src/merkleblock.h b/src/merkleblock.h index cb0165108..1fe1683b9 100644 --- a/src/merkleblock.h +++ b/src/merkleblock.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_MERKLEBLOCK_H -#define BITCOIN_MERKLEBLOCK_H +#ifndef HUSH_MERKLEBLOCK_H +#define HUSH_MERKLEBLOCK_H #include "serialize.h" #include "uint256.h" @@ -168,4 +168,4 @@ public: } }; -#endif // BITCOIN_MERKLEBLOCK_H +#endif // HUSH_MERKLEBLOCK_H diff --git a/src/miner.h b/src/miner.h index 36e0b3fbd..876a57f61 100644 --- a/src/miner.h +++ b/src/miner.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_MINER_H -#define BITCOIN_MINER_H +#ifndef HUSH_MINER_H +#define HUSH_MINER_H #include "primitives/block.h" @@ -66,4 +66,4 @@ void GenerateBitcoins(bool fGenerate, int nThreads); void UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, const CBlockIndex* pindexPrev); -#endif // BITCOIN_MINER_H +#endif // HUSH_MINER_H diff --git a/src/mruset.h b/src/mruset.h index bab4d18bd..e59c4f14c 100644 --- a/src/mruset.h +++ b/src/mruset.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_MRUSET_H -#define BITCOIN_MRUSET_H +#ifndef HUSH_MRUSET_H +#define HUSH_MRUSET_H #include #include @@ -77,4 +77,4 @@ public: size_type max_size() const { return nMaxSize; } }; -#endif // BITCOIN_MRUSET_H +#endif // HUSH_MRUSET_H diff --git a/src/net.h b/src/net.h index 72a13a7e9..fc42c9de2 100644 --- a/src/net.h +++ b/src/net.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_NET_H -#define BITCOIN_NET_H +#ifndef HUSH_NET_H +#define HUSH_NET_H #include "bloom.h" #include "compat.h" @@ -720,4 +720,4 @@ public: bool Read(CAddrMan& addr); }; -#endif // BITCOIN_NET_H +#endif // HUSH_NET_H diff --git a/src/netbase.h b/src/netbase.h index 303c8ae8a..2c7259794 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_NETBASE_H -#define BITCOIN_NETBASE_H +#ifndef HUSH_NETBASE_H +#define HUSH_NETBASE_H #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -240,4 +240,4 @@ struct timeval MillisToTimeval(int64_t nTimeout); bool SanityCheckASMap(const std::vector& asmap); -#endif // BITCOIN_NETBASE_H +#endif // HUSH_NETBASE_H diff --git a/src/noui.h b/src/noui.h index 9b9cfb60c..8086533b4 100644 --- a/src/noui.h +++ b/src/noui.h @@ -17,9 +17,9 @@ * * ******************************************************************************/ -#ifndef BITCOIN_NOUI_H -#define BITCOIN_NOUI_H +#ifndef HUSH_NOUI_H +#define HUSH_NOUI_H extern void noui_connect(); -#endif // BITCOIN_NOUI_H +#endif // HUSH_NOUI_H diff --git a/src/pow.h b/src/pow.h index a3787c7d5..82e763ee5 100644 --- a/src/pow.h +++ b/src/pow.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_POW_H -#define BITCOIN_POW_H +#ifndef HUSH_POW_H +#define HUSH_POW_H #include "chain.h" #include "consensus/params.h" @@ -47,4 +47,4 @@ CChainPower GetBlockProof(const CBlockIndex& block); /** Return the time it would take to redo the work difference between from and to, assuming the current hashrate corresponds to the difficulty at tip, in seconds. */ int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& from, const CBlockIndex& tip, const Consensus::Params&); -#endif // BITCOIN_POW_H +#endif // HUSH_POW_H diff --git a/src/prevector.h b/src/prevector.h index aad4c2717..36066eca2 100644 --- a/src/prevector.h +++ b/src/prevector.h @@ -1,5 +1,5 @@ -#ifndef _BITCOIN_PREVECTOR_H_ -#define _BITCOIN_PREVECTOR_H_ +#ifndef _HUSH_PREVECTOR_H_ +#define _HUSH_PREVECTOR_H_ #include diff --git a/src/pubkey.h b/src/pubkey.h index 80eac2682..842c54026 100644 --- a/src/pubkey.h +++ b/src/pubkey.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_PUBKEY_H -#define BITCOIN_PUBKEY_H +#ifndef HUSH_PUBKEY_H +#define HUSH_PUBKEY_H #include "hash.h" #include "serialize.h" @@ -266,4 +266,4 @@ public: ~ECCVerifyHandle(); }; -#endif // BITCOIN_PUBKEY_H +#endif // HUSH_PUBKEY_H diff --git a/src/random.h b/src/random.h index b781f8541..c51f05b5d 100644 --- a/src/random.h +++ b/src/random.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_RANDOM_H -#define BITCOIN_RANDOM_H +#ifndef HUSH_RANDOM_H +#define HUSH_RANDOM_H #include "uint256.h" @@ -86,4 +86,4 @@ static inline uint32_t insecure_rand(void) return (insecure_rand_Rw << 16) + insecure_rand_Rz; } -#endif // BITCOIN_RANDOM_H +#endif // HUSH_RANDOM_H diff --git a/src/reverselock.h b/src/reverselock.h index e5581e33e..e57dbca59 100644 --- a/src/reverselock.h +++ b/src/reverselock.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_REVERSELOCK_H -#define BITCOIN_REVERSELOCK_H +#ifndef HUSH_REVERSELOCK_H +#define HUSH_REVERSELOCK_H /** * An RAII-style reverse lock. Unlocks on construction and locks on destruction. @@ -46,4 +46,4 @@ private: Lock templock; }; -#endif // BITCOIN_REVERSELOCK_H +#endif // HUSH_REVERSELOCK_H diff --git a/src/scheduler.h b/src/scheduler.h index 8d87654c6..173f23211 100644 --- a/src/scheduler.h +++ b/src/scheduler.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SCHEDULER_H -#define BITCOIN_SCHEDULER_H +#ifndef HUSH_SCHEDULER_H +#define HUSH_SCHEDULER_H // // NOTE: diff --git a/src/serialize.h b/src/serialize.h index 274b6bd47..880373b7e 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SERIALIZE_H -#define BITCOIN_SERIALIZE_H +#ifndef HUSH_SERIALIZE_H +#define HUSH_SERIALIZE_H #include "compat/endian.h" @@ -1117,4 +1117,4 @@ size_t GetSerializeSize(const S& s, const T& t) return (CSizeComputer(s.GetType(), s.GetVersion()) << t).size(); } -#endif // BITCOIN_SERIALIZE_H +#endif // HUSH_SERIALIZE_H diff --git a/src/spentindex.h b/src/spentindex.h index 762b7d4c4..24f266eae 100644 --- a/src/spentindex.h +++ b/src/spentindex.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_SPENTINDEX_H -#define BITCOIN_SPENTINDEX_H +#ifndef HUSH_SPENTINDEX_H +#define HUSH_SPENTINDEX_H #include "uint256.h" #include "amount.h" @@ -95,4 +95,4 @@ struct CSpentIndexKeyCompare } }; -#endif // BITCOIN_SPENTINDEX_H \ No newline at end of file +#endif // HUSH_SPENTINDEX_H \ No newline at end of file diff --git a/src/streams.h b/src/streams.h index 52c20c554..5c22c9bbc 100644 --- a/src/streams.h +++ b/src/streams.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_STREAMS_H -#define BITCOIN_STREAMS_H +#ifndef HUSH_STREAMS_H +#define HUSH_STREAMS_H #include "support/allocators/zeroafterfree.h" #include "serialize.h" @@ -670,4 +670,4 @@ public: } }; -#endif // BITCOIN_STREAMS_H +#endif // HUSH_STREAMS_H diff --git a/src/sync.h b/src/sync.h index 85ee18a14..bdda6d166 100644 --- a/src/sync.h +++ b/src/sync.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SYNC_H -#define BITCOIN_SYNC_H +#ifndef HUSH_SYNC_H +#define HUSH_SYNC_H #include "threadsafety.h" @@ -293,4 +293,4 @@ public: } }; -#endif // BITCOIN_SYNC_H +#endif // HUSH_SYNC_H diff --git a/src/threadsafety.h b/src/threadsafety.h index ce7e61ef8..58f75ea69 100644 --- a/src/threadsafety.h +++ b/src/threadsafety.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_THREADSAFETY_H -#define BITCOIN_THREADSAFETY_H +#ifndef HUSH_THREADSAFETY_H +#define HUSH_THREADSAFETY_H #ifdef __clang__ // TL;DR Add GUARDED_BY(mutex) to member variables. The others are @@ -52,4 +52,4 @@ #define NO_THREAD_SAFETY_ANALYSIS #endif // __GNUC__ -#endif // BITCOIN_THREADSAFETY_H +#endif // HUSH_THREADSAFETY_H diff --git a/src/timedata.h b/src/timedata.h index 5794b93cf..0c2ed5e72 100644 --- a/src/timedata.h +++ b/src/timedata.h @@ -4,8 +4,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_TIMEDATA_H -#define BITCOIN_TIMEDATA_H +#ifndef HUSH_TIMEDATA_H +#define HUSH_TIMEDATA_H #include #include @@ -36,4 +36,4 @@ public: extern CTimeWarning timeWarning; -#endif // BITCOIN_TIMEDATA_H +#endif // HUSH_TIMEDATA_H diff --git a/src/torcontrol.h b/src/torcontrol.h index 927bdf712..a0d0009a2 100644 --- a/src/torcontrol.h +++ b/src/torcontrol.h @@ -6,8 +6,8 @@ /** * Functionality for communicating with Tor. */ -#ifndef BITCOIN_TORCONTROL_H -#define BITCOIN_TORCONTROL_H +#ifndef HUSH_TORCONTROL_H +#define HUSH_TORCONTROL_H #include "scheduler.h" @@ -18,4 +18,4 @@ void StartTorControl(boost::thread_group& threadGroup, CScheduler& scheduler); void InterruptTorControl(); void StopTorControl(); -#endif /* BITCOIN_TORCONTROL_H */ +#endif /* HUSH_TORCONTROL_H */ diff --git a/src/ui_interface.h b/src/ui_interface.h index 06e37c9b5..94ed742fa 100644 --- a/src/ui_interface.h +++ b/src/ui_interface.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_UI_INTERFACE_H -#define BITCOIN_UI_INTERFACE_H +#ifndef HUSH_UI_INTERFACE_H +#define HUSH_UI_INTERFACE_H #include #include @@ -105,4 +105,4 @@ public: extern CClientUIInterface uiInterface; -#endif // BITCOIN_UI_INTERFACE_H +#endif // HUSH_UI_INTERFACE_H diff --git a/src/uint256.h b/src/uint256.h index cfd80f4b9..927314962 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_UINT256_H -#define BITCOIN_UINT256_H +#ifndef HUSH_UINT256_H +#define HUSH_UINT256_H #include #include @@ -174,4 +174,4 @@ inline uint256 uint256S(const std::string& str) return rv; } -#endif // BITCOIN_UINT256_H +#endif // HUSH_UINT256_H diff --git a/src/undo.h b/src/undo.h index a7216f85e..01cb325ad 100644 --- a/src/undo.h +++ b/src/undo.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_UNDO_H -#define BITCOIN_UNDO_H +#ifndef HUSH_UNDO_H +#define HUSH_UNDO_H #include "compressor.h" #include "primitives/transaction.h" @@ -78,4 +78,4 @@ public: } }; -#endif // BITCOIN_UNDO_H +#endif // HUSH_UNDO_H diff --git a/src/util.h b/src/util.h index 7d63ae506..d1e8eaa40 100644 --- a/src/util.h +++ b/src/util.h @@ -23,8 +23,8 @@ * Server/client environment: argument handling, config file parsing, * logging, thread wrappers */ -#ifndef BITCOIN_UTIL_H -#define BITCOIN_UTIL_H +#ifndef HUSH_UTIL_H +#define HUSH_UTIL_H #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -295,4 +295,4 @@ void SplitStr(const std::string& strVal, std::vector &outVals); #define HUSH_SMART_CHAIN_MAXLEN 65 -#endif // BITCOIN_UTIL_H +#endif // HUSH_UTIL_H diff --git a/src/utilmoneystr.h b/src/utilmoneystr.h index 0c9c93796..bc3bce2b3 100644 --- a/src/utilmoneystr.h +++ b/src/utilmoneystr.h @@ -6,8 +6,8 @@ /** * Money parsing/formatting utilities. */ -#ifndef BITCOIN_UTILMONEYSTR_H -#define BITCOIN_UTILMONEYSTR_H +#ifndef HUSH_UTILMONEYSTR_H +#define HUSH_UTILMONEYSTR_H #include #include @@ -18,4 +18,4 @@ std::string FormatMoney(const CAmount& n); bool ParseMoney(const std::string& str, CAmount& nRet); bool ParseMoney(const char* pszIn, CAmount& nRet); -#endif // BITCOIN_UTILMONEYSTR_H +#endif // HUSH_UTILMONEYSTR_H diff --git a/src/utilstrencodings.h b/src/utilstrencodings.h index a9bfabb56..fe90b9237 100644 --- a/src/utilstrencodings.h +++ b/src/utilstrencodings.h @@ -6,8 +6,8 @@ /** * Utilities for converting data from/to strings. */ -#ifndef BITCOIN_UTILSTRENCODINGS_H -#define BITCOIN_UTILSTRENCODINGS_H +#ifndef HUSH_UTILSTRENCODINGS_H +#define HUSH_UTILSTRENCODINGS_H #include #include @@ -167,4 +167,4 @@ bool ConvertBits(const O& outfn, I it, I end) { return true; } -#endif // BITCOIN_UTILSTRENCODINGS_H +#endif // HUSH_UTILSTRENCODINGS_H diff --git a/src/utiltime.h b/src/utiltime.h index 4a6127b7c..8c6575844 100644 --- a/src/utiltime.h +++ b/src/utiltime.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_UTILTIME_H -#define BITCOIN_UTILTIME_H +#ifndef HUSH_UTILTIME_H +#define HUSH_UTILTIME_H #include #include @@ -17,4 +17,4 @@ void MilliSleep(int64_t n); std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime); -#endif // BITCOIN_UTILTIME_H +#endif // HUSH_UTILTIME_H diff --git a/src/validationinterface.h b/src/validationinterface.h index 93b40c815..4944e94e7 100644 --- a/src/validationinterface.h +++ b/src/validationinterface.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_VALIDATIONINTERFACE_H -#define BITCOIN_VALIDATIONINTERFACE_H +#ifndef HUSH_VALIDATIONINTERFACE_H +#define HUSH_VALIDATIONINTERFACE_H #include @@ -80,4 +80,4 @@ CMainSignals& GetMainSignals(); void ThreadNotifyWallets(CBlockIndex *pindexLastTip); -#endif // BITCOIN_VALIDATIONINTERFACE_H +#endif // HUSH_VALIDATIONINTERFACE_H From d8677c2a21477a94a714dde92cea490b5c202c66 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:46:03 -0500 Subject: [PATCH 035/277] Hush dat rpc --- src/rpc/client.h | 6 +++--- src/rpc/protocol.h | 6 +++--- src/rpc/register.h | 4 ++-- src/rpc/server.h | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/rpc/client.h b/src/rpc/client.h index ac67525db..e0955339c 100644 --- a/src/rpc/client.h +++ b/src/rpc/client.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_RPCCLIENT_H -#define BITCOIN_RPCCLIENT_H +#ifndef HUSH_RPCCLIENT_H +#define HUSH_RPCCLIENT_H #include @@ -29,4 +29,4 @@ UniValue RPCConvertValues(const std::string& strMethod, const std::vector #include @@ -105,4 +105,4 @@ bool GetAuthCookie(std::string *cookie_out); /** Delete RPC authentication cookie from disk */ void DeleteAuthCookie(); -#endif // BITCOIN_RPCPROTOCOL_H +#endif // HUSH_RPCPROTOCOL_H diff --git a/src/rpc/register.h b/src/rpc/register.h index df4733ffc..2493e447b 100644 --- a/src/rpc/register.h +++ b/src/rpc/register.h @@ -17,8 +17,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_RPCREGISTER_H -#define BITCOIN_RPCREGISTER_H +#ifndef HUSH_RPCREGISTER_H +#define HUSH_RPCREGISTER_H /** These are in one header file to avoid creating tons of single-function * headers for everything under src/rpc/ */ diff --git a/src/rpc/server.h b/src/rpc/server.h index 65422ab1b..b81bef49b 100644 --- a/src/rpc/server.h +++ b/src/rpc/server.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_RPCSERVER_H -#define BITCOIN_RPCSERVER_H +#ifndef HUSH_RPCSERVER_H +#define HUSH_RPCSERVER_H #include "amount.h" #include "rpc/protocol.h" @@ -527,4 +527,4 @@ extern UniValue pricesrefillfund(const UniValue& params, bool fHelp, const CPubK -#endif // BITCOIN_RPCSERVER_H +#endif // HUSH_RPCSERVER_H From 6f556c2b60806611338f213c82f24b7a746edc0d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:46:21 -0500 Subject: [PATCH 036/277] Hush dat wallet --- src/wallet/crypter.h | 6 +++--- src/wallet/db.h | 6 +++--- src/wallet/rpchushwallet.h | 6 +++--- src/wallet/rpcwallet.h | 6 +++--- src/wallet/wallet.h | 6 +++--- src/wallet/wallet_ismine.h | 6 +++--- src/wallet/walletdb.h | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/wallet/crypter.h b/src/wallet/crypter.h index 63db9ecd1..a493ceecc 100644 --- a/src/wallet/crypter.h +++ b/src/wallet/crypter.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_WALLET_CRYPTER_H -#define BITCOIN_WALLET_CRYPTER_H +#ifndef HUSH_WALLET_CRYPTER_H +#define HUSH_WALLET_CRYPTER_H #include "keystore.h" #include "serialize.h" @@ -256,4 +256,4 @@ public: boost::signals2::signal NotifyStatusChanged; }; -#endif // BITCOIN_WALLET_CRYPTER_H +#endif // HUSH_WALLET_CRYPTER_H diff --git a/src/wallet/db.h b/src/wallet/db.h index e749fe715..93a624eef 100644 --- a/src/wallet/db.h +++ b/src/wallet/db.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_WALLET_DB_H -#define BITCOIN_WALLET_DB_H +#ifndef HUSH_WALLET_DB_H +#define HUSH_WALLET_DB_H #include "clientversion.h" #include "serialize.h" @@ -332,4 +332,4 @@ public: bool static Rewrite(const std::string& strFile, const char* pszSkip = NULL); }; -#endif // BITCOIN_WALLET_DB_H +#endif // HUSH_WALLET_DB_H diff --git a/src/wallet/rpchushwallet.h b/src/wallet/rpchushwallet.h index 56a732f75..416c5b45a 100644 --- a/src/wallet/rpchushwallet.h +++ b/src/wallet/rpchushwallet.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_WALLET_RPCHUSHWALLET_H -#define BITCOIN_WALLET_RPCHUSHWALLET_H +#ifndef HUSH_WALLET_RPCHUSHWALLET_H +#define HUSH_WALLET_RPCHUSHWALLET_H struct balancestruct { CAmount confirmed; @@ -19,4 +19,4 @@ void zsTxSendsToJSON(const CWalletTx& wtx, UniValue& sends, CAmount& totalSends, void zsWalletTxJSON(const CWalletTx& wtx, UniValue& ret, const std::string strAddress, bool fBool, const int returnType); -#endif //BITCOIN_WALLET_RPCWALLET_H +#endif //HUSH_WALLET_RPCWALLET_H diff --git a/src/wallet/rpcwallet.h b/src/wallet/rpcwallet.h index 19c4bf937..a05d3b820 100644 --- a/src/wallet/rpcwallet.h +++ b/src/wallet/rpcwallet.h @@ -17,11 +17,11 @@ * * ******************************************************************************/ -#ifndef BITCOIN_WALLET_RPCWALLET_H -#define BITCOIN_WALLET_RPCWALLET_H +#ifndef HUSH_WALLET_RPCWALLET_H +#define HUSH_WALLET_RPCWALLET_H class CRPCTable; void RegisterWalletRPCCommands(CRPCTable &tableRPC); -#endif //BITCOIN_WALLET_RPCWALLET_H +#endif //HUSH_WALLET_RPCWALLET_H diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index a63c07fb9..1f9820dc4 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_WALLET_WALLET_H -#define BITCOIN_WALLET_WALLET_H +#ifndef HUSH_WALLET_WALLET_H +#define HUSH_WALLET_WALLET_H #include "amount.h" #include "asyncrpcoperation.h" @@ -1499,4 +1499,4 @@ public: #define RETURN_IF_ERROR(CCerror) if ( CCerror != "" ) { ERR_RESULT(CCerror); return(result); } -#endif // BITCOIN_WALLET_WALLET_H +#endif // HUSH_WALLET_WALLET_H diff --git a/src/wallet/wallet_ismine.h b/src/wallet/wallet_ismine.h index 309d6acf2..a6a9cd550 100644 --- a/src/wallet/wallet_ismine.h +++ b/src/wallet/wallet_ismine.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_WALLET_WALLET_ISMINE_H -#define BITCOIN_WALLET_WALLET_ISMINE_H +#ifndef HUSH_WALLET_WALLET_ISMINE_H +#define HUSH_WALLET_WALLET_ISMINE_H #include "key.h" #include "script/standard.h" @@ -43,4 +43,4 @@ typedef uint8_t isminefilter; isminetype IsMine(const CKeyStore& keystore, const CScript& scriptPubKey); isminetype IsMine(const CKeyStore& keystore, const CTxDestination& dest); -#endif // BITCOIN_WALLET_WALLET_ISMINE_H +#endif // HUSH_WALLET_WALLET_ISMINE_H diff --git a/src/wallet/walletdb.h b/src/wallet/walletdb.h index 66c35a14a..ad743b41e 100644 --- a/src/wallet/walletdb.h +++ b/src/wallet/walletdb.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_WALLET_WALLETDB_H -#define BITCOIN_WALLET_WALLETDB_H +#ifndef HUSH_WALLET_WALLETDB_H +#define HUSH_WALLET_WALLETDB_H #include "amount.h" #include "wallet/db.h" @@ -219,4 +219,4 @@ private: bool BackupWallet(const CWallet& wallet, const std::string& strDest); void ThreadFlushWalletDB(const std::string& strFile); -#endif // BITCOIN_WALLET_WALLETDB_H +#endif // HUSH_WALLET_WALLETDB_H From 136c73a273b9a29cb0f2545e9f356eb5b47080f2 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:49:19 -0500 Subject: [PATCH 037/277] Hush script --- src/cc/eval.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/eval.h b/src/cc/eval.h index d71add6e2..c3dae192c 100644 --- a/src/cc/eval.h +++ b/src/cc/eval.h @@ -36,8 +36,8 @@ * * If at some point a new interpretation model is introduced, * there should be a code identifying it. For example, - * a possible code is EVAL_BITCOIN_SCRIPT, where the entire binary - * after the code is interpreted as a bitcoin script. + * a possible code is EVAL_HUSH_SCRIPT, where the entire binary + * after the code is interpreted as a Hush (Bitcoin) Protocol Script. */ #define FOREACH_EVAL(EVAL) \ EVAL(EVAL_IMPORTPAYOUT, 0xe1) \ From 8a5130713d68628d9abb2c482d22dcd6b8ce98c9 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:49:56 -0500 Subject: [PATCH 038/277] Hush them headers --- src/compat/byteswap.h | 6 +++--- src/compat/endian.h | 6 +++--- src/compat/sanity.h | 6 +++--- src/consensus/consensus.h | 6 +++--- src/consensus/params.h | 6 +++--- src/consensus/validation.h | 6 +++--- src/crypto/common.h | 6 +++--- src/crypto/equihash.h | 6 +++--- src/crypto/hmac_sha256.h | 6 +++--- src/crypto/hmac_sha512.h | 6 +++--- src/crypto/ripemd160.h | 6 +++--- src/crypto/sha1.h | 6 +++--- src/crypto/sha256.h | 6 +++--- src/crypto/sha512.h | 6 +++--- src/policy/fees.h | 6 +++--- src/primitives/block.h | 6 +++--- src/primitives/transaction.h | 6 +++--- src/script/interpreter.h | 6 +++--- src/script/script.h | 6 +++--- src/script/script_error.h | 6 +++--- src/script/serverchecker.h | 6 +++--- src/script/sigcache.h | 6 +++--- src/script/sign.h | 6 +++--- src/script/standard.h | 6 +++--- src/script/zcashconsensus.h | 8 ++++---- src/support/cleanse.h | 6 +++--- src/support/events.h | 6 +++--- src/support/pagelocker.h | 6 +++--- src/test/bignum.h | 6 +++--- src/test/test_bitcoin.h | 4 ++-- src/util/asmap.h | 6 +++--- src/zmq/zmqabstractnotifier.h | 6 +++--- src/zmq/zmqconfig.h | 6 +++--- src/zmq/zmqnotificationinterface.h | 6 +++--- src/zmq/zmqpublishnotifier.h | 6 +++--- 35 files changed, 105 insertions(+), 105 deletions(-) diff --git a/src/compat/byteswap.h b/src/compat/byteswap.h index fcff3f443..b062ce2cb 100644 --- a/src/compat/byteswap.h +++ b/src/compat/byteswap.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_COMPAT_BYTESWAP_H -#define BITCOIN_COMPAT_BYTESWAP_H +#ifndef HUSH_COMPAT_BYTESWAP_H +#define HUSH_COMPAT_BYTESWAP_H #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -44,4 +44,4 @@ inline uint64_t bswap_64(uint64_t x) } #endif // HAVE_DECL_BSWAP64 -#endif // BITCOIN_COMPAT_BYTESWAP_H +#endif // HUSH_COMPAT_BYTESWAP_H diff --git a/src/compat/endian.h b/src/compat/endian.h index 79cbf5ce8..97cdd4dc6 100644 --- a/src/compat/endian.h +++ b/src/compat/endian.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_COMPAT_ENDIAN_H -#define BITCOIN_COMPAT_ENDIAN_H +#ifndef HUSH_COMPAT_ENDIAN_H +#define HUSH_COMPAT_ENDIAN_H #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -193,4 +193,4 @@ inline uint64_t le64toh(uint64_t little_endian_64bits) #endif // WORDS_BIGENDIAN -#endif // BITCOIN_COMPAT_ENDIAN_H +#endif // HUSH_COMPAT_ENDIAN_H diff --git a/src/compat/sanity.h b/src/compat/sanity.h index 7b9e0815f..a81aa1644 100644 --- a/src/compat/sanity.h +++ b/src/compat/sanity.h @@ -2,10 +2,10 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_COMPAT_SANITY_H -#define BITCOIN_COMPAT_SANITY_H +#ifndef HUSH_COMPAT_SANITY_H +#define HUSH_COMPAT_SANITY_H bool glibc_sanity_test(); bool glibcxx_sanity_test(); -#endif // BITCOIN_COMPAT_SANITY_H +#endif // HUSH_COMPAT_SANITY_H diff --git a/src/consensus/consensus.h b/src/consensus/consensus.h index f9c9e9650..987cb229c 100644 --- a/src/consensus/consensus.h +++ b/src/consensus/consensus.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CONSENSUS_CONSENSUS_H -#define BITCOIN_CONSENSUS_CONSENSUS_H +#ifndef HUSH_CONSENSUS_CONSENSUS_H +#define HUSH_CONSENSUS_CONSENSUS_H /** The minimum allowed block version (network rule) */ static const int32_t MIN_BLOCK_VERSION = 4; @@ -54,4 +54,4 @@ enum { /** Used as the flags parameter to CheckFinalTx() in non-consensus code */ static const unsigned int STANDARD_LOCKTIME_VERIFY_FLAGS = LOCKTIME_MEDIAN_TIME_PAST; -#endif // BITCOIN_CONSENSUS_CONSENSUS_H +#endif // HUSH_CONSENSUS_CONSENSUS_H diff --git a/src/consensus/params.h b/src/consensus/params.h index 4cda50068..1ff7a6f54 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CONSENSUS_PARAMS_H -#define BITCOIN_CONSENSUS_PARAMS_H +#ifndef HUSH_CONSENSUS_PARAMS_H +#define HUSH_CONSENSUS_PARAMS_H #include "uint256.h" @@ -137,4 +137,4 @@ struct Params { }; } // namespace Consensus -#endif // BITCOIN_CONSENSUS_PARAMS_H +#endif // HUSH_CONSENSUS_PARAMS_H diff --git a/src/consensus/validation.h b/src/consensus/validation.h index 1779cdd55..edf38e294 100644 --- a/src/consensus/validation.h +++ b/src/consensus/validation.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_CONSENSUS_VALIDATION_H -#define BITCOIN_CONSENSUS_VALIDATION_H +#ifndef HUSH_CONSENSUS_VALIDATION_H +#define HUSH_CONSENSUS_VALIDATION_H #include @@ -93,4 +93,4 @@ public: virtual std::string GetRejectReason() const { return strRejectReason; } }; -#endif // BITCOIN_CONSENSUS_VALIDATION_H +#endif // HUSH_CONSENSUS_VALIDATION_H diff --git a/src/crypto/common.h b/src/crypto/common.h index 14a143a54..aa23d3feb 100644 --- a/src/crypto/common.h +++ b/src/crypto/common.h @@ -4,8 +4,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_CRYPTO_COMMON_H -#define BITCOIN_CRYPTO_COMMON_H +#ifndef HUSH_CRYPTO_COMMON_H +#define HUSH_CRYPTO_COMMON_H #if defined(HAVE_CONFIG_H) #include "bitcoin-config.h" @@ -145,4 +145,4 @@ int inline init_and_check_sodium() return 0; } -#endif // BITCOIN_CRYPTO_COMMON_H +#endif // HUSH_CRYPTO_COMMON_H diff --git a/src/crypto/equihash.h b/src/crypto/equihash.h index 3b837a67a..e98a9cb16 100644 --- a/src/crypto/equihash.h +++ b/src/crypto/equihash.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_EQUIHASH_H -#define BITCOIN_EQUIHASH_H +#ifndef HUSH_EQUIHASH_H +#define HUSH_EQUIHASH_H #include "crypto/sha256.h" #include "utilstrencodings.h" @@ -311,4 +311,4 @@ inline bool EhOptimisedSolveUncancellable(unsigned int n, unsigned int k, const throw std::invalid_argument("Unsupported Equihash parameters"); \ } -#endif // BITCOIN_EQUIHASH_H +#endif // HUSH_EQUIHASH_H diff --git a/src/crypto/hmac_sha256.h b/src/crypto/hmac_sha256.h index e04cd50d8..63daebb2a 100644 --- a/src/crypto/hmac_sha256.h +++ b/src/crypto/hmac_sha256.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_CRYPTO_HMAC_SHA256_H -#define BITCOIN_CRYPTO_HMAC_SHA256_H +#ifndef HUSH_CRYPTO_HMAC_SHA256_H +#define HUSH_CRYPTO_HMAC_SHA256_H #include "crypto/sha256.h" @@ -29,4 +29,4 @@ public: void Finalize(unsigned char hash[OUTPUT_SIZE]); }; -#endif // BITCOIN_CRYPTO_HMAC_SHA256_H +#endif // HUSH_CRYPTO_HMAC_SHA256_H diff --git a/src/crypto/hmac_sha512.h b/src/crypto/hmac_sha512.h index 42addab56..661216f29 100644 --- a/src/crypto/hmac_sha512.h +++ b/src/crypto/hmac_sha512.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_CRYPTO_HMAC_SHA512_H -#define BITCOIN_CRYPTO_HMAC_SHA512_H +#ifndef HUSH_CRYPTO_HMAC_SHA512_H +#define HUSH_CRYPTO_HMAC_SHA512_H #include "crypto/sha512.h" @@ -29,4 +29,4 @@ public: void Finalize(unsigned char hash[OUTPUT_SIZE]); }; -#endif // BITCOIN_CRYPTO_HMAC_SHA512_H +#endif // HUSH_CRYPTO_HMAC_SHA512_H diff --git a/src/crypto/ripemd160.h b/src/crypto/ripemd160.h index 0d78371c9..61fd27def 100644 --- a/src/crypto/ripemd160.h +++ b/src/crypto/ripemd160.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_CRYPTO_RIPEMD160_H -#define BITCOIN_CRYPTO_RIPEMD160_H +#ifndef HUSH_CRYPTO_RIPEMD160_H +#define HUSH_CRYPTO_RIPEMD160_H #include #include @@ -25,4 +25,4 @@ public: CRIPEMD160& Reset(); }; -#endif // BITCOIN_CRYPTO_RIPEMD160_H +#endif // HUSH_CRYPTO_RIPEMD160_H diff --git a/src/crypto/sha1.h b/src/crypto/sha1.h index 3ed2e13d4..1831d3ea5 100644 --- a/src/crypto/sha1.h +++ b/src/crypto/sha1.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_CRYPTO_SHA1_H -#define BITCOIN_CRYPTO_SHA1_H +#ifndef HUSH_CRYPTO_SHA1_H +#define HUSH_CRYPTO_SHA1_H #include #include @@ -25,4 +25,4 @@ public: CSHA1& Reset(); }; -#endif // BITCOIN_CRYPTO_SHA1_H +#endif // HUSH_CRYPTO_SHA1_H diff --git a/src/crypto/sha256.h b/src/crypto/sha256.h index fda7a427e..e4f42a62e 100644 --- a/src/crypto/sha256.h +++ b/src/crypto/sha256.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_CRYPTO_SHA256_H -#define BITCOIN_CRYPTO_SHA256_H +#ifndef HUSH_CRYPTO_SHA256_H +#define HUSH_CRYPTO_SHA256_H #include #include @@ -34,4 +34,4 @@ public: */ std::string SHA256AutoDetect(); -#endif // BITCOIN_CRYPTO_SHA256_H +#endif // HUSH_CRYPTO_SHA256_H diff --git a/src/crypto/sha512.h b/src/crypto/sha512.h index f7e2a23e2..8b10b9c51 100644 --- a/src/crypto/sha512.h +++ b/src/crypto/sha512.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_CRYPTO_SHA512_H -#define BITCOIN_CRYPTO_SHA512_H +#ifndef HUSH_CRYPTO_SHA512_H +#define HUSH_CRYPTO_SHA512_H #include #include @@ -25,4 +25,4 @@ public: CSHA512& Reset(); }; -#endif // BITCOIN_CRYPTO_SHA512_H +#endif // HUSH_CRYPTO_SHA512_H diff --git a/src/policy/fees.h b/src/policy/fees.h index 132297116..92652cab5 100644 --- a/src/policy/fees.h +++ b/src/policy/fees.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_POLICYESTIMATOR_H -#define BITCOIN_POLICYESTIMATOR_H +#ifndef HUSH_POLICYESTIMATOR_H +#define HUSH_POLICYESTIMATOR_H #include "amount.h" #include "uint256.h" @@ -293,4 +293,4 @@ private: CFeeRate feeLikely, feeUnlikely; double priLikely, priUnlikely; }; -#endif /*BITCOIN_POLICYESTIMATOR_H */ +#endif /*HUSH_POLICYESTIMATOR_H */ diff --git a/src/primitives/block.h b/src/primitives/block.h index 009805700..e56905be3 100644 --- a/src/primitives/block.h +++ b/src/primitives/block.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_PRIMITIVES_BLOCK_H -#define BITCOIN_PRIMITIVES_BLOCK_H +#ifndef HUSH_PRIMITIVES_BLOCK_H +#define HUSH_PRIMITIVES_BLOCK_H #include "primitives/transaction.h" //#include "primitives/nonce.h" @@ -279,4 +279,4 @@ struct CBlockLocator } }; -#endif // BITCOIN_PRIMITIVES_BLOCK_H +#endif // HUSH_PRIMITIVES_BLOCK_H diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 7ffa7dfe8..9268005dd 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -19,8 +19,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_PRIMITIVES_TRANSACTION_H -#define BITCOIN_PRIMITIVES_TRANSACTION_H +#ifndef HUSH_PRIMITIVES_TRANSACTION_H +#define HUSH_PRIMITIVES_TRANSACTION_H #include "amount.h" #include "random.h" @@ -826,4 +826,4 @@ struct CMutableTransaction uint256 GetHash() const; }; -#endif // BITCOIN_PRIMITIVES_TRANSACTION_H +#endif // HUSH_PRIMITIVES_TRANSACTION_H diff --git a/src/script/interpreter.h b/src/script/interpreter.h index a7f11ca40..e7cf38cb0 100644 --- a/src/script/interpreter.h +++ b/src/script/interpreter.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SCRIPT_INTERPRETER_H -#define BITCOIN_SCRIPT_INTERPRETER_H +#ifndef HUSH_SCRIPT_INTERPRETER_H +#define HUSH_SCRIPT_INTERPRETER_H #include "script_error.h" #include "primitives/transaction.h" @@ -204,4 +204,4 @@ bool VerifyScript( const BaseSignatureChecker& checker, uint32_t consensusBranchId, ScriptError* serror = NULL); -#endif // BITCOIN_SCRIPT_INTERPRETER_H +#endif // HUSH_SCRIPT_INTERPRETER_H diff --git a/src/script/script.h b/src/script/script.h index 9e69d4e16..1b804d4c1 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SCRIPT_SCRIPT_H -#define BITCOIN_SCRIPT_SCRIPT_H +#ifndef HUSH_SCRIPT_SCRIPT_H +#define HUSH_SCRIPT_SCRIPT_H #include "crypto/common.h" #include "prevector.h" @@ -631,4 +631,4 @@ public: } }; -#endif // BITCOIN_SCRIPT_SCRIPT_H +#endif // HUSH_SCRIPT_SCRIPT_H diff --git a/src/script/script_error.h b/src/script/script_error.h index db6341c4f..2219544b0 100644 --- a/src/script/script_error.h +++ b/src/script/script_error.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SCRIPT_SCRIPT_ERROR_H -#define BITCOIN_SCRIPT_SCRIPT_ERROR_H +#ifndef HUSH_SCRIPT_SCRIPT_ERROR_H +#define HUSH_SCRIPT_SCRIPT_ERROR_H typedef enum ScriptError_t { @@ -78,4 +78,4 @@ typedef enum ScriptError_t const char* ScriptErrorString(const ScriptError error); -#endif // BITCOIN_SCRIPT_SCRIPT_ERROR_H +#endif // HUSH_SCRIPT_SCRIPT_ERROR_H diff --git a/src/script/serverchecker.h b/src/script/serverchecker.h index 960551b8d..a541247b2 100644 --- a/src/script/serverchecker.h +++ b/src/script/serverchecker.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SCRIPT_SERVERCHECKER_H -#define BITCOIN_SCRIPT_SERVERCHECKER_H +#ifndef HUSH_SCRIPT_SERVERCHECKER_H +#define HUSH_SCRIPT_SERVERCHECKER_H #include "script/interpreter.h" @@ -40,4 +40,4 @@ public: int CheckEvalCondition(const CC *cond) const; }; -#endif // BITCOIN_SCRIPT_SERVERCHECKER_H +#endif // HUSH_SCRIPT_SERVERCHECKER_H diff --git a/src/script/sigcache.h b/src/script/sigcache.h index 07896ef9e..92406fabb 100644 --- a/src/script/sigcache.h +++ b/src/script/sigcache.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SCRIPT_SIGCACHE_H -#define BITCOIN_SCRIPT_SIGCACHE_H +#ifndef HUSH_SCRIPT_SIGCACHE_H +#define HUSH_SCRIPT_SIGCACHE_H #include "script/interpreter.h" @@ -38,4 +38,4 @@ public: bool VerifySignature(const std::vector& vchSig, const CPubKey& vchPubKey, const uint256& sighash) const; }; -#endif // BITCOIN_SCRIPT_SIGCACHE_H +#endif // HUSH_SCRIPT_SIGCACHE_H diff --git a/src/script/sign.h b/src/script/sign.h index 7c5d2896e..190d23d35 100644 --- a/src/script/sign.h +++ b/src/script/sign.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SCRIPT_SIGN_H -#define BITCOIN_SCRIPT_SIGN_H +#ifndef HUSH_SCRIPT_SIGN_H +#define HUSH_SCRIPT_SIGN_H #include "script/interpreter.h" @@ -120,4 +120,4 @@ SignatureData CombineSignatures( SignatureData DataFromTransaction(const CMutableTransaction& tx, unsigned int nIn); void UpdateTransaction(CMutableTransaction& tx, unsigned int nIn, const SignatureData& data); -#endif // BITCOIN_SCRIPT_SIGN_H +#endif // HUSH_SCRIPT_SIGN_H diff --git a/src/script/standard.h b/src/script/standard.h index 53f82e35a..d9c462630 100644 --- a/src/script/standard.h +++ b/src/script/standard.h @@ -18,8 +18,8 @@ * * ******************************************************************************/ -#ifndef BITCOIN_SCRIPT_STANDARD_H -#define BITCOIN_SCRIPT_STANDARD_H +#ifndef HUSH_SCRIPT_STANDARD_H +#define HUSH_SCRIPT_STANDARD_H #include "script/interpreter.h" #include "uint256.h" @@ -174,4 +174,4 @@ bool ExtractDestinations(const CScript& scriptPubKey, txnouttype& typeRet, std:: CScript GetScriptForDestination(const CTxDestination& dest); CScript GetScriptForMultisig(int nRequired, const std::vector& keys); -#endif // BITCOIN_SCRIPT_STANDARD_H +#endif // HUSH_SCRIPT_STANDARD_H diff --git a/src/script/zcashconsensus.h b/src/script/zcashconsensus.h index fb6823495..0ccccd047 100644 --- a/src/script/zcashconsensus.h +++ b/src/script/zcashconsensus.h @@ -18,12 +18,12 @@ * * ******************************************************************************/ -#ifndef BITCOIN_ZCASHCONSENSUS_H -#define BITCOIN_ZCASHCONSENSUS_H +#ifndef HUSH_ZCASHCONSENSUS_H +#define HUSH_ZCASHCONSENSUS_H #include -#if defined(BUILD_BITCOIN_INTERNAL) && defined(HAVE_CONFIG_H) +#if defined(BUILD_HUSH_INTERNAL) && defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" #if defined(_WIN32) #if defined(DLL_EXPORT) @@ -82,4 +82,4 @@ EXPORT_SYMBOL unsigned int zcashconsensus_version(); #undef EXPORT_SYMBOL -#endif // BITCOIN_ZCASHCONSENSUS_H +#endif // HUSH_ZCASHCONSENSUS_H diff --git a/src/support/cleanse.h b/src/support/cleanse.h index de5682d6a..dc60b3cf6 100644 --- a/src/support/cleanse.h +++ b/src/support/cleanse.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_SUPPORT_CLEANSE_H -#define BITCOIN_SUPPORT_CLEANSE_H +#ifndef HUSH_SUPPORT_CLEANSE_H +#define HUSH_SUPPORT_CLEANSE_H #include @@ -12,4 +12,4 @@ * operation will not be optimized out by the compiler. */ void memory_cleanse(void *ptr, size_t len); -#endif // BITCOIN_SUPPORT_CLEANSE_H +#endif // HUSH_SUPPORT_CLEANSE_H diff --git a/src/support/events.h b/src/support/events.h index 037588588..0027b5665 100644 --- a/src/support/events.h +++ b/src/support/events.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_SUPPORT_EVENTS_H -#define BITCOIN_SUPPORT_EVENTS_H +#ifndef HUSH_SUPPORT_EVENTS_H +#define HUSH_SUPPORT_EVENTS_H #include #include @@ -53,4 +53,4 @@ raii_evhttp_connection obtain_evhttp_connection_base(struct event_base* base, st return result; } -#endif // BITCOIN_SUPPORT_EVENTS_H +#endif // HUSH_SUPPORT_EVENTS_H diff --git a/src/support/pagelocker.h b/src/support/pagelocker.h index 980e62f37..851854869 100644 --- a/src/support/pagelocker.h +++ b/src/support/pagelocker.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_SUPPORT_PAGELOCKER_H -#define BITCOIN_SUPPORT_PAGELOCKER_H +#ifndef HUSH_SUPPORT_PAGELOCKER_H +#define HUSH_SUPPORT_PAGELOCKER_H #include "support/cleanse.h" @@ -175,4 +175,4 @@ void UnlockObject(const T& t) LockedPageManager::Instance().UnlockRange((void*)(&t), sizeof(T)); } -#endif // BITCOIN_SUPPORT_PAGELOCKER_H +#endif // HUSH_SUPPORT_PAGELOCKER_H diff --git a/src/test/bignum.h b/src/test/bignum.h index 0616b1764..d0bb99483 100644 --- a/src/test/bignum.h +++ b/src/test/bignum.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_TEST_BIGNUM_H -#define BITCOIN_TEST_BIGNUM_H +#ifndef HUSH_TEST_BIGNUM_H +#define HUSH_TEST_BIGNUM_H #include #include @@ -190,4 +190,4 @@ inline bool operator>=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.bn inline bool operator<(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.bn, b.bn) < 0); } inline bool operator>(const CBigNum& a, const CBigNum& b) { return (BN_cmp(a.bn, b.bn) > 0); } -#endif // BITCOIN_TEST_BIGNUM_H +#endif // HUSH_TEST_BIGNUM_H diff --git a/src/test/test_bitcoin.h b/src/test/test_bitcoin.h index ae528d682..d80ab5165 100644 --- a/src/test/test_bitcoin.h +++ b/src/test/test_bitcoin.h @@ -1,5 +1,5 @@ -#ifndef BITCOIN_TEST_TEST_BITCOIN_H -#define BITCOIN_TEST_TEST_BITCOIN_H +#ifndef HUSH_TEST_TEST_HUSH_H +#define HUSH_TEST_TEST_HUSH_H #include "consensus/upgrades.h" #include "pubkey.h" diff --git a/src/util/asmap.h b/src/util/asmap.h index 9a66140af..470cfbebd 100644 --- a/src/util/asmap.h +++ b/src/util/asmap.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_UTIL_ASMAP_H -#define BITCOIN_UTIL_ASMAP_H +#ifndef HUSH_UTIL_ASMAP_H +#define HUSH_UTIL_ASMAP_H #include #include @@ -12,4 +12,4 @@ uint32_t Interpret(const std::vector &asmap, const std::vector &ip); bool SanityCheckASMap(const std::vector& asmap, int bits); -#endif // BITCOIN_UTIL_ASMAP_H +#endif // HUSH_UTIL_ASMAP_H diff --git a/src/zmq/zmqabstractnotifier.h b/src/zmq/zmqabstractnotifier.h index ee061c879..d9d3cb0de 100644 --- a/src/zmq/zmqabstractnotifier.h +++ b/src/zmq/zmqabstractnotifier.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H -#define BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H +#ifndef HUSH_ZMQ_ZMQABSTRACTNOTIFIER_H +#define HUSH_ZMQ_ZMQABSTRACTNOTIFIER_H #include "zmqconfig.h" @@ -42,4 +42,4 @@ protected: std::string address; }; -#endif // BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H +#endif // HUSH_ZMQ_ZMQABSTRACTNOTIFIER_H diff --git a/src/zmq/zmqconfig.h b/src/zmq/zmqconfig.h index 860fd71c0..e561b0e7b 100644 --- a/src/zmq/zmqconfig.h +++ b/src/zmq/zmqconfig.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_ZMQ_ZMQCONFIG_H -#define BITCOIN_ZMQ_ZMQCONFIG_H +#ifndef HUSH_ZMQ_ZMQCONFIG_H +#define HUSH_ZMQ_ZMQCONFIG_H #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" @@ -21,4 +21,4 @@ void zmqError(const char *str); -#endif // BITCOIN_ZMQ_ZMQCONFIG_H +#endif // HUSH_ZMQ_ZMQCONFIG_H diff --git a/src/zmq/zmqnotificationinterface.h b/src/zmq/zmqnotificationinterface.h index c5ce396af..14542a983 100644 --- a/src/zmq/zmqnotificationinterface.h +++ b/src/zmq/zmqnotificationinterface.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_ZMQ_ZMQNOTIFICATIONINTERFACE_H -#define BITCOIN_ZMQ_ZMQNOTIFICATIONINTERFACE_H +#ifndef HUSH_ZMQ_ZMQNOTIFICATIONINTERFACE_H +#define HUSH_ZMQ_ZMQNOTIFICATIONINTERFACE_H #include "validationinterface.h" #include "consensus/validation.h" @@ -36,4 +36,4 @@ private: std::list notifiers; }; -#endif // BITCOIN_ZMQ_ZMQNOTIFICATIONINTERFACE_H +#endif // HUSH_ZMQ_ZMQNOTIFICATIONINTERFACE_H diff --git a/src/zmq/zmqpublishnotifier.h b/src/zmq/zmqpublishnotifier.h index 6e5fd3717..d60276187 100644 --- a/src/zmq/zmqpublishnotifier.h +++ b/src/zmq/zmqpublishnotifier.h @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef BITCOIN_ZMQ_ZMQPUBLISHNOTIFIER_H -#define BITCOIN_ZMQ_ZMQPUBLISHNOTIFIER_H +#ifndef HUSH_ZMQ_ZMQPUBLISHNOTIFIER_H +#define HUSH_ZMQ_ZMQPUBLISHNOTIFIER_H #include "zmqabstractnotifier.h" @@ -58,4 +58,4 @@ public: bool NotifyBlock(const CBlock &block); }; -#endif // BITCOIN_ZMQ_ZMQPUBLISHNOTIFIER_H +#endif // HUSH_ZMQ_ZMQPUBLISHNOTIFIER_H From 5d81cddcad5b6949c1d358ea60bde667fe111598 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 09:52:41 -0500 Subject: [PATCH 039/277] Hush First All The Way --- src/cc/eval.h | 2 +- src/cc/import.cpp | 2 +- src/hush_defs.h | 2 +- src/hush_utils.h | 2 +- src/rpc/crosschain.cpp | 12 ++++++------ 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/cc/eval.h b/src/cc/eval.h index c3dae192c..cbb9d4967 100644 --- a/src/cc/eval.h +++ b/src/cc/eval.h @@ -27,7 +27,7 @@ #include "consensus/validation.h" #include "primitives/transaction.h" -#define KOMODO_FIRSTFUNGIBLEID 100 +#define HUSH_FIRSTFUNGIBLEID 100 /* * Eval codes diff --git a/src/cc/import.cpp b/src/cc/import.cpp index a3f82a556..57a7b4e34 100644 --- a/src/cc/import.cpp +++ b/src/cc/import.cpp @@ -705,7 +705,7 @@ bool Eval::ImportCoin(const std::vector params, const CTransaction &imp // Check burntx shows correct outputs hash if (payoutsHash != SerializeHash(payouts)) return Invalid("wrong-payouts"); - if (targetCcid < KOMODO_FIRSTFUNGIBLEID) + if (targetCcid < HUSH_FIRSTFUNGIBLEID) return Invalid("chain-not-fungible"); if ( targetCcid != 0xffffffff ) diff --git a/src/hush_defs.h b/src/hush_defs.h index 67ac7132a..f3cda142c 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -31,7 +31,7 @@ #define IGUANA_MAXSCRIPTSIZE 10001 #define KOMODO_MAXMEMPOOLTIME 3600 // affects consensus #define CRYPTO777_PUBSECPSTR "020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9" -#define KOMODO_FIRSTFUNGIBLEID 100 +#define HUSH_FIRSTFUNGIBLEID 100 #define KOMODO_SAPLING_ACTIVATION 1544832000 // Dec 15th, 2018 #define KOMODO_SAPLING_DEADLINE 1550188800 // Feb 15th, 2019 #define _COINBASE_MATURITY 100 diff --git a/src/hush_utils.h b/src/hush_utils.h index 4ac5453c0..579d6cc73 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -2311,7 +2311,7 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); printf("baseid.%d MAX_MONEY.%s %.8f\n",baseid,SMART_CHAIN_SYMBOL,(double)MAX_MONEY/SATOSHIDEN); } - if ( ASSETCHAINS_CC >= KOMODO_FIRSTFUNGIBLEID && MAX_MONEY < 1000000LL*SATOSHIDEN ) + if ( ASSETCHAINS_CC >= HUSH_FIRSTFUNGIBLEID && MAX_MONEY < 1000000LL*SATOSHIDEN ) MAX_MONEY = 1000000LL*SATOSHIDEN; if ( KOMODO_BIT63SET(MAX_MONEY) != 0 ) MAX_MONEY = KOMODO_MAXNVALUE; diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index a2fc20fc7..48d1a2237 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -192,8 +192,8 @@ UniValue migrate_converttoexport(const UniValue& params, bool fHelp, const CPubK "import transaction.\n" ); - if (ASSETCHAINS_CC < KOMODO_FIRSTFUNGIBLEID) - throw runtime_error("-ac_cc < KOMODO_FIRSTFUNGIBLEID"); + if (ASSETCHAINS_CC < HUSH_FIRSTFUNGIBLEID) + throw runtime_error("-ac_cc < HUSH_FIRSTFUNGIBLEID"); if (SMART_CHAIN_SYMBOL[0] == 0) throw runtime_error("Must be called on assetchain"); @@ -266,8 +266,8 @@ UniValue migrate_createburntransaction(const UniValue& params, bool fHelp, const "the \"migrate_createimporttransaction\" method to get the corresponding import transaction.\n" ); - if (ASSETCHAINS_CC < KOMODO_FIRSTFUNGIBLEID) - throw runtime_error("-ac_cc < KOMODO_FIRSTFUNGIBLEID"); + if (ASSETCHAINS_CC < HUSH_FIRSTFUNGIBLEID) + throw runtime_error("-ac_cc < HUSH_FIRSTFUNGIBLEID"); if (SMART_CHAIN_SYMBOL[0] == 0) throw runtime_error("Must be called on assetchain"); @@ -545,8 +545,8 @@ UniValue migrate_createimporttransaction(const UniValue& params, bool fHelp, con "optional notarytxids are txids of notary operator proofs of burn tx existense (from destination chain).\n" "Do not make subsequent call to migrate_completeimporttransaction if notary txids are set"); - if (ASSETCHAINS_CC < KOMODO_FIRSTFUNGIBLEID) - throw runtime_error("-ac_cc < KOMODO_FIRSTFUNGIBLEID"); + if (ASSETCHAINS_CC < HUSH_FIRSTFUNGIBLEID) + throw runtime_error("-ac_cc < HUSH_FIRSTFUNGIBLEID"); if (SMART_CHAIN_SYMBOL[0] == 0) throw runtime_error("Must be called on assetchain"); From ff7962dba4f646fd23b219853908e14c2c51ba28 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 13:02:25 -0500 Subject: [PATCH 040/277] Add checkpoint for Block 340k --- src/chainparams.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 2c46661ff..9009bf130 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -656,10 +656,12 @@ void *chainparams_commandline() (285000, uint256S("0x000000064ca1b27d679ffc9e25af53d531d9f80bc00fd130f5a71054b2f96124")) (290000, uint256S("0x00000000c9bd5248099f4caca2a5b1da88548cd1824bb22a0efa6c30cf6ccfce")) (295000, uint256S("0x00000002fb6bbf41e4f17f88301895c9143ea93e628523b97e5bd5765070d803")) - (300000, uint256S("0x000000033322d90275a09f4094e5c43db1f7017f788145d5a0edfa8200ecedad")), - (int64_t) 1600695750, // time of last checkpointed block - (int64_t) 576831, // total txs - (double) 1134 // txs in the last day before block 300768 + (300000, uint256S("0x000000033322d90275a09f4094e5c43db1f7017f788145d5a0edfa8200ecedad")) + (340000, uint256S("0x0000000051649db14dd1557ef4c5cc2bd8ea110e3f0c453f491efe4d21a31356")), + + (int64_t) 1606778445, // time of last checkpointed block + (int64_t) 600000, // total txs + (double) 1134 // txs in the last day before last checkpoint block }; } else { checkpointData = //(Checkpoints::CCheckpointData) From 7a01254797e9b8605501d99d1a9f290d57253809 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 13:03:00 -0500 Subject: [PATCH 041/277] Hush is set to activate --- src/chainparams.cpp | 2 +- src/main.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 9009bf130..7876ff907 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -550,7 +550,7 @@ void hush_changeblocktime() fprintf(stderr,"HUSH blocktime changing to %d seconds\n",ASSETCHAINS_BLOCKTIME); } -void komodo_setactivation(int32_t height) +void hush_setactivation(int32_t height) { pCurrentParams->consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = height; pCurrentParams->consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = height; diff --git a/src/main.cpp b/src/main.cpp index aa254b3b7..b44112d05 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -83,7 +83,7 @@ int32_t KOMODO_NEWBLOCKS; int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block); //void komodo_broadcast(CBlock *pblock,int32_t limit); bool Getscriptaddress(char *destaddr,const CScript &scriptPubKey); -void komodo_setactivation(int32_t height); +void hush_setactivation(int32_t height); void hush_changeblocktime(); void komodo_pricesupdate(int32_t height,CBlock *pblock); @@ -4101,7 +4101,7 @@ int32_t komodo_activate_sapling(CBlockIndex *pindex) } if ( activation != 0 ) { - komodo_setactivation(activation); + hush_setactivation(activation); fprintf(stderr,"%s sapling activation at %d\n",SMART_CHAIN_SYMBOL,activation); ASSETCHAINS_SAPLING = activation; } From bcc14df33270cfb92799ae3c8c0f02333f2d1565 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 13:06:57 -0500 Subject: [PATCH 042/277] Hush Is Global --- src/hush.h | 2 +- src/{komodo_globals.h => hush_globals.h} | 0 src/komodo-tx.cpp | 2 +- src/test/rpc_tests.cpp | 7 +------ 4 files changed, 3 insertions(+), 8 deletions(-) rename src/{komodo_globals.h => hush_globals.h} (100%) diff --git a/src/hush.h b/src/hush.h index 102dc433a..1b3107eda 100644 --- a/src/hush.h +++ b/src/hush.h @@ -44,7 +44,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block); bool check_pprevnotarizedht(); #include "komodo_structs.h" -#include "komodo_globals.h" +#include "hush_globals.h" #include "hush_utils.h" #include "komodo_curve25519.h" #include "komodo_cJSON.c" diff --git a/src/komodo_globals.h b/src/hush_globals.h similarity index 100% rename from src/komodo_globals.h rename to src/hush_globals.h diff --git a/src/komodo-tx.cpp b/src/komodo-tx.cpp index e5dc04a31..fbd06ad36 100644 --- a/src/komodo-tx.cpp +++ b/src/komodo-tx.cpp @@ -43,7 +43,7 @@ using namespace std; #include "uint256.h" #include "arith_uint256.h" #include "komodo_structs.h" -#include "komodo_globals.h" +#include "hush_globals.h" #include "hush_defs.h" #include "komodo_interest.h" diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp index 64d1bb744..354ed4f13 100644 --- a/src/test/rpc_tests.cpp +++ b/src/test/rpc_tests.cpp @@ -5,22 +5,17 @@ #include "rpc/server.h" #include "rpc/client.h" - #include "key_io.h" #include "netbase.h" #include "utilstrencodings.h" - #include "test/test_bitcoin.h" - #include #include - #include using namespace std; -UniValue -createArgs(int nRequired, const char* address1=NULL, const char* address2=NULL) +UniValue createArgs(int nRequired, const char* address1=NULL, const char* address2=NULL) { UniValue result(UniValue::VARR); result.push_back(nRequired); From d1ed93a703972370511988df7ab4c81335c15f1b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 13:08:42 -0500 Subject: [PATCH 043/277] My voice is still my passport --- src/hush_defs.h | 2 +- src/hush_globals.h | 3 +-- src/komodo_gateway.h | 12 ++++++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/hush_defs.h b/src/hush_defs.h index f3cda142c..d04cd61dd 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -509,7 +509,7 @@ extern int32_t KOMODO_BLOCK_POSUNITS, KOMODO_CONSECUTIVE_POS_THRESHOLD, KOMODO_N extern uint64_t ASSETCHAINS_TIMELOCKGTE; extern uint32_t ASSETCHAINS_ALGO,ASSETCHAINS_EQUIHASH,HUSH_INITDONE; -extern int32_t KOMODO_MININGTHREADS,KOMODO_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,KOMODO_PASSPORT_INITDONE,ASSETCHAINS_STAKED,KOMODO_NSPV; +extern int32_t KOMODO_MININGTHREADS,KOMODO_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,KOMODO_NSPV; extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET; extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2]; extern const char *ASSETCHAINS_ALGORITHMS[]; diff --git a/src/hush_globals.h b/src/hush_globals.h index 6e6fdca20..58c482e6a 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -1,7 +1,6 @@ // Copyright 2019-2020 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. * * * @@ -51,7 +50,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100; unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 KOMODO_EARLYTXID; -int32_t KOMODO_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,KOMODO_PASSPORT_INITDONE,KOMODO_PAX,KOMODO_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1,KOMODO_DEALERNODE,KOMODO_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; +int32_t KOMODO_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,KOMODO_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1,KOMODO_DEALERNODE,KOMODO_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0b2d21e21..69448d4c5 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -303,7 +303,7 @@ int32_t komodo_paxcmp(char *symbol,int32_t kmdheight,uint64_t value,uint64_t che uint64_t komodo_paxtotal() { struct pax_transaction *pax,*pax2,*tmp,*tmp2; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN],*str; int32_t i,ht; int64_t checktoshis; uint64_t seed,total = 0; struct komodo_state *basesp; - if ( KOMODO_PASSPORT_INITDONE == 0 ) //KOMODO_PAX == 0 || + if ( HUSH_PASSPORT_INITDONE == 0 ) //KOMODO_PAX == 0 || return(0); if ( komodo_isrealtime(&ht) == 0 ) return(0); @@ -428,7 +428,7 @@ static int _paxorder(const void *a,const void *b) int32_t komodo_pending_withdraws(char *opretstr) // todo: enforce deterministic order { struct pax_transaction *pax,*pax2,*tmp,*paxes[64]; uint8_t opretbuf[16384*4]; int32_t i,n,ht,len=0; uint64_t total = 0; - if ( KOMODO_PAX == 0 || KOMODO_PASSPORT_INITDONE == 0 ) + if ( KOMODO_PAX == 0 || HUSH_PASSPORT_INITDONE == 0 ) return(0); if ( komodo_isrealtime(&ht) == 0 || SMART_CHAIN_SYMBOL[0] != 0 ) return(0); @@ -477,7 +477,7 @@ int32_t komodo_pending_withdraws(char *opretstr) // todo: enforce deterministic int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo) { struct pax_transaction *pax,*tmp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; uint8_t *script,opcode,opret[16384*4],data[16384*4]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t available,deposited,issued,withdrawn,approved,redeemed,mask,sum = 0; - if ( KOMODO_PASSPORT_INITDONE == 0 )//KOMODO_PAX == 0 || + if ( HUSH_PASSPORT_INITDONE == 0 )//KOMODO_PAX == 0 || return(0); struct komodo_state *kmdsp = komodo_stateptrget((char *)"KMD"); sp = komodo_stateptr(symbol,dest); @@ -1451,7 +1451,7 @@ void hush_passport_iteration() refid = komodo_baseid(SMART_CHAIN_SYMBOL)+1; // illegal base -> baseid.-1 -> 0 if ( refid == 0 ) { - KOMODO_PASSPORT_INITDONE = 1; + HUSH_PASSPORT_INITDONE = 1; return; } } @@ -1561,9 +1561,9 @@ void hush_passport_iteration() } //komodo_paxtotal(); // calls komodo_isrealtime(), which calls komodo_longestchain() refsp->RTmask |= RTmask; - if ( expired == 0 && KOMODO_PASSPORT_INITDONE == 0 ) + if ( expired == 0 && HUSH_PASSPORT_INITDONE == 0 ) { - KOMODO_PASSPORT_INITDONE = 1; + HUSH_PASSPORT_INITDONE = 1; printf("READY for %s RPC calls at %u! done PASSPORT %s refid.%d\n",SMART_CHAIN_SYMBOL,(uint32_t)time(NULL),SMART_CHAIN_SYMBOL,refid); } } From 6c70956f4fbaa3b350761edfecfbf1df6731dd1f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 19:31:03 -0500 Subject: [PATCH 044/277] Remove -exchange option which jl777 used to steal from KMD miners and notary node ops --- src/hush_defs.h | 1 - src/hush_globals.h | 2 +- src/hush_utils.h | 14 ++++++---- src/wallet/wallet.cpp | 60 ++++++++----------------------------------- 4 files changed, 20 insertions(+), 57 deletions(-) diff --git a/src/hush_defs.h b/src/hush_defs.h index d04cd61dd..29ef81c31 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -527,7 +527,6 @@ extern uint8_t ASSETCHAINS_CCDISABLES[256]; extern int32_t USE_EXTERNAL_PUBKEY; extern std::string NOTARY_PUBKEY,NOTARY_ADDRESS; -extern int32_t KOMODO_EXCHANGEWALLET; extern std::string DONATION_PUBKEY; extern uint8_t ASSETCHAINS_PRIVATE; extern int32_t USE_EXTERNAL_PUBKEY; diff --git a/src/hush_globals.h b/src/hush_globals.h index 58c482e6a..6f4ca97b9 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -50,7 +50,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100; unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 KOMODO_EARLYTXID; -int32_t KOMODO_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,KOMODO_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1,KOMODO_DEALERNODE,KOMODO_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; +int32_t KOMODO_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1,KOMODO_DEALERNODE,KOMODO_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; diff --git a/src/hush_utils.h b/src/hush_utils.h index 579d6cc73..a268992a9 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1779,12 +1779,16 @@ void hush_args(char *argv0) { KOMODO_MININGTHREADS = GetArg("-genproclimit",-1); } - if ( (KOMODO_EXCHANGEWALLET= GetBoolArg("-exchange", false)) != 0 ) - fprintf(stderr,"KOMODO_EXCHANGEWALLET mode active\n"); - DONATION_PUBKEY = GetArg("-donation", ""); - NOTARY_PUBKEY = GetArg("-pubkey", ""); + if ( (GetBoolArg("-exchange", false)) != 0 ) { + printf("The KMD-only feature -exchange is not supported by HUSH!\n"); + printf("jl777 uses this \"feature\" to steal from his own users!\n"); + printf("Learn more at https://duke.hush.is :)\n"); + StartShutdown(); + } + DONATION_PUBKEY = GetArg("-donation", ""); + NOTARY_PUBKEY = GetArg("-pubkey", ""); KOMODO_DEALERNODE = GetArg("-dealer",0); - KOMODO_TESTNODE = GetArg("-testnode",0); + KOMODO_TESTNODE = GetArg("-testnode",0); if ( strlen(NOTARY_PUBKEY.c_str()) == 66 ) { decode_hex(NOTARY_PUBKEY33,33,(char *)NOTARY_PUBKEY.c_str()); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 9de10fa00..ec316beff 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3242,8 +3242,7 @@ void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const !IsLockedCoin((*it).first, i) && (pcoin->vout[i].nValue > 0 || fIncludeZeroValue) && (!coinControl || !coinControl->HasSelected() || coinControl->IsSelected((*it).first, i))) { - if ( KOMODO_EXCHANGEWALLET == 0 ) - { + if ( 1 ) { uint32_t locktime; int32_t txheight; CBlockIndex *tipindex; if ( SMART_CHAIN_SYMBOL[0] == 0 && chainActive.LastTip() != 0 && chainActive.LastTip()->GetHeight() >= 60000 ) { @@ -3257,28 +3256,18 @@ void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const //interest = komodo_interestnew(chainActive.LastTip()->GetHeight()+1,pcoin->vout[i].nValue,pcoin->nLockTime,chainActive.LastTip()->nTime); if ( interest != 0 ) { - //printf("wallet nValueRet %.8f += interest %.8f ht.%d lock.%u/%u tip.%u\n",(double)pcoin->vout[i].nValue/COIN,(double)interest/COIN,txheight,locktime,pcoin->nLockTime,tipindex->nTime); - //fprintf(stderr,"wallet nValueRet %.8f += interest %.8f ht.%d lock.%u tip.%u\n",(double)pcoin->vout[i].nValue/COIN,(double)interest/COIN,chainActive.LastTip()->GetHeight()+1,pcoin->nLockTime,chainActive.LastTip()->nTime); - //ptr = (uint64_t *)&pcoin->vout[i].nValue; - //(*ptr) += interest; ptr = (uint64_t *)&pcoin->vout[i].interest; (*ptr) = interest; //pcoin->vout[i].nValue += interest; - } - else - { + } else { ptr = (uint64_t *)&pcoin->vout[i].interest; (*ptr) = 0; } - } - else - { + } else { ptr = (uint64_t *)&pcoin->vout[i].interest; (*ptr) = 0; } - } - else - { + } else { ptr = (uint64_t *)&pcoin->vout[i].interest; (*ptr) = 0; } @@ -3369,30 +3358,20 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, int nConfMine, int { setCoinsRet.insert(coin.second); nValueRet += coin.first; - //if ( KOMODO_EXCHANGEWALLET == 0 ) - // *interestp += pcoin->vout[i].interest; return true; } else if (n < nTargetValue + CENT) { vValue.push_back(coin); nTotalLower += n; - //if ( KOMODO_EXCHANGEWALLET == 0 && count < sizeof(interests)/sizeof(*interests) ) - //{ - //fprintf(stderr,"count.%d %.8f\n",count,(double)pcoin->vout[i].interest/COIN); - //interests[count++] = pcoin->vout[i].interest; - //} if ( nTotalLower > 4*nTargetValue + CENT ) { //fprintf(stderr,"why bother with all the utxo if we have double what is needed?\n"); break; } - } - else if (n < coinLowestLarger.first) + } else if (n < coinLowestLarger.first) { coinLowestLarger = coin; - //if ( KOMODO_EXCHANGEWALLET == 0 ) - // lowest_interest = pcoin->vout[i].interest; } } @@ -3402,8 +3381,6 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, int nConfMine, int { setCoinsRet.insert(vValue[i].second); nValueRet += vValue[i].first; - //if ( KOMODO_EXCHANGEWALLET == 0 && i < count ) - // *interestp += interests[i]; } return true; } @@ -3414,8 +3391,6 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, int nConfMine, int return false; setCoinsRet.insert(coinLowestLarger.second); nValueRet += coinLowestLarger.first; - //if ( KOMODO_EXCHANGEWALLET == 0 ) - // *interestp += lowest_interest; return true; } @@ -3435,17 +3410,12 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, int nConfMine, int { setCoinsRet.insert(coinLowestLarger.second); nValueRet += coinLowestLarger.first; - //if ( KOMODO_EXCHANGEWALLET == 0 ) - // *interestp += lowest_interest; - } - else { + } else { for (unsigned int i = 0; i < vValue.size(); i++) if (vfBest[i]) { setCoinsRet.insert(vValue[i].second); nValueRet += vValue[i].first; - //if ( KOMODO_EXCHANGEWALLET == 0 && i < count ) - // *interestp += interests[i]; } LogPrint("selectcoins", "SelectCoins() best subset: "); @@ -3484,8 +3454,7 @@ bool CWallet::SelectCoins(const CAmount& nTargetValue, setvout[out.i].nValue; - if ( KOMODO_EXCHANGEWALLET == 0 ) - value += out.tx->vout[out.i].interest; + value += out.tx->vout[out.i].interest; } if (value <= nTargetValue) { CAmount valueWithCoinbase = 0; @@ -3494,8 +3463,7 @@ bool CWallet::SelectCoins(const CAmount& nTargetValue, setvout[out.i].nValue; - if ( KOMODO_EXCHANGEWALLET == 0 ) - valueWithCoinbase += out.tx->vout[out.i].interest; + valueWithCoinbase += out.tx->vout[out.i].interest; } fNeedCoinbaseCoinsRet = (valueWithCoinbase >= nTargetValue); } @@ -3508,8 +3476,6 @@ bool CWallet::SelectCoins(const CAmount& nTargetValue, setvout[out.i].nValue; - //if ( KOMODO_EXCHANGEWALLET == 0 ) - // *interestp += out.tx->vout[out.i].interest; setCoinsRet.insert(make_pair(out.tx, out.i)); } return (nValueRet >= nTargetValue); @@ -3531,8 +3497,7 @@ bool CWallet::SelectCoins(const CAmount& nTargetValue, setvout.size() <= outpoint.n) return false; nValueFromPresetInputs += pcoin->vout[outpoint.n].nValue; - if ( KOMODO_EXCHANGEWALLET == 0 ) - nValueFromPresetInputs += pcoin->vout[outpoint.n].interest; + nValueFromPresetInputs += pcoin->vout[outpoint.n].interest; setPresetCoins.insert(make_pair(pcoin, outpoint.n)); } else return false; // TODO: Allow non-wallet inputs @@ -3747,7 +3712,7 @@ bool CWallet::CreateTransaction(const vector& vecSend, CWalletTx& wt //a chance at a free transaction. //But mempool inputs might still be in the mempool, so their age stays 0 //fprintf(stderr,"nCredit %.8f interest %.8f\n",(double)nCredit/COIN,(double)pcoin.first->vout[pcoin.second].interest/COIN); - if ( KOMODO_EXCHANGEWALLET == 0 && SMART_CHAIN_SYMBOL[0] == 0 ) + if ( SMART_CHAIN_SYMBOL[0] == 0 ) { interest2 += pcoin.first->vout[pcoin.second].interest; //fprintf(stderr,"%.8f ",(double)pcoin.first->vout[pcoin.second].interest/COIN); @@ -3757,11 +3722,6 @@ bool CWallet::CreateTransaction(const vector& vecSend, CWalletTx& wt age += 1; dPriority += (double)nCredit * age; } - //if ( KOMODO_EXCHANGEWALLET != 0 ) - //{ - //fprintf(stderr,"KOMODO_EXCHANGEWALLET disable interest sum %.8f, interest2 %.8f\n",(double)interest/COIN,(double)interest2/COIN); - //interest = 0; // interest2 also - //} if ( SMART_CHAIN_SYMBOL[0] == 0 && DONATION_PUBKEY.size() == 66 && interest2 > 5000 ) { CScript scriptDonation = CScript() << ParseHex(DONATION_PUBKEY) << OP_CHECKSIG; From 4bee0970ff2ebb6c6f520548749088ab5acfb4ec Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 19:34:00 -0500 Subject: [PATCH 045/277] rm -rf KMD asset chains --- src/ac.json | 326 ++-------------------------------------------------- 1 file changed, 8 insertions(+), 318 deletions(-) diff --git a/src/ac.json b/src/ac.json index 7f3f7ba03..0c84a4cdf 100644 --- a/src/ac.json +++ b/src/ac.json @@ -1,319 +1,4 @@ { - "REVS": { - "ac_supply": "1300000" - } - , - - "SUPERNET": { - "ac_supply": "816061" - } - , - - "DEX": { - "ac_supply": "999999" - } - , - - "PANGEA": { - "ac_supply": "999999" - } - - , - "JUMBLR": { - "ac_supply": "999999" - } - , - - "BET": { - "ac_supply": "999999" - } - , - - "CRYPTO": { - "ac_supply": "999999" - } - , - - "HODL": { - "ac_supply": "9999999" - } - , - - "MSHARK": { - "ac_supply": "1400000" - } - , - - "BOTS": { - "ac_supply": "999999" - } - , - - "MGW": { - "ac_supply": "999999" - } - , - "COQUICASH": { - "ac_supply": "72000000", - "ac_reward": "7200000000", - "ac_staked": "50", - "ac_halving": "420000", - "ac_cc": "2", - "ac_ccenable": "227,235,236,241", - "addnode": [ - "78.47.108.168" - ] - } - , - - "WLC": { - "ac_supply": "210000000" - } - , - - "KV": { - "ac_supply": "1000000" - } - , - - "CEAL": { - "ac_supply": "366666666" - } - , - - "MESH": { - "ac_supply": "1000007" - } - , - - "AXO": { - "ac_supply": "200000000", - "ac_ccactivate": "130000" - } - , - - "ETOMIC": { - "ac_supply": "100000000" - } - , - - "BTCH": { - "ac_supply": "20998641" - } - , - - "PIZZA": { - "ac_supply": "100000000" - } - , - - "BEER": { - "ac_supply": "100000000" - } - , - - "NINJA": { - "ac_supply": "100000000" - } - , - - "OOT": { - "ac_supply": "216000000", - "ac_sapling": "5000000" - } - , - - "BNTN": { - "ac_supply": "500000000" - } - , - - "CHAIN": { - "ac_supply": "999999" - } - , - - "PRLPAY": { - "ac_supply": "500000000" - } - , - - "DSEC": { - "ac_supply": "7000000" - } - , - - "GLXT": { - "ac_supply": "10000000000" - } - , - - "EQL": { - "ac_supply": "500000000", - "ac_ccactivate": "205000" - } - , - - "ZILLA": { - "ac_supply": "11000000", - "ac_sapling": "5000000", - "addnode": [ - "51.68.215.104" - ] - } - , - - "RFOX": { - "ac_supply": "1000000000", - "ac_reward": "100000000" - } - , - - "SEC": { - "ac_supply": "1000000000", - "ac_cc": "333" - } - , - - "CCL": { - "ac_supply": "200000000", - "ac_end": "1", - "ac_cc": "2", - "addressindex": "1", - "spentindex": "1", - "addnode": [ - "142.93.136.89", - "195.201.22.89" - ] - } - , - - "PIRATE": { - "ac_supply": "0", - "ac_reward": "25600000000", - "ac_halving": "77777", - "ac_private": "1", - "addnode": [ - "136.243.102.225" - ] - } - , - - "PGT": { - "ac_supply": "10000000", - "ac_end": "1", - "addnode": [ - "190.114.254.104" - ] - } - , - - "DION": { - "ac_supply": "3900000000", - "ac_reward": "22260000000", - "ac_staked": "100", - "ac_cc": "1", - "ac_end": "4300000000", - "addnode": [ - "51.75.124.34" - ] - } - , - - "KMDICE": { - "ac_supply": "10500000", - "ac_reward": "2500000000", - "ac_halving": "210000", - "ac_cc": "2", - "addressindex": "1", - "spentindex": "1", - "addnode": [ - "144.76.217.232" - ] - } - , - - "KSB": { - "ac_supply": "1000000000", - "ac_end": "1", - "ac_public": "1", - "addnode": [ - "37.187.225.231" - ] - } - , - - "OUR": { - "ac_reward": "1478310502", - "ac_halving": "525600", - "ac_cc": "42", - "ac_supply": "100000000", - "ac_perc": "77700", - "ac_staked": "93", - "ac_pubkey": "02652a3f3e00b3a1875a918314f0bac838d6dd189a346fa623f5efe9541ac0b98c", - "ac_public": "1", - "addnode": [ - "51.255.195.65", - "217.182.129.38", - "37.187.225.231" - ] - } - , - - "ILN": { - "ac_supply": "10000000000", - "ac_cc": "2", - "addnode": ["51.75.122.83"] - } - , - - "RICK": { - "ac_supply": "90000000000", - "ac_reward": "100000000", - "ac_cc": "3", - "addnode": ["138.201.136.145"] - } - , - - "MORTY": { - "ac_supply": "90000000000", - "ac_reward": "100000000", - "ac_cc": "3", - "addnode": ["138.201.136.145"] - } - , - - "KOIN": { - "ac_supply": "125000000", - "addnode": ["3.0.32.10"] - } - , - - "ZEXO": { - "ac_reward": "1478310502", - "ac_halving": "525600", - "ac_cc": "42", - "ac_ccenable": "236", - "ac_supply": "100000000", - "ac_perc": "77700", - "ac_staked": "93", - "ac_pubkey": "02713bd85e054db923694b6b7a85306264edf4d6bd6d331814f2b40af444b3ebbc", - "ac_public": "1", - "addnode": [ - "195.201.20.230", - "80.240.17.222" - ] - } - , - - "K64": { - "ac_reward": "0", - "ac_supply": "64000777", - "ac_staked": "10", - "addnode": ["18.197.20.21"] - } - , - "HUSH3": { "ac_sapling": "1", "ac_founders": "1", @@ -330,9 +15,14 @@ "ac_script": "76a9145eb10cf64f2bab1b457f1f25e658526155928fac88ac", "clientname": "GoldenSandtrout", "addnode": [ - "188.165.212.101", - "136.243.227.142", - "5.9.224.250" + "node1.hush.is", + "node2.hush.is", + "node3.hush.is", + "node4.hush.is", + "node5.hush.is", + "node6.hush.is", + "node7.hush.is", + "node8.hush.is" ] } } From 0bb1c1287427827018ba68112c58d3ee57909aed Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 19:36:24 -0500 Subject: [PATCH 046/277] Hush mining threads --- src/hush_defs.h | 2 +- src/hush_globals.h | 2 +- src/hush_utils.h | 6 +++--- src/miner.cpp | 8 ++++---- src/rpc/mining.cpp | 10 +++++----- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/hush_defs.h b/src/hush_defs.h index 29ef81c31..5c48da1c0 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -509,7 +509,7 @@ extern int32_t KOMODO_BLOCK_POSUNITS, KOMODO_CONSECUTIVE_POS_THRESHOLD, KOMODO_N extern uint64_t ASSETCHAINS_TIMELOCKGTE; extern uint32_t ASSETCHAINS_ALGO,ASSETCHAINS_EQUIHASH,HUSH_INITDONE; -extern int32_t KOMODO_MININGTHREADS,KOMODO_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,KOMODO_NSPV; +extern int32_t HUSH_MININGTHREADS,KOMODO_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,KOMODO_NSPV; extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET; extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2]; extern const char *ASSETCHAINS_ALGORITHMS[]; diff --git a/src/hush_globals.h b/src/hush_globals.h index 6f4ca97b9..5960fb766 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -50,7 +50,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100; unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 KOMODO_EARLYTXID; -int32_t KOMODO_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1,KOMODO_DEALERNODE,KOMODO_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; +int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1,KOMODO_DEALERNODE,KOMODO_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; diff --git a/src/hush_utils.h b/src/hush_utils.h index a268992a9..04cac9920 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1777,7 +1777,7 @@ void hush_args(char *argv0) memset(ccEnablesHeight,0,sizeof(ccEnablesHeight)); if ( GetBoolArg("-gen", false) != 0 ) { - KOMODO_MININGTHREADS = GetArg("-genproclimit",-1); + HUSH_MININGTHREADS = GetArg("-genproclimit",-1); } if ( (GetBoolArg("-exchange", false)) != 0 ) { printf("The KMD-only feature -exchange is not supported by HUSH!\n"); @@ -1803,8 +1803,8 @@ void hush_args(char *argv0) if ( strcmp(NOTARY_PUBKEY.c_str(),notaries_elected[hush_season-1][i][1]) == 0 ) { IS_HUSH_NOTARY = 1; - KOMODO_MININGTHREADS = 1; - mapArgs ["-genproclimit"] = itostr(KOMODO_MININGTHREADS); + HUSH_MININGTHREADS = 1; + mapArgs ["-genproclimit"] = itostr(HUSH_MININGTHREADS); fprintf(stderr,"running as notary.%d %s\n",i,notaries_elected[hush_season-1][i][0]); break; } diff --git a/src/miner.cpp b/src/miner.cpp index 0a43374fa..cfbb49b75 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -722,7 +722,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 pblock->hashFinalSaplingRoot = sapling_tree.root(); // all PoS chains need this data in the block at all times - if ( ASSETCHAINS_LWMAPOS || SMART_CHAIN_SYMBOL[0] == 0 || ASSETCHAINS_STAKED == 0 || KOMODO_MININGTHREADS > 0 ) + if ( ASSETCHAINS_LWMAPOS || SMART_CHAIN_SYMBOL[0] == 0 || ASSETCHAINS_STAKED == 0 || HUSH_MININGTHREADS > 0 ) { UpdateTime(pblock, Params().GetConsensus(), pindexPrev); pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, Params().GetConsensus()); @@ -1184,7 +1184,7 @@ void static BitcoinMiner() #ifdef ENABLE_WALLET // notaries always default to staking - CBlockTemplate *ptr = CreateNewBlockWithKey(reservekey, pindexPrev->GetHeight()+1, gpucount, ASSETCHAINS_STAKED != 0 && KOMODO_MININGTHREADS == 0); + CBlockTemplate *ptr = CreateNewBlockWithKey(reservekey, pindexPrev->GetHeight()+1, gpucount, ASSETCHAINS_STAKED != 0 && HUSH_MININGTHREADS == 0); #else CBlockTemplate *ptr = CreateNewBlockWithKey(); #endif @@ -1332,7 +1332,7 @@ void static BitcoinMiner() // (x_1, x_2, ...) = A(I, V, n, k) LogPrint("pow", "Running Equihash solver \"%s\" with nNonce = %s\n",solver, pblock->nNonce.ToString()); arith_uint256 hashTarget; - if ( KOMODO_MININGTHREADS > 0 && ASSETCHAINS_STAKED > 0 && ASSETCHAINS_STAKED < 100 && Mining_height > 10 ) + if ( HUSH_MININGTHREADS > 0 && ASSETCHAINS_STAKED > 0 && ASSETCHAINS_STAKED < 100 && Mining_height > 10 ) hashTarget = HASHTarget_POW; //else if ( ASSETCHAINS_ADAPTIVEPOW > 0 ) // hashTarget = HASHTarget_POW; @@ -1362,7 +1362,7 @@ void static BitcoinMiner() fprintf(stderr," POW\n");*/ if ( h > hashTarget ) { - //if ( ASSETCHAINS_STAKED != 0 && KOMODO_MININGTHREADS == 0 ) + //if ( ASSETCHAINS_STAKED != 0 && HUSH_MININGTHREADS == 0 ) // MilliSleep(30); return false; } diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 5f0c36b6b..3ccf12de8 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -185,7 +185,7 @@ UniValue getgenerate(const UniValue& params, bool fHelp, const CPubKey& mypk) LOCK(cs_main); UniValue obj(UniValue::VOBJ); obj.push_back(Pair("generate", GetBoolArg("-gen", false) && GetBoolArg("-genproclimit", -1) != 0 )); - obj.push_back(Pair("numthreads", (int64_t)KOMODO_MININGTHREADS)); + obj.push_back(Pair("numthreads", (int64_t)HUSH_MININGTHREADS)); return obj; } @@ -363,11 +363,11 @@ UniValue setgenerate(const UniValue& params, bool fHelp, const CPubKey& mypk) // fGenerate = false; } - KOMODO_MININGTHREADS = (int32_t)nGenProcLimit; - fprintf(stderr,"%s:KOMODO_MININGTHREADS=%d\n", __FUNCTION__, KOMODO_MININGTHREADS); + HUSH_MININGTHREADS = (int32_t)nGenProcLimit; + fprintf(stderr,"%s:HUSH_MININGTHREADS=%d\n", __FUNCTION__, HUSH_MININGTHREADS); mapArgs["-gen"] = (fGenerate ? "1" : "0"); - mapArgs ["-genproclimit"] = itostr(KOMODO_MININGTHREADS); + mapArgs ["-genproclimit"] = itostr(HUSH_MININGTHREADS); #ifdef ENABLE_WALLET GenerateBitcoins(fGenerate, pwalletMain, nGenProcLimit); @@ -476,7 +476,7 @@ UniValue getmininginfo(const UniValue& params, bool fHelp, const CPubKey& mypk) obj.push_back(Pair("chain", Params().NetworkIDString())); #ifdef ENABLE_MINING obj.push_back(Pair("generate", GetBoolArg("-gen", false) && GetBoolArg("-genproclimit", -1) != 0 )); - obj.push_back(Pair("numthreads", (int64_t)KOMODO_MININGTHREADS)); + obj.push_back(Pair("numthreads", (int64_t)HUSH_MININGTHREADS)); #endif return obj; } From e8073af3b5c331ee7ef8b54f6ac52b347f62170d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 19:39:04 -0500 Subject: [PATCH 047/277] build package docs --- depends/packages.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/depends/packages.md b/depends/packages.md index 7c8036250..de1968abf 100644 --- a/depends/packages.md +++ b/depends/packages.md @@ -1,3 +1,5 @@ +# Hush Packages + Each recipe consists of 3 main parts: defining identifiers, setting build variables, and defining build commands. From 0b403dd3114174a1eb43fe1a81b543af153b779b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 20:39:36 -0500 Subject: [PATCH 048/277] Check yoself before you wreck yo self --- src/chainparams.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 7876ff907..e7febf524 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -657,9 +657,20 @@ void *chainparams_commandline() (290000, uint256S("0x00000000c9bd5248099f4caca2a5b1da88548cd1824bb22a0efa6c30cf6ccfce")) (295000, uint256S("0x00000002fb6bbf41e4f17f88301895c9143ea93e628523b97e5bd5765070d803")) (300000, uint256S("0x000000033322d90275a09f4094e5c43db1f7017f788145d5a0edfa8200ecedad")) - (340000, uint256S("0x0000000051649db14dd1557ef4c5cc2bd8ea110e3f0c453f491efe4d21a31356")), + (305000, uint256S("0x0000000181e2c1fe3c7ba072a24d19887d814116ecec829af5c49aa6476e14db")) + (310000, uint256S("0x000000003d2d0705590072e4ce94faf7a6ef44218ddd712e9a27bd16ecdfc996")) + (315000, uint256S("0x000000021bbae1442c0ddbfdc9d00b626429ac2643bfe52554487a8db1a82a41")) + (320000, uint256S("0x00000001817aa03c05285c9fcd76cc1f310b1590d92085037626ce590e957cb1")) + (325000, uint256S("0x000000082760f1e42a0473c89b2afe3f1117d50764d0f5a033e0133938c330d2")) + (330000, uint256S("0x000000044b96efd3eb077a516e6bb84f1c4ad5440e779801124071001bdf42fc")) + (335000, uint256S("0x0000000339873b1fa07de5210d45e204be9cd1aacb9e82c135696187d8ea9485")) + (340000, uint256S("0x0000000051649db14dd1557ef4c5cc2bd8ea110e3f0c453f491efe4d21a31356")) + (341000, uint256S("0x0000000c5f55bf23437210f797ebf188a6457f1a4eca47de821a668c2fad8e25")) + (342000, uint256S("0x0000000a2ce9f59248a544d7d53bba47065430e748ce98f8f942847f7396b887")) + (343000, uint256S("0x0000000b186a3e4883076a0771a44a019c35a6844293fb03aad121195d8f6af3")) + (344000, uint256S("0x0000000313abd30aa3828b9b6e5ff312fa3dfa161c47f7e8a10d01d17c877fb4")), - (int64_t) 1606778445, // time of last checkpointed block + (int64_t) 1607081800, // time of last checkpointed block (int64_t) 600000, // total txs (double) 1134 // txs in the last day before last checkpoint block }; From 609b223e90029d8e5653896f0bf91b43d1bf8ab8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 20:47:28 -0500 Subject: [PATCH 049/277] Hush Equihash (N,K) implementation --- src/crypto/equihash.h | 5 ++--- src/hush_defs.h | 2 +- src/{komodo_nk.h => hush_nk.h} | 0 3 files changed, 3 insertions(+), 4 deletions(-) rename src/{komodo_nk.h => hush_nk.h} (100%) diff --git a/src/crypto/equihash.h b/src/crypto/equihash.h index e98a9cb16..602b0df31 100644 --- a/src/crypto/equihash.h +++ b/src/crypto/equihash.h @@ -1,3 +1,4 @@ +// Copyright (c) 2019-2020 The Hush developers // Copyright (c) 2016 Jack Grigg // Copyright (c) 2016 The Zcash developers // Distributed under the GPLv3 software license, see the accompanying @@ -8,10 +9,8 @@ #include "crypto/sha256.h" #include "utilstrencodings.h" - #include "sodium.h" -#include "komodo_nk.h" - +#include "hush_nk.h" #include #include #include diff --git a/src/hush_defs.h b/src/hush_defs.h index 5c48da1c0..65abf28e5 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -18,7 +18,7 @@ #define KOMODO_DEFS_H #include "arith_uint256.h" #include "chain.h" -#include "komodo_nk.h" +#include "hush_nk.h" #define KOMODO_EARLYTXID_HEIGHT 100 //#define ADAPTIVEPOW_CHANGETO_DEFAULTON 1572480000 diff --git a/src/komodo_nk.h b/src/hush_nk.h similarity index 100% rename from src/komodo_nk.h rename to src/hush_nk.h From 01949faa64bc40aed01d5691e6d2d2b3ac66a397 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 4 Dec 2020 20:49:37 -0500 Subject: [PATCH 050/277] Everybody is Kung Fu Purging --- src/purge | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/purge b/src/purge index 08928e922..7983c2327 100755 --- a/src/purge +++ b/src/purge @@ -1,5 +1,10 @@ +#!/bin/bash +# Copyright (c) 2019-2020 Hush developers +# Released under the GPLv3 + +echo "Purging $1" + rm -rf ~/.komodo/$1/chainstate rm -rf ~/.komodo/$1/database rm -rf ~/.komodo/$1/blocks rm -rf ~/.komodo/$1/komodostate - From 06aaa346b6c6309d55b7626d1b9a2a1b85befe49 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 05:22:51 -0500 Subject: [PATCH 051/277] Use -03 for release builds --- depends/hosts/darwin.mk | 2 +- depends/hosts/linux.mk | 2 +- depends/hosts/mingw32.mk | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index 7be744aeb..309f4507c 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -8,7 +8,7 @@ darwin_CXX=g++-8 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysro darwin_CFLAGS=-pipe darwin_CXXFLAGS=$(darwin_CFLAGS) -darwin_release_CFLAGS=-O1 +darwin_release_CFLAGS=-O3 darwin_release_CXXFLAGS=$(darwin_release_CFLAGS) darwin_debug_CFLAGS=-O1 diff --git a/depends/hosts/linux.mk b/depends/hosts/linux.mk index 31748d662..3805d2307 100644 --- a/depends/hosts/linux.mk +++ b/depends/hosts/linux.mk @@ -1,7 +1,7 @@ linux_CFLAGS=-pipe linux_CXXFLAGS=$(linux_CFLAGS) -linux_release_CFLAGS=-O1 +linux_release_CFLAGS=-O3 linux_release_CXXFLAGS=$(linux_release_CFLAGS) linux_debug_CFLAGS=-O1 diff --git a/depends/hosts/mingw32.mk b/depends/hosts/mingw32.mk index b217bfdb5..c80d14184 100644 --- a/depends/hosts/mingw32.mk +++ b/depends/hosts/mingw32.mk @@ -3,7 +3,7 @@ mingw32_CXX=x86_64-w64-mingw32-g++-posix mingw32_CFLAGS=-pipe -std=c11 mingw32_CXXFLAGS=$(mingw32_CFLAGS) -std=c++11 -mingw32_release_CFLAGS=-O1 +mingw32_release_CFLAGS=-O3 mingw32_release_CXXFLAGS=$(mingw32_release_CFLAGS) mingw32_debug_CFLAGS=-O1 From c1e006a7a66cb94f4a04653d2a4f663df74267eb Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 07:08:44 -0500 Subject: [PATCH 052/277] Cleanliness is next to something --- src/primitives/block.cpp | 5 +---- src/primitives/block.h | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/primitives/block.cpp b/src/primitives/block.cpp index 759cfe8c9..84cc22184 100644 --- a/src/primitives/block.cpp +++ b/src/primitives/block.cpp @@ -1,8 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers +// Copyright (c) 2019-2020 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. * * * @@ -17,16 +17,13 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "primitives/block.h" - #include "hash.h" #include "tinyformat.h" #include "utilstrencodings.h" #include "crypto/common.h" #include "hush_defs.h" - // default hash algorithm for block uint256 (CBlockHeader::*CBlockHeader::hashFunction)() const = &CBlockHeader::GetSHA256DHash; diff --git a/src/primitives/block.h b/src/primitives/block.h index e56905be3..8e825f8a6 100644 --- a/src/primitives/block.h +++ b/src/primitives/block.h @@ -23,7 +23,6 @@ #define HUSH_PRIMITIVES_BLOCK_H #include "primitives/transaction.h" -//#include "primitives/nonce.h" #include "serialize.h" #include "uint256.h" #include "arith_uint256.h" From bd0e6df1398ca6ce254ed7d4477a076b0ac63185 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 07:11:26 -0500 Subject: [PATCH 053/277] No Country For KYC Men --- src/clientversion.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientversion.cpp b/src/clientversion.cpp index 7763ed738..a5748ec66 100644 --- a/src/clientversion.cpp +++ b/src/clientversion.cpp @@ -36,7 +36,7 @@ * for both bitcoind and bitcoin-core, to make it harder for attackers to * target servers or GUI users specifically. */ -const std::string CLIENT_NAME = GetArg("-clientname", "MagicBean"); +const std::string CLIENT_NAME = GetArg("-clientname", "jl777sRemorse"); /** * Client version number From eb92a3898046605e1d4c8268cba8a274b2c606aa Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 07:21:41 -0500 Subject: [PATCH 054/277] Remove dead code --- src/hush_notary.h | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/hush_notary.h b/src/hush_notary.h index 81b895707..0c3131991 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -118,33 +118,6 @@ int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestam return(NUM_HUSH_NOTARIES); } - //TODO: delete staked chain junk - /* - htind = height / KOMODO_ELECTION_GAP; - if ( htind >= KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP ) - htind = (KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP) - 1; - if ( Pubkeys == 0 ) - { - komodo_init(height); - //printf("Pubkeys.%p htind.%d vs max.%d\n",Pubkeys,htind,KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP); - } - pthread_mutex_lock(&komodo_mutex); - n = Pubkeys[htind].numnotaries; - if ( 0 && SMART_CHAIN_SYMBOL[0] != 0 ) - fprintf(stderr,"%s height.%d t.%u genesis.%d\n",SMART_CHAIN_SYMBOL,height,timestamp,n); - HASH_ITER(hh,Pubkeys[htind].Notaries,kp,tmp) - { - if ( kp->notaryid < n ) - { - mask |= (1LL << kp->notaryid); - memcpy(pubkeys[kp->notaryid],kp->pubkey,33); - } else printf("illegal notaryid.%d vs n.%d\n",kp->notaryid,n); - } - pthread_mutex_unlock(&komodo_mutex); - if ( (n < 64 && mask == ((1LL << n)-1)) || (n == 64 && mask == 0xffffffffffffffffLL) ) - return(n); - printf("error retrieving notaries ht.%d got mask.%llx for n.%d\n",height,(long long)mask,n); - */ return(-1); } From a99de09a8baa2369d71583bea90ef7a8725537e7 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 07:52:19 -0500 Subject: [PATCH 055/277] dpow tweaks --- src/hush_defs.h | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/hush_defs.h b/src/hush_defs.h index 65abf28e5..5680f74fe 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -13,13 +13,11 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef KOMODO_DEFS_H #define KOMODO_DEFS_H #include "arith_uint256.h" #include "chain.h" #include "hush_nk.h" - #define KOMODO_EARLYTXID_HEIGHT 100 //#define ADAPTIVEPOW_CHANGETO_DEFAULTON 1572480000 #define ASSETCHAINS_MINHEIGHT 128 @@ -36,17 +34,10 @@ #define KOMODO_SAPLING_DEADLINE 1550188800 // Feb 15th, 2019 #define _COINBASE_MATURITY 100 -// KMD Notary Seasons -// 1: May 1st 2018 1530921600 -// 2: July 15th 2019 1563148800 -> estimated height 1444000 -// 3: 3rd season - // 1751328000 = dummy timestamp, 1 July 2025! - // 7113400 = 5x current KMD blockheight. -// to add seasons, change NUM_HUSH_SEASONS, and add timestamp and height of activation to these arrays. - +// Notary Seasons: To add seasons, change NUM_HUSH_SEASONS, and add timestamp and height of activation to these arrays. // Always define one more season than is actually needed, which has a block activation in the far future -#define NUM_HUSH_SEASONS 7 //TODO: some parts of the codebase assume 64 and do not use this constant +#define NUM_HUSH_SEASONS 7 #define NUM_HUSH_NOTARIES 64 // $ ./contrib/block_time.pl 166250 @@ -73,9 +64,9 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = { { // season 1 - { "0_jl777_testA", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, - { "0_jl777_testB", "02ebfc784a4ba768aad88d44d1045d240d47b26e248cafaf1c5169a42d7a61d344" }, - { "0_kolo_testA", "0287aa4b73988ba26cf6565d815786caf0d2c4af704d7883d163ee89cd9977edec" }, + { "fuck_jl777_testA", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, + { "fuck_jl777_testB", "02ebfc784a4ba768aad88d44d1045d240d47b26e248cafaf1c5169a42d7a61d344" }, + { "fuck_kolo_testA", "0287aa4b73988ba26cf6565d815786caf0d2c4af704d7883d163ee89cd9977edec" }, { "artik_AR", "029acf1dcd9f5ff9c455f8bb717d4ae0c703e089d16cf8424619c491dff5994c90" }, { "artik_EU", "03f54b2c24f82632e3cdebe4568ba0acf487a80f8a89779173cdb78f74514847ce" }, { "artik_NA", "0224e31f93eff0cc30eaf0b2389fbc591085c0e122c4d11862c1729d090106c842" }, @@ -138,12 +129,13 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = { "xxspot1_XX", "02ef445a392fcaf3ad4176a5da7f43580e8056594e003eba6559a713711a27f955" }, { "xxspot2_XX", "03d85b221ea72ebcd25373e7961f4983d12add66a92f899deaf07bab1d8b6f5573" } }, + { // season 2 - {"0dev1_jl777", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, - {"0dev2_kolo", "030f34af4b908fb8eb2099accb56b8d157d49f6cfb691baa80fdd34f385efed961" }, - {"0dev3_kolo", "025af9d2b2a05338478159e9ac84543968fd18c45fd9307866b56f33898653b014" }, - {"0dev4_decker", "028eea44a09674dda00d88ffd199a09c9b75ba9782382cc8f1e97c0fd565fe5707" }, + {"fuck_dev1_jl777", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, + {"fuck_dev2_kolo", "030f34af4b908fb8eb2099accb56b8d157d49f6cfb691baa80fdd34f385efed961" }, + {"fuck_dev3_kolo", "025af9d2b2a05338478159e9ac84543968fd18c45fd9307866b56f33898653b014" }, + {"fuck_dev4_decker", "028eea44a09674dda00d88ffd199a09c9b75ba9782382cc8f1e97c0fd565fe5707" }, {"a-team_SH", "03b59ad322b17cb94080dc8e6dc10a0a865de6d47c16fb5b1a0b5f77f9507f3cce" }, {"artik_AR", "029acf1dcd9f5ff9c455f8bb717d4ae0c703e089d16cf8424619c491dff5994c90" }, {"artik_EU", "03f54b2c24f82632e3cdebe4568ba0acf487a80f8a89779173cdb78f74514847ce" }, From 706c5204cb357e0d3aa329faa6acfe7982bffd5f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 07:54:08 -0500 Subject: [PATCH 056/277] Hush DPoW notaries are proudly anon, where KMD notaries doxx themselves --- src/hush_defs.h | 131 ++++++++++++++++++++++++------------------------ 1 file changed, 65 insertions(+), 66 deletions(-) diff --git a/src/hush_defs.h b/src/hush_defs.h index 5680f74fe..aef749a7a 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -403,72 +403,71 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = }, { // Hush Delayed Proof of Work, Season 6 In The Great History Of DPoW - // NOTE: Hush notaries are anon, where KMD notaries doxx themselves, lulz - // TODO: Fill in production pubkeys, these are placeholders - {"notary01", "024f20c096b085308e21893383f4404faf1cdedea9ad53cc7d7e7fbfa0c30c1e70" }, - {"notary02", "022b85908191788f409506ebcf96a092f3274f352864c3ed566c5a16de63953230" }, - {"notary03", "022f62b56ddfd07c9860921c701280ac39bb3ac8f6f083d1b59c8f4943be3de160" }, - {"notary04", "03b6f9493658bdd102503585a08ae042b49d6a68fb69ac3626f9737cd7581abdf0" }, - {"notary05", "037a20916d2e9ea575300ac9d729507c23a606b9a200c8e913d7c9832f912a1fa0" }, - {"notary06", "028803e07bcc521fde264b7191a940f9b3612e8ee4e24a99bcd903f69762408390" }, - {"notary07", "0311dde03c2dd654ce78323b718ed0ad73a464d1bde97820f3395f54788b5420d0" }, - {"notary08", "030cd487e10fbf142e0e8d582e7020cb775f378569c3cb5acd0ff97b6b12203580" }, - {"notary09", "030bf7bd7ad0515c33b5d5d9a91e0029baf801b9002f80495ae535ea1ceb2352c0" }, - {"notary10", "026f4f66385daaf8313ef30ffe4980e7db497132682dca185a70763d93e1217d90" }, - {"notary11", "03f4e69edcb4fa3b2095cb8cb1ca000f4ec4972eac5d8822397e5c8d87aa21a730" }, - {"notary12", "023c7584b1006d4a62a4b4c9c1ede090a3789316547897d5ed49ff9385a32cb410" }, - {"notary13", "025199bc04bcb8a17976d9fe8bc87063a6150c2727321aa59bf34a2b49f223a0c0" }, - {"notary14", "02a85540db8d41c7e60bf0d33d1360b4151cad883dd032878ea4c037f67b269630" }, - {"notary15", "02fca8ee50e49f480de275745618d07b0b3680b0bdcce7dcae7d2e0fd5c3245740" }, - {"notary16", "027777775b89ff548c3be54fb0c9405437d87f38bfce83bdef113899881b219c90" }, - {"notary17", "029912212d370ee0fb4d38eefd8bf0d8ab04e2c3b0354020789c29ddf2a32c72d0" }, - {"notary18", "033c121d3f8d450174674a73f3b7f040b2717a7d51ea19ee597e2e8e8f9d2ed870" }, - {"notary19", "03bfcbca83f11e622fa4eed9a1fa20dba377981ea3b22e3d0a4015f9a9322f9270" }, - {"notary20", "03a5c083c78ba397970f20b544a01013e7ed36ca8a5ae26d5fe7bd38b92b2a0c90" }, - {"notary21", "03639bc56d3fecf856f17759a441c0893668e7c2d460f3d216798a413cd6266bb0" }, - {"notary22", "03e388bcc579ac2675f8fadfa921e0c186dcea8d2b43de1eed6caba23d5a262b70" }, - {"notary23", "03a5cfda2b097c808834ccdd805820c811b519611feabdfe6b3644312e53267480" }, - {"notary24", "02a654037d12cdd609f4fad48e15e054538e03f61fdae1a1b855f16ebaca26bd70" }, - {"notary25", "0262da6aaa0b295b8e2f120035924058a4a630f899316dc13ee15ef03e9b2b2b20" }, - {"notary26", "0242778789986d614f75bcf629081051b851a12ab1cc10c13995b27b90fe2b75a0" }, - {"notary27", "03a416533cace0814455a1bb1cd7801ce825a543c6f62841432c4c8d887527ace0" }, - {"notary28", "02b3908eda4078f0e9b6704451cdc04d418e899c0f515fa1338d7494da6f2a6470" }, - {"notary29", "031d1584cf0eb4a2d314465e49e2607226b1615c371801318d6b4854c15626a580" }, - {"notary30", "02f803e6f159824a181cc5d709f3d0e7ff65f19e1899920124aeb4e3d2d829f910" }, - {"notary31", "027afddbcf690230dd8d435ec16a70fb0083e6b77030f761437f291dfc402579d0" }, - {"notary32", "0397ec3a4ad84b3009566d260c89f0c4404e86e5d044964147c9371277e32f5990" }, - {"notary33", "036d3afebe1eab09f4c38c3ee6a4609ad390f3df92787c11437a58c59a292408e0" }, - {"notary34", "028690ca1e3afdf8a38b421f6a41f0ff407afc96d5a7a6a188330aae26c82086b0" }, - {"notary35", "027a4ca7b11d3456ff558c08bb04403a89c7f383448461f10b6b3b07424a2be9a0" }, - {"notary36", "0239e34ad22957bbf4c8df824401f037b2afe8d40f7a6451cd43e8f27dde2ab0d0" }, - {"notary37", "03b21ff042bf1730b28bde43f44c004578b41996117ac7614b567c3773082e3be0" }, - {"notary38", "036494e7c9467c8c7ff3bf29e841907fb0fa24241866569144ea422479ec2e6250" }, - {"notary39", "03e67440141f53a08684c329ebc852b018e41f905da88e51aa4a6dc5aa4b224470" }, - {"notary40", "026d5f29d09ff3f33e14db4811606249b2438c6bcf964871714f81d1f2d922acd0" }, - {"notary41", "0392e4c9400e69f28c6b9e89d586da69d5a6af7702f10451aa6ebc1996f0296e10" }, - {"notary42", "0310a249c6c2dcc29f2135715138a9ddb8e01c0eab701cb10b96d9cec6602bdc50" }, - {"notary43", "0284c4d3cb97dd8a32d10fb32b1855ae18cf845dad542e318937ca0e998f254ec0" }, - {"notary44", "03c53bd421de4a29ce68c8cc83f802e1181e77c08f8f16614490d61452ea2d0230" }, - {"notary45", "028c08db6e7242681f50db6c234fe3d6e12fb1a915350311be26373bac0d257d40" }, - {"notary46", "03c18431bb6bc95672f640f19998a196becd2851d5dcba4195fe8d85b7d72eab80" }, - {"notary47", "0243958faf9ae4d43b598b859ddc595c170c4cf50f8e4511d660ae5bc72a2b8210" }, - {"notary48", "03369187ce134bd7793ee34af7756fe1ab27202e09306491cdd5d8ad2c71297930" }, - {"notary49", "03889a10f9df2caef57220628515693cf25316fe1b0693b1241419e75d0d2e66e0" }, - {"notary50", "0240011b95cde819f298fe0f507b2260c9fecdab784924016d4d1e54c522203cb0" }, - {"notary51", "02ad7ef25d2dd461e361120cd3efe7cbce5e9512c361e9115aac33dd303d258610" }, - {"notary52", "02641c36ae6747b88150a463a1fe65cf7a9d1c00a64387c13f296f0b64e72c7d30" }, - {"notary53", "0397b7584cb29717b721c0c587d4462477efc1f36a569211133c9d17b0cd2f2780" }, - {"notary54", "03c6e047218f34644ccba67e317b9da5d28e68bbbb6b9971aef1281d2baf246490" }, - {"notary55", "02285bf2f9e96068ecac14bc6f770e394927b4da9f5ba831eaa9468b5d47f203a0" }, - {"notary56", "0213751a1c59d3489ca85b3d62a3d606dcef7f0428aa02111978ea16fb38a2fad0" }, - {"notary57", "02e7722ebba9f8b5ebfb4e87d4fa58cc75aef677535b9cf1060c7d9471aacd9c90" }, - {"notary58", "03958bd8d13fe6946b8d0d0fbbc3861c72542560d0276e81a4c6b5fe55bc758b80" }, - {"notary59", "02276090e483db1a01a802456b10831b3b6e0a6ad3ece9b1a01f4aad0e480c8ed0" }, - {"notary60", "02abf206bafc8048dbdc042b8eb6b1e356ea5dbe149eae3132b4811d4905e5cf00" }, - {"notary61", "0229e499e3f2e065ced402ceb8aaf3d5ab8bd3793aa074315e9fa30772ce604900" }, - {"notary62", "0258b77d7dcfc6c2628b0b6b438951a6e74201fb2cd180a195e4c37fcf8e78a670" }, - {"notary63", "02de90c720c007229374772505a43917a84ed129d5fbcfa1949cc2e9b563351120" }, - {"notary64", "0241c5660ca540780be66603b1791127a1261d56abbcb7512c297eec8e4fc078f0" } + // NOTE: Hush notaries are proudly anon, where KMD notaries doxx themselves, derpz and lulz + {"RHush8GC36rip8uY4fyDU79NxbhKNtqghk","0311e75bdbb9215eb040eb01f932097b2dde8632570b314087883dcd4344b27a8f"}, + {"RHushPhhtqMDgdHe16NXuZfzQVAyKYzPZB","0387c4fbc3df18437820f1ecb3ce072c41b9ee3db45bb5df5bd4c9504ff769a0e3"}, + {"RHush7Ua35bjt7RobikaG2rXp8oSu27uuE","033af93c56093489b836f309b1f1709ede0d34dcc01e676ba04c41492d45c2a82d"}, + {"RHushXfsrvBTd1UKE5b86GpW7kPy6x8kMc","02735b7707a601677a201115d222ea96cca019e2537989202c930b5eabc1b7d0d1"}, + {"RHushGKVM7V66vxaVMVKZa5zfU31jHnvvJ","02b64255d2ed8e72efb8606a5f3edd991706d6fa405e2edb2366ccc0d04411a971"}, + {"RHushhj9ZqSxbsoKmbdQCs31udPj7R84L1","0219fd04e4d10a9a3a3bdd8463d817e27af21f9ee8fd9c96ab168f4075c7f8ab04"}, + {"RHushHSVgpiFKTzKeYX1WeEVSFvaRJntfG","031f342fb96cfbe54881ad4feb5d6d4ffa431671a88f55ccd5c97710a40492858c"}, + {"RHushhgnoYHyo1FAPd95pnSZ41ku9pbsTa","03c6c9f035edaa08b1361d4a36650506c33f9224dcca3e5e670e79cd6cacf4272a"}, + {"RHushzyxZZWRTbeoL2kBTwpKRPQnCSydY2","02ed6ae515061943197e4666966107c60419d0f76051c6eff56f4aa325b4a4d909"}, + {"RHushTgVyVCR2nfHSnFpnQdYpAJkuhh32A","03651c4e20684ba32afd45a51b78120b1d88a165a56a465b480e08a27877b25511"}, + {"RHushfUUfe2mEvzooNJPVd46ajGR5mVk8u","02196af172bb155312575b55f7e9beec21fa861aa7ab424eafa8555e5c90cbf959"}, + {"RHushycRhdDqFMmU2CsHsPNdsFy2gYxmLw","03686768588bd270934f38c9c747703bd13923a271781d53d73e35d516a8d95e06"}, + {"RHusheqVQ3qFtSVbQz751H4EiNaP47bKPf","033d099e4bf7d6250adab6d1519aecd0c234b465de6c3c3569864b87acc160926d"}, + {"RHushiEq7kXBBCAWz1E44i2aw1SAt6cMku","025260889f16fdb809f415a457a92c5afcd1b0f30101a2eca495c6fcc333684fd5"}, + {"RHushVTxFKFfySmNqpHtFBg7s3whm3Zk4q","035ed8e13cd4861a76336f2f78aab5af350d363b4f7ce784b1ab24697b951ef352"}, + {"RHushzssPeRpshz2Qgezx33QafbeeW67Wa","02a257c40452cc405e4b53f54224d2a76c7a74477f32b0e50e7349b9d4a7d8eb73"}, + {"RHush9Mz58wqRMYwQmQ2uehTphpwyjNPF8","022dd50c6325d5739c49c1158b3d0c4300db5e05bbb180674bbe37563695bb7c4c"}, + {"RHushLVwBCVsj5wQfL3Vqn5dtCUNzYACqR","03d7f02d5bf50eeb66b24932e2aa1ee68536184d8e904a9f08a19f1e63247bd370"}, + {"RHushnwstemVMdgejh5tmb51GFCgfrW5Wn","03d7071297ce99b58ee5c16c91a682a67b98423df19c83016e30c3b566ee7d5013"}, + {"RHushah3awaNJnms5fDzHQJde1QeoWhjnV","02279ff0ca33d8a6570e643cc8dc8feb48d5bd51a6bb8fe36b98fb30b01ce31ff8"}, + {"RHushjrJUjLzE4am73D1aNkjH5S6hHWmWc","027ab4c14966b13955616c4a17de8a497088b3ceff076077aeb02504d73314b928"}, + {"RHushptDtbjDvdeeyDZUvps6wFoPECxwEd","0209f18cc2f708ccc6c6d0ef380440dec0f6052dc3904f14dfa9303e7feb583128"}, + {"RHushQH3qtbFHZ5qCjWYbPfWCa8tV8WVDR","035108e4d8415aa4dcffb076e3e7f681645be7ae9860b552147f46a26fa4995fe7"}, + {"RHushw4ztWqhZycAJHzz2kaUwDQNr1CFUn","02d852b7ac1a0f8407cf6e17bd5729ad471ec8ff9b1010ea43b2dd11ab1f1fcc0f"}, + {"RHushz1vQti15q7Cc1CwUvA2ctPnNVZQQj","03651736c7f6f19991ab047687fe1a832d97fdec946d185b0e475625692ad3eb2a"}, + {"RHush3FwGHgmcSDUB6pLNfhser8qbwyCrS","0344bfb5e40f33f033869f0259e1baefdb297e4a266b87424af72fa09cf7f32e0e"}, + {"RHushNnHbhKgtMbGM3dWnJ4Wa8FZvDL2es","03cceb1d4ce28edd255805b9e2cfad215c29e8aed068ae5ec76183e2b5b413d48c"}, + {"RHush2dcugTQ8vGHMdFVwD9ULkFWzbsZ5W","02b762e56f508cb14127fe725017772b575925881911fd8fc374529b5e509ab7d3"}, + {"RHushJ1ydfCUcAvNUsikkct9ZoW7nFqrmK","03b36c60c7fc1c81cc989e45847ad2faff93398a95ec6b8138b38f8078d5652e73"}, + {"RHushdyAmvxV8Em5Gud33wDDQN74sKNUSK","02e096a7b57f6d5ac6d731b39dc9a656ea920d60c8db6f1d4f433985cb4756fb3e"}, + {"RHushPdks3JJphcYrxukGtJDdx9spMwWS1","02ff62a40b44d34f7f96c303903bf76fca5a60693cb085ea1ce72e4bb29f572b95"}, + {"RHushDUQxu68DZstxx3yj8jFV9G3iKn2dC","0227ac6e3b61069570b3f1c519492620929406120a0e77b71a8ead0f1f5a084a98"}, + {"RHushU3jFwas7B7mJz5A9dSTUzBq9ifmD9","02cef39af8bb49fd5b920f75f28ea75de8202e3ad87a07e9a86fae2e78c54fe1be"}, + {"RHushVBhtjBroSZU3NwS2JHPsaL6XpHMWc","02861aefc110ff5d8eb8783c068ee421872ad37d49830a5b14d7b19c01668a6e12"}, + {"RHushxBYs561RAtoJbPPptzrS4LDg2yzkx","03e1235ad6da52d1ba97d5e5dbb0dad35aa0453ef92fc8c368abe8fce102cdc2e9"}, + {"RHush6Cb9H11o77QkTwjj8HkUgHVySkYKN","03d22020cad60b83344414bdad05853c192c545d71539f463c974605eb0d118334"}, + {"RHush19GGZa3yzPPdcyEYFGpJZepe2UoC5","03dbc620a20d4f9c9f066ec6773fbdd49e0062ff242fc1134d59e6058b4ef6627c"}, + {"RHushcDcHdfLEuGPf9NfF8RyfuR9y7pfG9","02a55a7cb6f6784afd44bac0033c754e238683e7f9b4ce6ea3da5ed70aeeb297ab"}, + {"RHushUwawFZ3hx4YYjiKrDw3EsEV5BguDw","03485a646f2c9d52a5dfc35d3db16b609f29bdc7c6ea3a3fbb9930f7cd8026722b"}, + {"RHushRy6RUcozhxoySbxVmuWD2fnmA7Lnu","02aca0c996cdd7d180c788bca7a574af2e8824514849f087ec3784aaf82b4e09c1"}, + {"RHushp5dFxnudvYmTMVvhHCpv7wAeg9yme","039603fcb707cf7a150bb3c8dcff70efb3652e28c5cb9f275a2723d6e7769b35e6"}, + {"RHushYC8WX1DZZFSyEnKwWfYkaPbp3NYV2","033464b6800aa374ddda0499eeb17440a14c6f01b16e1ca8533721f565615b5652"}, + {"RHushLmLU8qCQ2suwJCmLUGDP8UHeKakQ1","03f729b004fa78ad47d8a9948a9cec9c183251c60d19b722132825e91979ea1718"}, + {"RHushf3WM6J2YkWW6jrzfysRJaL7ixvA4S","02d1f4327470ac0548d7e1c806793c555d28d53cbad2458f5e206bdd05238eb357"}, + {"RHushe75FywZGhRZGuK16LBtStkQGH8Ft9","0204e1cb1cbdb494a4cd7d29447acad55748fe9a4bcf35db5ed9eb793ca88545cc"}, + {"RHush8wqe1SkcweBBPqusQ5uakjEUKvxk1","0256120d1d2556284b6256d463d245fb0b6853d48b56c249c4092b9903043db4a6"}, + {"RHushKidwwcrGGe6i75x8eP652kVSSZMvm","036e24c5212aaf795485b827f67af8d2b04558a6663815f62611830d9d0dce114c"}, + {"RHushGV6GSMQePaLL7xcgWed6atye48cT1","02a298865ccbb575a770b68ece73962ddf5bcaeedc7b8bccab33e2ffda33ab0773"}, + {"RHush2P6tQr1MSXsm8VUFzRhJUbPswkdpg","02db2b276a9cabdf93579492b20ff507b118f7406e70b10550fd53836431e83e2a"}, + {"RHusheDCeKe5y3npBbHWbpCktTLbW1wVSG","0281d9e0ed1a854967e54d48aaa9276343e9b76c5efdc1d044ff5009641324fbc4"}, + {"RHushxF6budLeauye6gYvNcmhriU3xdaef","0354a23100ae28c9b0265c555a6fa7354216aeb28fed6519f335c2c4e405432554"}, + {"RHushEFSwwkmCUuJBHyi8GVeyToN3c9MBb","026ef72515d057d4dd3698ae3e5c5ccaccb71dfde4b6830949883ab8e0907f6715"}, + {"RHushaW7hadHXYY5TqYpnNJhHrAET72nLe","0228391f4e557ece7c5f0d7145cd278ff78048dde393c3685f18fd7c1602481db7"}, + {"RHushJbS2wBabhYyH8KDiyVkcg7haKvKYW","0255428e8b42cb23b85bbd4d22fd329cc30fc6c5e85fa8f3daf3109453e44cacd6"}, + {"RHushXxE9Mhp7PdJ92SqcJUQbfvrM5ERtx","02bc2a7a7682d6b0ddc745229aff8defc26f26649c9138a82e598ff97887924713"}, + {"RHush1En19qX2RygkcEg8tSZ1tog8kRFiZ","02d26b12982c4516faf3ccd2be162f21659f0022c88a89de905f9c18d833c7c371"}, + {"RHushXP2DHksHNQe6W572Yzv4awwCdW3xd","038587a8e96f487afed148ca93328b766928c4968b25c6b27e292af0d56715df98"}, + {"RHushUq1jpKdiWmHmnF7KQKEFY1HL3jxJi","03e9c491270b08613d1ec7c69b779e99f2c8c18475dd22f0cb2f35792822cd5335"}, + {"RHushDE7wimzRmQ1vGyQAb4tHfY17tSNBG","02ac63417f3ca77b5040db2c8e7029a115cd01ef3482d30bbaffcbc6bcb737fd43"}, + {"RHushSjWrj9NCs4CVoJPYL9aaUfunqLVPH","023b16bf42f558117d4277ec4814da82a58e2be744c5ce65022eb1c14d75f2c64d"}, + {"RHushqCoG4swiBnPZfASZxPezxWQQm5b4y","02a2ab4315f2845989c007443e740ccbc8dc8272f98680d97228a0bc5ab8780146"}, + {"RHushGnyatVjV3P6XV3AFEKtvpJKjZBwEy","0229d0fe5e080de8d9ff6d6c81d58db6d091de33854cb81dfb687caedd2ea08907"}, + {"RHushzUshnwkZoh2WmH7SLy1XqB9EYa7in","02409c2b52f7dda4a940f989e1582087925407da1ce63ff4a1a6914f1774effa09"}, + {"RHushaSfRLrsnxE4z8s3FVmSkyhaf2FCy8","03c8d684550004b16c061fc34331d106f9e54323e75824ddefe386a552018e4857"} } }; From 65cdf6dd3295ebd36f0ba0359c974c69c765cd21 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 08:02:31 -0500 Subject: [PATCH 057/277] Update some links shown by some RPCs --- src/consensus/upgrades.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/consensus/upgrades.cpp b/src/consensus/upgrades.cpp index 973b4fca2..d34c7e07d 100644 --- a/src/consensus/upgrades.cpp +++ b/src/consensus/upgrades.cpp @@ -2,7 +2,6 @@ // Copyright (c) 2018 The Zcash 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. * * * @@ -38,22 +37,22 @@ const struct NUInfo NetworkUpgradeInfo[Consensus::MAX_NETWORK_UPGRADES] = { { /*.nBranchId =*/ 0, /*.strName =*/ "Sprout", - /*.strInfo =*/ "The Zcash network at launch", + /*.strInfo =*/ "The Zcash network at launch. Hush is the first Zcash Protocol coin in the world that contains no Sprout history in it's blockchain!", }, { /*.nBranchId =*/ 0x74736554, /*.strName =*/ "Test dummy", - /*.strInfo =*/ "Test dummy info", + /*.strInfo =*/ "Zcash Company Profits From Surveillance", }, { /*.nBranchId =*/ 0x5ba81b19, /*.strName =*/ "Overwinter", - /*.strInfo =*/ "See https://z.cash/upgrade/overwinter.html for details.", + /*.strInfo =*/ "See https://hush.is for details.", }, { /*.nBranchId =*/ 0x76b809bb, /*.strName =*/ "Sapling", - /*.strInfo =*/ "See https://z.cash/upgrade/sapling.html for details.", + /*.strInfo =*/ "See https://hush.is for details.", } }; From 6e547b9f1b8690c01344b8f05760a8a2cc519f5c Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 08:03:41 -0500 Subject: [PATCH 058/277] Update manpages --- doc/man/hush-cli.1 | 4 ++-- doc/man/hush-tx.1 | 4 ++-- doc/man/hushd.1 | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/man/hush-cli.1 b/doc/man/hush-cli.1 index 114b519a5..b9813d035 100644 --- a/doc/man/hush-cli.1 +++ b/doc/man/hush-cli.1 @@ -3,7 +3,7 @@ .SH NAME hush-cli \- manual page for hush-cli v3.6.0 .SH DESCRIPTION -Hush RPC client version v3.6.0\-c2fedd304 +Hush RPC client version v3.6.0\-65cdf6dd3 .PP In order to ensure you are adequately protecting your privacy when using Hush, please see . @@ -71,7 +71,7 @@ Timeout in seconds during HTTP requests, or 0 for no timeout. (default: Read extra arguments from standard input, one per line until EOF/Ctrl\-D (recommended for sensitive information such as passphrases) .SH COPYRIGHT -Hush Daemon version v3.6.0-c2fedd304 +Hush Daemon version v3.6.0-65cdf6dd3 In order to ensure you are adequately protecting your privacy when using Hush, please see . diff --git a/doc/man/hush-tx.1 b/doc/man/hush-tx.1 index 423e085b5..4bc69a9cc 100644 --- a/doc/man/hush-tx.1 +++ b/doc/man/hush-tx.1 @@ -3,7 +3,7 @@ .SH NAME hush-tx \- manual page for hush-tx v3.6.0 .SH DESCRIPTION -Hush komodo\-tx utility version v3.6.0\-c2fedd304 +Hush komodo\-tx utility version v3.6.0\-65cdf6dd3 .SS "Usage:" .TP komodo\-tx [options] [commands] @@ -84,7 +84,7 @@ set=NAME:JSON\-STRING .IP Set register NAME to given JSON\-STRING .SH COPYRIGHT -Hush Daemon version v3.6.0-c2fedd304 +Hush Daemon version v3.6.0-65cdf6dd3 In order to ensure you are adequately protecting your privacy when using Hush, please see . diff --git a/doc/man/hushd.1 b/doc/man/hushd.1 index e1f7abd2f..c354936e7 100644 --- a/doc/man/hushd.1 +++ b/doc/man/hushd.1 @@ -4,7 +4,7 @@ hushd \- manual page for hushd v3.6.0 .SH DESCRIPTION Found binary: ./komodod -Hush Daemon version v3.6.0\-c2fedd304 +Hush Daemon version v3.6.0\-65cdf6dd3 .PP In order to ensure you are adequately protecting your privacy when using Hush, please see . @@ -682,7 +682,7 @@ Starting supply, default is 0 .IP Enforce transaction\-rate limit, default 0 .SH COPYRIGHT -Hush Daemon version v3.6.0-c2fedd304 +Hush Daemon version v3.6.0-65cdf6dd3 In order to ensure you are adequately protecting your privacy when using Hush, please see . From 109abc19b174ccdc34fbda79134b2013ba873180 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 08:06:12 -0500 Subject: [PATCH 059/277] Update example config --- contrib/debian/examples/HUSH3.conf | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/contrib/debian/examples/HUSH3.conf b/contrib/debian/examples/HUSH3.conf index 2bc32b170..cefd756c6 100644 --- a/contrib/debian/examples/HUSH3.conf +++ b/contrib/debian/examples/HUSH3.conf @@ -52,10 +52,10 @@ #maxconnections= # -# JSON-RPC options (for controlling a running Komodo/komodod process) +# JSON-RPC options (for controlling a running hushd process) # -# server=1 tells komodod to accept JSON-RPC commands (set as default if not specified) +# server=1 tells node to accept JSON-RPC commands (set as default if not specified) #server=1 # Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. @@ -66,7 +66,7 @@ #rpcuser=Ulysses #rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593 -# How many seconds komodo will wait for a complete RPC HTTP request. +# How many seconds node will wait for a complete RPC HTTP request. # after the HTTP connection is established. #rpcclienttimeout=30 @@ -76,8 +76,7 @@ # NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED, # because the rpcpassword is transmitted over the network unencrypted and also because anyone -# that can authenticate on the RPC port can steal your keys + take over the account running komodod -# For more information see https://github.com/zcash/zcash/issues/1497 +# that can authenticate on the RPC port can steal your keys + take over the account running hushd #rpcallowip=10.1.1.34/255.255.255.0 #rpcallowip=1.2.3.4/24 @@ -86,7 +85,7 @@ # Listen for RPC connections on this TCP port: #rpcport=8232 -# You can use Komodo or komodod to send commands to Komodo/komodod +# You can use hushd to send commands to hushd # running on another host using this option: #rpcconnect=127.0.0.1 @@ -101,13 +100,13 @@ # Miscellaneous options -# Enable attempt to mine komodo. +# Enable attempt to mine HUSH #gen=0 -# Set the number of threads to be used for mining komodo (-1 = all cores). +# Set the number of threads to be used for mining (-1 = all cores). #genproclimit=1 -# Specify a different Equihash solver (e.g. "tromp") to try to mine komodo +# Specify a different Equihash solver (e.g. "tromp") to try to mine # faster when gen=1. #equihashsolver=default @@ -115,7 +114,7 @@ # both prior transactions and several dozen future transactions. #keypool=100 -# Pay an optional transaction fee every time you send komodo. Transactions with fees +# Pay an optional transaction fee every time you send a tx. Transactions with fees # are more likely than free transactions to be included in generated blocks, so may # be validated sooner. This setting does not affect private transactions created with # 'z_sendmany'. From ebe24f9f903921f3d9dfca3c3d8ca49b6f563ca8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 08:40:28 -0500 Subject: [PATCH 060/277] This sprout shite cannot be deleted yet --- src/coins.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/coins.cpp b/src/coins.cpp index 95600f224..9ffd10e33 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -286,6 +286,14 @@ void CCoinsViewCache::AbstractPopAnchor( void CCoinsViewCache::PopAnchor(const uint256 &newrt, ShieldedType type) { switch (type) { + case SPROUT: + AbstractPopAnchor( + newrt, + SPROUT, + cacheSproutAnchors, + hashSproutAnchor + ); + break; case SAPLING: AbstractPopAnchor( newrt, @@ -373,9 +381,13 @@ uint256 CCoinsViewCache::GetBestBlock() const { return hashBlock; } - uint256 CCoinsViewCache::GetBestAnchor(ShieldedType type) const { switch (type) { + case SPROUT: + if (hashSproutAnchor.IsNull()) + hashSproutAnchor = base->GetBestAnchor(type); + return hashSproutAnchor; + break; case SAPLING: if (hashSaplingAnchor.IsNull()) hashSaplingAnchor = base->GetBestAnchor(type); From 979d45a4a14520cc8cd2cd3bd0e948b71ff4674c Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 08:40:33 -0500 Subject: [PATCH 061/277] yup --- src/hushd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hushd b/src/hushd index 04b514a1a..7ba7c160b 100755 --- a/src/hushd +++ b/src/hushd @@ -56,7 +56,8 @@ CCENABLE=$FAUCET,$HEIR,$CHANNEL,$ORACLE,$GATEWAY KMD=${KOMODOD:-./komodod} if [ -f $KMD ]; then - echo "Found binary: $KMD" + HUSH="TheFuture" + # echo "Found binary: $KMD" else KMD=hush-komodod if [ -f $KMD ]; then From b20c1c9a42974760e1c25834425487426328ee85 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 08:52:00 -0500 Subject: [PATCH 062/277] Fix some super old logging bugs, hopefully --- src/main.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index b44112d05..442fd1cdf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7264,9 +7264,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (nVersion < minVersion) { // disconnect from peers older than this proto version - LogPrintf("peer=%d using obsolete version %i; disconnecting\n", pfrom->id, pfrom->nVersion); - pfrom->PushMessage("reject", strCommand, REJECT_OBSOLETE, - strprintf("Version must be %d or greater", minVersion)); + LogPrintf("Disconnecting peer=%d using obsolete version %i < %i\n", pfrom->id, nVersion, minVersion); + pfrom->PushMessage("reject", strCommand, REJECT_OBSOLETE, strprintf("Version must be %d or greater", minVersion)); pfrom->fDisconnect = true; return false; } @@ -7276,7 +7275,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, auto currentEpoch = CurrentEpoch(GetHeight(), params); if (nVersion < params.vUpgrades[currentEpoch].nProtocolVersion) { - LogPrintf("peer=%d using obsolete version %i; disconnecting\n", pfrom->id, nVersion); + LogPrintf("Disconnecting peer=%d using obsolete epoch version %i; disconnecting\n", pfrom->id, nVersion); pfrom->PushMessage("reject", strCommand, REJECT_OBSOLETE, strprintf("Version must be %d or greater", params.vUpgrades[currentEpoch].nProtocolVersion)); @@ -7300,13 +7299,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // Disconnect if we connected to ourself if (nNonce == nLocalHostNonce && nNonce > 1) { - LogPrintf("connected to self at %s, disconnecting\n", pfrom->addr.ToString()); + LogPrintf("connected to self, lulz, at %s, disconnecting, for now\n", pfrom->addr.ToString()); pfrom->fDisconnect = true; return true; } - pfrom->nVersion = nVersion; - + pfrom->nVersion = nVersion; pfrom->addrLocal = addrMe; if (pfrom->fInbound && addrMe.IsRoutable()) { From 6ecd88c854663e41949f6121fc1c96136e887552 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 5 Dec 2020 08:58:45 -0500 Subject: [PATCH 063/277] Keep, ancient lands, your storied pomp! cries she with silent lips. Give me your tired, your poor --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 92676105b..165839b39 100644 --- a/src/version.h +++ b/src/version.h @@ -27,7 +27,7 @@ static const int INIT_PROTO_VERSION = 209; //! In this version, 'getheaders' was introduced. static const int GETHEADERS_VERSION = 31800; //! disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION = 170010; +static const int MIN_PEER_PROTO_VERSION = 170009; //! nTime field added to CAddress, starting with this version; //! if possible, avoid requesting addresses nodes older than this static const int CADDR_TIME_VERSION = 31402; From 2b6aaf5fde228d166f90c7084b3e8751e17ec70f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 15:38:21 -0500 Subject: [PATCH 064/277] Add copyright --- src/pubkey.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/pubkey.h b/src/pubkey.h index 842c54026..9df381f02 100644 --- a/src/pubkey.h +++ b/src/pubkey.h @@ -1,9 +1,9 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers // Copyright (c) 2017 The Zcash developers +// Copyright (c) 2019-2020 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. * * * @@ -18,14 +18,11 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_PUBKEY_H #define HUSH_PUBKEY_H - #include "hash.h" #include "serialize.h" #include "uint256.h" - #include #include From 62ddb079bc1f3da7fd267379b5fe971564a95283 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 15:42:03 -0500 Subject: [PATCH 065/277] Remove JUMBLR dingleberries --- src/rpc/misc.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index e62a017c5..a20500e35 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "clientversion.h" #include "init.h" #include "key_io.h" @@ -35,7 +33,6 @@ #include "wallet/wallet.h" #include "wallet/walletdb.h" #endif - #include #include #include @@ -57,8 +54,6 @@ using namespace std; * Or alternatively, create a specific query method for the information. **/ -int32_t Jumblr_depositaddradd(char *depositaddr); -int32_t Jumblr_secretaddradd(char *secretaddr); uint64_t komodo_interestsum(); int32_t komodo_longestchain(); int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); From 1f636f4d3990da8291ffeaf7696826213f67b0cd Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 15:43:56 -0500 Subject: [PATCH 066/277] Me love you longest chain --- src/hush_defs.h | 2 +- src/main.cpp | 4 ++-- src/rpc/blockchain.cpp | 4 ++-- src/rpc/misc.cpp | 4 ++-- src/rpc/net.cpp | 12 ++++++------ 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/hush_defs.h b/src/hush_defs.h index aef749a7a..14d9c0f04 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -500,7 +500,7 @@ extern int32_t KOMODO_BLOCK_POSUNITS, KOMODO_CONSECUTIVE_POS_THRESHOLD, KOMODO_N extern uint64_t ASSETCHAINS_TIMELOCKGTE; extern uint32_t ASSETCHAINS_ALGO,ASSETCHAINS_EQUIHASH,HUSH_INITDONE; -extern int32_t HUSH_MININGTHREADS,KOMODO_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,KOMODO_NSPV; +extern int32_t HUSH_MININGTHREADS,HUSH_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,KOMODO_NSPV; extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET; extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2]; extern const char *ASSETCHAINS_ALGORITHMS[]; diff --git a/src/main.cpp b/src/main.cpp index 442fd1cdf..bdd6c59c0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -78,7 +78,7 @@ using namespace std; #define TMPFILE_START 100000000 CCriticalSection cs_main; extern uint8_t NOTARY_PUBKEY33[33]; -extern int32_t KOMODO_LOADINGBLOCKS,KOMODO_LONGESTCHAIN,HUSH_INSYNC,KOMODO_CONNECTING,KOMODO_EXTRASATOSHI; +extern int32_t KOMODO_LOADINGBLOCKS,HUSH_LONGESTCHAIN,HUSH_INSYNC,KOMODO_CONNECTING,KOMODO_EXTRASATOSHI; int32_t KOMODO_NEWBLOCKS; int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block); //void komodo_broadcast(CBlock *pblock,int32_t limit); @@ -4201,7 +4201,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * 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); - if ( KOMODO_LONGESTCHAIN != 0 && (pindexNew->GetHeight() == KOMODO_LONGESTCHAIN || pindexNew->GetHeight() == KOMODO_LONGESTCHAIN+1) ) + if ( HUSH_LONGESTCHAIN != 0 && (pindexNew->GetHeight() == HUSH_LONGESTCHAIN || pindexNew->GetHeight() == HUSH_LONGESTCHAIN+1) ) HUSH_INSYNC = (int32_t)pindexNew->GetHeight(); else HUSH_INSYNC = 0; //fprintf(stderr,"connect.%d insync.%d ASSETCHAINS_SAPLING.%d\n",(int32_t)pindexNew->GetHeight(),HUSH_INSYNC,ASSETCHAINS_SAPLING); diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 6f8a84c67..d7e51f7c0 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1651,7 +1651,7 @@ UniValue getblockchaininfo(const UniValue& params, bool fHelp, const CPubKey& my if ( SMART_CHAIN_SYMBOL[0] == 0 ) { progress = Checkpoints::GuessVerificationProgress(Params().Checkpoints(), chainActive.LastTip()); } else { - int32_t longestchain = KOMODO_LONGESTCHAIN;//komodo_longestchain(); + int32_t longestchain = HUSH_LONGESTCHAIN;//komodo_longestchain(); progress = (longestchain > 0 ) ? (double) chainActive.Height() / longestchain : 1.0; } notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); @@ -1659,7 +1659,7 @@ UniValue getblockchaininfo(const UniValue& params, bool fHelp, const CPubKey& my obj.push_back(Pair("chain", Params().NetworkIDString())); obj.push_back(Pair("blocks", (int)chainActive.Height())); obj.push_back(Pair("synced", HUSH_INSYNC!=0)); - obj.push_back(Pair("longestchain", KOMODO_LONGESTCHAIN)); + obj.push_back(Pair("longestchain", HUSH_LONGESTCHAIN)); obj.push_back(Pair("notarized", notarized_height)); obj.push_back(Pair("headers", pindexBestHeader ? pindexBestHeader->GetHeight() : -1)); obj.push_back(Pair("bestblockhash", chainActive.LastTip()->GetBlockHash().GetHex())); diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index a20500e35..1b280874e 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -61,7 +61,7 @@ bool komodo_txnotarizedconfirmed(uint256 txid); uint32_t komodo_chainactive_timestamp(); int32_t komodo_whoami(char *pubkeystr,int32_t height,uint32_t timestamp); extern uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE; -extern int32_t KOMODO_LASTMINED,JUMBLR_PAUSE,KOMODO_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; +extern int32_t KOMODO_LASTMINED,JUMBLR_PAUSE,HUSH_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; uint32_t komodo_segid32(char *coinaddr); int64_t komodo_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height); @@ -261,7 +261,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) #endif //fprintf(stderr,"after wallet %u\n",(uint32_t)time(NULL)); obj.push_back(Pair("blocks", (int)chainActive.Height())); - if ( (longestchain= KOMODO_LONGESTCHAIN) != 0 && chainActive.Height() > longestchain ) + if ( (longestchain= HUSH_LONGESTCHAIN) != 0 && chainActive.Height() > longestchain ) longestchain = chainActive.Height(); //fprintf(stderr,"after longestchain %u\n",(uint32_t)time(NULL)); obj.push_back(Pair("longestchain", longestchain)); diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 35b961d0f..211c20a62 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -177,7 +177,7 @@ UniValue getpeerinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) return ret; } -int32_t KOMODO_LONGESTCHAIN; +int32_t HUSH_LONGESTCHAIN; int32_t komodo_longestchain() { static int32_t depth; @@ -216,14 +216,14 @@ int32_t komodo_longestchain() depth--; if ( num > (n >> 1) ) { - if ( 0 && height != KOMODO_LONGESTCHAIN ) - fprintf(stderr,"set %s KOMODO_LONGESTCHAIN <- %d\n",SMART_CHAIN_SYMBOL,height); - KOMODO_LONGESTCHAIN = height; + if ( 0 && height != HUSH_LONGESTCHAIN ) + fprintf(stderr,"set %s HUSH_LONGESTCHAIN <- %d\n",SMART_CHAIN_SYMBOL,height); + HUSH_LONGESTCHAIN = height; return(height); } - KOMODO_LONGESTCHAIN = 0; + HUSH_LONGESTCHAIN = 0; } - return(KOMODO_LONGESTCHAIN); + return(HUSH_LONGESTCHAIN); } UniValue addnode(const UniValue& params, bool fHelp, const CPubKey& mypk) From aae0336733f25733d529ea47bc3ae76292b60e55 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 15:47:04 -0500 Subject: [PATCH 067/277] Playin' dat Long Game with dat Longest Chain --- src/bitcoind.cpp | 4 ++-- src/hush_defs.h | 2 +- src/hush_globals.h | 2 +- src/komodo_bitcoind.h | 4 ++-- src/komodo_gateway.h | 6 +++--- src/main.cpp | 10 +++++----- src/miner.cpp | 4 ++-- src/rpc/blockchain.cpp | 2 +- src/rpc/misc.cpp | 2 +- src/rpc/net.cpp | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index c21e551f3..1c28c8893 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -62,7 +62,7 @@ extern int32_t ASSETCHAINS_BLOCKTIME; extern uint64_t ASSETCHAINS_CBOPRET; void hush_passport_iteration(); uint64_t komodo_interestsum(); -int32_t komodo_longestchain(); +int32_t hush_longestchain(); void komodo_cbopretupdate(int32_t forceflag); CBlockIndex *komodo_chainactive(int32_t height); @@ -91,7 +91,7 @@ void WaitForShutdown(boost::thread_group* threadGroup) } } else { //komodo_interestsum(); - //komodo_longestchain(); + //hush_longestchain(); if ( ASSETCHAINS_CBOPRET != 0 ) komodo_cbopretupdate(0); for (i=0; i<=ASSETCHAINS_BLOCKTIME/5; i++) diff --git a/src/hush_defs.h b/src/hush_defs.h index 14d9c0f04..edcfc5cfa 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -546,7 +546,7 @@ int32_t komodo_minerids(uint8_t *minerids,int32_t height,int32_t width); int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[IGUANA_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen); uint32_t komodo_blocktime(uint256 hash); -int32_t komodo_longestchain(); +int32_t hush_longestchain(); int32_t hush_dpowconfs(int32_t height,int32_t numconfs); int8_t komodo_segid(int32_t nocache,int32_t height); int32_t komodo_heightpricebits(uint64_t *seedp,uint32_t *heightbits,int32_t nHeight); diff --git a/src/hush_globals.h b/src/hush_globals.h index 5960fb766..87bb50bcf 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -29,7 +29,7 @@ void komodo_init(int32_t height); int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); int32_t komodo_isrealtime(int32_t *kmdheightp); uint64_t komodo_paxtotal(); -int32_t komodo_longestchain(); +int32_t hush_longestchain(); uint64_t komodo_maxallowed(int32_t baseid); int32_t komodo_bannedset(int32_t *indallvoutsp,uint256 *array,int32_t max); int32_t komodo_checkvout(int32_t vout,int32_t k,int32_t indallvouts); diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 98589d5b0..0f01a0e09 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -1186,7 +1186,7 @@ int32_t komodo_nextheight() CBlockIndex *pindex; int32_t ht; if ( (pindex= chainActive.LastTip()) != 0 && (ht= pindex->GetHeight()) > 0 ) return(ht+1); - else return(komodo_longestchain() + 1); + else return(hush_longestchain() + 1); } int32_t komodo_isrealtime(int32_t *kmdheightp) @@ -1195,7 +1195,7 @@ int32_t komodo_isrealtime(int32_t *kmdheightp) if ( (sp= komodo_stateptrget((char *)"KMD")) != 0 ) *kmdheightp = sp->CURRENT_HEIGHT; else *kmdheightp = 0; - if ( (pindex= chainActive.LastTip()) != 0 && pindex->GetHeight() >= (int32_t)komodo_longestchain() ) + if ( (pindex= chainActive.LastTip()) != 0 && pindex->GetHeight() >= (int32_t)hush_longestchain() ) return(1); else return(0); } diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 69448d4c5..ca76afc60 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1438,7 +1438,7 @@ void hush_passport_iteration() { if ( SMART_CHAIN_SYMBOL[0] == 0 ) komodo_interestsum(); - //komodo_longestchain(); + //hush_longestchain(); lastinterest = komodo_chainactive_timestamp(); } refsp = komodo_stateptr(symbol,dest); @@ -1542,7 +1542,7 @@ void hush_passport_iteration() if ( (fp= fopen(fname,"wb")) != 0 ) { buf[0] = (uint32_t)chainActive.LastTip()->GetHeight(); - buf[1] = (uint32_t)komodo_longestchain(); + buf[1] = (uint32_t)hush_longestchain(); if ( buf[0] != 0 && buf[0] == buf[1] ) { buf[2] = (uint32_t)time(NULL); @@ -1559,7 +1559,7 @@ void hush_passport_iteration() if ( sp != 0 && isrealtime == 0 ) refsp->RTbufs[0][2] = 0; } - //komodo_paxtotal(); // calls komodo_isrealtime(), which calls komodo_longestchain() + //komodo_paxtotal(); // calls komodo_isrealtime(), which calls hush_longestchain() refsp->RTmask |= RTmask; if ( expired == 0 && HUSH_PASSPORT_INITDONE == 0 ) { diff --git a/src/main.cpp b/src/main.cpp index bdd6c59c0..5256e7124 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3941,7 +3941,7 @@ void static UpdateTip(CBlockIndex *pindexNew) { if ( SMART_CHAIN_SYMBOL[0] == 0 ) { progress = Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.LastTip()); } else { - int32_t longestchain = komodo_longestchain(); + int32_t longestchain = hush_longestchain(); progress = (longestchain > 0 ) ? (double) chainActive.Height() / longestchain : 1.0; } @@ -5611,7 +5611,7 @@ bool AcceptBlock(int32_t *futureblockp,CBlock& block, CValidationState& state, C { CValidationState tmpstate; CBlockIndex *tmpindex; int32_t ht,longest; ht = (int32_t)pindex->GetHeight(); - longest = komodo_longestchain(); + longest = hush_longestchain(); if ( (longest == 0 || ht < longest-6) && (tmpindex=komodo_chainactive(ht)) != 0 ) { fprintf(stderr,"reconsider height.%d, longest.%d\n",(int32_t)ht,longest); @@ -5824,7 +5824,7 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo //fprintf(stderr,"request headers from failed process block peer\n"); pfrom->PushMessage("getheaders", chainActive.GetLocator(chainActive.LastTip()), uint256()); }*/ - komodo_longestchain(); + hush_longestchain(); return error("%s: AcceptBlock FAILED", __func__); } //else fprintf(stderr,"added block %s %p\n",pindex->GetBlockHash().ToString().c_str(),pindex->pprev); @@ -6309,8 +6309,8 @@ bool static LoadBlockIndexDB() if ( SMART_CHAIN_SYMBOL[0] == 0 ) { progress = Checkpoints::GuessVerificationProgress(chainparams.Checkpoints(), chainActive.LastTip()); } else { - int32_t longestchain = komodo_longestchain(); - // TODO: komodo_longestchain does not have the data it needs at the time LoadBlockIndexDB + int32_t longestchain = hush_longestchain(); + // TODO: hush_longestchain does not have the data it needs at the time LoadBlockIndexDB // runs, which makes it return 0, so we guess 50% for now progress = (longestchain > 0 ) ? (double) chainActive.Height() / longestchain : 0.5; } diff --git a/src/miner.cpp b/src/miner.cpp index cfbb49b75..f5b224833 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -144,7 +144,7 @@ int32_t My_notaryid = -1; int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); int32_t komodo_pax_opreturn(int32_t height,uint8_t *opret,int32_t maxsize); int32_t komodo_baseid(char *origbase); -int32_t komodo_longestchain(); +int32_t hush_longestchain(); int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t nTime,int32_t dispflag); int64_t komodo_block_unlocktime(uint32_t nHeight); uint64_t komodo_commission(const CBlock *block,int32_t height); @@ -1313,7 +1313,7 @@ void static BitcoinMiner() //fprintf(stderr,"gotinvalid.%d\n",gotinvalid); if ( gotinvalid != 0 ) break; - komodo_longestchain(); + hush_longestchain(); // Hash state KOMODO_CHOSEN_ONE = 0; diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index d7e51f7c0..42b6b6301 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1651,7 +1651,7 @@ UniValue getblockchaininfo(const UniValue& params, bool fHelp, const CPubKey& my if ( SMART_CHAIN_SYMBOL[0] == 0 ) { progress = Checkpoints::GuessVerificationProgress(Params().Checkpoints(), chainActive.LastTip()); } else { - int32_t longestchain = HUSH_LONGESTCHAIN;//komodo_longestchain(); + int32_t longestchain = HUSH_LONGESTCHAIN;//hush_longestchain(); progress = (longestchain > 0 ) ? (double) chainActive.Height() / longestchain : 1.0; } notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 1b280874e..72e4490c9 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -55,7 +55,7 @@ using namespace std; **/ uint64_t komodo_interestsum(); -int32_t komodo_longestchain(); +int32_t hush_longestchain(); int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); bool komodo_txnotarizedconfirmed(uint256 txid); uint32_t komodo_chainactive_timestamp(); diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 211c20a62..9834fde31 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -178,7 +178,7 @@ UniValue getpeerinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) } int32_t HUSH_LONGESTCHAIN; -int32_t komodo_longestchain() +int32_t hush_longestchain() { static int32_t depth; int32_t ht,n=0,num=0,maxheight=0,height = 0; @@ -194,7 +194,7 @@ int32_t komodo_longestchain() } BOOST_FOREACH(const CNodeStats& stats, vstats) { - //fprintf(stderr,"komodo_longestchain iter.%d\n",n); + //fprintf(stderr,"hush_longestchain iter.%d\n",n); CNodeStateStats statestats; bool fStateStats = GetNodeStateStats(stats.nodeid,statestats); if ( statestats.nSyncHeight < 0 ) From 9262fcc53c4ed07fd95b46ed99c41b33d3574ad8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 15:53:36 -0500 Subject: [PATCH 068/277] update copyright --- src/script/standard.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/script/standard.h b/src/script/standard.h index d9c462630..971230f27 100644 --- a/src/script/standard.h +++ b/src/script/standard.h @@ -1,8 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers +// Copyright (c) 2019-2020 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. * * * @@ -17,15 +17,11 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_SCRIPT_STANDARD_H #define HUSH_SCRIPT_STANDARD_H - #include "script/interpreter.h" #include "uint256.h" - #include - #include class CKeyID; From 6533b7740e9f9456bf8fc0f73bc4c18281177948 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 15:53:47 -0500 Subject: [PATCH 069/277] update validateaddress help --- src/rpc/misc.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 72e4490c9..d0c5e0bdf 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -468,14 +468,14 @@ UniValue validateaddress(const UniValue& params, bool fHelp, const CPubKey& mypk { if (fHelp || params.size() != 1) throw runtime_error( - "validateaddress \"hushaddress\"\n" - "\nReturn information about the given Hush address.\n" + "validateaddress \"addr\"\n" + "\nReturn information about the given Hush or Hush Smart Chain (HSC) address.\n" "\nArguments:\n" - "1. \"hushaddress\" (string, required) The Hush address to validate\n" + "1. \"addr\" (string, required) The address to validate\n" "\nResult:\n" "{\n" " \"isvalid\" : true|false, (boolean) If the address is valid or not. If not, this is the only property returned.\n" - " \"address\" : \"hushaddress\", (string) The Hush address validated\n" + " \"address\" : \"addr\", (string) The Hush or HSC address validated\n" " \"scriptPubKey\" : \"hex\", (string) The hex encoded scriptPubKey generated by the address\n" " \"ismine\" : true|false, (boolean) If the address is yours or not\n" " \"isscript\" : true|false, (boolean) If the key is a script\n" @@ -484,8 +484,8 @@ UniValue validateaddress(const UniValue& params, bool fHelp, const CPubKey& mypk " \"account\" : \"account\" (string) DEPRECATED. The account associated with the address, \"\" is the default account\n" "}\n" "\nExamples:\n" - + HelpExampleCli("validateaddress", "\"RTZMZHDFSTFQst8XmX2dR4DaH87cEUs3gC\"") - + HelpExampleRpc("validateaddress", "\"RTZMZHDFSTFQst8XmX2dR4DaH87cEUs3gC\"") + + HelpExampleCli("validateaddress", "\"RTZMZHDFSTFQst8XmX2dR4DaH87cEUlulz\"") + + HelpExampleRpc("validateaddress", "\"RTZMZHDFSTFQst8XmX2dR4DaH87cEUlulz\"") ); #ifdef ENABLE_WALLET @@ -495,7 +495,7 @@ UniValue validateaddress(const UniValue& params, bool fHelp, const CPubKey& mypk #endif CTxDestination dest = DecodeDestination(params[0].get_str()); - bool isValid = IsValidDestination(dest); + bool isValid = IsValidDestination(dest); UniValue ret(UniValue::VOBJ); ret.push_back(Pair("isvalid", isValid)); From 54d3293db566910dd2ad718c7ddea661df964c5f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 17:04:20 -0500 Subject: [PATCH 070/277] I Got The (Pub)Keys - https://www.youtube.com/watch?v=WjBQ7v6i4O4 --- src/cc/crypto777/OS_portable.h | 1 + src/hush.h | 12 +- src/hush_defs.h | 645 +++++++++++++++++---------------- src/hush_notary.h | 2 +- src/hush_utils.h | 24 +- src/komodo_bitcoind.h | 8 +- src/komodo_cJSON.h | 2 +- src/main.cpp | 2 +- src/script/standard.cpp | 5 +- src/wallet/rpcwallet.cpp | 13 +- 10 files changed, 354 insertions(+), 360 deletions(-) diff --git a/src/cc/crypto777/OS_portable.h b/src/cc/crypto777/OS_portable.h index 9599ebcfe..9f9ef4298 100755 --- a/src/cc/crypto777/OS_portable.h +++ b/src/cc/crypto777/OS_portable.h @@ -1,3 +1,4 @@ +// Copyright (c) 2019-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/hush.h b/src/hush.h index 1b3107eda..ec5e367a1 100644 --- a/src/hush.h +++ b/src/hush.h @@ -541,7 +541,7 @@ int32_t komodo_validate_chain(uint256 srchash,int32_t notarized_height) int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value,int32_t notarized,uint64_t signedmask,uint32_t timestamp) { static uint256 zero; static FILE *signedfp; - int32_t opretlen,nid,offset,k,MoMdepth,matched,len = 0; uint256 MoM,srchash,desttxid; uint8_t crypto777[33]; struct komodo_state *sp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; + int32_t opretlen,nid,offset,k,MoMdepth,matched,len = 0; uint256 MoM,srchash,desttxid; uint8_t crypto555[33]; struct komodo_state *sp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) return(-1); if ( scriptlen == 35 && scriptbuf[0] == 33 && scriptbuf[34] == 0xac ) @@ -552,14 +552,14 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar prevKOMODO_LASTMINED = KOMODO_LASTMINED; KOMODO_LASTMINED = height; } - decode_hex(crypto777,33,(char *)CRYPTO777_PUBSECPSTR); + decode_hex(crypto555,33,(char *)CRYPTO555_PUBSECPSTR); /*for (k=0; k<33; k++) - printf("%02x",crypto777[k]); - printf(" crypto777 "); + printf("%02x",crypto555[k]); + printf(" crypto555 "); for (k=0; k>>>>>>> "); diff --git a/src/hush_defs.h b/src/hush_defs.h index edcfc5cfa..9271d0066 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -28,7 +28,9 @@ #define KOMODO_LIMITED_NETWORKSIZE 4 #define IGUANA_MAXSCRIPTSIZE 10001 #define KOMODO_MAXMEMPOOLTIME 3600 // affects consensus -#define CRYPTO777_PUBSECPSTR "020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9" +#define CRYPTO555_PUBSECPSTR "020e46e79a2a8d12b9b5d12c69d1adb4e454edfae43c0a0cb805427d2acbadcaca" +#define CRYPTO555_HUSHADDR "RHushEyeDm7XwtaTWtyCbjGQumYyV8vMjn" +#define CRYPTO555_RMD160STR "deadbeef2fce875748c4986b240ff7d7bc3fffb0" #define HUSH_FIRSTFUNGIBLEID 100 #define KOMODO_SAPLING_ACTIVATION 1544832000 // Dec 15th, 2018 #define KOMODO_SAPLING_DEADLINE 1550188800 // Feb 15th, 2019 @@ -64,343 +66,344 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = { { // season 1 - { "fuck_jl777_testA", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, - { "fuck_jl777_testB", "02ebfc784a4ba768aad88d44d1045d240d47b26e248cafaf1c5169a42d7a61d344" }, - { "fuck_kolo_testA", "0287aa4b73988ba26cf6565d815786caf0d2c4af704d7883d163ee89cd9977edec" }, - { "artik_AR", "029acf1dcd9f5ff9c455f8bb717d4ae0c703e089d16cf8424619c491dff5994c90" }, - { "artik_EU", "03f54b2c24f82632e3cdebe4568ba0acf487a80f8a89779173cdb78f74514847ce" }, - { "artik_NA", "0224e31f93eff0cc30eaf0b2389fbc591085c0e122c4d11862c1729d090106c842" }, - { "artik_SH", "02bdd8840a34486f38305f311c0e2ae73e84046f6e9c3dd3571e32e58339d20937" }, - { "badass_EU", "0209d48554768dd8dada988b98aca23405057ac4b5b46838a9378b95c3e79b9b9e" }, - { "badass_NA", "02afa1a9f948e1634a29dc718d218e9d150c531cfa852843a1643a02184a63c1a7" }, - { "badass_SH", "026b49dd3923b78a592c1b475f208e23698d3f085c4c3b4906a59faf659fd9530b" }, - { "crackers_EU", "03bc819982d3c6feb801ec3b720425b017d9b6ee9a40746b84422cbbf929dc73c3" }, // 10 - { "crackers_NA", "03205049103113d48c7c7af811b4c8f194dafc43a50d5313e61a22900fc1805b45" }, - { "crackers_SH", "02be28310e6312d1dd44651fd96f6a44ccc269a321f907502aae81d246fabdb03e" }, - { "durerus_EU", "02bcbd287670bdca2c31e5d50130adb5dea1b53198f18abeec7211825f47485d57" }, - { "etszombi_AR", "031c79168d15edabf17d9ec99531ea9baa20039d0cdc14d9525863b83341b210e9" }, - { "etszombi_EU", "0281b1ad28d238a2b217e0af123ce020b79e91b9b10ad65a7917216eda6fe64bf7" }, // 15 - { "etszombi_SH", "025d7a193c0757f7437fad3431f027e7b5ed6c925b77daba52a8755d24bf682dde" }, - { "farl4web_EU", "0300ecf9121cccf14cf9423e2adb5d98ce0c4e251721fa345dec2e03abeffbab3f" }, - { "farl4web_SH", "0396bb5ed3c57aa1221d7775ae0ff751e4c7dc9be220d0917fa8bbdf670586c030" }, - { "fullmoon_AR", "0254b1d64840ce9ff6bec9dd10e33beb92af5f7cee628f999cb6bc0fea833347cc" }, - { "fullmoon_NA", "031fb362323b06e165231c887836a8faadb96eda88a79ca434e28b3520b47d235b" }, // 20 - { "fullmoon_SH", "030e12b42ec33a80e12e570b6c8274ce664565b5c3da106859e96a7208b93afd0d" }, - { "grewal_NA", "03adc0834c203d172bce814df7c7a5e13dc603105e6b0adabc942d0421aefd2132" }, - { "grewal_SH", "03212a73f5d38a675ee3cdc6e82542a96c38c3d1c79d25a1ed2e42fcf6a8be4e68" }, - { "indenodes_AR", "02ec0fa5a40f47fd4a38ea5c89e375ad0b6ddf4807c99733c9c3dc15fb978ee147" }, - { "indenodes_EU", "0221387ff95c44cb52b86552e3ec118a3c311ca65b75bf807c6c07eaeb1be8303c" }, - { "indenodes_NA", "02698c6f1c9e43b66e82dbb163e8df0e5a2f62f3a7a882ca387d82f86e0b3fa988" }, - { "indenodes_SH", "0334e6e1ec8285c4b85bd6dae67e17d67d1f20e7328efad17ce6fd24ae97cdd65e" }, - { "jeezy_EU", "023cb3e593fb85c5659688528e9a4f1c4c7f19206edc7e517d20f794ba686fd6d6" }, - { "jsgalt_NA", "027b3fb6fede798cd17c30dbfb7baf9332b3f8b1c7c513f443070874c410232446" }, - { "karasugoi_NA", "02a348b03b9c1a8eac1b56f85c402b041c9bce918833f2ea16d13452309052a982" }, // 30 - { "kashifali_EU", "033777c52a0190f261c6f66bd0e2bb299d30f012dcb8bfff384103211edb8bb207" }, - { "kolo_AR", "03016d19344c45341e023b72f9fb6e6152fdcfe105f3b4f50b82a4790ff54e9dc6" }, - { "kolo_SH", "02aa24064500756d9b0959b44d5325f2391d8e95c6127e109184937152c384e185" }, - { "metaphilibert_AR", "02adad675fae12b25fdd0f57250b0caf7f795c43f346153a31fe3e72e7db1d6ac6" }, - { "movecrypto_AR", "022783d94518e4dc77cbdf1a97915b29f427d7bc15ea867900a76665d3112be6f3" }, - { "movecrypto_EU", "021ab53bc6cf2c46b8a5456759f9d608966eff87384c2b52c0ac4cc8dd51e9cc42" }, - { "movecrypto_NA", "02efb12f4d78f44b0542d1c60146738e4d5506d27ec98a469142c5c84b29de0a80" }, - { "movecrypto_SH", "031f9739a3ebd6037a967ce1582cde66e79ea9a0551c54731c59c6b80f635bc859" }, - { "muros_AR", "022d77402fd7179335da39479c829be73428b0ef33fb360a4de6890f37c2aa005e" }, - { "noashh_AR", "029d93ef78197dc93892d2a30e5a54865f41e0ca3ab7eb8e3dcbc59c8756b6e355" }, // 40 - { "noashh_EU", "02061c6278b91fd4ac5cab4401100ffa3b2d5a277e8f71db23401cc071b3665546" }, - { "noashh_NA", "033c073366152b6b01535e15dd966a3a8039169584d06e27d92a69889b720d44e1" }, - { "nxtswe_EU", "032fb104e5eaa704a38a52c126af8f67e870d70f82977e5b2f093d5c1c21ae5899" }, - { "polycryptoblog_NA", "02708dcda7c45fb54b78469673c2587bfdd126e381654819c4c23df0e00b679622" }, - { "pondsea_AR", "032e1c213787312099158f2d74a89e8240a991d162d4ce8017d8504d1d7004f735" }, - { "pondsea_EU", "0225aa6f6f19e543180b31153d9e6d55d41bc7ec2ba191fd29f19a2f973544e29d" }, - { "pondsea_NA", "031bcfdbb62268e2ff8dfffeb9ddff7fe95fca46778c77eebff9c3829dfa1bb411" }, - { "pondsea_SH", "02209073bc0943451498de57f802650311b1f12aa6deffcd893da198a544c04f36" }, - { "popcornbag_AR", "02761f106fb34fbfc5ddcc0c0aa831ed98e462a908550b280a1f7bd32c060c6fa3" }, - { "popcornbag_NA", "03c6085c7fdfff70988fda9b197371f1caf8397f1729a844790e421ee07b3a93e8" }, // 50 - { "ptytrader_NA", "0328c61467148b207400b23875234f8a825cce65b9c4c9b664f47410b8b8e3c222" }, - { "ptytrader_SH", "0250c93c492d8d5a6b565b90c22bee07c2d8701d6118c6267e99a4efd3c7748fa4" }, - { "rnr_AR", "029bdb08f931c0e98c2c4ba4ef45c8e33a34168cb2e6bf953cef335c359d77bfcd" }, - { "rnr_EU", "03f5c08dadffa0ffcafb8dd7ffc38c22887bd02702a6c9ac3440deddcf2837692b" }, - { "rnr_NA", "02e17c5f8c3c80f584ed343b8dcfa6d710dfef0889ec1e7728ce45ce559347c58c" }, - { "rnr_SH", "037536fb9bdfed10251f71543fb42679e7c52308bcd12146b2568b9a818d8b8377" }, - { "titomane_AR", "03cda6ca5c2d02db201488a54a548dbfc10533bdc275d5ea11928e8d6ab33c2185" }, - { "titomane_EU", "02e41feded94f0cc59f55f82f3c2c005d41da024e9a805b41105207ef89aa4bfbd" }, - { "titomane_SH", "035f49d7a308dd9a209e894321f010d21b7793461b0c89d6d9231a3fe5f68d9960" }, - { "vanbreuk_EU", "024f3cad7601d2399c131fd070e797d9cd8533868685ddbe515daa53c2e26004c3" }, // 60 - { "xrobesx_NA", "03f0cc6d142d14a40937f12dbd99dbd9021328f45759e26f1877f2a838876709e1" }, - { "xxspot1_XX", "02ef445a392fcaf3ad4176a5da7f43580e8056594e003eba6559a713711a27f955" }, - { "xxspot2_XX", "03d85b221ea72ebcd25373e7961f4983d12add66a92f899deaf07bab1d8b6f5573" } + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, }, { // season 2 - {"fuck_dev1_jl777", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, - {"fuck_dev2_kolo", "030f34af4b908fb8eb2099accb56b8d157d49f6cfb691baa80fdd34f385efed961" }, - {"fuck_dev3_kolo", "025af9d2b2a05338478159e9ac84543968fd18c45fd9307866b56f33898653b014" }, - {"fuck_dev4_decker", "028eea44a09674dda00d88ffd199a09c9b75ba9782382cc8f1e97c0fd565fe5707" }, - {"a-team_SH", "03b59ad322b17cb94080dc8e6dc10a0a865de6d47c16fb5b1a0b5f77f9507f3cce" }, - {"artik_AR", "029acf1dcd9f5ff9c455f8bb717d4ae0c703e089d16cf8424619c491dff5994c90" }, - {"artik_EU", "03f54b2c24f82632e3cdebe4568ba0acf487a80f8a89779173cdb78f74514847ce" }, - {"artik_NA", "0224e31f93eff0cc30eaf0b2389fbc591085c0e122c4d11862c1729d090106c842" }, - {"artik_SH", "02bdd8840a34486f38305f311c0e2ae73e84046f6e9c3dd3571e32e58339d20937" }, - {"badass_EU", "0209d48554768dd8dada988b98aca23405057ac4b5b46838a9378b95c3e79b9b9e" }, - {"badass_NA", "02afa1a9f948e1634a29dc718d218e9d150c531cfa852843a1643a02184a63c1a7" }, // 10 - {"batman_AR", "033ecb640ec5852f42be24c3bf33ca123fb32ced134bed6aa2ba249cf31b0f2563" }, - {"batman_SH", "02ca5898931181d0b8aafc75ef56fce9c43656c0b6c9f64306e7c8542f6207018c" }, - {"ca333_EU", "03fc87b8c804f12a6bd18efd43b0ba2828e4e38834f6b44c0bfee19f966a12ba99" }, - {"chainmakers_EU", "02f3b08938a7f8d2609d567aebc4989eeded6e2e880c058fdf092c5da82c3bc5ee" }, - {"chainmakers_NA", "0276c6d1c65abc64c8559710b8aff4b9e33787072d3dda4ec9a47b30da0725f57a" }, - {"chainstrike_SH", "0370bcf10575d8fb0291afad7bf3a76929734f888228bc49e35c5c49b336002153" }, - {"cipi_AR", "02c4f89a5b382750836cb787880d30e23502265054e1c327a5bfce67116d757ce8" }, - {"cipi_NA", "02858904a2a1a0b44df4c937b65ee1f5b66186ab87a751858cf270dee1d5031f18" }, - {"crackers_EU", "03bc819982d3c6feb801ec3b720425b017d9b6ee9a40746b84422cbbf929dc73c3" }, - {"crackers_NA", "03205049103113d48c7c7af811b4c8f194dafc43a50d5313e61a22900fc1805b45" }, // 20 - {"dwy_EU", "0259c646288580221fdf0e92dbeecaee214504fdc8bbdf4a3019d6ec18b7540424" }, - {"emmanux_SH", "033f316114d950497fc1d9348f03770cd420f14f662ab2db6172df44c389a2667a" }, - {"etszombi_EU", "0281b1ad28d238a2b217e0af123ce020b79e91b9b10ad65a7917216eda6fe64bf7" }, - {"fullmoon_AR", "03380314c4f42fa854df8c471618751879f9e8f0ff5dbabda2bd77d0f96cb35676" }, - {"fullmoon_NA", "030216211d8e2a48bae9e5d7eb3a42ca2b7aae8770979a791f883869aea2fa6eef" }, - {"fullmoon_SH", "03f34282fa57ecc7aba8afaf66c30099b5601e98dcbfd0d8a58c86c20d8b692c64" }, - {"goldenman_EU", "02d6f13a8f745921cdb811e32237bb98950af1a5952be7b3d429abd9152f8e388d" }, - {"indenodes_AR", "02ec0fa5a40f47fd4a38ea5c89e375ad0b6ddf4807c99733c9c3dc15fb978ee147" }, - {"indenodes_EU", "0221387ff95c44cb52b86552e3ec118a3c311ca65b75bf807c6c07eaeb1be8303c" }, - {"indenodes_NA", "02698c6f1c9e43b66e82dbb163e8df0e5a2f62f3a7a882ca387d82f86e0b3fa988" }, // 30 - {"indenodes_SH", "0334e6e1ec8285c4b85bd6dae67e17d67d1f20e7328efad17ce6fd24ae97cdd65e" }, - {"jackson_AR", "038ff7cfe34cb13b524e0941d5cf710beca2ffb7e05ddf15ced7d4f14fbb0a6f69" }, - {"jeezy_EU", "023cb3e593fb85c5659688528e9a4f1c4c7f19206edc7e517d20f794ba686fd6d6" }, - {"karasugoi_NA", "02a348b03b9c1a8eac1b56f85c402b041c9bce918833f2ea16d13452309052a982" }, - {"komodoninja_EU", "038e567b99806b200b267b27bbca2abf6a3e8576406df5f872e3b38d30843cd5ba" }, - {"komodoninja_SH", "033178586896915e8456ebf407b1915351a617f46984001790f0cce3d6f3ada5c2" }, - {"komodopioneers_SH", "033ace50aedf8df70035b962a805431363a61cc4e69d99d90726a2d48fb195f68c" }, - {"libscott_SH", "03301a8248d41bc5dc926088a8cf31b65e2daf49eed7eb26af4fb03aae19682b95" }, - {"lukechilds_AR", "031aa66313ee024bbee8c17915cf7d105656d0ace5b4a43a3ab5eae1e14ec02696" }, - {"madmax_AR", "03891555b4a4393d655bf76f0ad0fb74e5159a615b6925907678edc2aac5e06a75" }, // 40 - {"meshbits_AR", "02957fd48ae6cb361b8a28cdb1b8ccf5067ff68eb1f90cba7df5f7934ed8eb4b2c" }, - {"meshbits_SH", "025c6e94877515dfd7b05682b9cc2fe4a49e076efe291e54fcec3add78183c1edb" }, - {"metaphilibert_AR", "02adad675fae12b25fdd0f57250b0caf7f795c43f346153a31fe3e72e7db1d6ac6" }, - {"metaphilibert_SH", "0284af1a5ef01503e6316a2ca4abf8423a794e9fc17ac6846f042b6f4adedc3309" }, - {"patchkez_SH", "0296270f394140640f8fa15684fc11255371abb6b9f253416ea2734e34607799c4" }, - {"pbca26_NA", "0276aca53a058556c485bbb60bdc54b600efe402a8b97f0341a7c04803ce204cb5" }, - {"peer2cloud_AR", "034e5563cb885999ae1530bd66fab728e580016629e8377579493b386bf6cebb15" }, - {"peer2cloud_SH", "03396ac453b3f23e20f30d4793c5b8ab6ded6993242df4f09fd91eb9a4f8aede84" }, - {"polycryptoblog_NA", "02708dcda7c45fb54b78469673c2587bfdd126e381654819c4c23df0e00b679622" }, - {"hyper_AR", "020f2f984d522051bd5247b61b080b4374a7ab389d959408313e8062acad3266b4" }, // 50 - {"hyper_EU", "03d00cf9ceace209c59fb013e112a786ad583d7de5ca45b1e0df3b4023bb14bf51" }, - {"hyper_SH", "0383d0b37f59f4ee5e3e98a47e461c861d49d0d90c80e9e16f7e63686a2dc071f3" }, - {"hyper_NA", "03d91c43230336c0d4b769c9c940145a8c53168bf62e34d1bccd7f6cfc7e5592de" }, - {"popcornbag_AR", "02761f106fb34fbfc5ddcc0c0aa831ed98e462a908550b280a1f7bd32c060c6fa3" }, - {"popcornbag_NA", "03c6085c7fdfff70988fda9b197371f1caf8397f1729a844790e421ee07b3a93e8" }, - {"alien_AR", "0348d9b1fc6acf81290405580f525ee49b4749ed4637b51a28b18caa26543b20f0" }, - {"alien_EU", "020aab8308d4df375a846a9e3b1c7e99597b90497efa021d50bcf1bbba23246527" }, - {"thegaltmines_NA", "031bea28bec98b6380958a493a703ddc3353d7b05eb452109a773eefd15a32e421" }, - {"titomane_AR", "029d19215440d8cb9cc6c6b7a4744ae7fb9fb18d986e371b06aeb34b64845f9325" }, - {"titomane_EU", "0360b4805d885ff596f94312eed3e4e17cb56aa8077c6dd78d905f8de89da9499f" }, // 60 - {"titomane_SH", "03573713c5b20c1e682a2e8c0f8437625b3530f278e705af9b6614de29277a435b" }, - {"webworker01_NA", "03bb7d005e052779b1586f071834c5facbb83470094cff5112f0072b64989f97d7" }, - {"xrobesx_NA", "03f0cc6d142d14a40937f12dbd99dbd9021328f45759e26f1877f2a838876709e1" }, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, }, { // season 3 - {"madmax_NA", "0237e0d3268cebfa235958808db1efc20cc43b31100813b1f3e15cc5aa647ad2c3" }, // 0 - {"alright_AR", "020566fe2fb3874258b2d3cf1809a5d650e0edc7ba746fa5eec72750c5188c9cc9" }, - {"strob_NA", "0206f7a2e972d9dfef1c424c731503a0a27de1ba7a15a91a362dc7ec0d0fb47685" }, - {"dwy_EU", "021c7cf1f10c4dc39d13451123707ab780a741feedab6ac449766affe37515a29e" }, - {"phm87_SH", "021773a38db1bc3ede7f28142f901a161c7b7737875edbb40082a201c55dcf0add" }, - {"chainmakers_NA", "02285d813c30c0bf7eefdab1ff0a8ad08a07a0d26d8b95b3943ce814ac8e24d885" }, - {"indenodes_EU", "0221387ff95c44cb52b86552e3ec118a3c311ca65b75bf807c6c07eaeb1be8303c" }, - {"blackjok3r_SH", "021eac26dbad256cbb6f74d41b10763183ee07fb609dbd03480dd50634170547cc" }, - {"chainmakers_EU", "03fdf5a3fce8db7dee89724e706059c32e5aa3f233a6b6cc256fea337f05e3dbf7" }, - {"titomane_AR", "023e3aa9834c46971ff3e7cb86a200ec9c8074a9566a3ea85d400d5739662ee989" }, - {"fullmoon_SH", "023b7252968ea8a955cd63b9e57dee45a74f2d7ba23b4e0595572138ad1fb42d21" }, // 10 - {"indenodes_NA", "02698c6f1c9e43b66e82dbb163e8df0e5a2f62f3a7a882ca387d82f86e0b3fa988" }, - {"chmex_EU", "0281304ebbcc39e4f09fda85f4232dd8dacd668e20e5fc11fba6b985186c90086e" }, - {"metaphilibert_SH", "0284af1a5ef01503e6316a2ca4abf8423a794e9fc17ac6846f042b6f4adedc3309" }, - {"ca333_DEV", "02856843af2d9457b5b1c907068bef6077ea0904cc8bd4df1ced013f64bf267958" }, - {"cipi_NA", "02858904a2a1a0b44df4c937b65ee1f5b66186ab87a751858cf270dee1d5031f18" }, - {"pungocloud_SH", "024dfc76fa1f19b892be9d06e985d0c411e60dbbeb36bd100af9892a39555018f6" }, - {"voskcoin_EU", "034190b1c062a04124ad15b0fa56dfdf34aa06c164c7163b6aec0d654e5f118afb" }, - {"decker_DEV", "028eea44a09674dda00d88ffd199a09c9b75ba9782382cc8f1e97c0fd565fe5707" }, - {"cryptoeconomy_EU", "0290ab4937e85246e048552df3e9a66cba2c1602db76e03763e16c671e750145d1" }, - {"etszombi_EU", "0293ea48d8841af7a419a24d9da11c34b39127ef041f847651bae6ab14dcd1f6b4" }, // 20 - {"karasugoi_NA", "02a348b03b9c1a8eac1b56f85c402b041c9bce918833f2ea16d13452309052a982" }, - {"pirate_AR", "03e29c90354815a750db8ea9cb3c1b9550911bb205f83d0355a061ac47c4cf2fde" }, - {"metaphilibert_AR", "02adad675fae12b25fdd0f57250b0caf7f795c43f346153a31fe3e72e7db1d6ac6" }, - {"zatjum_SH", "02d6b0c89cacd58a0af038139a9a90c9e02cd1e33803a1f15fceabea1f7e9c263a" }, - {"madmax_AR", "03c5941fe49d673c094bc8e9bb1a95766b4670c88be76d576e915daf2c30a454d3" }, - {"lukechilds_NA", "03f1051e62c2d280212481c62fe52aab0a5b23c95de5b8e9ad5f80d8af4277a64b" }, - {"cipi_AR", "02c4f89a5b382750836cb787880d30e23502265054e1c327a5bfce67116d757ce8" }, - {"tonyl_AR", "02cc8bc862f2b65ad4f99d5f68d3011c138bf517acdc8d4261166b0be8f64189e1" }, - {"infotech_DEV", "0345ad4ab5254782479f6322c369cec77a7535d2f2162d103d666917d5e4f30c4c" }, - {"fullmoon_NA", "032c716701fe3a6a3f90a97b9d874a9d6eedb066419209eed7060b0cc6b710c60b" }, // 30 - {"etszombi_AR", "02e55e104aa94f70cde68165d7df3e162d4410c76afd4643b161dea044aa6d06ce" }, - {"node-9_EU", "0372e5b51e86e2392bb15039bac0c8f975b852b45028a5e43b324c294e9f12e411" }, - {"phba2061_EU", "03f6bd15dba7e986f0c976ea19d8a9093cb7c989d499f1708a0386c5c5659e6c4e" }, - {"indenodes_AR", "02ec0fa5a40f47fd4a38ea5c89e375ad0b6ddf4807c99733c9c3dc15fb978ee147" }, - {"and1-89_EU", "02736cbf8d7b50835afd50a319f162dd4beffe65f2b1dc6b90e64b32c8e7849ddd" }, - {"komodopioneers_SH", "032a238a5747777da7e819cfa3c859f3677a2daf14e4dce50916fc65d00ad9c52a" }, - {"komodopioneers_EU", "036d02425916444fff8cc7203fcbfc155c956dda5ceb647505836bef59885b6866" }, - {"d0ct0r_NA", "0303725d8525b6f969122faf04152653eb4bf34e10de92182263321769c334bf58" }, - {"kolo_DEV", "02849e12199dcc27ba09c3902686d2ad0adcbfcee9d67520e9abbdda045ba83227" }, - {"peer2cloud_AR", "02acc001fe1fe8fd68685ba26c0bc245924cb592e10cec71e9917df98b0e9d7c37" }, // 40 - {"webworker01_SH", "031e50ba6de3c16f99d414bb89866e578d963a54bde7916c810608966fb5700776" }, - {"webworker01_NA", "032735e9cad1bb00eaababfa6d27864fa4c1db0300c85e01e52176be2ca6a243ce" }, - {"pbca26_NA", "03a97606153d52338bcffd1bf19bb69ef8ce5a7cbdc2dbc3ff4f89d91ea6bbb4dc" }, - {"indenodes_SH", "0334e6e1ec8285c4b85bd6dae67e17d67d1f20e7328efad17ce6fd24ae97cdd65e" }, - {"pirate_NA", "0255e32d8a56671dee8aa7f717debb00efa7f0086ee802de0692f2d67ee3ee06ee" }, - {"lukechilds_AR", "025c6a73ff6d750b9ddf6755b390948cffdd00f344a639472d398dd5c6b4735d23" }, - {"dragonhound_NA", "0224a9d951d3a06d8e941cc7362b788bb1237bb0d56cc313e797eb027f37c2d375" }, - {"fullmoon_AR", "03da64dd7cd0db4c123c2f79d548a96095a5a103e5b9d956e9832865818ffa7872" }, - {"chainzilla_SH", "0360804b8817fd25ded6e9c0b50e3b0782ac666545b5416644198e18bc3903d9f9" }, - {"titomane_EU", "03772ac0aad6b0e9feec5e591bff5de6775d6132e888633e73d3ba896bdd8e0afb" }, // 50 - {"jeezy_EU", "037f182facbad35684a6e960699f5da4ba89e99f0d0d62a87e8400dd086c8e5dd7" }, - {"titomane_SH", "03850fdddf2413b51790daf51dd30823addb37313c8854b508ea6228205047ef9b" }, - {"alien_AR", "03911a60395801082194b6834244fa78a3c30ff3e888667498e157b4aa80b0a65f" }, - {"pirate_EU", "03fff24efd5648870a23badf46e26510e96d9e79ce281b27cfe963993039dd1351" }, - {"thegaltmines_NA", "02db1a16c7043f45d6033ccfbd0a51c2d789b32db428902f98b9e155cf0d7910ed" }, - {"computergenie_NA", "03a78ae070a5e9e935112cf7ea8293f18950f1011694ea0260799e8762c8a6f0a4" }, - {"nutellalicka_SH", "02f7d90d0510c598ce45915e6372a9cd0ba72664cb65ce231f25d526fc3c5479fc" }, - {"chainstrike_SH", "03b806be3bf7a1f2f6290ec5c1ea7d3ea57774dcfcf2129a82b2569e585100e1cb" }, - {"dwy_SH", "036536d2d52d85f630b68b050f29ea1d7f90f3b42c10f8c5cdf3dbe1359af80aff" }, - {"alien_EU", "03bb749e337b9074465fa28e757b5aa92cb1f0fea1a39589bca91a602834d443cd" }, // 60 - {"gt_AR", "0348430538a4944d3162bb4749d8c5ed51299c2434f3ee69c11a1f7815b3f46135" }, - {"patchkez_SH", "03f45e9beb5c4cd46525db8195eb05c1db84ae7ef3603566b3d775770eba3b96ee" }, - {"decker_AR", "03ffdf1a116300a78729608d9930742cd349f11a9d64fcc336b8f18592dd9c91bc" }, // 63 + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, }, { // Season 4 third party NN pubkeys from https://github.com/KomodoPlatform/dPoW/blob/master/dragon/3rd_party - {"madmax_NA", "02ef81a360411adf71184ff04d0c5793fc41fd1d7155a28dd909f21f35f4883ac1" }, - {"alright_AR", "036a6bca1c2a8166f79fa8a979662892742346cc972b432f8e61950a358d705517" }, - {"strob_NA", "02049202f3872877e81035549f6f3a0f868d0ad1c9b0e0d2b48b1f30324255d26d" }, - {"hunter_EU", "0378224b4e9d8a0083ce36f2963ec0a4e231ec06b0c780de108e37f41181a89f6a" }, - {"phm87_SH", "03889a10f9df2caef57220628515693cf25316fe1b0693b0241419e75d0d0e66ed" }, - {"chainmakers_NA", "030e4822bddba10eb50d52d7da13106486651e4436962078ee8d681bc13f4993e9" }, - {"indenodes_EU", "03a416533cace0814455a1bb1cd7861ce825a543c6f6284a432c4c8d8875b7ace9" }, - {"blackjok3r_SH", "03d23bb5aad3c20414078472220cc5c26bc5aeb41e43d72c99158d450f714d743a" }, - {"chainmakers_EU", "034f8c0a504856fb3d80a94c3aa78828c1152daf8ccc45a17c450f32a1e242bb0c" }, - {"titomane_AR", "0358cd6d7460654a0ddd5125dd6fa0402d0719999444c6cc3888689a0b4446136a" }, - {"fullmoon_SH", "0275031fa79846c5d667b1f7c4219c487d439cd367dd294f73b5ecd55b4e673254" }, - {"indenodes_NA", "02b3908eda4078f0e9b6704451cdc24d418e899c0f515fab338d7494da6f0a647b" }, - {"chmex_EU", "03e5b7ab96b7271ecd585d6f22807fa87da374210a843ec3a90134cbf4a62c3db1" }, - {"metaphilibert_SH", "03b21ff042bf1730b28bde43f44c064578b41996117ac7634b567c3773089e3be3" }, - {"ca333_DEV", "029c0342ce2a4f9146c7d1ee012b26f5c2df78b507fb4461bf48df71b4e3031b56" }, - {"cipi_NA", "034406ac4cf94e84561c5d3f25384dd59145e92fefc5972a037dc6a44bfa286688" }, - {"pungocloud_SH", "0203064e291045187927cc35ed350e046bba604e324bb0e3b214ea83c74c4713b1" }, - {"voskcoin_EU", "037bfd946f1dd3736ddd2cb1a0731f8b83de51be5d1be417496fbc419e203bc1fe" }, - {"decker_DEV", "02fca8ee50e49f480de275745618db7b0b3680b0bdcce7dcae7d2e0fd5c3345744" }, - {"cryptoeconomy_EU", "037d04b7d16de61a44a3fc766bea4b7791023a36675d6cee862fe53defd04dd8f2" }, - {"etszombi_EU", "02f65da26061d1b9f1756a274918a37e83086dbfe9a43d2f0b35b9d2f593b31907" }, - {"karasugoi_NA", "024ba10f7f5325fd6ec6cab50c5242d142d00fab3537c0002097c0e98f72014177" }, - {"pirate_AR", "0353e2747f89968741c24f254caec24f9f49a894a0039ee9ba09234fcbad75c77d" }, - {"metaphilibert_AR", "0239e34ad22957bbf4c8df824401f237b2afe8d40f7a645ecd43e8f27dde1ab0da" }, - {"zatjum_SH", "03643c3b0a07a34f6ae7b048832e0216b935408dfc48b0c7d3d4faceb38841f3f3" }, - {"madmax_AR", "038735b4f6881925e5a9b14275af80fa2b712c8bd57eef26b97e5b153218890e38" }, - {"lukechilds_NA", "024607d85ea648511fa50b13f29d16beb2c3a248c586b449707d7be50a6060cf50" }, - {"cipi_AR", "025b7655826f5fd3a807cbb4918ef9f02fe64661153ca170db981e9b0861f8c5ad" }, - {"tonyl_AR", "03a8db38075c80348889871b4318b0a79a1fd7e9e21daefb4ca6e4f05e5963569c" }, - {"infotech_DEV", "0399ff59b0244103486a94acf1e4a928235cb002b20e26a6f3163b4a0d5e62db91" }, - {"fullmoon_NA", "02adf6e3cb8a3c94d769102aec9faf2cb073b7f2979ce64efb1161a596a8d16312" }, - {"etszombi_AR", "03c786702b81e0122157739c8e2377cf945998d36c0d187ec5c5ff95855848dfdd" }, - {"node-9_EU", "024f2402daddee0c8169ccd643e5536c2cf95b9690391c370a65c9dd0169fc3dc6" }, - {"phba2061_EU", "02dc98f064e3bf26a251a269893b280323c83f1a4d4e6ccd5e84986cc3244cb7c9" }, - {"indenodes_AR", "0242778789986d614f75bcf629081651b851a12ab1cc10c73995b27b90febb75a2" }, - {"and1-89_EU", "029f5a4c6046de880cc95eb448d20c80918339daff7d71b73dd3921895559d7ca3" }, - {"komodopioneers_SH", "02ae196a1e93444b9fcac2b0ccee428a4d9232a00b3a508484b5bccaedc9bac55e" }, - {"komodopioneers_EU", "03c7fef345ca6b5326de9d5a38498638801eee81bfea4ca8ffc3dacac43c27b14d" }, - {"d0ct0r_NA", "0235b211469d7c1881d30ab647e0d6ddb4daf9466f60e85e6a33a92e39dedde3a7" }, - {"kolo_DEV", "03dc7c71a5ef7104f81e62928446c4216d6e9f68d944c893a21d7a0eba74b1cb7c" }, - {"peer2cloud_AR", "0351c784d966dbb79e1bab4fad7c096c1637c98304854dcdb7d5b5aeceb94919b4" }, - {"webworker01_SH", "0221365d89a6f6373b15daa4a50d56d34ad1b4b8a48a7fd090163b6b5a5ecd7a0a" }, - {"webworker01_NA", "03bfc36a60194b495c075b89995f307bec68c1bcbe381b6b29db47af23494430f9" }, - {"pbca26_NA", "038319dcf74916486dbd506ac866d184c17c3202105df68c8335a1a1079ef0dfcc" }, - {"indenodes_SH", "031d1584cf0eb4a2d314465e49e2677226b1615c3718013b8d6b4854c15676a58c" }, - {"pirate_NA", "034899e6e884b3cb1f491d296673ab22a6590d9f62020bea83d721f5c68b9d7aa7" }, - {"lukechilds_AR", "031ee242e67a8166e489c0c4ed1e5f7fa32dff19b4c1749de35f8da18befa20811" }, - {"dragonhound_NA", "022405dbc2ea320131e9f0c4115442c797bf0f2677860d46679ac4522300ce8c0a" }, - {"fullmoon_AR", "03cd152ae20adcc389e77acad25953fc2371961631b35dc92cf5c96c7729c2e8d9" }, - {"chainzilla_SH", "03fe36ff13cb224217898682ce8b87ba6e3cdd4a98941bb7060c04508b57a6b014" }, - {"titomane_EU", "03d691cd0914a711f651082e2b7b27bee778c1309a38840e40a6cf650682d17bb5" }, - {"jeezy_EU", "022bca828b572cb2b3daff713ed2eb0bbc7378df20f799191eebecf3ef319509cd" }, - {"titomane_SH", "038c2a64f7647633c0e74eec93f9a668d4bf80214a43ed7cd08e4e30d3f2f7acfb" }, - {"alien_AR", "024f20c096b085308e21893383f44b4faf1cdedea9ad53cc7d7e7fbfa0c30c1e71" }, - {"pirate_EU", "0371f348b4ac848cdfb732758f59b9fdd64285e7adf769198771e8e203638db7e6" }, - {"thegaltmines_NA", "03e1d4cec2be4c11e368ff0c11e80cd1b09da8026db971b643daee100056b110fa" }, - {"computergenie_NA", "02f945d87b7cd6e9f2173a110399d36b369edb1f10bdf5a4ba6fd4923e2986e137" }, - {"nutellalicka_SH", "035ec5b9e88734e5bd0f3bd6533e52f917d51a0e31f83b2297aabb75f9798d01ef" }, - {"chainstrike_SH", "0221f9dee04b7da1f3833c6ea7f7325652c951b1c239052b0dadb57209084ca6a8" }, - {"hunter_SH", "02407db70ad30ce4dfaee8b4ae35fae88390cad2b0ba0373fdd6231967537ccfdf" }, - {"alien_EU", "022b85908191788f409506ebcf96a892f3274f352864c3ed566c5a16de63953236" }, - {"gt_AR", "0307c1cf89bd8ed4db1b09a0a98cf5f746fc77df3803ecc8611cf9455ec0ce6960" }, - {"patchkez_SH", "03d7c187689bf829ca076a30bbf36d2e67bb74e16a3290d8a55df21d6cb15c80c1" }, - {"decker_AR", "02a85540db8d41c7e60bf0d33d1364b4151cad883dd032878ea4c037f67b769635" } + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, }, { // Season 5 (fuck season 3.5) https://github.com/KomodoPlatform/dPoW/blob/s4/dragon/3rd_party - {"alien_AR", "024f20c096b085308e21893383f44b4faf1cdedea9ad53cc7d7e7fbfa0c30c1e71" }, - {"alien_EU", "022b85908191788f409506ebcf96a892f3274f352864c3ed566c5a16de63953236" }, - {"alien_NA", "022f62b56ddfd07c9860921c701285ac39bb3ac8f6f083d1b59c8f4943be3de162" }, - {"alright_DEV", "03b6f9493658bdd102503585a08ae642b49d6a68fb69ac3626f9737cd7581abdfa" }, - {"artemii235_DEV", "037a20916d2e9ea575300ac9d729507c23a606b9a200c8e913d7c9832f912a1fa7" }, - {"chainmakers_NA", "028803e07bcc521fde264b7191a944f9b3612e8ee4e24a99bcd903f6976240839a" }, - {"chainzilla_SH", "0311dde03c2dd654ce78323b718ed3ad73a464d1bde97820f3395f54788b5420dd" }, - {"chmex_AR", "030cd487e10fbf142e0e8d582e702ecb775f378569c3cb5acd0ff97b6b12803588" }, - {"chmex_EU", "030bf7bd7ad0515c33b5d5d9a91e0729baf801b9002f80495ae535ea1cebb352cb" }, - {"cipi_EU", "026f4f66385daaf8313ef30ffe4988e7db497132682dca185a70763d93e1417d9d" }, - {"cipi_NA", "03f4e69edcb4fa3b2095cb8cb1ca010f4ec4972eac5d8822397e5c8d87aa21a739" }, - {"daemonfox_NA", "023c7584b1006d4a62a4b4c9c1ede390a3789316547897d5ed49ff9385a3acb411" }, - {"dappvader_SH", "025199bc04bcb8a17976d9fe8bc87763a6150c2727321aa59bf34a2b49f2f3a0ce" }, - {"decker_AR", "02a85540db8d41c7e60bf0d33d1364b4151cad883dd032878ea4c037f67b769635" }, - {"decker_DEV", "02fca8ee50e49f480de275745618db7b0b3680b0bdcce7dcae7d2e0fd5c3345744" }, - {"decker_EU", "027777775b89ff548c3be54fb0c9455437d87f38bfce83bdef113899881b219c9e" }, - {"dragonhound_NA", "029912212d370ee0fb4d38eefd8bfcd8ab04e2c3b0354020789c29ddf2a35c72d6" }, - {"dudezmobi_AR", "033c121d3f8d450174674a73f3b7f140b2717a7d51ea19ee597e2e8e8f9d5ed87f" }, - {"etszombi_AR", "03bfcbca83f11e622fa4eed9a1fa25dba377981ea3b22e3d0a4015f9a932af9272" }, - {"etszombi_EU", "03a5c083c78ba397970f20b544a01c13e7ed36ca8a5ae26d5fe7bd38b92b6a0c94" }, - {"fullmoon_AR", "03639bc56d3fecf856f17759a441c5893668e7c2d460f3d216798a413cd6766bb2" }, - {"fullmoon_NA", "03e388bcc579ac2675f8fadfa921eec186dcea8d2b43de1eed6caba23d5a962b74" }, - {"fullmoon_SH", "03a5cfda2b097c808834ccdd805828c811b519611feabdfe6b3644312e53f6748f" }, - {"gcharang_SH", "02a654037d12cdd609f4fad48e15ec54538e03f61fdae1acb855f16ebacac6bd73" }, - {"greer_NA", "0262da6aaa0b295b8e2f120035924758a4a630f899316dc63ee15ef03e9b7b2b23" }, - {"indenodes_AR", "0242778789986d614f75bcf629081651b851a12ab1cc10c73995b27b90febb75a2" }, - {"indenodes_EU", "03a416533cace0814455a1bb1cd7861ce825a543c6f6284a432c4c8d8875b7ace9" }, - {"indenodes_NA", "02b3908eda4078f0e9b6704451cdc24d418e899c0f515fab338d7494da6f0a647b" }, - {"indenodes_SH", "031d1584cf0eb4a2d314465e49e2677226b1615c3718013b8d6b4854c15676a58c" }, - {"karasugoi_NA", "02f803e6f159824a181cc5d709f3d1e7ff65f19e1899920724aeb4e3d2d869f911" }, - {"madmax_AR", "027afddbcf690230dd8d435ec16a7bfb0083e6b77030f763437f291dfc40a579d0" }, - {"madmax_EU", "0397ec3a4ad84b3009566d260c89f1c4404e86e5d044964747c9371277e38f5995" }, - {"madmax_NA", "036d3afebe1eab09f4c38c3ee6a4659ad390f3df92787c11437a58c59a29e408e6" }, - {"marmarachain_AR", "028690ca1e3afdf8a38b421f6a41f5ff407afc96d5a7a6a488330aae26c8b086bb" }, - {"mcrypt_SH", "027a4ca7b11d3456ff558c08bb04483a89c7f383448461fd0b6b3b07424aabe9a4" }, - {"metaphilibert_AR", "0239e34ad22957bbf4c8df824401f237b2afe8d40f7a645ecd43e8f27dde1ab0da" }, - {"metaphilibert_SH", "03b21ff042bf1730b28bde43f44c064578b41996117ac7634b567c3773089e3be3" }, - {"mihailo_EU", "036494e7c9467c8c7ff3bf29e841907fb0fa24241866569944ea422479ec0e6252" }, - {"mrlynch_AR", "03e67440141f53a08684c329ebc852b018e41f905da88e52aa4a6dc5aa4b12447a" }, - {"mylo_SH", "026d5f29d09ff3f33e14db4811606249b2438c6bcf964876714f81d1f2d952acde" }, - {"node9_EU", "0392e4c9400e69f28c6b9e89d586da69d5a6af7702f1045eaa6ebc1996f0496e1f" }, - {"nodeone_NA", "0310a249c6c2dcc29f2135715138a9ddb8e01c0eab701cbd0b96d9cec660dbdc58" }, - {"nutellalicka_SH", "0284c4d3cb97dd8a32d10fb32b1855ae18cf845dad542e3b8937ca0e998fb54ecc" }, - {"oszy_EU", "03c53bd421de4a29ce68c8cc83f802e1181e77c08f8f16684490d61452ea8d023a" }, - {"patchkez_SH", "028c08db6e7242681f50db6c234fe3d6e12fb1a915350311be26373bac0d457d49" }, - {"pbca26_NA", "03c18431bb6bc95672f640f19998a196becd2851d5dcba4795fe8d85b7d77eab81" }, - {"peer2cloud_AR", "0243958faf9ae4d43b598b859ddc595c170c4cf50f8e4517d660ae5bc72aeb821b" }, - {"phba2061_EU", "03369187ce134bd7793ee34af7756fe1ab27202e09306491cdd5d8ad2c71697937" }, - {"phm87_SH", "03889a10f9df2caef57220628515693cf25316fe1b0693b0241419e75d0d0e66ed" }, - {"pirate_EU", "0240011b95cde819f298fe0f507b2260c9fecdab784924076d4d1e54c522103cb1" }, - {"pirate_NA", "02ad7ef25d2dd461e361120cd3efe7cbce5e9512c361e9185aac33dd303d758613" }, - {"pungocloud_SH", "02641c36ae6747b88150a463a1fe65cf7a9d1c00a64387c73f296f0b64e77c7d3f" }, - {"smdmitry_AR", "0397b7584cb29717b721c0c587d4462477efc1f36a56921f133c9d17b0cd7f278a" }, - {"starfleet_EU", "03c6e047218f34644ccba67e317b9da5d28e68bbbb6b9973aef1281d2bafa46496" }, - {"strob_NA", "02285bf2f9e96068ecac14bc6f770e394927b4da9f5ba833eaa9468b5d47f203a3" }, - {"strob_SH", "0213751a1c59d3489ca85b3d62a3d606dcef7f0428aa021c1978ea16fb38a2fad6" }, - {"swisscertifiers_EU", "02e7722ebba9f8b5ebfb4e87d4fa58cc75aef677535b9cfc060c7d9471aacd9c9e" }, - {"titomane_AR", "03958bd8d13fe6946b8d0d0fbbc3861c72542560d0276e80a4c6b5fe55bc758b81" }, - {"titomane_EU", "02276090e483db1a01a802456b10831b3b6e0a6ad3ece9b2a01f4aad0e480c8edc" }, - {"titomane_SH", "02abf206bafc8048dbdc042b8eb6b1e356ea5dbe149eae3532b4811d4905e5cf01" }, - {"tonyl_AR", "0229e499e3f2e065ced402ceb8aaf3d5ab8bd3793aa074305e9fa30772ce604908" }, - {"tonyl_DEV", "0258b77d7dcfc6c2628b0b6b438951a6e74201fb2cd180a795e4c37fcf8e78a678" }, - {"webworker01_NA", "02de90c720c007229374772505a43917a84ed129d5fbcfa4949cc2e9b563351124" }, - {"zatjum_SH", "0241c5660ca540780be66603b1791127a1261d56abbcb7562c297eec8e4fc078fb" } + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, + { "fuck_jl777", "034ea5e2d1b858e9b026dc5a4ea5bb2e4a5b625a086d9954c94b002d0858987214"}, }, + { // Hush Delayed Proof of Work, Season 6 In The Great History Of DPoW // NOTE: Hush notaries are proudly anon, where KMD notaries doxx themselves, derpz and lulz diff --git a/src/hush_notary.h b/src/hush_notary.h index 0c3131991..6434998bc 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -59,7 +59,7 @@ const char *Notaries_genesis[][2] = { "titomane_SH", "035f49d7a308dd9a209e894321f010d21b7793461b0c89d6d9231a3fe5f68d9960" }, }; -#define CRYPTO777_PUBSECPSTR "020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9" +#define CRYPTO555_PUBSECPSTR "020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2acbadcaca" int32_t gethushseason(int32_t height) { diff --git a/src/hush_utils.h b/src/hush_utils.h index 04cac9920..96a740a2f 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -45,9 +45,9 @@ typedef struct queue #include "mini-gmp.c" -#define CRYPTO777_PUBSECPSTR "020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9" -#define CRYPTO777_KMDADDR "RXL3YXG2ceaB6C5hfJcN4fvmLH2C34knhA" -#define CRYPTO777_RMD160STR "f1dce4182fce875748c4986b240ff7d7bc3fffb0" +#define CRYPTO555_PUBSECPSTR "020e46e79a2a8d12b9b5d12c69d1adb4e454edfae43c0a0cb805427d2acbadcaca" +#define CRYPTO555_HUSHADDR "RHushEyeDm7XwtaTWtyCbjGQumYyV8vMjn" +#define CRYPTO555_RMD160STR "deadbeef2fce875748c4986b240ff7d7bc3fffb0" #define KOMODO_PUBTYPE 60 @@ -1528,13 +1528,12 @@ int32_t komodo_whoami(char *pubkeystr,int32_t height,uint32_t timestamp) return(notaryid); } -char *argv0suffix[] = -{ +// TODO: clean up this smoking bath-salts shite from KMD +char *argv0suffix[] = { (char *)"mnzd", (char *)"mnz-cli", (char *)"mnzd.exe", (char *)"mnz-cli.exe", (char *)"btchd", (char *)"btch-cli", (char *)"btchd.exe", (char *)"btch-cli.exe" }; -char *argv0names[] = -{ +char *argv0names[] = { (char *)"MNZ", (char *)"MNZ", (char *)"MNZ", (char *)"MNZ", (char *)"BTCH", (char *)"BTCH", (char *)"BTCH", (char *)"BTCH" }; @@ -2510,15 +2509,12 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); void komodo_nameset(char *symbol,char *dest,char *source) { - if ( source[0] == 0 ) - { - strcpy(symbol,(char *)"KMD"); + if ( source[0] == 0 ) { + strcpy(symbol,(char *)"HUSH3"); strcpy(dest,(char *)"BTC"); - } - else - { + } else { strcpy(symbol,source); - strcpy(dest,(char *)"KMD"); + strcpy(dest,(char *)"HUSH3"); } } diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 0f01a0e09..bb655598b 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -736,15 +736,15 @@ void komodo_disconnect(CBlockIndex *pindex,CBlock& block) int32_t komodo_is_notarytx(const CTransaction& tx) { - uint8_t *ptr; static uint8_t crypto777[33]; + uint8_t *ptr; static uint8_t crypto555[33]; if ( tx.vout.size() > 0 ) { ptr = (uint8_t *)&tx.vout[0].scriptPubKey[0]; if ( ptr != 0 ) { - if ( crypto777[0] == 0 ) - decode_hex(crypto777,33,(char *)CRYPTO777_PUBSECPSTR); - if ( memcmp(ptr+1,crypto777,33) == 0 ) + if ( crypto555[0] == 0 ) + decode_hex(crypto555,33,(char *)CRYPTO555_PUBSECPSTR); + if ( memcmp(ptr+1,crypto555,33) == 0 ) { //printf("found notarytx\n"); return(1); diff --git a/src/komodo_cJSON.h b/src/komodo_cJSON.h index 3586b5cbf..e80ce98a2 100644 --- a/src/komodo_cJSON.h +++ b/src/komodo_cJSON.h @@ -48,7 +48,7 @@ #include "cJSON.h" -//#include "../crypto777/OS_portable.h" +//#include "../crypto555/OS_portable.h" #define MAX_JSON_FIELD 4096 // on the big side diff --git a/src/main.cpp b/src/main.cpp index 5256e7124..3f4179c2a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1381,7 +1381,7 @@ int32_t komodo_isnotaryvout(char *coinaddr,uint32_t tiptime) // from ac_private uint8_t pubkeys[64][33]; komodo_notaries(pubkeys,0,tiptime); } - if ( strcmp(coinaddr,CRYPTO777_KMDADDR) == 0 ) + if ( strcmp(coinaddr,CRYPTO555_HUSHADDR) == 0 ) return(1); for (int32_t i = 0; i < NUM_HUSH_NOTARIES; i++) { diff --git a/src/script/standard.cpp b/src/script/standard.cpp index 7500f0369..5621fed31 100644 --- a/src/script/standard.cpp +++ b/src/script/standard.cpp @@ -1,8 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers +// Copyright (c) 2019-2020 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. * * * @@ -17,15 +17,12 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "script/standard.h" - #include "pubkey.h" #include "script/script.h" #include "util.h" #include "utilstrencodings.h" #include "script/cc.h" - #include using namespace std; diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 05499c452..66d24eeba 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "amount.h" #include "consensus/upgrades.h" #include "core_io.h" @@ -574,7 +572,6 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) #define IGUANA_MAXSCRIPTSIZE 10001 uint64_t PAX_fiatdest(uint64_t *seedp,int32_t tokomodo,char *destaddr,uint8_t pubkey37[37],char *coinaddr,int32_t height,char *base,int64_t fiatoshis); int32_t komodo_opreturnscript(uint8_t *script,uint8_t type,uint8_t *opret,int32_t opretlen); -#define CRYPTO777_KMDADDR "RXL3YXG2ceaB6C5hfJcN4fvmLH2C34knhA" extern int32_t KOMODO_PAX; extern uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE; int32_t komodo_is_issuer(); @@ -722,9 +719,9 @@ UniValue kvupdate(const UniValue& params, bool fHelp, const CPubKey& mypk) EnsureWalletIsUnlocked(); fee = komodo_kvfee(flags,opretlen,keylen); ret.push_back(Pair("fee",(double)fee/COIN)); - CBitcoinAddress destaddress(CRYPTO777_KMDADDR); + CBitcoinAddress destaddress(CRYPTO555_HUSHADDR); if (!destaddress.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid dest Bitcoin address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid destination address!"); SendMoney(destaddress.Get(),10000,false,wtx,opretbuf,opretlen,fee); ret.push_back(Pair("txid",wtx.GetHash().GetHex())); } else ret.push_back(Pair("error",(char *)"null key")); @@ -760,7 +757,7 @@ UniValue paxdeposit(const UniValue& params, bool fHelp, const CPubKey& mypk) } komodoshis = PAX_fiatdest(&seed,0,destaddr,pubkey37,(char *)params[0].get_str().c_str(),height,(char *)base.c_str(),fiatoshis); dest.append(destaddr); - CBitcoinAddress destaddress(CRYPTO777_KMDADDR); + CBitcoinAddress destaddress(CRYPTO555_HUSHADDR); if (!destaddress.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid dest Bitcoin address"); for (i=0; i<33; i++) @@ -796,7 +793,7 @@ UniValue paxwithdraw(const UniValue& params, bool fHelp, const CPubKey& mypk) int64_t fiatoshis = atof(params[1].get_str().c_str()) * COIN; komodoshis = PAX_fiatdest(&seed,1,destaddr,pubkey37,(char *)params[0].get_str().c_str(),kmdheight,SMART_CHAIN_SYMBOL,fiatoshis); dest.append(destaddr); - CBitcoinAddress destaddress(CRYPTO777_KMDADDR); + CBitcoinAddress destaddress(CRYPTO555_HUSHADDR); if (!destaddress.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid dest Bitcoin address"); for (i=0; i<33; i++) @@ -5623,7 +5620,7 @@ int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void * txNew.vin[0].prevout.hash = utxotxid; //revtxid; txNew.vin[0].prevout.n = utxovout; txNew.vout[0].nValue = utxovalue - txfee; - txNew.vout[0].scriptPubKey = CScript() << ParseHex(CRYPTO777_PUBSECPSTR) << OP_CHECKSIG; + txNew.vout[0].scriptPubKey = CScript() << ParseHex(CRYPTO555_PUBSECPSTR) << OP_CHECKSIG; if ( pTr != 0 ) { void **p = (void**)pTr; From 6fe1915d45d49b1ded5474d9025f50fd62802082 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 17:07:06 -0500 Subject: [PATCH 071/277] Remove remnants of that scam MNZ jl777 was involved in --- src/hush_utils.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hush_utils.h b/src/hush_utils.h index 96a740a2f..79dcdbe9b 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1530,11 +1530,11 @@ int32_t komodo_whoami(char *pubkeystr,int32_t height,uint32_t timestamp) // TODO: clean up this smoking bath-salts shite from KMD char *argv0suffix[] = { - (char *)"mnzd", (char *)"mnz-cli", (char *)"mnzd.exe", (char *)"mnz-cli.exe", (char *)"btchd", (char *)"btch-cli", (char *)"btchd.exe", (char *)"btch-cli.exe" + (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 *)"MNZ", (char *)"MNZ", (char *)"MNZ", (char *)"MNZ", (char *)"BTCH", (char *)"BTCH", (char *)"BTCH", (char *)"BTCH" + (char *)"FUCKJL777", (char *)"FUCKJL777", (char *)"FUCKJL777", (char *)"FUCKJL777", (char *)"BTCH", (char *)"BTCH", (char *)"BTCH", (char *)"BTCH" }; From 32322be455aa7309f7d9aa1614228f1eb3d8265a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 17:07:40 -0500 Subject: [PATCH 072/277] max money yo --- src/hush_utils.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hush_utils.h b/src/hush_utils.h index 79dcdbe9b..4cae6d243 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1539,7 +1539,7 @@ char *argv0names[] = { // Large total supplies lead to numerical errors, beware! -uint64_t komodo_max_money() +uint64_t hush_max_money() { return komodo_current_supply(10000000); } @@ -2306,7 +2306,7 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); strncpy(SMART_CHAIN_SYMBOL,name.c_str(),sizeof(SMART_CHAIN_SYMBOL)-1); - MAX_MONEY = komodo_max_money(); + MAX_MONEY = hush_max_money(); if ( (baseid = komodo_baseid(SMART_CHAIN_SYMBOL)) >= 0 && baseid < 32 ) { From 467c8c37e3196513f7cb50bfda4cf1e777163505 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 17:09:12 -0500 Subject: [PATCH 073/277] Hush Is A Fast State Of Life --- src/hush.h | 4 ++-- src/komodo_gateway.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hush.h b/src/hush.h index ec5e367a1..724ddff23 100644 --- a/src/hush.h +++ b/src/hush.h @@ -378,11 +378,11 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar komodo_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"komodostate"); if ( (fp= fopen(fname,"rb+")) != 0 ) { - if ( (retval= komodo_faststateinit(sp,fname,symbol,dest)) > 0 ) + if ( (retval= hush_faststateinit(sp,fname,symbol,dest)) > 0 ) fseek(fp,0,SEEK_END); else { - fprintf(stderr,"komodo_faststateinit retval.%d\n",retval); + fprintf(stderr,"hush_faststateinit retval.%d\n",retval); while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) ; } diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ca76afc60..f8c04ea18 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1357,7 +1357,7 @@ long komodo_indfile_update(FILE *indfp,uint32_t *prevpos100p,long lastfpos,long return(newfpos); } -int32_t komodo_faststateinit(struct komodo_state *sp,char *fname,char *symbol,char *dest) +int32_t hush_faststateinit(struct komodo_state *sp,char *fname,char *symbol,char *dest) { FILE *indfp; char indfname[1024]; uint8_t *filedata; long validated=-1,datalen,fpos,lastfpos; uint32_t tmp,prevpos100,indcounter,starttime; int32_t func,finished = 0; starttime = (uint32_t)time(NULL); @@ -1414,7 +1414,7 @@ int32_t komodo_faststateinit(struct komodo_state *sp,char *fname,char *symbol,ch finished = 1; } } - } else printf("komodo_faststateinit unexpected case\n"); + } else printf("hush_faststateinit unexpected case\n"); free(filedata); return(finished == 1); } From 2f872b9cb2625b983056b3c1099d01dccbe8ec12 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 17:11:14 -0500 Subject: [PATCH 074/277] copyright --- src/komodo_interest.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/komodo_interest.h b/src/komodo_interest.h index e5b17a6b3..6bc5f806e 100644 --- a/src/komodo_interest.h +++ b/src/komodo_interest.h @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -14,10 +17,8 @@ ******************************************************************************/ #include "hush_defs.h" - #define SATOSHIDEN ((uint64_t)100000000L) #define dstr(x) ((double)(x) / SATOSHIDEN) - #define KOMODO_ENDOFERA 7777777 #define KOMODO_INTEREST ((uint64_t)5000000) //((uint64_t)(0.05 * COIN)) // 5% extern int64_t MAX_MONEY; From d541d1c341e99085cb61090d30045ca6fa781b27 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 17:39:25 -0500 Subject: [PATCH 075/277] Fuck jl777, KMD and KYC --- src/main.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 3f4179c2a..926763a5b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -47,7 +47,6 @@ #include "validationinterface.h" #include "wallet/asyncrpcoperation_sendmany.h" #include "wallet/asyncrpcoperation_shieldcoinbase.h" - #include #include #include @@ -55,7 +54,6 @@ #include #include #include - #include #include #include From b7398f812c5140081a835aa9cc2ab8189ce7446d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 18:53:32 -0500 Subject: [PATCH 076/277] Winners write the history books --- src/cc/eval.cpp | 4 +- src/crosschain.cpp | 2 +- src/hush.h | 7 +- src/hush_defs.h | 141 +++++++++++------------ src/hush_notary.h | 76 ++++++------ src/hush_utils.h | 6 +- src/komodo_bitcoind.h | 18 +-- src/komodo_nSPV.h | 2 +- src/komodo_structs.h | 4 +- src/main.cpp | 2 +- src/miner.cpp | 4 +- src/rpc/blockchain.cpp | 4 +- src/rpc/crosschain.cpp | 4 +- src/rpc/misc.cpp | 4 +- src/test-hush/test_eval_notarisation.cpp | 4 +- 15 files changed, 140 insertions(+), 142 deletions(-) diff --git a/src/cc/eval.cpp b/src/cc/eval.cpp index 63059a810..9e6a21676 100644 --- a/src/cc/eval.cpp +++ b/src/cc/eval.cpp @@ -160,12 +160,12 @@ bool Eval::GetBlock(uint256 hash, CBlockIndex& blockIdx) const return false; } -extern int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); +extern int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); int32_t Eval::GetNotaries(uint8_t pubkeys[64][33], int32_t height, uint32_t timestamp) const { - return komodo_notaries(pubkeys, height, timestamp); + return hush_notaries(pubkeys, height, timestamp); } bool Eval::CheckNotaryInputs(const CTransaction &tx, uint32_t height, uint32_t timestamp) const diff --git a/src/crosschain.cpp b/src/crosschain.cpp index be842addb..a1c5463ef 100644 --- a/src/crosschain.cpp +++ b/src/crosschain.cpp @@ -351,7 +351,7 @@ bool CheckNotariesApproval(uint256 burntxid, const std::vector & notary if (merkleBlock.txn.ExtractMatches(prooftxids) != merkleBlock.header.hashMerkleRoot || // check block merkle root is correct std::find(prooftxids.begin(), prooftxids.end(), burntxid) != prooftxids.end()) { // check burn txid is in proven txids list - if (komodo_notaries(notaries_pubkeys, block.GetHeight(), block.GetBlockTime()) >= 0) { + if (hush_notaries(notaries_pubkeys, block.GetHeight(), block.GetBlockTime()) >= 0) { // check it is a notary who signed approved tx: int i; for (i = 0; i < sizeof(notaries_pubkeys) / sizeof(notaries_pubkeys[0]); i++) { diff --git a/src/hush.h b/src/hush.h index 724ddff23..ead0020ab 100644 --- a/src/hush.h +++ b/src/hush.h @@ -785,7 +785,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar else return(0); }*/ -// Special tx have vout[0] -> CRYPTO777 +// Special tx have vout[0] -> CRYPTO555 address // with more than KOMODO_MINRATIFY pay2pubkey outputs -> ratify // if all outputs to notary -> notary utxo // if txi == 0 && 2 outputs and 2nd OP_RETURN, len == 32*2+4 -> notarized, 1st byte 'P' -> pricefeed @@ -811,7 +811,6 @@ int32_t komodo_notarycmp(uint8_t *scriptPubKey,int32_t scriptlen,uint8_t pubkeys int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) { static int32_t hwmheight; - int32_t staked_era; static int32_t lastStakedEra; std::vector notarisations; uint64_t signedmask,voutmask; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; uint8_t scriptbuf[10001],pubkeys[64][33],rmd160[20],scriptPubKey[35]; uint256 zero,btctxid,txhash; @@ -826,12 +825,12 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) HUSH_INITDONE = (uint32_t)time(NULL); if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) { - fprintf(stderr,"unexpected null komodostateptr.[%s]\n",SMART_CHAIN_SYMBOL); + fprintf(stderr,"unexpected null stateptr.[%s]\n",SMART_CHAIN_SYMBOL); return(0); } //fprintf(stderr,"%s connect.%d\n",SMART_CHAIN_SYMBOL,pindex->nHeight); // Wallet Filter. Disabled here. Cant be activated by notaries or pools with some changes. - numnotaries = komodo_notaries(pubkeys,pindex->GetHeight(),pindex->GetBlockTime()); + numnotaries = hush_notaries(pubkeys,pindex->GetHeight(),pindex->GetBlockTime()); calc_rmd160_sha256(rmd160,pubkeys[0],33); if ( pindex->GetHeight() > hwmheight ) hwmheight = pindex->GetHeight(); diff --git a/src/hush_defs.h b/src/hush_defs.h index 9271d0066..c65be82e9 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -13,13 +13,12 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ -#ifndef KOMODO_DEFS_H -#define KOMODO_DEFS_H +#ifndef HUSH_DEFS_H +#define HUSH_DEFS_H #include "arith_uint256.h" #include "chain.h" #include "hush_nk.h" #define KOMODO_EARLYTXID_HEIGHT 100 -//#define ADAPTIVEPOW_CHANGETO_DEFAULTON 1572480000 #define ASSETCHAINS_MINHEIGHT 128 #define ASSETCHAINS_MAX_ERAS 7 #define KOMODO_ELECTION_GAP 2000 @@ -28,9 +27,9 @@ #define KOMODO_LIMITED_NETWORKSIZE 4 #define IGUANA_MAXSCRIPTSIZE 10001 #define KOMODO_MAXMEMPOOLTIME 3600 // affects consensus -#define CRYPTO555_PUBSECPSTR "020e46e79a2a8d12b9b5d12c69d1adb4e454edfae43c0a0cb805427d2acbadcaca" -#define CRYPTO555_HUSHADDR "RHushEyeDm7XwtaTWtyCbjGQumYyV8vMjn" -#define CRYPTO555_RMD160STR "deadbeef2fce875748c4986b240ff7d7bc3fffb0" +#define CRYPTO555_PUBSECPSTR "038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac" +#define CRYPTO555_HUSHADDR "RFetqf8WUfWnwNeXdknkm8ojk7EXnYFzrv" +#define CRYPTO555_RMD160STR "deadbeefbadcaca748c4986b240ff7d7bc3fffb0" #define HUSH_FIRSTFUNGIBLEID 100 #define KOMODO_SAPLING_ACTIVATION 1544832000 // Dec 15th, 2018 #define KOMODO_SAPLING_DEADLINE 1550188800 // Feb 15th, 2019 @@ -407,70 +406,70 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = { // Hush Delayed Proof of Work, Season 6 In The Great History Of DPoW // NOTE: Hush notaries are proudly anon, where KMD notaries doxx themselves, derpz and lulz - {"RHush8GC36rip8uY4fyDU79NxbhKNtqghk","0311e75bdbb9215eb040eb01f932097b2dde8632570b314087883dcd4344b27a8f"}, - {"RHushPhhtqMDgdHe16NXuZfzQVAyKYzPZB","0387c4fbc3df18437820f1ecb3ce072c41b9ee3db45bb5df5bd4c9504ff769a0e3"}, - {"RHush7Ua35bjt7RobikaG2rXp8oSu27uuE","033af93c56093489b836f309b1f1709ede0d34dcc01e676ba04c41492d45c2a82d"}, - {"RHushXfsrvBTd1UKE5b86GpW7kPy6x8kMc","02735b7707a601677a201115d222ea96cca019e2537989202c930b5eabc1b7d0d1"}, - {"RHushGKVM7V66vxaVMVKZa5zfU31jHnvvJ","02b64255d2ed8e72efb8606a5f3edd991706d6fa405e2edb2366ccc0d04411a971"}, - {"RHushhj9ZqSxbsoKmbdQCs31udPj7R84L1","0219fd04e4d10a9a3a3bdd8463d817e27af21f9ee8fd9c96ab168f4075c7f8ab04"}, - {"RHushHSVgpiFKTzKeYX1WeEVSFvaRJntfG","031f342fb96cfbe54881ad4feb5d6d4ffa431671a88f55ccd5c97710a40492858c"}, - {"RHushhgnoYHyo1FAPd95pnSZ41ku9pbsTa","03c6c9f035edaa08b1361d4a36650506c33f9224dcca3e5e670e79cd6cacf4272a"}, - {"RHushzyxZZWRTbeoL2kBTwpKRPQnCSydY2","02ed6ae515061943197e4666966107c60419d0f76051c6eff56f4aa325b4a4d909"}, - {"RHushTgVyVCR2nfHSnFpnQdYpAJkuhh32A","03651c4e20684ba32afd45a51b78120b1d88a165a56a465b480e08a27877b25511"}, - {"RHushfUUfe2mEvzooNJPVd46ajGR5mVk8u","02196af172bb155312575b55f7e9beec21fa861aa7ab424eafa8555e5c90cbf959"}, - {"RHushycRhdDqFMmU2CsHsPNdsFy2gYxmLw","03686768588bd270934f38c9c747703bd13923a271781d53d73e35d516a8d95e06"}, - {"RHusheqVQ3qFtSVbQz751H4EiNaP47bKPf","033d099e4bf7d6250adab6d1519aecd0c234b465de6c3c3569864b87acc160926d"}, - {"RHushiEq7kXBBCAWz1E44i2aw1SAt6cMku","025260889f16fdb809f415a457a92c5afcd1b0f30101a2eca495c6fcc333684fd5"}, - {"RHushVTxFKFfySmNqpHtFBg7s3whm3Zk4q","035ed8e13cd4861a76336f2f78aab5af350d363b4f7ce784b1ab24697b951ef352"}, - {"RHushzssPeRpshz2Qgezx33QafbeeW67Wa","02a257c40452cc405e4b53f54224d2a76c7a74477f32b0e50e7349b9d4a7d8eb73"}, - {"RHush9Mz58wqRMYwQmQ2uehTphpwyjNPF8","022dd50c6325d5739c49c1158b3d0c4300db5e05bbb180674bbe37563695bb7c4c"}, - {"RHushLVwBCVsj5wQfL3Vqn5dtCUNzYACqR","03d7f02d5bf50eeb66b24932e2aa1ee68536184d8e904a9f08a19f1e63247bd370"}, - {"RHushnwstemVMdgejh5tmb51GFCgfrW5Wn","03d7071297ce99b58ee5c16c91a682a67b98423df19c83016e30c3b566ee7d5013"}, - {"RHushah3awaNJnms5fDzHQJde1QeoWhjnV","02279ff0ca33d8a6570e643cc8dc8feb48d5bd51a6bb8fe36b98fb30b01ce31ff8"}, - {"RHushjrJUjLzE4am73D1aNkjH5S6hHWmWc","027ab4c14966b13955616c4a17de8a497088b3ceff076077aeb02504d73314b928"}, - {"RHushptDtbjDvdeeyDZUvps6wFoPECxwEd","0209f18cc2f708ccc6c6d0ef380440dec0f6052dc3904f14dfa9303e7feb583128"}, - {"RHushQH3qtbFHZ5qCjWYbPfWCa8tV8WVDR","035108e4d8415aa4dcffb076e3e7f681645be7ae9860b552147f46a26fa4995fe7"}, - {"RHushw4ztWqhZycAJHzz2kaUwDQNr1CFUn","02d852b7ac1a0f8407cf6e17bd5729ad471ec8ff9b1010ea43b2dd11ab1f1fcc0f"}, - {"RHushz1vQti15q7Cc1CwUvA2ctPnNVZQQj","03651736c7f6f19991ab047687fe1a832d97fdec946d185b0e475625692ad3eb2a"}, - {"RHush3FwGHgmcSDUB6pLNfhser8qbwyCrS","0344bfb5e40f33f033869f0259e1baefdb297e4a266b87424af72fa09cf7f32e0e"}, - {"RHushNnHbhKgtMbGM3dWnJ4Wa8FZvDL2es","03cceb1d4ce28edd255805b9e2cfad215c29e8aed068ae5ec76183e2b5b413d48c"}, - {"RHush2dcugTQ8vGHMdFVwD9ULkFWzbsZ5W","02b762e56f508cb14127fe725017772b575925881911fd8fc374529b5e509ab7d3"}, - {"RHushJ1ydfCUcAvNUsikkct9ZoW7nFqrmK","03b36c60c7fc1c81cc989e45847ad2faff93398a95ec6b8138b38f8078d5652e73"}, - {"RHushdyAmvxV8Em5Gud33wDDQN74sKNUSK","02e096a7b57f6d5ac6d731b39dc9a656ea920d60c8db6f1d4f433985cb4756fb3e"}, - {"RHushPdks3JJphcYrxukGtJDdx9spMwWS1","02ff62a40b44d34f7f96c303903bf76fca5a60693cb085ea1ce72e4bb29f572b95"}, - {"RHushDUQxu68DZstxx3yj8jFV9G3iKn2dC","0227ac6e3b61069570b3f1c519492620929406120a0e77b71a8ead0f1f5a084a98"}, - {"RHushU3jFwas7B7mJz5A9dSTUzBq9ifmD9","02cef39af8bb49fd5b920f75f28ea75de8202e3ad87a07e9a86fae2e78c54fe1be"}, - {"RHushVBhtjBroSZU3NwS2JHPsaL6XpHMWc","02861aefc110ff5d8eb8783c068ee421872ad37d49830a5b14d7b19c01668a6e12"}, - {"RHushxBYs561RAtoJbPPptzrS4LDg2yzkx","03e1235ad6da52d1ba97d5e5dbb0dad35aa0453ef92fc8c368abe8fce102cdc2e9"}, - {"RHush6Cb9H11o77QkTwjj8HkUgHVySkYKN","03d22020cad60b83344414bdad05853c192c545d71539f463c974605eb0d118334"}, - {"RHush19GGZa3yzPPdcyEYFGpJZepe2UoC5","03dbc620a20d4f9c9f066ec6773fbdd49e0062ff242fc1134d59e6058b4ef6627c"}, - {"RHushcDcHdfLEuGPf9NfF8RyfuR9y7pfG9","02a55a7cb6f6784afd44bac0033c754e238683e7f9b4ce6ea3da5ed70aeeb297ab"}, - {"RHushUwawFZ3hx4YYjiKrDw3EsEV5BguDw","03485a646f2c9d52a5dfc35d3db16b609f29bdc7c6ea3a3fbb9930f7cd8026722b"}, - {"RHushRy6RUcozhxoySbxVmuWD2fnmA7Lnu","02aca0c996cdd7d180c788bca7a574af2e8824514849f087ec3784aaf82b4e09c1"}, - {"RHushp5dFxnudvYmTMVvhHCpv7wAeg9yme","039603fcb707cf7a150bb3c8dcff70efb3652e28c5cb9f275a2723d6e7769b35e6"}, - {"RHushYC8WX1DZZFSyEnKwWfYkaPbp3NYV2","033464b6800aa374ddda0499eeb17440a14c6f01b16e1ca8533721f565615b5652"}, - {"RHushLmLU8qCQ2suwJCmLUGDP8UHeKakQ1","03f729b004fa78ad47d8a9948a9cec9c183251c60d19b722132825e91979ea1718"}, - {"RHushf3WM6J2YkWW6jrzfysRJaL7ixvA4S","02d1f4327470ac0548d7e1c806793c555d28d53cbad2458f5e206bdd05238eb357"}, - {"RHushe75FywZGhRZGuK16LBtStkQGH8Ft9","0204e1cb1cbdb494a4cd7d29447acad55748fe9a4bcf35db5ed9eb793ca88545cc"}, - {"RHush8wqe1SkcweBBPqusQ5uakjEUKvxk1","0256120d1d2556284b6256d463d245fb0b6853d48b56c249c4092b9903043db4a6"}, - {"RHushKidwwcrGGe6i75x8eP652kVSSZMvm","036e24c5212aaf795485b827f67af8d2b04558a6663815f62611830d9d0dce114c"}, - {"RHushGV6GSMQePaLL7xcgWed6atye48cT1","02a298865ccbb575a770b68ece73962ddf5bcaeedc7b8bccab33e2ffda33ab0773"}, - {"RHush2P6tQr1MSXsm8VUFzRhJUbPswkdpg","02db2b276a9cabdf93579492b20ff507b118f7406e70b10550fd53836431e83e2a"}, - {"RHusheDCeKe5y3npBbHWbpCktTLbW1wVSG","0281d9e0ed1a854967e54d48aaa9276343e9b76c5efdc1d044ff5009641324fbc4"}, - {"RHushxF6budLeauye6gYvNcmhriU3xdaef","0354a23100ae28c9b0265c555a6fa7354216aeb28fed6519f335c2c4e405432554"}, - {"RHushEFSwwkmCUuJBHyi8GVeyToN3c9MBb","026ef72515d057d4dd3698ae3e5c5ccaccb71dfde4b6830949883ab8e0907f6715"}, - {"RHushaW7hadHXYY5TqYpnNJhHrAET72nLe","0228391f4e557ece7c5f0d7145cd278ff78048dde393c3685f18fd7c1602481db7"}, - {"RHushJbS2wBabhYyH8KDiyVkcg7haKvKYW","0255428e8b42cb23b85bbd4d22fd329cc30fc6c5e85fa8f3daf3109453e44cacd6"}, - {"RHushXxE9Mhp7PdJ92SqcJUQbfvrM5ERtx","02bc2a7a7682d6b0ddc745229aff8defc26f26649c9138a82e598ff97887924713"}, - {"RHush1En19qX2RygkcEg8tSZ1tog8kRFiZ","02d26b12982c4516faf3ccd2be162f21659f0022c88a89de905f9c18d833c7c371"}, - {"RHushXP2DHksHNQe6W572Yzv4awwCdW3xd","038587a8e96f487afed148ca93328b766928c4968b25c6b27e292af0d56715df98"}, - {"RHushUq1jpKdiWmHmnF7KQKEFY1HL3jxJi","03e9c491270b08613d1ec7c69b779e99f2c8c18475dd22f0cb2f35792822cd5335"}, - {"RHushDE7wimzRmQ1vGyQAb4tHfY17tSNBG","02ac63417f3ca77b5040db2c8e7029a115cd01ef3482d30bbaffcbc6bcb737fd43"}, - {"RHushSjWrj9NCs4CVoJPYL9aaUfunqLVPH","023b16bf42f558117d4277ec4814da82a58e2be744c5ce65022eb1c14d75f2c64d"}, - {"RHushqCoG4swiBnPZfASZxPezxWQQm5b4y","02a2ab4315f2845989c007443e740ccbc8dc8272f98680d97228a0bc5ab8780146"}, - {"RHushGnyatVjV3P6XV3AFEKtvpJKjZBwEy","0229d0fe5e080de8d9ff6d6c81d58db6d091de33854cb81dfb687caedd2ea08907"}, - {"RHushzUshnwkZoh2WmH7SLy1XqB9EYa7in","02409c2b52f7dda4a940f989e1582087925407da1ce63ff4a1a6914f1774effa09"}, - {"RHushaSfRLrsnxE4z8s3FVmSkyhaf2FCy8","03c8d684550004b16c061fc34331d106f9e54323e75824ddefe386a552018e4857"} + {"RFetqf8WUfWnwNeXdknkm8ojk7EXnYFzrv", "038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac"}, + {"RV7YSVW89WC9jBDtFG4ubtopDRove4Tfvc", "03c9d35488be73fe4f2dbb1dc011468482d71bac32249f8cce6480bcc574415d19"}, + {"RBPFE9oXceZBWTn3Vhne4FUKE9vxGEXUKX", "028a8bb6ded2692b39a69ec2d3c9836ff221815909d5cd65257374aeb66394a002"}, + {"RM3cvUcafPhjyypZLEginQjdhjLnSgJHte", "03a36180014115b47b97c1c8776a269bba66047b1ce2c7eb1a3d4e995a6dfff0df"}, + {"RFFX1VaTmZYPBLCzFj7w3iJQArV9ZdaWcW", "02190865f3ca3678d322c96e49a3ddf8ad394a4c8cd97d4bb3376cf547d0d83c66"}, + {"RDwZsLpH1QiAbJwUEY8ajXwTzu3PaWhx7n", "023ea0babb34e1ff9f4db8131ee84ad8991b954038a1e6ef9afc2a1b3fa13bbcb9"}, + {"RCUvfnmt16ZMvLTmLGGAztcAE8fBjfbP6u", "0379a5ba9fb6b463ffcdc0b1f3ecf45a5b737275354f9c2598492f20660f6f7dfd"}, + {"RBLu9adNVMVf6jzLLbAenWovcwq8nU6gYd", "022cd69381231d69d6d3b9638762df849bc7bbab71cbb8383eec29ca677f1afa30"}, + {"RWfv6wd2fwgecnJxC1Ykpf1SJefGh2Wc6i", "03da8a8f57d88afb61f712a8cd35462b65ce2b2575db8f9ee33a725dcd12c44755"}, + {"RWiK4xooG3dPdvaovu6JvR3DWoYD4tfRjx", "02ffe66af4d71345fe6984b5002ad69206e1817566a70d9ac406a679be6a3335a0"}, + {"RYLNiJiRnEGeMxx1Q2xLoFujshRNkBa2x4", "028ef6501004569c1170ce2d7ec7ecfe5739001130ad1b39129f8b88cd3d610257"}, + {"RTw36Ksy5Wk1Xv3B53T79zoRd6XDsE9MS6", "02d7cf4ece00895ca857fcdd0a4c2fc9c949a518d2750396f77d9f031c08a94364"}, + {"RTPkUBriQzZy67WmFhEs6aQzJn5HBB3ntb", "03319ca1eae5888c45115d160ac07c4f2abd1720926aa579d535c4b46c807bb7f7"}, + {"RBmZzttvDnMaEv47cWXs8SgdC993djB68r", "034302c4e1ff72a5f5391f259f7a46e646c7845aa2c9de9fb0c0a4c4802aad79d6"}, + {"RGocb2jLCa2E9kVHDUsijrVGTDP82ngGYZ", "024440a18a16e38b836b3ad9bb54ab0b5ba83b04edebb58c62c09b2de29e9fc703"}, + {"RVqwCjPQ6AJ6r9WeGzQvAT4eGXDScprLkW", "028a94e53ad8ed9e78f0f8a87cf3bc4754784222ad7ddf2d3dc5fafec2f6891cde"}, + {"RB2Xc8eLrATRWVsxrZKHHx3hyJz1vugMt9", "02eca07a9b5810fe929a87f90e5f02e29a06479d39cd3a888abfa1793e1565155a"}, + {"RKm7WUuFfqCTiUBkbxBsdh54nT6ivXpDPX", "03e3f634671005c8ffb7fe883fcf9e08f6f5486df057f215d761741d91c88de898"}, + {"RLbHTvFQoz946W3o3gXTrjxxADeUsWWW16", "02e6bb6dcecf5e3abfe239dec55842a92f096eeac7f0ff7621c3e8948e5e789b27"}, + {"RD75njr2RLGC5PqjHbWwuL7ndTqZiUfYxs", "0250d9996c25a34cb1b4e86303a297fc5c49c65615eb31a57fb17d1e1b376e71be"}, + {"RT1VTzZYZLWUsPWFJ2oypEqB1MXMfq8b5Y", "02d1797941b7df42a98f59ede0f22294e7c02754232a8b1de9512ededaf3f82880"}, + {"RKeXriTVXioHeKpFTjC8Cjohd6DHGUcKqt", "0341e62f0cdffc4ba3e0efb793c0fcaaad1b611db7021b844f643d5c25847733d2"}, + {"RQYrDEgZPKMFAgTHNkWFeMHEmpkXe8j28T", "02b8719cd8484755990158cbdf7b9d990d4a5c3741cabe204e51ed04be5bd50133"}, + {"RE85TACcn8CEn26itAxQV9afxV9mVg17vm", "0367f569d3dc304e699196fe9b798671fe3f12df7851a0a474879b0dbf8bc508d1"}, + {"RPYWQJXto1aeCGe8T6g9Wo4tAL4xE82LJ8", "02cf1e245dfb44e418fd550abb825a600e1753d46a51995970e70c98be539da33e"}, + {"RSVHRS5wqEw7bxfuE9k6xJGbARcy5guisp", "03ab8ac83d689ce76b5d29a54c3b34d0a6cb37d64313ff4467c744787475969a23"}, + {"REAQwBaJFo6DyBkwfW7rTTDbUtkdmATcQ8", "025e80f0075514cc5940de85c0c559efa99a3688faf6cccb8c1d1f38b96ca91e71"}, + {"RF1gz8QBw5uFScGasqVxoUjQwJCD9zHJwC", "031cdae4b545e5049ccee8e0cb792e25795b56e08b5e64b1d972c9b94e9bfd4ed0"}, + {"RTnLGoWzpsyoGSViGH8GyYcYhSveSEmnPV", "03cf3403a9d1cefa83e07b73e618a7f991d140a8283a02df3ce7c00223f27f43d0"}, + {"RArURqxp6qfF7fqv38tCYr6p4zBtLtqf4x", "026bc4c91c2c35fabe88fea6470d6cda98977a97c251656adf25b81653c00c3800"}, + {"RN8GCryShNFvBWtcNEWrQJ5A9AWb3JJoXt", "02afa94f6574cd0fe4f5dc83b09a2112457862421ce96bdc75c1cf25ef5b1f8c4b"}, + {"RQSC2eBckcFPWzq9UtofePC31wgDySfJtw", "035d570768d844c8150a3bd966a2e13aa99316f4ab3e80370c4d16fb02f95d0974"}, + {"RC4uQsfH6jXpgnTFuFiDwAFo58gHLNkWo7", "02402b0ab7001fd4bcb4fa0d8d7006a6c521b1c76e85aad7b374ecd6c5d564c237"}, + {"RREcuaUWSkNzTNPBbFLbXKTKiC4fd5t47J", "03d5bf8b43c44ba064e897da47dd36dba537bebf013d28247ce7a088496dd9b66d"}, + {"REFyC5e7kmse3PUapDuXHL2xmtYEGttYYL", "035f56fd01dd21725928bbd878b795dccafecc03b978dc83748e9194dcbfebfb79"}, + {"RH1BLwZosLp2hv9msdZGdSu93K8GrMWw7D", "0224ab22ece88f624f80a8535b8d5194646ad6be749070ec188a22c5e29fdd7098"}, + {"RNkhugMQVbqDysSayHu2eAhTQpXzKWqZ3m", "02caab4c83c8cc245a7aeb6d25504363555d1b0874aef0f9f8116b4ddb61f24799"}, + {"RKiyhLELDJATA7ZCUcutkP1WCEHnAgZRZ8", "028c01859a700ed3941a5786cf2043992e17a45c6689ac4bf608ad3f19e6d0e832"}, + {"RLKARvLNo6Abkh5qh5NVn2HJmYfj8ELa6A", "0300a33629da90b9d3c0519d796f4b1278355bb8c46e4caee04b1305e2ab2ff3f2"}, + {"RACX21FKLenyyEf8SYK3LmjsDzkDthwUbR", "0205d73c6a3e969eff29e5f424c861d22544245e09eaafc3fefe021cad052b7c0b"}, + {"RETb7pEDauKBEuTBuXDhKS3ksd2p8x9KYa", "025c1f7596fd0b7286e6ebd1b3c275a14a13aa4d134db4677769324969b7b7e3a5"}, + {"RJrAo78TL6zUmiHXbBv8oRhfGKxGnPnxUu", "02d40a76fbab96a78898b7579626be6dfe360c63b91030e513f849f212d57c1af6"}, + {"RL8g6ANxhZBPHHHWgApaiSQ2BSP9qKwuwf", "020236a5748ea49da891276bcb85dc03487cb9f3d0c2b2cdb35227b6a624f86797"}, + {"RY3vwBjuuTCiYL5am9HmwbdCjffWd9f4CE", "032f61fd08957d9b88dabc077d8732bef6c30d0234c14e02f3a741116834f591dc"}, + {"RQW4LsSzjCPtNw1HGamSaCoiirvsrZmDY5", "02e29451f9baf0186a655396726a22a20617a3e54ea895590f6066abc993f83d32"}, + {"RJtjorxqhazz39UpFdhDW8MiW4E3jhXDNk", "03795b7a650db872c22f13a9c88ad5c1ad3cb07a349f1f29e9789efd27e151164b"}, + {"RSi8AiCCtS3doFupdpdfuorAhkrCS6mLMu", "037a62ff6b7eb2ba1e170b5c42e7788817ded6a3a7ed841321c01cc107aa647d42"}, + {"RMjMXC8m9PgAaMMvwqgLCyCrv47pp6F6XY", "033bdf151c01bc733e614f9d4f204ca44396bf56984df6643205d349a35f7b265d"}, + {"RYB3ZMgHt4h7YL8TUzpqaSDw22ABksAPGC", "021266e045f95322fceddae02877dca9721792bef8f2be28cacd7c36290cd813a7"}, + {"RGwy64PXswUKpiepfzgaRW98v3gsuqPtow", "03008783c34c2622e7167f0a5201846133e530e89dfe1a8fbcf4c29b33051c4565"}, + {"RKJRPLaQV4AkWF6EfUUzFwawTGU4RQZgcS", "03c20a9fd21de76a20ffc87e384be735dfabb7f34a2d881ca9714830fb1bbe6bdb"}, + {"RQ4SPvBKTEKyV6y31iSihtfMxi3KeyAJgV", "033c5a23c75d946c15c15fac1e6d78e08c2b656549a158627cfb6bc44bb7b3a560"}, + {"RTvRBC1pCQpPKrS27Q4hUCVKVpa5tSTsFS", "02c25672fae388a0613d0127fcfe38ef37f5f354ecfdea0fb734528e354319bd9d"}, + {"RKxWu9HpCg7m3UeUGw2Xs1SpFiR96fSCQj", "02ec760d09b369b82b34d864af5a468d8a7dc5609b06bce455d045d1059c4b0f71"}, + {"RBAaUWAD8jwVLL7ueb7ciAQewqgheKxwdk", "0274ec3abcca214cdf7f1a565f5f3d3fa910e62e751a1ab0de148ea14ba72d6ba7"}, + {"RT853SBEGt4EWrKbpSujya69DG1jSNYjob", "02e80260ca44b8539159e6af678cf5ed0bc596753e4985f66418d6417085b4104e"}, + {"RKjEuhVByPwJcZ9wuBgfELiCVnBrc4F8i4", "0357c38f5d5eb1662a54b980c9243ddd8b2100d4b2b9f8175246938ef76e100678"}, + {"RT6wVuFFPU5tY6C7Buup1GLV3SE5mpYEha", "02571085ead1aca86b9e90fa9a23d99a194c862524b0c714102888be5bf122dc7d"}, + {"RSTgcpV82AivrvWJpd4LR2KwWirwbwXE3Y", "021a0ee4611ca4d8a2e209cc43b95036deb0a9d1cc31fc9f87d50233a44f05ec1a"}, + {"RCiaXRzo4AAG3zmPL3Hx63NsRWv5UGiNuM", "02f4876be65c54613e47f7fac67f1453e8d8fde5e19fa53f278a1083a08b258ab3"}, + {"RCGgLWrTTaqBhUsS1BqrmFpJZAdNJMzscv", "02893d2db5329b15a33aa7edfbf323c85cabbdc25caa6cf6186fac6052ae6d96a0"}, + {"RAJWHL6MzGFKg7KB2sZ87KPQUSvxy3VrEW", "0389971362b002ab5dfa1b5f9c4f88e68249511a3935242ba1e0d31c1c88a36d70"}, + {"RU592tQnbH8gt6xd5Uu23nEw3SucDNkXmK", "02b8b6a2266fe57b25f2d4b1da93a07d27930154e78f9d137bc7509cf1ae8e3d49"}, + {"RLGCLRzaEmruPC9UmVt5qRHEhXwHip1e6d", "02a2fd96b4459411ad2b09597ba59cf52b282c56330da7c0cc6d2a5c0323a18f1e"} } }; @@ -543,7 +542,7 @@ int32_t gethushseason(int32_t height); #define PRICES_MAXDATAPOINTS 8 uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uint64_t basevolume); int32_t komodo_paxprices(int32_t *heights,uint64_t *prices,int32_t max,char *base,char *rel); -int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); +int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); char *bitcoin_address(char *coinaddr,uint8_t addrtype,uint8_t *pubkey_or_rmd160,int32_t len); int32_t komodo_minerids(uint8_t *minerids,int32_t height,int32_t width); int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[IGUANA_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen); diff --git a/src/hush_notary.h b/src/hush_notary.h index 6434998bc..2debc2e90 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -22,45 +22,43 @@ const char *Notaries_genesis[][2] = { - { "jl777_testA", "03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828" }, - { "jl777_testB", "02ebfc784a4ba768aad88d44d1045d240d47b26e248cafaf1c5169a42d7a61d344" }, - { "pondsea_SH", "02209073bc0943451498de57f802650311b1f12aa6deffcd893da198a544c04f36" }, - { "crackers_EU", "0340c66cf2c41c41efb420af57867baa765e8468c12aa996bfd816e1e07e410728" }, - { "pondsea_EU", "0225aa6f6f19e543180b31153d9e6d55d41bc7ec2ba191fd29f19a2f973544e29d" }, - { "locomb_EU", "025c6d26649b9d397e63323d96db42a9d3caad82e1d6076970efe5056c00c0779b" }, - { "fullmoon_AE", "0204a908350b8142698fdb6fabefc97fe0e04f537adc7522ba7a1e8f3bec003d4a" }, - { "movecrypto_EU", "021ab53bc6cf2c46b8a5456759f9d608966eff87384c2b52c0ac4cc8dd51e9cc42" }, - { "badass_EU", "0209d48554768dd8dada988b98aca23405057ac4b5b46838a9378b95c3e79b9b9e" }, - { "crackers_NA", "029e1c01131974f4cd3f564cc0c00eb87a0f9721043fbc1ca60f9bd0a1f73f64a1" }, - { "proto_EU", "03681ffdf17c8f4f0008cefb7fa0779c5e888339cdf932f0974483787a4d6747c1" }, // 10 - { "jeezy_EU", "023cb3e593fb85c5659688528e9a4f1c4c7f19206edc7e517d20f794ba686fd6d6" }, - { "farl4web_EU", "035caa40684ace968677dca3f09098aa02b70e533da32390a7654c626e0cf908e1" }, - { "nxtswe_EU", "032fb104e5eaa704a38a52c126af8f67e870d70f82977e5b2f093d5c1c21ae5899" }, - { "traderbill_EU", "03196e8de3e2e5d872f31d79d6a859c8704a2198baf0af9c7b21e29656a7eb455f" }, - { "vanbreuk_EU", "024f3cad7601d2399c131fd070e797d9cd8533868685ddbe515daa53c2e26004c3" }, // 15 - { "titomane_EU", "03517fcac101fed480ae4f2caf775560065957930d8c1facc83e30077e45bdd199" }, - { "supernet_AE", "029d93ef78197dc93892d2a30e5a54865f41e0ca3ab7eb8e3dcbc59c8756b6e355" }, - { "supernet_EU", "02061c6278b91fd4ac5cab4401100ffa3b2d5a277e8f71db23401cc071b3665546" }, - { "supernet_NA", "033c073366152b6b01535e15dd966a3a8039169584d06e27d92a69889b720d44e1" }, - { "yassin_EU", "033fb7231bb66484081952890d9a03f91164fb27d392d9152ec41336b71b15fbd0" }, // 20 - { "durerus_EU", "02bcbd287670bdca2c31e5d50130adb5dea1b53198f18abeec7211825f47485d57" }, - { "badass_SH", "026b49dd3923b78a592c1b475f208e23698d3f085c4c3b4906a59faf659fd9530b" }, - { "badass_NA", "02afa1a9f948e1634a29dc718d218e9d150c531cfa852843a1643a02184a63c1a7" }, - { "pondsea_NA", "031bcfdbb62268e2ff8dfffeb9ddff7fe95fca46778c77eebff9c3829dfa1bb411" }, - { "rnr_EU", "0287aa4b73988ba26cf6565d815786caf0d2c4af704d7883d163ee89cd9977edec" }, - { "crackers_SH", "02313d72f9a16055737e14cfc528dcd5d0ef094cfce23d0348fe974b6b1a32e5f0" }, - { "grewal_SH", "03212a73f5d38a675ee3cdc6e82542a96c38c3d1c79d25a1ed2e42fcf6a8be4e68" }, - { "polycryptoblock_NA", "02708dcda7c45fb54b78469673c2587bfdd126e381654819c4c23df0e00b679622" }, - { "titomane_NA", "0387046d9745414fb58a0fa3599078af5073e10347e4657ef7259a99cb4f10ad47" }, - { "titomane_AE", "03cda6ca5c2d02db201488a54a548dbfc10533bdc275d5ea11928e8d6ab33c2185" }, - { "kolo_EU", "03f5c08dadffa0ffcafb8dd7ffc38c22887bd02702a6c9ac3440deddcf2837692b" }, - { "artik_NA", "0224e31f93eff0cc30eaf0b2389fbc591085c0e122c4d11862c1729d090106c842" }, - { "eclips_EU", "0339369c1f5a2028d44be7be6f8ec3b907fdec814f87d2dead97cab4edb71a42e9" }, - { "titomane_SH", "035f49d7a308dd9a209e894321f010d21b7793461b0c89d6d9231a3fe5f68d9960" }, + {"RFetqf8WUfWnwNeXdknkm8ojk7EXnYFzrv", "038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac"}, + {"RV7YSVW89WC9jBDtFG4ubtopDRove4Tfvc", "03c9d35488be73fe4f2dbb1dc011468482d71bac32249f8cce6480bcc574415d19"}, + {"RBPFE9oXceZBWTn3Vhne4FUKE9vxGEXUKX", "028a8bb6ded2692b39a69ec2d3c9836ff221815909d5cd65257374aeb66394a002"}, + {"RM3cvUcafPhjyypZLEginQjdhjLnSgJHte", "03a36180014115b47b97c1c8776a269bba66047b1ce2c7eb1a3d4e995a6dfff0df"}, + {"RFFX1VaTmZYPBLCzFj7w3iJQArV9ZdaWcW", "02190865f3ca3678d322c96e49a3ddf8ad394a4c8cd97d4bb3376cf547d0d83c66"}, + {"RDwZsLpH1QiAbJwUEY8ajXwTzu3PaWhx7n", "023ea0babb34e1ff9f4db8131ee84ad8991b954038a1e6ef9afc2a1b3fa13bbcb9"}, + {"RCUvfnmt16ZMvLTmLGGAztcAE8fBjfbP6u", "0379a5ba9fb6b463ffcdc0b1f3ecf45a5b737275354f9c2598492f20660f6f7dfd"}, + {"RBLu9adNVMVf6jzLLbAenWovcwq8nU6gYd", "022cd69381231d69d6d3b9638762df849bc7bbab71cbb8383eec29ca677f1afa30"}, + {"RWfv6wd2fwgecnJxC1Ykpf1SJefGh2Wc6i", "03da8a8f57d88afb61f712a8cd35462b65ce2b2575db8f9ee33a725dcd12c44755"}, + {"RWiK4xooG3dPdvaovu6JvR3DWoYD4tfRjx", "02ffe66af4d71345fe6984b5002ad69206e1817566a70d9ac406a679be6a3335a0"}, + {"RYLNiJiRnEGeMxx1Q2xLoFujshRNkBa2x4", "028ef6501004569c1170ce2d7ec7ecfe5739001130ad1b39129f8b88cd3d610257"}, + {"RTw36Ksy5Wk1Xv3B53T79zoRd6XDsE9MS6", "02d7cf4ece00895ca857fcdd0a4c2fc9c949a518d2750396f77d9f031c08a94364"}, + {"RTPkUBriQzZy67WmFhEs6aQzJn5HBB3ntb", "03319ca1eae5888c45115d160ac07c4f2abd1720926aa579d535c4b46c807bb7f7"}, + {"RBmZzttvDnMaEv47cWXs8SgdC993djB68r", "034302c4e1ff72a5f5391f259f7a46e646c7845aa2c9de9fb0c0a4c4802aad79d6"}, + {"RGocb2jLCa2E9kVHDUsijrVGTDP82ngGYZ", "024440a18a16e38b836b3ad9bb54ab0b5ba83b04edebb58c62c09b2de29e9fc703"}, + {"RVqwCjPQ6AJ6r9WeGzQvAT4eGXDScprLkW", "028a94e53ad8ed9e78f0f8a87cf3bc4754784222ad7ddf2d3dc5fafec2f6891cde"}, + {"RB2Xc8eLrATRWVsxrZKHHx3hyJz1vugMt9", "02eca07a9b5810fe929a87f90e5f02e29a06479d39cd3a888abfa1793e1565155a"}, + {"RKm7WUuFfqCTiUBkbxBsdh54nT6ivXpDPX", "03e3f634671005c8ffb7fe883fcf9e08f6f5486df057f215d761741d91c88de898"}, + {"RLbHTvFQoz946W3o3gXTrjxxADeUsWWW16", "02e6bb6dcecf5e3abfe239dec55842a92f096eeac7f0ff7621c3e8948e5e789b27"}, + {"RD75njr2RLGC5PqjHbWwuL7ndTqZiUfYxs", "0250d9996c25a34cb1b4e86303a297fc5c49c65615eb31a57fb17d1e1b376e71be"}, + {"RT1VTzZYZLWUsPWFJ2oypEqB1MXMfq8b5Y", "02d1797941b7df42a98f59ede0f22294e7c02754232a8b1de9512ededaf3f82880"}, + {"RKeXriTVXioHeKpFTjC8Cjohd6DHGUcKqt", "0341e62f0cdffc4ba3e0efb793c0fcaaad1b611db7021b844f643d5c25847733d2"}, + {"RQYrDEgZPKMFAgTHNkWFeMHEmpkXe8j28T", "02b8719cd8484755990158cbdf7b9d990d4a5c3741cabe204e51ed04be5bd50133"}, + {"RE85TACcn8CEn26itAxQV9afxV9mVg17vm", "0367f569d3dc304e699196fe9b798671fe3f12df7851a0a474879b0dbf8bc508d1"}, + {"RPYWQJXto1aeCGe8T6g9Wo4tAL4xE82LJ8", "02cf1e245dfb44e418fd550abb825a600e1753d46a51995970e70c98be539da33e"}, + {"RSVHRS5wqEw7bxfuE9k6xJGbARcy5guisp", "03ab8ac83d689ce76b5d29a54c3b34d0a6cb37d64313ff4467c744787475969a23"}, + {"REAQwBaJFo6DyBkwfW7rTTDbUtkdmATcQ8", "025e80f0075514cc5940de85c0c559efa99a3688faf6cccb8c1d1f38b96ca91e71"}, + {"RF1gz8QBw5uFScGasqVxoUjQwJCD9zHJwC", "031cdae4b545e5049ccee8e0cb792e25795b56e08b5e64b1d972c9b94e9bfd4ed0"}, + {"RTnLGoWzpsyoGSViGH8GyYcYhSveSEmnPV", "03cf3403a9d1cefa83e07b73e618a7f991d140a8283a02df3ce7c00223f27f43d0"}, + {"RArURqxp6qfF7fqv38tCYr6p4zBtLtqf4x", "026bc4c91c2c35fabe88fea6470d6cda98977a97c251656adf25b81653c00c3800"}, + {"RN8GCryShNFvBWtcNEWrQJ5A9AWb3JJoXt", "02afa94f6574cd0fe4f5dc83b09a2112457862421ce96bdc75c1cf25ef5b1f8c4b"}, + {"RQSC2eBckcFPWzq9UtofePC31wgDySfJtw", "035d570768d844c8150a3bd966a2e13aa99316f4ab3e80370c4d16fb02f95d0974"}, + {"RC4uQsfH6jXpgnTFuFiDwAFo58gHLNkWo7", "02402b0ab7001fd4bcb4fa0d8d7006a6c521b1c76e85aad7b374ecd6c5d564c237"}, + {"RREcuaUWSkNzTNPBbFLbXKTKiC4fd5t47J", "03d5bf8b43c44ba064e897da47dd36dba537bebf013d28247ce7a088496dd9b66d"}, + {"REFyC5e7kmse3PUapDuXHL2xmtYEGttYYL", "035f56fd01dd21725928bbd878b795dccafecc03b978dc83748e9194dcbfebfb79"}, }; -#define CRYPTO555_PUBSECPSTR "020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2acbadcaca" - int32_t gethushseason(int32_t height) { if ( height <= HUSH_SEASON_HEIGHTS[0] ) @@ -85,7 +83,7 @@ int32_t getacseason(uint32_t timestamp) return(0); } -int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp) +int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp) { int32_t i,htind,n; uint64_t mask = 0; struct knotary_entry *kp,*tmp; static uint8_t kmd_pubkeys[NUM_HUSH_SEASONS][64][33],didinit[NUM_HUSH_SEASONS]; @@ -124,7 +122,7 @@ int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestam int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t height,uint32_t timestamp) { int32_t i,n; uint8_t pubkeys[64][33]; - n = komodo_notaries(pubkeys,height,timestamp); + n = hush_notaries(pubkeys,height,timestamp); *numnotariesp = n; for (i=0; ididinit = (KOMODO_LOADINGBLOCKS == 0); } // else fprintf(stderr,"error loading block at %d/%d",pindex->GetHeight(),height); } - if ( pindex->didinit != 0 && pindex->GetHeight() >= 0 && (num= komodo_notaries(pubkeys,(int32_t)pindex->GetHeight(),(uint32_t)pindex->nTime)) > 0 ) + if ( pindex->didinit != 0 && pindex->GetHeight() >= 0 && (num= hush_notaries(pubkeys,(int32_t)pindex->GetHeight(),(uint32_t)pindex->nTime)) > 0 ) { for (i=0; ididinit != 0 ) return(pindex->notaryid); timestamp = pindex->GetBlockTime(); - if ( (num= komodo_notaries(pubkeys,height,timestamp)) > 0 ) + if ( (num= hush_notaries(pubkeys,height,timestamp)) > 0 ) { for (i=0; i &Notar // fetch notary pubkey array. uint64_t total = 0, AmountToPay = 0; int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; - numSN = komodo_notaries(notarypubkeys, height, timestamp); + numSN = hush_notaries(notarypubkeys, height, timestamp); // No point going further, no notaries can be paid. if ( notarypubkeys[0][0] == 0 ) @@ -1910,7 +1910,7 @@ uint64_t komodo_checknotarypay(CBlock *pblock,int32_t height) std::vector NotarisationNotaries; uint8_t *script; int32_t scriptlen; uint64_t timestamp = pblock->nTime; int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; - numSN = komodo_notaries(notarypubkeys, height, timestamp); + numSN = hush_notaries(notarypubkeys, height, timestamp); if ( !GetNotarisationNotaries(notarypubkeys, numSN, pblock->vtx[1].vin, NotarisationNotaries) ) return(0); @@ -2163,7 +2163,7 @@ int32_t komodo_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height) failed = 1; if ( height > 0 && SMART_CHAIN_SYMBOL[0] == 0 ) // for the fast case { - if ( (n= komodo_notaries(pubkeys,height,pblock->nTime)) > 0 ) + if ( (n= hush_notaries(pubkeys,height,pblock->nTime)) > 0 ) { for (i=0; inTime); + numSN = hush_notaries(notarypubkeys, height, pblock->nTime); if ( pblock->vtx[1].vin.size() < numSN/5 ) { fprintf(stderr, "ht.%i does not meet minsigs.%i sigs.%lld\n",height,numSN/5,(long long)pblock->vtx[1].vin.size()); diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index f20a6cd82..bf0ae80ac 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -584,7 +584,7 @@ int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 * //sleep(1); // needed to avoid no pnodes error *desttxidp = NSPV_opretextract(ntzheightp,blockhashp,symbol,opret,tx.GetHash()); nTime = NSPV_blocktime(*ntzheightp); - komodo_notaries(elected,*ntzheightp,nTime); + hush_notaries(elected,*ntzheightp,nTime); if ( verifyntz != 0 && (numsigs= NSPV_fastnotariescount(tx,elected,nTime)) < 12 ) { fprintf(stderr,"numsigs.%d error\n",numsigs); diff --git a/src/komodo_structs.h b/src/komodo_structs.h index 861a2d410..949fa37c1 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -14,7 +17,6 @@ ******************************************************************************/ #include "hush_defs.h" - #include "uthash.h" #include "utlist.h" diff --git a/src/main.cpp b/src/main.cpp index 926763a5b..1cffb53ff 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1377,7 +1377,7 @@ int32_t komodo_isnotaryvout(char *coinaddr,uint32_t tiptime) // from ac_private if ( NOTARY_ADDRESSES[season-1][0][0] == 0 ) { uint8_t pubkeys[64][33]; - komodo_notaries(pubkeys,0,tiptime); + hush_notaries(pubkeys,0,tiptime); } if ( strcmp(coinaddr,CRYPTO555_HUSHADDR) == 0 ) return(1); diff --git a/src/miner.cpp b/src/miner.cpp index f5b224833..30c6196eb 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -152,7 +152,7 @@ int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void * int32_t decode_hex(uint8_t *bytes,int32_t n,char *hex); int32_t komodo_is_notarytx(const CTransaction& tx); uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &NotarisationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len); -int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); +int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); int32_t komodo_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *script, int32_t len); CScript komodo_mineropret(int32_t nHeight); bool komodo_appendACscriptpub(); @@ -257,7 +257,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 if ( ASSETCHAINS_NOTARY_PAY[0] != 0 ) { // Only use speical miner for notary pay chains. - numSN = komodo_notaries(notarypubkeys, nHeight, pblock->nTime); + numSN = hush_notaries(notarypubkeys, nHeight, pblock->nTime); } CCoinsViewCache view(pcoinsTip); diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 42b6b6301..4b09ba414 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -937,7 +937,7 @@ UniValue minerids(const UniValue& params, bool fHelp, const CPubKey& mypk) if ( (n= komodo_minerids(minerids,height,(int32_t)(sizeof(minerids)/sizeof(*minerids)))) > 0 ) { memset(tally,0,sizeof(tally)); - numnotaries = komodo_notaries(pubkeys,height,timestamp); + numnotaries = hush_notaries(pubkeys,height,timestamp); if ( numnotaries > 0 ) { for (i=0; iGetBlockTime(); } - if ( (n= komodo_notaries(pubkeys,height,timestamp)) > 0 ) + if ( (n= hush_notaries(pubkeys,height,timestamp)) > 0 ) { for (i=0; inTime); + numNN = hush_notaries(notarypubkeys, height, chainActive[height]->nTime); BOOST_FOREACH(const Notarisation& n, nibs) { diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index d0c5e0bdf..f71ef3b88 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -67,7 +67,7 @@ uint32_t komodo_segid32(char *coinaddr); int64_t komodo_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height); int32_t notarizedtxid_height(char *dest,char *txidstr,int32_t *hushnotarized_heightp); uint64_t komodo_notarypayamount(int32_t nHeight, int64_t notarycount); -int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); +int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); // This is the last version of upstream that was merged in // We only cherry-pick since then @@ -1201,7 +1201,7 @@ UniValue getnotarypayinfo(const UniValue& params, bool fHelp, const CPubKey& myp // pubkey 020000000000000000000000000000000 balance = checkburnaddress(received, TotalNotaryPay, height, "REDVp3ox1pbcWYCzySadfHhk8UU3HM4k5x"); - notarycount = komodo_notaries(notarypubkeys, height, chainActive[height]->GetBlockTime()); + notarycount = hush_notaries(notarypubkeys, height, chainActive[height]->GetBlockTime()); NotaryPay = komodo_notarypayamount(height, notarycount)*notarycount; bool spent = (received != balance); if ( !spent ) diff --git a/src/test-hush/test_eval_notarisation.cpp b/src/test-hush/test_eval_notarisation.cpp index 8d505be8b..7816b7fd9 100644 --- a/src/test-hush/test_eval_notarisation.cpp +++ b/src/test-hush/test_eval_notarisation.cpp @@ -18,7 +18,7 @@ #include "testutils.h" -extern int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); +extern int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); namespace TestEvalNotarisation { @@ -66,7 +66,7 @@ namespace TestEvalNotarisation { template void SetupEval(EvalMock &eval, CMutableTransaction ¬ary, Modifier modify) { - eval.nNotaries = komodo_notaries(eval.notaries, 780060, 1522946781); + eval.nNotaries = hush_notaries(eval.notaries, 780060, 1522946781); // make fake notary inputs notary.vin.resize(11); From d38ae7d82c3ab8179c682c6aeeb943eca322b970 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 18:55:25 -0500 Subject: [PATCH 077/277] Hush little baby --- src/cc/CCutilbits.cpp | 2 +- src/cc/CCutils.cpp | 2 +- src/hush.h | 2 +- src/{komodo_structs.h => hush_structs.h} | 0 src/komodo-tx.cpp | 2 +- src/rpc/blockchain.cpp | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) rename src/{komodo_structs.h => hush_structs.h} (100%) diff --git a/src/cc/CCutilbits.cpp b/src/cc/CCutilbits.cpp index 72fd0f266..c43944144 100644 --- a/src/cc/CCutilbits.cpp +++ b/src/cc/CCutilbits.cpp @@ -18,7 +18,7 @@ */ #include "CCinclude.h" -#include "komodo_structs.h" +#include "hush_structs.h" int32_t unstringbits(char *buf,uint64_t bits) { diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index d78134c13..8f39e00b1 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -18,7 +18,7 @@ */ #include "CCinclude.h" -#include "komodo_structs.h" +#include "hush_structs.h" #include "key_io.h" #ifdef TESTMODE diff --git a/src/hush.h b/src/hush.h index ead0020ab..46f17bd50 100644 --- a/src/hush.h +++ b/src/hush.h @@ -43,7 +43,7 @@ void komodo_event_rewind(struct komodo_state *sp,char *symbol,int32_t height); int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block); bool check_pprevnotarizedht(); -#include "komodo_structs.h" +#include "hush_structs.h" #include "hush_globals.h" #include "hush_utils.h" #include "komodo_curve25519.h" diff --git a/src/komodo_structs.h b/src/hush_structs.h similarity index 100% rename from src/komodo_structs.h rename to src/hush_structs.h diff --git a/src/komodo-tx.cpp b/src/komodo-tx.cpp index fbd06ad36..7d029c511 100644 --- a/src/komodo-tx.cpp +++ b/src/komodo-tx.cpp @@ -42,7 +42,7 @@ using namespace std; #include "uint256.h" #include "arith_uint256.h" -#include "komodo_structs.h" +#include "hush_structs.h" #include "hush_globals.h" #include "hush_defs.h" diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 4b09ba414..798c64717 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -56,7 +56,7 @@ extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& void ScriptPubKeyToJSON(const CScript& scriptPubKey, UniValue& out, bool fIncludeHex); int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); #include "hush_defs.h" -#include "komodo_structs.h" +#include "hush_structs.h" double GetDifficultyINTERNAL(const CBlockIndex* blockindex, bool networkDifficulty) { From 8d53f71fd133854c10b1ecfa6bb1bb75d4c0015a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 19:10:47 -0500 Subject: [PATCH 078/277] Hush NSPV, yeah you know me --- src/core_memusage.h | 1 + src/komodo_nSPV_defs.h | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core_memusage.h b/src/core_memusage.h index eca1d823b..9e70533e5 100644 --- a/src/core_memusage.h +++ b/src/core_memusage.h @@ -1,4 +1,5 @@ // Copyright (c) 2015 The Bitcoin Core developers +// Copyright (c) 2019-2020 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 diff --git a/src/komodo_nSPV_defs.h b/src/komodo_nSPV_defs.h index 40d9dc022..71922e5ce 100644 --- a/src/komodo_nSPV_defs.h +++ b/src/komodo_nSPV_defs.h @@ -14,8 +14,8 @@ * * ******************************************************************************/ -#ifndef KOMODO_NSPV_DEFSH -#define KOMODO_NSPV_DEFSH +#ifndef HUSH_NSPV_DEFSH +#define HUSH_NSPV_DEFSH #define NSPV_PROTOCOL_VERSION 0x00000004 #define NSPV_POLLITERS 200 @@ -189,4 +189,4 @@ struct NSPV_remoterpcresp char json[11000]; }; -#endif // KOMODO_NSPV_DEFSH +#endif // HUSH_NSPV_DEFSH From b9633591cd6a7bcd146568415e61bc4228d3638e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 19:16:16 -0500 Subject: [PATCH 079/277] Test my node --- src/chainparams.cpp | 4 ++-- src/hush_defs.h | 2 +- src/hush_globals.h | 7 +------ src/hush_utils.h | 2 +- src/wallet-utility.cpp | 2 +- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index e7febf524..74cffc0b9 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -568,7 +568,7 @@ void *chainparams_commandline() if ( ASSETCHAINS_BLOCKTIME != 60 ) { pCurrentParams->consensus.nMaxFutureBlockTime = 7 * ASSETCHAINS_BLOCKTIME; // 7 blocks - pCurrentParams->consensus.nPowTargetSpacing = ASSETCHAINS_BLOCKTIME; + pCurrentParams->consensus.nPowTargetSpacing = ASSETCHAINS_BLOCKTIME; } pCurrentParams->SetDefaultPort(ASSETCHAINS_P2PPORT); if ( ASSETCHAINS_NK[0] != 0 && ASSETCHAINS_NK[1] != 0 ) @@ -577,7 +577,7 @@ void *chainparams_commandline() pCurrentParams->SetNValue(ASSETCHAINS_NK[0]); pCurrentParams->SetKValue(ASSETCHAINS_NK[1]); } - if ( KOMODO_TESTNODE != 0 ) + if ( HUSH_TESTNODE != 0 ) pCurrentParams->SetMiningRequiresPeers(false); if ( ASSETCHAINS_RPCPORT == 0 ) ASSETCHAINS_RPCPORT = ASSETCHAINS_P2PPORT + 1; diff --git a/src/hush_defs.h b/src/hush_defs.h index c65be82e9..6c846e73d 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -525,7 +525,7 @@ extern uint8_t ASSETCHAINS_PRIVATE; extern int32_t USE_EXTERNAL_PUBKEY; extern char NOTARYADDRS[64][64]; extern char NOTARY_ADDRESSES[NUM_HUSH_SEASONS][64][64]; -extern int32_t KOMODO_TESTNODE, KOMODO_SNAPSHOT_INTERVAL; +extern int32_t HUSH_TESTNODE, KOMODO_SNAPSHOT_INTERVAL; extern int32_t ASSETCHAINS_EARLYTXIDCONTRACT; extern int32_t ASSETCHAINS_STAKED_SPLIT_PERCENTAGE; int tx_height( const uint256 &hash ); diff --git a/src/hush_globals.h b/src/hush_globals.h index 87bb50bcf..96c4e3dc0 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -95,23 +95,18 @@ uint32_t ASSETCHAINS_MINDIFF[] = {537857807}; int32_t ASSETCHAINS_LWMAPOS = 0; // percentage of blocks should be PoS int32_t ASSETCHAINS_SAPLING = -1; int32_t ASSETCHAINS_OVERWINTER = -1; - uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE; int32_t ASSETCHAINS_STAKED; uint64_t ASSETCHAINS_COMMISSION,ASSETCHAINS_SUPPLY = 10,ASSETCHAINS_FOUNDERS_REWARD; - uint32_t HUSH_INITDONE; char KMDUSERPASS[8192+512+1],BTCUSERPASS[8192]; uint16_t KMD_PORT = 7771,BITCOIND_RPCPORT = 7771; uint64_t PENDING_KOMODO_TX; extern int32_t KOMODO_LOADINGBLOCKS; unsigned int MAX_BLOCK_SIGOPS = 20000; - -int32_t KOMODO_TESTNODE, KOMODO_SNAPSHOT_INTERVAL; +int32_t HUSH_TESTNODE, KOMODO_SNAPSHOT_INTERVAL; CScript KOMODO_EARLYTXID_SCRIPTPUB; int32_t ASSETCHAINS_EARLYTXIDCONTRACT; - std::map mapHeightEvalActivate; - struct komodo_kv *KOMODO_KV; pthread_mutex_t KOMODO_KV_mutex,KOMODO_CC_mutex; diff --git a/src/hush_utils.h b/src/hush_utils.h index 387d30e01..e27ef01a4 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1787,7 +1787,7 @@ void hush_args(char *argv0) DONATION_PUBKEY = GetArg("-donation", ""); NOTARY_PUBKEY = GetArg("-pubkey", ""); KOMODO_DEALERNODE = GetArg("-dealer",0); - KOMODO_TESTNODE = GetArg("-testnode",0); + HUSH_TESTNODE = GetArg("-testnode",0); if ( strlen(NOTARY_PUBKEY.c_str()) == 66 ) { decode_hex(NOTARY_PUBKEY33,33,(char *)NOTARY_PUBKEY.c_str()); diff --git a/src/wallet-utility.cpp b/src/wallet-utility.cpp index 8a2c6a01b..46cbb1e28 100644 --- a/src/wallet-utility.cpp +++ b/src/wallet-utility.cpp @@ -21,7 +21,7 @@ uint32_t ASSETCHAINS_ALGO = 0; int32_t ASSETCHAINS_LWMAPOS = 0; int32_t ASSETCHAINS_OVERWINTER = 227520; int32_t ASSETCHAINS_SAPLING = 227520; -int32_t KOMODO_TESTNODE = 0; +int32_t HUSH_TESTNODE = 0; int32_t KOMODO_BLOCK_POSUNITS = 1000; unsigned int MAX_BLOCK_SIGOPS = 20000; From 177dd4b65c416775c59bae2e5ef088cf7d996879 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 19:28:59 -0500 Subject: [PATCH 080/277] Alerts, lol --- src/chainparams.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 74cffc0b9..bee5c607a 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -84,6 +84,7 @@ static CBlock CreateGenesisBlock(uint32_t nTime, const uint256& nNonce, const st * (no blocks before with a timestamp after, none after with * timestamp before) * + Contains no strange transactions + * + Likes long walks on the blockchain */ void *chainparams_commandline(); #include "hush_defs.h" @@ -98,7 +99,7 @@ public: { strNetworkID = "main"; - strCurrencyUnits = "KMD"; + strCurrencyUnits = "HUSH"; bip44CoinType = 141; // As registered in https://github.com/satoshilabs/slips/blob/master/slip-0044.md consensus.fCoinbaseMustBeProtected = false; consensus.nSubsidySlowStartInterval = 20000; @@ -139,11 +140,11 @@ public: pchMessageStart[1] = 0xee; pchMessageStart[2] = 0xe4; pchMessageStart[3] = 0x8d; - vAlertPubKey = ParseHex("02f20607bf67133d08246570b26816fdf727e8e54bfe919576c362c6507a2f8368"); - nDefaultPort = 7770; - nMinerThreads = 0; - nMaxTipAge = 24 * 60 * 60; - nPruneAfterHeight = 100000; + vAlertPubKey = ParseHex("038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac"); + nDefaultPort = 7770; + nMinerThreads = 0; + nMaxTipAge = 24 * 60 * 60; + nPruneAfterHeight = 100000; const size_t N = 200, K = 9; BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K)); nEquihashN = N; @@ -257,7 +258,6 @@ public: assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.nMaxFutureBlockTime = 7 * 60; - vAlertPubKey = ParseHex("00"); nDefaultPort = 17770; nMinerThreads = 0; consensus.nPowMaxAdjustDown = 32; // 32% adjustment down @@ -282,7 +282,7 @@ public: pchMessageStart[1] = 0x1F; pchMessageStart[2] = 0x7E; pchMessageStart[3] = 0x62; - vAlertPubKey = ParseHex("02f20607bf67133d08246570b26816fdf727e8e54bfe919576c362c6507a2f8368"); + vAlertPubKey = ParseHex("038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac"); nMaxTipAge = 24 * 60 * 60; nPruneAfterHeight = 1000; @@ -508,6 +508,7 @@ std::string CChainParams::GetFoundersRewardAddressAtHeight(int nHeight) const { return vFoundersRewardAddress[i]; } +// TODO: this is ZEC code, HUSH does not use it, and it can be deleted // Block height must be >0 and <=last founders reward block height // The founders reward address is expected to be a multisig (P2SH) address CScript CChainParams::GetFoundersRewardScriptAtHeight(int nHeight) const { From 5ae912ef0337cd4c4b6de7e52e442341f38afcf2 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 20:18:21 -0500 Subject: [PATCH 081/277] Better PoW error from ContextualCheckBlockHeader --- src/main.cpp | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 1cffb53ff..4dd1065fe 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5331,10 +5331,8 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta // Check proof of work if ( (SMART_CHAIN_SYMBOL[0] != 0 || nHeight < 235300 || nHeight > 236000) && block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) { - cout << block.nBits << " block.nBits vs. calc " << GetNextWorkRequired(pindexPrev, &block, consensusParams) << - " for block #" << nHeight << endl; - return state.DoS(100, error("%s: incorrect proof of work", __func__), - REJECT_INVALID, "bad-diffbits"); + cout << block.nBits << " block.nBits vs. calc " << GetNextWorkRequired(pindexPrev, &block, consensusParams) << " for block #" << nHeight << endl; + return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); } // Check timestamp against prev @@ -5343,25 +5341,20 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta if (block.GetBlockTime() <= pindexPrev->GetMedianTimePast() ) { fprintf(stderr,"ht.%d too early %u vs %u\n",(int32_t)nHeight,(uint32_t)block.GetBlockTime(),(uint32_t)pindexPrev->GetMedianTimePast()); - return state.Invalid(error("%s: block's timestamp is too early", __func__), - REJECT_INVALID, "time-too-old"); + return state.Invalid(error("%s: block's timestamp is too early", __func__), REJECT_INVALID, "time-too-old"); } - } - else - { + } else { if ( block.GetBlockTime() <= pindexPrev->nTime ) { fprintf(stderr,"ht.%d too early2 %u vs %u\n",(int32_t)nHeight,(uint32_t)block.GetBlockTime(),(uint32_t)pindexPrev->nTime); - return state.Invalid(error("%s: block's timestamp is too early2", __func__), - REJECT_INVALID, "time-too-old"); + return state.Invalid(error("%s: block's timestamp is too early2", __func__), REJECT_INVALID, "time-too-old"); } } // Check that timestamp is not too far in the future if (block.GetBlockTime() > GetTime() + consensusParams.nMaxFutureBlockTime) { - return state.Invalid(error("%s: block timestamp too far in the future", __func__), - REJECT_INVALID, "time-too-new"); + return state.Invalid(error("%s: block timestamp too far in the future", __func__), REJECT_INVALID, "time-too-new"); } if (fCheckpointsEnabled) @@ -5404,8 +5397,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta } // Reject block.nVersion < 4 blocks if (block.nVersion < 4) - return state.Invalid(error("%s : rejected nVersion<4 block", __func__), - REJECT_OBSOLETE, "bad-version"); + return state.Invalid(error("%s : rejected nVersion<4 block", __func__), REJECT_OBSOLETE, "bad-version"); return true; } From 18910ca14d77d682f30d364056423e582102b5ee Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 20:24:02 -0500 Subject: [PATCH 082/277] Only log when zouts exist and less noise to STDOUT by default --- src/main.cpp | 16 +++++++++------- src/wallet/wallet.cpp | 4 +++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 4dd1065fe..5526b2f57 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4786,15 +4786,17 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl fprintf(stderr,"%s: tx=%s has zspends=%d zouts=%d\n", __FUNCTION__, tx.GetHash().ToString().c_str(), nShieldedSpends, nShieldedOutputs ); } } - fprintf(stderr,"%s: block %s has total zspends=%d zouts=%d\n", __FUNCTION__, block.GetHash().ToString().c_str(), nShieldedSpendsInBlock, nShieldedOutputsInBlock ); + if (fDebug) { + fprintf(stderr,"%s: block %s has total zspends=%d zouts=%d\n", __FUNCTION__, block.GetHash().ToString().c_str(), nShieldedSpendsInBlock, nShieldedOutputsInBlock ); + } - pindexNew->nSproutValue = sproutValue; - pindexNew->nChainSproutValue = boost::none; - pindexNew->nSaplingValue = saplingValue; + pindexNew->nSproutValue = sproutValue; + pindexNew->nChainSproutValue = boost::none; + pindexNew->nSaplingValue = saplingValue; pindexNew->nChainSaplingValue = boost::none; - pindexNew->nFile = pos.nFile; - pindexNew->nDataPos = pos.nPos; - pindexNew->nUndoPos = 0; + pindexNew->nFile = pos.nFile; + pindexNew->nDataPos = pos.nPos; + pindexNew->nUndoPos = 0; pindexNew->nStatus |= BLOCK_HAVE_DATA; pindexNew->RaiseValidity(BLOCK_VALID_TRANSACTIONS); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index ec316beff..2561dbdbb 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1687,7 +1687,9 @@ std::pair CWallet::FindMySap LOCK(cs_SpendingKeyStore); uint256 hash = tx.GetHash(); uint32_t nZouts = tx.vShieldedOutput.size(); - LogPrintf("%s: zouts=%d in tx=%s\n",__func__,nZouts, hash.ToString().c_str()); + if(fDebug && (nZouts > 0)) { + LogPrintf("%s: zouts=%d in tx=%s\n",__func__,nZouts, hash.ToString().c_str()); + } mapSaplingNoteData_t noteData; SaplingIncomingViewingKeyMap viewingKeysToAdd; From a87cd4400f2c6896c9bb28b1ad43975555def536 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 20:28:23 -0500 Subject: [PATCH 083/277] No sweeteners will cloak some forms of bitterness. If it tastes bitter, spit it out. --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 165839b39..92676105b 100644 --- a/src/version.h +++ b/src/version.h @@ -27,7 +27,7 @@ static const int INIT_PROTO_VERSION = 209; //! In this version, 'getheaders' was introduced. static const int GETHEADERS_VERSION = 31800; //! disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION = 170009; +static const int MIN_PEER_PROTO_VERSION = 170010; //! nTime field added to CAddress, starting with this version; //! if possible, avoid requesting addresses nodes older than this static const int CADDR_TIME_VERSION = 31402; From db702d6c555a04bfc4b0283ee92ddc629ee196b2 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 20:35:36 -0500 Subject: [PATCH 084/277] The State Of Hush --- src/cc/CCutils.cpp | 6 ++-- src/cc/dapps/dappstd.c | 2 +- src/cc/rogue/main.c | 4 +-- src/hush.h | 56 ++++++++++++++++---------------- src/hush_globals.h | 4 +-- src/hush_notary.h | 30 +++++++++--------- src/hush_structs.h | 2 +- src/hush_utils.h | 10 +++--- src/init.cpp | 10 +++--- src/komodo_bitcoind.h | 10 +++--- src/komodo_events.h | 18 +++++------ src/komodo_gateway.h | 72 +++++++++++++++++++++--------------------- src/komodo_pax.h | 2 +- 13 files changed, 112 insertions(+), 114 deletions(-) diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index 8f39e00b1..1abd6429a 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -27,7 +27,7 @@ #define MIN_NON_NOTARIZED_CONFIRMS 101 #endif // TESTMODE int32_t hush_dpowconfs(int32_t height,int32_t numconfs); -struct komodo_state *komodo_stateptr(char *symbol,char *dest); +struct hush_state *hush_stateptr(char *symbol,char *dest); extern uint32_t KOMODO_DPOWCONFS; void endiancpy(uint8_t *dest,uint8_t *src,int32_t len) @@ -682,7 +682,7 @@ bool komodo_txnotarizedconfirmed(uint256 txid) CTransaction tx; uint256 hashBlock; CBlockIndex *pindex; - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; if ( KOMODO_NSPV_SUPERLITE ) { @@ -728,7 +728,7 @@ bool komodo_txnotarizedconfirmed(uint256 txid) confirms=1 + pindex->GetHeight() - txheight; } - if ((sp= komodo_stateptr(symbol,dest)) != 0 && (notarized=sp->NOTARIZED_HEIGHT) > 0 && txheight > sp->NOTARIZED_HEIGHT) notarized=0; + if ((sp= hush_stateptr(symbol,dest)) != 0 && (notarized=sp->NOTARIZED_HEIGHT) > 0 && txheight > sp->NOTARIZED_HEIGHT) notarized=0; #ifdef TESTMODE notarized=0; #endif //TESTMODE diff --git a/src/cc/dapps/dappstd.c b/src/cc/dapps/dappstd.c index 5af8cdccb..7bb52b982 100644 --- a/src/cc/dapps/dappstd.c +++ b/src/cc/dapps/dappstd.c @@ -660,7 +660,7 @@ uint16_t komodo_userpass(char *userpass,char *symbol) #endif } else sprintf(confname,"%s.conf",symbol); - //komodo_statefname(fname,symbol,confname); + //hush_statefname(fname,symbol,confname); if ( (fp= fopen(confname,"rb")) != 0 ) { port = _komodo_userpass(username,password,fp); diff --git a/src/cc/rogue/main.c b/src/cc/rogue/main.c index 5fa792259..f12915fa0 100644 --- a/src/cc/rogue/main.c +++ b/src/cc/rogue/main.c @@ -657,7 +657,7 @@ uint16_t _komodo_userpass(char *username, char *password, FILE *fp) return(port); } -/*void komodo_statefname(char *fname,char *symbol,char *str) +/*void hush_statefname(char *fname,char *symbol,char *str) { int32_t n,len; sprintf(fname,"%s",getDataDir()); @@ -707,7 +707,7 @@ uint16_t komodo_userpass(char *userpass,char *symbol) #endif } else sprintf(confname,"%s.conf",symbol); - //komodo_statefname(fname,symbol,confname); + //hush_statefname(fname,symbol,confname); if ( (fp= fopen(confname,"rb")) != 0 ) { port = _komodo_userpass(username,password,fp); diff --git a/src/hush.h b/src/hush.h index 46f17bd50..95c95e5da 100644 --- a/src/hush.h +++ b/src/hush.h @@ -39,7 +39,7 @@ uint256 NOTARIZED_HASH,NOTARIZED_DESTTXID; #include "utlist.h" int32_t gettxout_scriptPubKey(uint8_t *scriptPubkey,int32_t maxsize,uint256 txid,int32_t n); -void komodo_event_rewind(struct komodo_state *sp,char *symbol,int32_t height); +void komodo_event_rewind(struct hush_state *sp,char *symbol,int32_t height); int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block); bool check_pprevnotarizedht(); @@ -53,7 +53,7 @@ bool check_pprevnotarizedht(); #include "komodo_pax.h" #include "hush_notary.h" -int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char *dest); +int32_t komodo_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *dest); #include "komodo_kv.h" #include "komodo_gateway.h" #include "komodo_events.h" @@ -61,25 +61,25 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char void komodo_currentheight_set(int32_t height) { - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) sp->CURRENT_HEIGHT = height; } extern struct NSPV_inforesp NSPV_inforesult; int32_t komodo_currentheight() { - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; if ( KOMODO_NSPV_SUPERLITE ) { return (NSPV_inforesult.height); } - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) return(sp->CURRENT_HEIGHT); else return(0); } -int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char *dest) +int32_t komodo_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *dest) { static int32_t errs; int32_t func,ht,notarized_height,num,matched=0,MoMdepth; uint256 MoM,notarized_hash,notarized_desttxid; uint8_t pubkeys[64][33]; @@ -225,7 +225,7 @@ int32_t memread(void *dest,int32_t size,uint8_t *filedata,long *fposp,long datal return(-1); } -int32_t komodo_parsestatefiledata(struct komodo_state *sp,uint8_t *filedata,long *fposp,long datalen,char *symbol,char *dest) +int32_t komodo_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fposp,long datalen,char *symbol,char *dest) { static int32_t errs; int32_t func= -1,ht,notarized_height,MoMdepth,num,matched=0; uint256 MoM,notarized_hash,notarized_desttxid; uint8_t pubkeys[64][33]; long fpos = *fposp; @@ -356,26 +356,26 @@ int32_t komodo_parsestatefiledata(struct komodo_state *sp,uint8_t *filedata,long return(-1); } -void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t KMDheight,uint32_t KMDtimestamp,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout,uint256 MoM,int32_t MoMdepth) +void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t KMDheight,uint32_t KMDtimestamp,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout,uint256 MoM,int32_t MoMdepth) { static FILE *fp; static int32_t errs,didinit; static uint256 zero; - struct komodo_state *sp; char fname[512],symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; int32_t retval,ht,func; uint8_t num,pubkeys[64][33]; + struct hush_state *sp; char fname[512],symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; int32_t retval,ht,func; uint8_t num,pubkeys[64][33]; if ( didinit == 0 ) { portable_mutex_init(&KOMODO_KV_mutex); portable_mutex_init(&KOMODO_CC_mutex); didinit = 1; } - if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) + if ( (sp= hush_stateptr(symbol,dest)) == 0 ) { HUSH_INITDONE = (uint32_t)time(NULL); - printf("[%s] no komodo_stateptr\n",SMART_CHAIN_SYMBOL); + printf("[%s] no hush_stateptr\n",SMART_CHAIN_SYMBOL); return; } //printf("[%s] (%s) -> (%s)\n",SMART_CHAIN_SYMBOL,symbol,dest); if ( fp == 0 ) { - komodo_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"komodostate"); + hush_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"hushstate"); if ( (fp= fopen(fname,"rb+")) != 0 ) { if ( (retval= hush_faststateinit(sp,fname,symbol,dest)) > 0 ) @@ -515,8 +515,8 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar int32_t komodo_validate_chain(uint256 srchash,int32_t notarized_height) { - static int32_t last_rewind; int32_t rewindtarget; CBlockIndex *pindex; struct komodo_state *sp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; - if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) + static int32_t last_rewind; int32_t rewindtarget; CBlockIndex *pindex; struct hush_state *sp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; + if ( (sp= hush_stateptr(symbol,dest)) == 0 ) return(0); if ( IsInitialBlockDownload() == 0 && ((pindex= komodo_getblockindex(srchash)) == 0 || pindex->GetHeight() != notarized_height) ) { @@ -541,8 +541,8 @@ int32_t komodo_validate_chain(uint256 srchash,int32_t notarized_height) int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value,int32_t notarized,uint64_t signedmask,uint32_t timestamp) { static uint256 zero; static FILE *signedfp; - int32_t opretlen,nid,offset,k,MoMdepth,matched,len = 0; uint256 MoM,srchash,desttxid; uint8_t crypto555[33]; struct komodo_state *sp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; - if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) + int32_t opretlen,nid,offset,k,MoMdepth,matched,len = 0; uint256 MoM,srchash,desttxid; uint8_t crypto555[33]; struct hush_state *sp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; + if ( (sp= hush_stateptr(symbol,dest)) == 0 ) return(-1); if ( scriptlen == 35 && scriptbuf[0] == 33 && scriptbuf[34] == 0xac ) { @@ -609,7 +609,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar if ( scriptbuf[len] == 'K' ) { //fprintf(stderr,"i.%d j.%d KV OPRET len.%d %.8f\n",i,j,opretlen,dstr(value)); - komodo_stateupdate(height,0,0,0,txhash,0,0,0,0,0,0,value,&scriptbuf[len],opretlen,j,zero,0); + hush_stateupdate(height,0,0,0,txhash,0,0,0,0,0,0,value,&scriptbuf[len],opretlen,j,zero,0); return(-1); } if ( strcmp(SMART_CHAIN_SYMBOL,(char *)&scriptbuf[len+32*2+4]) == 0 ) @@ -716,7 +716,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar sp->MoM = MoM; sp->MoMdepth = MoMdepth; } - komodo_stateupdate(height,0,0,0,zero,0,0,0,0,0,0,0,0,0,0,sp->MoM,sp->MoMdepth); + hush_stateupdate(height,0,0,0,zero,0,0,0,0,0,0,0,0,0,0,sp->MoM,sp->MoMdepth); //if ( SMART_CHAIN_SYMBOL[0] != 0 ) printf("[%s] ht.%d NOTARIZED.%d %s.%s %sTXID.%s lens.(%d %d) MoM.%s %d\n",SMART_CHAIN_SYMBOL,height,sp->NOTARIZED_HEIGHT,SMART_CHAIN_SYMBOL[0]==0?"KMD":SMART_CHAIN_SYMBOL,srchash.ToString().c_str(),SMART_CHAIN_SYMBOL[0]==0?"BTC":"KMD",desttxid.ToString().c_str(),opretlen,len,sp->MoM.ToString().c_str(),sp->MoMdepth); @@ -725,7 +725,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar if ( signedfp == 0 ) { char fname[512]; - komodo_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"signedmasks"); + hush_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"signedmasks"); if ( (signedfp= fopen(fname,"rb+")) == 0 ) signedfp = fopen(fname,"wb"); else fseek(signedfp,0,SEEK_END); @@ -741,7 +741,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar //for (i=0; i notarisations; - uint64_t signedmask,voutmask; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; + uint64_t signedmask,voutmask; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; uint8_t scriptbuf[10001],pubkeys[64][33],rmd160[20],scriptPubKey[35]; uint256 zero,btctxid,txhash; int32_t i,j,k,numnotaries,notarized,scriptlen,isratification,nid,numvalid,specialtx,notarizedheight,notaryid,len,numvouts,numvins,height,txn_count; if ( pindex == 0 ) @@ -823,7 +823,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) memset(&zero,0,sizeof(zero)); komodo_init(pindex->GetHeight()); HUSH_INITDONE = (uint32_t)time(NULL); - if ( (sp= komodo_stateptr(symbol,dest)) == 0 ) + if ( (sp= hush_stateptr(symbol,dest)) == 0 ) { fprintf(stderr,"unexpected null stateptr.[%s]\n",SMART_CHAIN_SYMBOL); return(0); @@ -845,7 +845,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) if (!fJustCheck) { komodo_event_rewind(sp,symbol,pindex->GetHeight()); - komodo_stateupdate(pindex->GetHeight(),0,0,0,zero,0,0,0,0,-pindex->GetHeight(),pindex->nTime,0,0,0,0,zero,0); + hush_stateupdate(pindex->GetHeight(),0,0,0,zero,0,0,0,0,-pindex->GetHeight(),pindex->nTime,0,0,0,0,zero,0); } } komodo_currentheight_set(chainActive.LastTip()->GetHeight()); @@ -893,7 +893,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) if ( signedfp == 0 ) { char fname[512]; - komodo_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"signedmasks"); + hush_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"signedmasks"); if ( (signedfp= fopen(fname,"rb+")) == 0 ) signedfp = fopen(fname,"wb"); else fseek(signedfp,0,SEEK_END); @@ -990,7 +990,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) if ( ((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries/3) ) { memset(&txhash,0,sizeof(txhash)); - komodo_stateupdate(height,pubkeys,numvalid,0,txhash,0,0,0,0,0,0,0,0,0,0,zero,0); + hush_stateupdate(height,pubkeys,numvalid,0,txhash,0,0,0,0,0,0,0,0,0,0,zero,0); printf("RATIFIED! >>>>>>>>>> new notaries.%d newheight.%d from height.%d\n",numvalid,(((height+KOMODO_ELECTION_GAP/2)/KOMODO_ELECTION_GAP)+1)*KOMODO_ELECTION_GAP,height); } else printf("signedmask.%llx numvalid.%d wt.%d numnotaries.%d\n",(long long)signedmask,numvalid,bitweight(signedmask),numnotaries); } @@ -1000,7 +1000,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) if ( !fJustCheck && IS_HUSH_NOTARY != 0 && SMART_CHAIN_SYMBOL[0] == 0 ) printf("%s ht.%d\n",SMART_CHAIN_SYMBOL[0] == 0 ? "KMD" : SMART_CHAIN_SYMBOL,height); if ( !fJustCheck && pindex->GetHeight() == hwmheight ) - komodo_stateupdate(height,0,0,0,zero,0,0,0,0,height,(uint32_t)pindex->nTime,0,0,0,0,zero,0); + hush_stateupdate(height,0,0,0,zero,0,0,0,0,height,(uint32_t)pindex->nTime,0,0,0,0,zero,0); } else { fprintf(stderr,"hush_connectblock: unexpected null pindex\n"); return(0); } diff --git a/src/hush_globals.h b/src/hush_globals.h index 96c4e3dc0..5bb8398dc 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -20,7 +20,7 @@ void komodo_prefetch(FILE *fp); uint32_t komodo_heightstamp(int32_t height); -void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t kheight,uint32_t ktime,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout,uint256 MoM,int32_t MoMdepth); +void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t kheight,uint32_t ktime,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout,uint256 MoM,int32_t MoMdepth); void komodo_init(int32_t height); int32_t komodo_MoMdata(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip); int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *notarized_desttxidp); @@ -43,7 +43,7 @@ struct pax_transaction *PAX; int32_t NUM_PRICES; uint32_t *PVALS; struct knotaries_entry *Pubkeys; -struct komodo_state KOMODO_STATES[34]; +struct hush_state KOMODO_STATES[34]; #define _COINBASE_MATURITY 100 int COINBASE_MATURITY = _COINBASE_MATURITY;//100; diff --git a/src/hush_notary.h b/src/hush_notary.h index 2debc2e90..f6b14e658 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -237,12 +237,12 @@ int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33, return(modval); } -//struct komodo_state *komodo_stateptr(char *symbol,char *dest); +//struct hush_state *hush_stateptr(char *symbol,char *dest); struct notarized_checkpoint *komodo_npptr_for_height(int32_t height, int *idx) { - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; int32_t i; struct komodo_state *sp; struct notarized_checkpoint *np = 0; - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; int32_t i; struct hush_state *sp; struct notarized_checkpoint *np = 0; + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) { for (i=sp->NUM_NPOINTS-1; i>=0; i--) { @@ -264,8 +264,8 @@ struct notarized_checkpoint *komodo_npptr(int32_t height) struct notarized_checkpoint *komodo_npptr_at(int idx) { - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) if (idx < sp->NUM_NPOINTS) return &sp->NPOINTS[idx]; return(0); @@ -274,8 +274,8 @@ struct notarized_checkpoint *komodo_npptr_at(int idx) int32_t komodo_prevMoMheight() { static uint256 zero; - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; int32_t i; struct komodo_state *sp; struct notarized_checkpoint *np = 0; - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; int32_t i; struct hush_state *sp; struct notarized_checkpoint *np = 0; + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) { for (i=sp->NUM_NPOINTS-1; i>=0; i--) { @@ -289,11 +289,11 @@ int32_t komodo_prevMoMheight() int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp) { - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; *prevMoMheightp = 0; memset(hashp,0,sizeof(*hashp)); memset(txidp,0,sizeof(*txidp)); - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) { CBlockIndex *pindex; if ( (pindex= komodo_blockindex(sp->NOTARIZED_HASH)) == 0 || pindex->GetHeight() < 0 ) @@ -316,8 +316,8 @@ int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 * int32_t hush_dpowconfs(int32_t txheight,int32_t numconfs) { static int32_t hadnotarization; - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; - if ( KOMODO_DPOWCONFS != 0 && txheight > 0 && numconfs > 0 && (sp= komodo_stateptr(symbol,dest)) != 0 ) + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; + if ( KOMODO_DPOWCONFS != 0 && txheight > 0 && numconfs > 0 && (sp= hush_stateptr(symbol,dest)) != 0 ) { if ( sp->NOTARIZED_HEIGHT > 0 ) { @@ -356,8 +356,8 @@ int32_t komodo_MoMdata(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,in int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *notarized_desttxidp) { - struct notarized_checkpoint *np = 0; int32_t i=0,flag = 0; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) + struct notarized_checkpoint *np = 0; int32_t i=0,flag = 0; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) { if ( sp->NUM_NPOINTS > 0 ) { @@ -410,7 +410,7 @@ int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *n return(0); } -void komodo_notarized_update(struct komodo_state *sp,int32_t nHeight,int32_t notarized_height,uint256 notarized_hash,uint256 notarized_desttxid,uint256 MoM,int32_t MoMdepth) +void komodo_notarized_update(struct hush_state *sp,int32_t nHeight,int32_t notarized_height,uint256 notarized_hash,uint256 notarized_desttxid,uint256 MoM,int32_t MoMdepth) { struct notarized_checkpoint *np; if ( notarized_height >= nHeight ) @@ -457,6 +457,6 @@ void komodo_init(int32_t height) //for (i=0; ipath()); } } - path komodostate = GetDataDir() / "komodostate"; - remove(komodostate); + path hushstate = GetDataDir() / "hushstate"; + remove(hushstate); path minerids = GetDataDir() / "minerids"; remove(minerids); // Remove all block files that aren't part of a contiguous set starting at @@ -1770,10 +1768,10 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) if (fReindex) { - boost::filesystem::remove(GetDataDir() / "komodostate"); + boost::filesystem::remove(GetDataDir() / "hushstate"); boost::filesystem::remove(GetDataDir() / "signedmasks"); pblocktree->WriteReindexing(true); - fprintf(stderr, "%s: Deleted komodostate and signedmasks...\n", __FUNCTION__); + fprintf(stderr, "%s: Deleted hushstate and signedmasks...\n", __FUNCTION__); //If we're reindexing in prune mode, wipe away unusable block files and all undo data files if (fPruneMode) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 180e8819b..8909074eb 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -724,14 +724,14 @@ int32_t komodo_isPoS(CBlock *pblock,int32_t height,bool fJustCheck) void komodo_disconnect(CBlockIndex *pindex,CBlock& block) { - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct komodo_state *sp; + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; //fprintf(stderr,"disconnect ht.%d\n",pindex->GetHeight()); komodo_init(pindex->GetHeight()); - if ( (sp= komodo_stateptr(symbol,dest)) != 0 ) + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) { //sp->rewinding = pindex->GetHeight(); //fprintf(stderr,"-%d ",pindex->GetHeight()); - } else printf("komodo_disconnect: ht.%d cant get komodo_state.(%s)\n",pindex->GetHeight(),SMART_CHAIN_SYMBOL); + } else printf("komodo_disconnect: ht.%d cant get hush_state.(%s)\n",pindex->GetHeight(),SMART_CHAIN_SYMBOL); } int32_t komodo_is_notarytx(const CTransaction& tx) @@ -1191,8 +1191,8 @@ int32_t komodo_nextheight() int32_t komodo_isrealtime(int32_t *kmdheightp) { - struct komodo_state *sp; CBlockIndex *pindex; - if ( (sp= komodo_stateptrget((char *)"KMD")) != 0 ) + struct hush_state *sp; CBlockIndex *pindex; + if ( (sp= hush_stateptrget((char *)"KMD")) != 0 ) *kmdheightp = sp->CURRENT_HEIGHT; else *kmdheightp = 0; if ( (pindex= chainActive.LastTip()) != 0 && pindex->GetHeight() >= (int32_t)hush_longestchain() ) diff --git a/src/komodo_events.h b/src/komodo_events.h index ae4f0cf59..070aa407d 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -17,7 +17,7 @@ #define H_KOMODOEVENTS_H #include "hush_defs.h" -struct komodo_event *komodo_eventadd(struct komodo_state *sp,int32_t height,char *symbol,uint8_t type,uint8_t *data,uint16_t datalen) +struct komodo_event *komodo_eventadd(struct hush_state *sp,int32_t height,char *symbol,uint8_t type,uint8_t *data,uint16_t datalen) { struct komodo_event *ep=0; uint16_t len = (uint16_t)(sizeof(*ep) + datalen); if ( sp != 0 && SMART_CHAIN_SYMBOL[0] != 0 ) @@ -37,7 +37,7 @@ struct komodo_event *komodo_eventadd(struct komodo_state *sp,int32_t height,char return(ep); } -void komodo_eventadd_notarized(struct komodo_state *sp,char *symbol,int32_t height,char *dest,uint256 notarized_hash,uint256 notarized_desttxid,int32_t notarizedheight,uint256 MoM,int32_t MoMdepth) +void komodo_eventadd_notarized(struct hush_state *sp,char *symbol,int32_t height,char *dest,uint256 notarized_hash,uint256 notarized_desttxid,int32_t notarizedheight,uint256 MoM,int32_t MoMdepth) { static uint32_t counter; int32_t verified=0; char *coin; struct komodo_event_notarized N; coin = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"KMD" : SMART_CHAIN_SYMBOL; @@ -63,7 +63,7 @@ void komodo_eventadd_notarized(struct komodo_state *sp,char *symbol,int32_t heig } } -void komodo_eventadd_pubkeys(struct komodo_state *sp,char *symbol,int32_t height,uint8_t num,uint8_t pubkeys[64][33]) +void komodo_eventadd_pubkeys(struct hush_state *sp,char *symbol,int32_t height,uint8_t num,uint8_t pubkeys[64][33]) { struct komodo_event_pubkeys P; //printf("eventadd pubkeys ht.%d\n",height); @@ -75,7 +75,7 @@ void komodo_eventadd_pubkeys(struct komodo_state *sp,char *symbol,int32_t height komodo_notarysinit(height,pubkeys,num); } -void komodo_eventadd_pricefeed(struct komodo_state *sp,char *symbol,int32_t height,uint32_t *prices,uint8_t num) +void komodo_eventadd_pricefeed(struct hush_state *sp,char *symbol,int32_t height,uint32_t *prices,uint8_t num) { struct komodo_event_pricefeed F; if ( num == sizeof(F.prices)/sizeof(*F.prices) ) @@ -89,7 +89,7 @@ void komodo_eventadd_pricefeed(struct komodo_state *sp,char *symbol,int32_t heig } //else fprintf(stderr,"skip pricefeed[%d]\n",num); } -void komodo_eventadd_opreturn(struct komodo_state *sp,char *symbol,int32_t height,uint256 txid,uint64_t value,uint16_t vout,uint8_t *buf,uint16_t opretlen) +void komodo_eventadd_opreturn(struct hush_state *sp,char *symbol,int32_t height,uint256 txid,uint64_t value,uint16_t vout,uint8_t *buf,uint16_t opretlen) { struct komodo_event_opreturn O; uint8_t *opret; if ( SMART_CHAIN_SYMBOL[0] != 0 ) @@ -108,7 +108,7 @@ void komodo_eventadd_opreturn(struct komodo_state *sp,char *symbol,int32_t heigh } } -void komodo_event_undo(struct komodo_state *sp,struct komodo_event *ep) +void komodo_event_undo(struct hush_state *sp,struct komodo_event *ep) { switch ( ep->type ) { @@ -127,7 +127,7 @@ void komodo_event_undo(struct komodo_state *sp,struct komodo_event *ep) } } -void komodo_event_rewind(struct komodo_state *sp,char *symbol,int32_t height) +void komodo_event_rewind(struct hush_state *sp,char *symbol,int32_t height) { struct komodo_event *ep; if ( sp != 0 ) @@ -152,7 +152,7 @@ void komodo_event_rewind(struct komodo_state *sp,char *symbol,int32_t height) } } -void komodo_setkmdheight(struct komodo_state *sp,int32_t kmdheight,uint32_t timestamp) +void komodo_setkmdheight(struct hush_state *sp,int32_t kmdheight,uint32_t timestamp) { if ( sp != 0 ) { @@ -166,7 +166,7 @@ void komodo_setkmdheight(struct komodo_state *sp,int32_t kmdheight,uint32_t time } } -void komodo_eventadd_kmdheight(struct komodo_state *sp,char *symbol,int32_t height,int32_t kmdheight,uint32_t timestamp) +void komodo_eventadd_kmdheight(struct hush_state *sp,char *symbol,int32_t height,int32_t kmdheight,uint32_t timestamp) { uint32_t buf[2]; if ( kmdheight > 0 ) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index f8c04ea18..892158c2b 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -29,11 +29,11 @@ int32_t dummy_linker_tricker() int32_t pax_fiatstatus(uint64_t *available,uint64_t *deposited,uint64_t *issued,uint64_t *withdrawn,uint64_t *approved,uint64_t *redeemed,char *base) { - int32_t baseid; struct komodo_state *sp; int64_t netliability,maxallowed,maxval; + int32_t baseid; struct hush_state *sp; int64_t netliability,maxallowed,maxval; *available = *deposited = *issued = *withdrawn = *approved = *redeemed = 0; if ( (baseid= komodo_baseid(base)) >= 0 ) { - if ( (sp= komodo_stateptrget(base)) != 0 ) + if ( (sp= hush_stateptrget(base)) != 0 ) { *deposited = sp->deposited; *issued = sp->issued; @@ -117,12 +117,12 @@ void komodo_paxdelete(struct pax_transaction *pax) void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t fiatoshis,uint8_t *rmd160,uint256 txid,uint16_t vout,uint8_t type,int32_t height,int32_t otherheight,char *source,int32_t approved) // assetchain context { - struct pax_transaction *pax; uint8_t buf[35]; int32_t addflag = 0; struct komodo_state *sp; char str[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN],*s; + struct pax_transaction *pax; uint8_t buf[35]; int32_t addflag = 0; struct hush_state *sp; char str[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN],*s; //if ( KOMODO_PAX == 0 ) // return; //if ( strcmp(symbol,SMART_CHAIN_SYMBOL) != 0 ) // return; - sp = komodo_stateptr(str,dest); + sp = hush_stateptr(str,dest); pthread_mutex_lock(&komodo_mutex); pax_keyset(buf,txid,vout,type); HASH_FIND(hh,PAX,buf,sizeof(buf),pax); @@ -302,7 +302,7 @@ int32_t komodo_paxcmp(char *symbol,int32_t kmdheight,uint64_t value,uint64_t che uint64_t komodo_paxtotal() { - struct pax_transaction *pax,*pax2,*tmp,*tmp2; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN],*str; int32_t i,ht; int64_t checktoshis; uint64_t seed,total = 0; struct komodo_state *basesp; + struct pax_transaction *pax,*pax2,*tmp,*tmp2; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN],*str; int32_t i,ht; int64_t checktoshis; uint64_t seed,total = 0; struct hush_state *basesp; if ( HUSH_PASSPORT_INITDONE == 0 ) //KOMODO_PAX == 0 || return(0); if ( komodo_isrealtime(&ht) == 0 ) @@ -316,7 +316,7 @@ uint64_t komodo_paxtotal() if ( pax->type == 'A' || pax->type == 'D' || pax->type == 'X' ) str = pax->symbol; else str = pax->source; - basesp = komodo_stateptrget(str); + basesp = hush_stateptrget(str); if ( basesp != 0 && pax->didstats == 0 ) { if ( pax->type == 'I' && (pax2= komodo_paxfind(pax->txid,pax->vout,'D')) != 0 ) @@ -356,7 +356,7 @@ uint64_t komodo_paxtotal() } } } - komodo_stateptr(symbol,dest); + hush_stateptr(symbol,dest); HASH_ITER(hh,PAX,pax,tmp) { pax->ready = 0; @@ -476,11 +476,11 @@ int32_t komodo_pending_withdraws(char *opretstr) // todo: enforce deterministic int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo) { - struct pax_transaction *pax,*tmp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; uint8_t *script,opcode,opret[16384*4],data[16384*4]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t available,deposited,issued,withdrawn,approved,redeemed,mask,sum = 0; + struct pax_transaction *pax,*tmp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; uint8_t *script,opcode,opret[16384*4],data[16384*4]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct hush_state *sp; uint64_t available,deposited,issued,withdrawn,approved,redeemed,mask,sum = 0; if ( HUSH_PASSPORT_INITDONE == 0 )//KOMODO_PAX == 0 || return(0); - struct komodo_state *kmdsp = komodo_stateptrget((char *)"KMD"); - sp = komodo_stateptr(symbol,dest); + struct hush_state *kmdsp = hush_stateptrget((char *)"KMD"); + sp = hush_stateptr(symbol,dest); strcpy(symbol,base); if ( SMART_CHAIN_SYMBOL[0] != 0 && komodo_baseid(SMART_CHAIN_SYMBOL) < 0 ) return(0); @@ -683,7 +683,7 @@ void hush_passport_iteration(); int32_t komodo_check_deposit(int32_t height,const CBlock& block,uint32_t prevtime) // verify above block is valid pax pricing { static uint256 array[64]; static int32_t numbanned,indallvouts; - int32_t i,j,k,n,ht,baseid,txn_count,activation,num,opretlen,offset=1,errs=0,notmatched=0,matched=0,kmdheights[256],otherheights[256]; uint256 hash,txids[256]; char symbol[HUSH_SMART_CHAIN_MAXLEN],base[HUSH_SMART_CHAIN_MAXLEN]; uint16_t vouts[256]; int8_t baseids[256]; uint8_t *script,opcode,rmd160s[256*20]; uint64_t total,subsidy,available,deposited,issued,withdrawn,approved,redeemed,seed; int64_t checktoshis,values[256],srcvalues[256]; struct pax_transaction *pax; struct komodo_state *sp; CTransaction tx; + int32_t i,j,k,n,ht,baseid,txn_count,activation,num,opretlen,offset=1,errs=0,notmatched=0,matched=0,kmdheights[256],otherheights[256]; uint256 hash,txids[256]; char symbol[HUSH_SMART_CHAIN_MAXLEN],base[HUSH_SMART_CHAIN_MAXLEN]; uint16_t vouts[256]; int8_t baseids[256]; uint8_t *script,opcode,rmd160s[256*20]; uint64_t total,subsidy,available,deposited,issued,withdrawn,approved,redeemed,seed; int64_t checktoshis,values[256],srcvalues[256]; struct pax_transaction *pax; struct hush_state *sp; CTransaction tx; activation = 235300; if ( *(int32_t *)&array[0] == 0 ) numbanned = komodo_bannedset(&indallvouts,array,(int32_t)(sizeof(array)/sizeof(*array))); @@ -829,7 +829,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block,uint32_t prevtim const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout,char *source) { - uint8_t rmd160[20],rmd160s[64*20],addrtype,shortflag,pubkey33[33]; int32_t didstats,i,j,n,kvheight,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fee,fiatoshis,komodoshis,checktoshis,values[64],srcvalues[64]; struct pax_transaction *pax,*pax2; struct komodo_state *basesp; double diff; + uint8_t rmd160[20],rmd160s[64*20],addrtype,shortflag,pubkey33[33]; int32_t didstats,i,j,n,kvheight,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fee,fiatoshis,komodoshis,checktoshis,values[64],srcvalues[64]; struct pax_transaction *pax,*pax2; struct hush_state *basesp; double diff; const char *typestr = "unknown"; if ( SMART_CHAIN_SYMBOL[0] != 0 && komodo_baseid(SMART_CHAIN_SYMBOL) < 0 && opretbuf[0] != 'K' ) { @@ -881,7 +881,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 { if ( (pax= komodo_paxfind(txid,vout,'D')) == 0 ) { - if ( (basesp= komodo_stateptrget(base)) != 0 ) + if ( (basesp= hush_stateptrget(base)) != 0 ) { basesp->deposited += fiatoshis; didstats = 1; @@ -898,7 +898,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 pax->fiatoshis = fiatoshis; if ( didstats == 0 && pax->didstats == 0 ) { - if ( (basesp= komodo_stateptrget(base)) != 0 ) + if ( (basesp= hush_stateptrget(base)) != 0 ) { basesp->deposited += fiatoshis; didstats = 1; @@ -916,7 +916,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 pax2->height = pax->height = height; if ( pax2->didstats == 0 ) { - if ( (basesp= komodo_stateptrget(base)) != 0 ) + if ( (basesp= hush_stateptrget(base)) != 0 ) { basesp->issued += pax2->fiatoshis; pax2->didstats = 1; @@ -968,7 +968,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 pax->marked = pax2->marked = pax2->height; if ( pax->didstats == 0 ) { - if ( (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 ) + if ( (basesp= hush_stateptrget(CURRENCIES[baseids[i]])) != 0 ) { basesp->issued += pax->fiatoshis; pax->didstats = 1; @@ -1010,7 +1010,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 { if ( value != 0 && ((pax= komodo_paxfind(txid,vout,'W')) == 0 || pax->didstats == 0) ) { - if ( (basesp= komodo_stateptrget(base)) != 0 ) + if ( (basesp= hush_stateptrget(base)) != 0 ) { basesp->withdrawn += value; didstats = 1; @@ -1080,7 +1080,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 pax2->approved = kmdheights[i]; komodo_paxmark(height,txids[i],vouts[i],'W',height); //komodo_paxmark(height,txids[i],vouts[i],'A',height); - if ( values[i] != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 ) + if ( values[i] != 0 && (basesp= hush_stateptrget(CURRENCIES[baseids[i]])) != 0 ) { basesp->approved += values[i]; didstats = 1; @@ -1090,7 +1090,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 } else if ( pax->didstats == 0 && srcvalues[i] != 0 ) { - if ( (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 ) + if ( (basesp= hush_stateptrget(CURRENCIES[baseids[i]])) != 0 ) { basesp->approved += values[i]; didstats = 1; @@ -1132,7 +1132,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( height < 121842 ) // fields got switched around due to legacy issues and approves value = srcvalues[i]; else value = values[i]; - if ( baseids[i] >= 0 && value != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 ) + if ( baseids[i] >= 0 && value != 0 && (basesp= hush_stateptrget(CURRENCIES[baseids[i]])) != 0 ) { basesp->redeemed += value; pax->didstats = 1; @@ -1152,9 +1152,9 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 return(typestr); } -int32_t komodo_parsestatefiledata(struct komodo_state *sp,uint8_t *filedata,long *fposp,long datalen,char *symbol,char *dest); +int32_t komodo_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fposp,long datalen,char *symbol,char *dest); -void komodo_stateind_set(struct komodo_state *sp,uint32_t *inds,int32_t n,uint8_t *filedata,long datalen,char *symbol,char *dest) +void hush_stateind_set(struct hush_state *sp,uint32_t *inds,int32_t n,uint8_t *filedata,long datalen,char *symbol,char *dest) { uint8_t func; long lastK,lastT,lastN,lastV,fpos,lastfpos; int32_t i,count,doissue,iter,numn,numv,numN,numV,numR; uint32_t tmp,prevpos100,offset; count = numR = numN = numV = numn = numv = 0; @@ -1293,7 +1293,7 @@ uint8_t *OS_fileptr(long *allocsizep,char *fname) return((uint8_t *)retptr); } -long komodo_stateind_validate(struct komodo_state *sp,char *indfname,uint8_t *filedata,long datalen,uint32_t *prevpos100p,uint32_t *indcounterp,char *symbol,char *dest) +long hush_stateind_validate(struct hush_state *sp,char *indfname,uint8_t *filedata,long datalen,uint32_t *prevpos100p,uint32_t *indcounterp,char *symbol,char *dest) { FILE *fp; long fsize,lastfpos=0,fpos=0; uint8_t *inds,func; int32_t i,n; uint32_t offset,tmp,prevpos100 = 0; *indcounterp = *prevpos100p = 0; @@ -1327,7 +1327,7 @@ long komodo_stateind_validate(struct komodo_state *sp,char *indfname,uint8_t *fi *indcounterp = n; *prevpos100p = prevpos100; if ( sp != 0 ) - komodo_stateind_set(sp,(uint32_t *)inds,n,filedata,fpos,symbol,dest); + hush_stateind_set(sp,(uint32_t *)inds,n,filedata,fpos,symbol,dest); //printf("free inds.%p %s validated[%d] fpos.%ld datalen.%ld, offset %ld vs fsize.%ld\n",inds,indfname,i,fpos,datalen,i * sizeof(uint32_t),fsize); free(inds); return(fpos); @@ -1357,7 +1357,7 @@ long komodo_indfile_update(FILE *indfp,uint32_t *prevpos100p,long lastfpos,long return(newfpos); } -int32_t hush_faststateinit(struct komodo_state *sp,char *fname,char *symbol,char *dest) +int32_t hush_faststateinit(struct hush_state *sp,char *fname,char *symbol,char *dest) { FILE *indfp; char indfname[1024]; uint8_t *filedata; long validated=-1,datalen,fpos,lastfpos; uint32_t tmp,prevpos100,indcounter,starttime; int32_t func,finished = 0; starttime = (uint32_t)time(NULL); @@ -1365,7 +1365,7 @@ int32_t hush_faststateinit(struct komodo_state *sp,char *fname,char *symbol,char strcat(indfname,".ind"); if ( (filedata= OS_fileptr(&datalen,fname)) != 0 ) { - if ( 1 )//datalen >= (1LL << 32) || GetArg("-genind",0) != 0 || (validated= komodo_stateind_validate(0,indfname,filedata,datalen,&prevpos100,&indcounter,symbol,dest)) < 0 ) + if ( 1 )//datalen >= (1LL << 32) || GetArg("-genind",0) != 0 || (validated= hush_stateind_validate(0,indfname,filedata,datalen,&prevpos100,&indcounter,symbol,dest)) < 0 ) { lastfpos = fpos = 0; indcounter = prevpos100 = 0; @@ -1379,8 +1379,8 @@ int32_t hush_faststateinit(struct komodo_state *sp,char *fname,char *symbol,char if ( indfp != 0 ) { fclose(indfp); - if ( (fpos= komodo_stateind_validate(0,indfname,filedata,datalen,&prevpos100,&indcounter,symbol,dest)) < 0 ) - printf("unexpected komodostate.ind validate failure %s datalen.%ld\n",indfname,datalen); + if ( (fpos= hush_stateind_validate(0,indfname,filedata,datalen,&prevpos100,&indcounter,symbol,dest)) < 0 ) + printf("unexpected hushstate.ind validate failure %s datalen.%ld\n",indfname,datalen); else printf("%s validated fpos.%ld\n",indfname,fpos); } finished = 1; @@ -1406,8 +1406,8 @@ int32_t hush_faststateinit(struct komodo_state *sp,char *fname,char *symbol,char } fclose(indfp); } - if ( komodo_stateind_validate(sp,indfname,filedata,datalen,&prevpos100,&indcounter,symbol,dest) < 0 ) - printf("unexpected komodostate.ind validate failure %s datalen.%ld\n",indfname,datalen); + if ( hush_stateind_validate(sp,indfname,filedata,datalen,&prevpos100,&indcounter,symbol,dest) < 0 ) + printf("unexpected hushstate.ind validate failure %s datalen.%ld\n",indfname,datalen); else { printf("%s validated updated from validated.%ld to %ld new.[%ld] -> indcounter %u, prevpos100 %u offset.%ld | elapsed %d seconds\n",indfname,validated,fpos,fpos-validated,indcounter,prevpos100,indcounter * sizeof(uint32_t),(int32_t)(time(NULL) - starttime)); @@ -1427,7 +1427,7 @@ void hush_passport_iteration() { static long lastpos[34]; static char userpass[33][1024]; static uint32_t lasttime,callcounter,lastinterest; int32_t maxseconds = 10; - FILE *fp; uint8_t *filedata; long fpos,datalen,lastfpos; int32_t baseid,limit,n,ht,isrealtime,expired,refid,blocks,longest; struct komodo_state *sp,*refsp; char *retstr,fname[512],*base,symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; uint32_t buf[3],starttime; uint64_t RTmask = 0; //CBlockIndex *pindex; + FILE *fp; uint8_t *filedata; long fpos,datalen,lastfpos; int32_t baseid,limit,n,ht,isrealtime,expired,refid,blocks,longest; struct hush_state *sp,*refsp; char *retstr,fname[512],*base,symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; uint32_t buf[3],starttime; uint64_t RTmask = 0; //CBlockIndex *pindex; expired = 0; while ( 0 && HUSH_INITDONE == 0 ) { @@ -1441,7 +1441,7 @@ void hush_passport_iteration() //hush_longestchain(); lastinterest = komodo_chainactive_timestamp(); } - refsp = komodo_stateptr(symbol,dest); + refsp = hush_stateptr(symbol,dest); if ( SMART_CHAIN_SYMBOL[0] == 0 || strcmp(SMART_CHAIN_SYMBOL,"JUSTLIES") == 0 ) { refid = 33; @@ -1472,9 +1472,9 @@ void hush_passport_iteration() if ( baseid == 32 ) // only care about KMD's state { refsp->RTmask &= ~(1LL << baseid); - komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate"); + hush_statefname(fname,baseid<32?base:(char *)"",(char *)"hushstate"); komodo_nameset(symbol,dest,base); - sp = komodo_stateptrget(symbol); + sp = hush_stateptrget(symbol); n = 0; if ( lastpos[baseid] == 0 && (filedata= OS_fileptr(&datalen,fname)) != 0 ) { @@ -1516,7 +1516,7 @@ void hush_passport_iteration() } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp)); fclose(fp); } else fprintf(stderr,"load error.(%s) %p\n",fname,sp); - komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); + hush_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); if ( (fp= fopen(fname,"rb")) != 0 ) { if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) ) @@ -1538,7 +1538,7 @@ void hush_passport_iteration() else { refsp->RTmask &= ~(1LL << baseid); - komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); + hush_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); if ( (fp= fopen(fname,"wb")) != 0 ) { buf[0] = (uint32_t)chainActive.LastTip()->GetHeight(); diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 4a005d2b3..0ca6d6e92 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -709,7 +709,7 @@ void komodo_paxpricefeed(int32_t height,uint8_t *pricefeed,int32_t opretlen) double KMDBTC,BTCUSD,CNYUSD; uint32_t numpvals,timestamp,pvals[128]; uint256 zero; numpvals = dpow_readprices(height,pricefeed,×tamp,&KMDBTC,&BTCUSD,&CNYUSD,pvals); memset(&zero,0,sizeof(zero)); - komodo_stateupdate(height,0,0,0,zero,0,0,pvals,numpvals,0,0,0,0,0,0,zero,0); + hush_stateupdate(height,0,0,0,zero,0,0,pvals,numpvals,0,0,0,0,0,0,zero,0); if ( 0 ) { int32_t i; From 0d3dec4c7b246a35425d2ee52edfc58da8aff228 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 21:43:03 -0500 Subject: [PATCH 085/277] Optimize the scanning of ntz's --- src/notarisationdb.cpp | 21 +++++++++------------ src/notarisationdb.h | 13 ++++++------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/notarisationdb.cpp b/src/notarisationdb.cpp index 705da8e5f..f9d9d7510 100644 --- a/src/notarisationdb.cpp +++ b/src/notarisationdb.cpp @@ -10,15 +10,19 @@ #include NotarisationDB *pnotarisations; - -NotarisationDB::NotarisationDB(size_t nCacheSize, bool fMemory, bool fWipe) : CDBWrapper(GetDataDir() / "notarisations", nCacheSize, fMemory, fWipe, false, 64) { } - +NotarisationDB::NotarisationDB(size_t nCacheSize, bool fMemory, bool fWipe) : CDBWrapper(GetDataDir() / "notarizations", nCacheSize, fMemory, fWipe, false, 64) { } NotarisationsInBlock ScanBlockNotarisations(const CBlock &block, int nHeight) { EvalRef eval; NotarisationsInBlock vNotarisations; int timestamp = block.nTime; + bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; + + // No valid ntz's before this height + if(ishush3 && (nHeight <= 340420)) { + return vNotarisations; + } for (unsigned int i = 0; i < block.vtx.size(); i++) { CTransaction tx = block.vtx[i]; @@ -44,18 +48,11 @@ NotarisationsInBlock ScanBlockNotarisations(const CBlock &block, int nHeight) // data.symbol, tx.GetHash().GetHex().data(), data.ccId, data.MoMDepth); //if (!data.MoMoM.IsNull()) printf("MoMoM:%s\n", data.MoMoM.GetHex().data()); } else - LogPrintf("WARNING: Couldn't parse notarisation for tx: %s at height %i\n", - tx.GetHash().GetHex().data(), nHeight); + LogPrintf("WARNING: Couldn't parse notarisation for tx: %s at height %i\n", tx.GetHash().GetHex().data(), nHeight); } return vNotarisations; } -bool IsTXSCL(const char* symbol) -{ - return strlen(symbol) >= 5 && strncmp(symbol, "TXSCL", 5) == 0; -} - - bool GetBlockNotarisations(uint256 blockHash, NotarisationsInBlock &nibs) { return pnotarisations->Read(blockHash, nibs); @@ -69,7 +66,7 @@ bool GetBackNotarisation(uint256 notarisationHash, Notarisation &n) /* - * Write an index of KMD notarisation id -> backnotarisation + * Write an index of HUSH notarisation id -> backnotarisation */ void WriteBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch &batch) { diff --git a/src/notarisationdb.h b/src/notarisationdb.h index af5d4df28..edd483639 100644 --- a/src/notarisationdb.h +++ b/src/notarisationdb.h @@ -1,20 +1,20 @@ -#ifndef NOTARISATIONDB_H -#define NOTARISATIONDB_H +// Copyright (c) 2019-2020 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 +#ifndef HUSH_NOTARISATIONDB_H +#define HUSH_NOTARISATIONDB_H #include "uint256.h" #include "dbwrapper.h" #include "cc/eval.h" - class NotarisationDB : public CDBWrapper { public: NotarisationDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); }; - extern NotarisationDB *pnotarisations; - typedef std::pair Notarisation; typedef std::vector NotarisationsInBlock; @@ -25,6 +25,5 @@ void WriteBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch & void EraseBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch &batch); int ScanNotarisationsDB(int height, std::string symbol, int scanLimitBlocks, Notarisation& out); int ScanNotarisationsDB2(int height, std::string symbol, int scanLimitBlocks, Notarisation& out); -bool IsTXSCL(const char* symbol); -#endif /* NOTARISATIONDB_H */ +#endif /* HUSH_NOTARISATIONDB_H */ From be204bf060003f1bb5853e2ed0ad7d3284723399 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 21:44:52 -0500 Subject: [PATCH 086/277] This reverts commit a87cd4400f2c6896c9bb28b1ad43975555def536. --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 92676105b..165839b39 100644 --- a/src/version.h +++ b/src/version.h @@ -27,7 +27,7 @@ static const int INIT_PROTO_VERSION = 209; //! In this version, 'getheaders' was introduced. static const int GETHEADERS_VERSION = 31800; //! disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION = 170010; +static const int MIN_PEER_PROTO_VERSION = 170009; //! nTime field added to CAddress, starting with this version; //! if possible, avoid requesting addresses nodes older than this static const int CADDR_TIME_VERSION = 31402; From 12fabf7fd752da70d43f7ad48cf90c4eda81a6b5 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 21:57:02 -0500 Subject: [PATCH 087/277] Hush signed masks --- src/hush.h | 4 ++-- src/init.cpp | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/hush.h b/src/hush.h index 95c95e5da..c212ab120 100644 --- a/src/hush.h +++ b/src/hush.h @@ -725,7 +725,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar if ( signedfp == 0 ) { char fname[512]; - hush_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"signedmasks"); + hush_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"hushsignedmasks"); if ( (signedfp= fopen(fname,"rb+")) == 0 ) signedfp = fopen(fname,"wb"); else fseek(signedfp,0,SEEK_END); @@ -893,7 +893,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) if ( signedfp == 0 ) { char fname[512]; - hush_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"signedmasks"); + hush_statefname(fname,SMART_CHAIN_SYMBOL,(char *)"hushsignedmasks"); if ( (signedfp= fopen(fname,"rb+")) == 0 ) signedfp = fopen(fname,"wb"); else fseek(signedfp,0,SEEK_END); diff --git a/src/init.cpp b/src/init.cpp index 56097566e..6e5315b41 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1760,18 +1760,18 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) delete pblocktree; delete pnotarisations; - pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex, dbCompression, dbMaxOpenFiles); - pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex); - pcoinscatcher = new CCoinsViewErrorCatcher(pcoinsdbview); - pcoinsTip = new CCoinsViewCache(pcoinscatcher); + pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex, dbCompression, dbMaxOpenFiles); + pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex); + pcoinscatcher = new CCoinsViewErrorCatcher(pcoinsdbview); + pcoinsTip = new CCoinsViewCache(pcoinscatcher); pnotarisations = new NotarisationDB(100*1024*1024, false, fReindex); if (fReindex) { boost::filesystem::remove(GetDataDir() / "hushstate"); - boost::filesystem::remove(GetDataDir() / "signedmasks"); + boost::filesystem::remove(GetDataDir() / "hushsignedmasks"); pblocktree->WriteReindexing(true); - fprintf(stderr, "%s: Deleted hushstate and signedmasks...\n", __FUNCTION__); + fprintf(stderr, "%s: Deleted hushstate and hushsignedmasks...\n", __FUNCTION__); //If we're reindexing in prune mode, wipe away unusable block files and all undo data files if (fPruneMode) From fdf1ed1d0a4e0bf13d151072a353f28a94fc24e5 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 22:03:35 -0500 Subject: [PATCH 088/277] update unix manpages --- contrib/devtools/gen-manpages.sh | 6 +++--- doc/man/hush-cli.1 | 3 +-- doc/man/hush-tx.1 | 3 +-- doc/man/hushd.1 | 4 +--- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/contrib/devtools/gen-manpages.sh b/contrib/devtools/gen-manpages.sh index 804caca7c..f5f0f6e70 100755 --- a/contrib/devtools/gen-manpages.sh +++ b/contrib/devtools/gen-manpages.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (c) 2019 The Hush developers +# Copyright (c) 2019-2020 The Hush developers # Released under the GPLv3 TOPDIR=${TOPDIR:-$(git rev-parse --show-toplevel)} @@ -12,8 +12,8 @@ HUSHTX=${HUSHTX:-$SRCDIR/hush-tx} [ ! -x $HUSHD ] && echo "$HUSHD not found or not executable." && exit 1 -#HUSHVER="v3.3.0" -HUSHVER=$(./src/hushd --version|head -n2|tail -n1|cut -d' ' -f4|cut -d- -f1) +HUSHVER="v3.6.0" +#HUSHVER=$(./src/hushd --version|head -n2|tail -n1|cut -d' ' -f4|cut -d- -f1) # Create a footer file with copyright content. # This gets autodetected fine for komodod if --version-string is not set, diff --git a/doc/man/hush-cli.1 b/doc/man/hush-cli.1 index b9813d035..9b25f051b 100644 --- a/doc/man/hush-cli.1 +++ b/doc/man/hush-cli.1 @@ -3,7 +3,7 @@ .SH NAME hush-cli \- manual page for hush-cli v3.6.0 .SH DESCRIPTION -Hush RPC client version v3.6.0\-65cdf6dd3 +Hush RPC client version v3.6.0\-12fabf7fd .PP In order to ensure you are adequately protecting your privacy when using Hush, please see . @@ -71,7 +71,6 @@ Timeout in seconds during HTTP requests, or 0 for no timeout. (default: Read extra arguments from standard input, one per line until EOF/Ctrl\-D (recommended for sensitive information such as passphrases) .SH COPYRIGHT -Hush Daemon version v3.6.0-65cdf6dd3 In order to ensure you are adequately protecting your privacy when using Hush, please see . diff --git a/doc/man/hush-tx.1 b/doc/man/hush-tx.1 index 4bc69a9cc..f7741ab40 100644 --- a/doc/man/hush-tx.1 +++ b/doc/man/hush-tx.1 @@ -3,7 +3,7 @@ .SH NAME hush-tx \- manual page for hush-tx v3.6.0 .SH DESCRIPTION -Hush komodo\-tx utility version v3.6.0\-65cdf6dd3 +Hush komodo\-tx utility version v3.6.0\-12fabf7fd .SS "Usage:" .TP komodo\-tx [options] [commands] @@ -84,7 +84,6 @@ set=NAME:JSON\-STRING .IP Set register NAME to given JSON\-STRING .SH COPYRIGHT -Hush Daemon version v3.6.0-65cdf6dd3 In order to ensure you are adequately protecting your privacy when using Hush, please see . diff --git a/doc/man/hushd.1 b/doc/man/hushd.1 index c354936e7..ad3f82548 100644 --- a/doc/man/hushd.1 +++ b/doc/man/hushd.1 @@ -3,8 +3,7 @@ .SH NAME hushd \- manual page for hushd v3.6.0 .SH DESCRIPTION -Found binary: ./komodod -Hush Daemon version v3.6.0\-65cdf6dd3 +Hush Daemon version v3.6.0\-12fabf7fd .PP In order to ensure you are adequately protecting your privacy when using Hush, please see . @@ -682,7 +681,6 @@ Starting supply, default is 0 .IP Enforce transaction\-rate limit, default 0 .SH COPYRIGHT -Hush Daemon version v3.6.0-65cdf6dd3 In order to ensure you are adequately protecting your privacy when using Hush, please see . From ca26e6d820079b05bad310ff63f896e10197383a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 22:33:10 -0500 Subject: [PATCH 089/277] Actually this is more optimized --- src/notarisationdb.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/notarisationdb.cpp b/src/notarisationdb.cpp index f9d9d7510..f11eefe02 100644 --- a/src/notarisationdb.cpp +++ b/src/notarisationdb.cpp @@ -19,8 +19,8 @@ NotarisationsInBlock ScanBlockNotarisations(const CBlock &block, int nHeight) int timestamp = block.nTime; bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; - // No valid ntz's before this height - if(ishush3 && (nHeight <= 340420)) { + // No valid ntz's before this height on HUSH3 + if(ishush3 && (nHeight <= 350000)) { return vNotarisations; } From 9f319c1cc9d87264fa6a3a6fda435ddd69a2e2f4 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 22:45:54 -0500 Subject: [PATCH 090/277] the commission is the mission --- src/komodo_bitcoind.h | 4 ++-- src/main.cpp | 2 +- src/miner.cpp | 4 ++-- src/rpc/mining.cpp | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 8909074eb..b315842dc 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -1348,7 +1348,7 @@ uint64_t hush_commission(int height) return commission; } -uint64_t komodo_commission(const CBlock *pblock,int32_t height) +uint64_t the_commission(const CBlock *pblock,int32_t height) { //fprintf(stderr,"%s at height=%d\n",__func__,height); static bool didinit = false, ishush3 = false; @@ -2064,7 +2064,7 @@ int64_t komodo_checkcommission(CBlock *pblock,int32_t height) int64_t checktoshis=0; uint8_t *script,scripthex[8192]; int32_t scriptlen,matched = 0; static bool didinit = false; if ( ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD != 0 ) { - checktoshis = komodo_commission(pblock,height); + checktoshis = the_commission(pblock,height); if ( checktoshis >= 10000 && pblock->vtx[0].vout.size() < 2 ) { fprintf(stderr,"ERROR: komodo_checkcommission vsize.%d height.%d commission %.8f has checktoshis=%lu <10000 or less than 2 vouts (vouts=%lu)\n",(int32_t)pblock->vtx[0].vout.size(),height,(double)checktoshis/COIN, checktoshis, pblock->vtx[0].vout.size() ); diff --git a/src/main.cpp b/src/main.cpp index 5526b2f57..918845357 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3671,7 +3671,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin if ( ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD != 0 ) //ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 && { uint64_t checktoshis; - if ( (checktoshis= komodo_commission((CBlock *)&block,(int32_t)pindex->GetHeight())) != 0 ) + if ( (checktoshis= the_commission((CBlock *)&block,(int32_t)pindex->GetHeight())) != 0 ) { if ( block.vtx[0].vout.size() >= 2 && block.vtx[0].vout[1].nValue == checktoshis ) blockReward += checktoshis; diff --git a/src/miner.cpp b/src/miner.cpp index 30c6196eb..7868f4b34 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -147,7 +147,7 @@ int32_t komodo_baseid(char *origbase); int32_t hush_longestchain(); int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t nTime,int32_t dispflag); int64_t komodo_block_unlocktime(uint32_t nHeight); -uint64_t komodo_commission(const CBlock *block,int32_t height); +uint64_t the_commission(const CBlock *block,int32_t height); int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *ptr); int32_t decode_hex(uint8_t *bytes,int32_t n,char *hex); int32_t komodo_is_notarytx(const CTransaction& tx); @@ -630,7 +630,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 txNew.vout[0].nValue += 5000; pblock->vtx[0] = txNew; - 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= komodo_commission((CBlock*)&pblocktemplate->block,(int32_t)nHeight)) != 0 ) + 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); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 3ccf12de8..8eff961e8 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -52,7 +52,7 @@ using namespace std; #include "hush_defs.h" extern int32_t ASSETCHAINS_FOUNDERS; -uint64_t komodo_commission(const CBlock *pblock,int32_t height); +uint64_t the_commission(const CBlock *pblock,int32_t height); int32_t komodo_blockload(CBlock& block,CBlockIndex *pindex); arith_uint256 komodo_PoWtarget(int32_t *percPoSp,arith_uint256 target,int32_t height,int32_t goalperc); @@ -1048,13 +1048,13 @@ UniValue getblocksubsidy(const UniValue& params, bool fHelp, const CPubKey& mypk CBlockIndex* pblockIndex = chainActive[nHeight]; CBlock block; if ( komodo_blockload(block, pblockIndex) == 0 ) - nFoundersReward = komodo_commission(&block, nHeight); + nFoundersReward = the_commission(&block, nHeight); } } else if ( ASSETCHAINS_FOUNDERS != 0 ) { // Assetchains founders chains have a fixed reward so can be calculated at any given height. - nFoundersReward = komodo_commission(0, nHeight); + nFoundersReward = the_commission(0, nHeight); } result.push_back(Pair("ac_pubkey", ValueFromAmount(nFoundersReward))); } From 93a94dd9c49f6c1d9a7eb04e6ec9b589dbf0b708 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 22:49:09 -0500 Subject: [PATCH 091/277] Hush pid --- doc/files.md | 6 ++++-- src/init.cpp | 2 +- src/util.cpp | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/files.md b/doc/files.md index 6a60a61ee..1014b94a5 100644 --- a/doc/files.md +++ b/doc/files.md @@ -1,5 +1,7 @@ -* komodo.conf: contains configuration settings for komodod -* komodod.pid: stores the process id of komodod while running +# Hush Files + +* HUSH3.conf: contains configuration settings for hushd +* hushd.pid: stores the process id of hushd while running * blocks/blk000??.dat: block data (custom, 128 MiB per file) * blocks/rev000??.dat; block undo data (custom) * blocks/index/*; block index (LevelDB) diff --git a/src/init.cpp b/src/init.cpp index 6e5315b41..483f1495f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -384,7 +384,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-par=", strprintf(_("Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)"), -(int)boost::thread::hardware_concurrency(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS)); #ifndef _WIN32 - strUsage += HelpMessageOpt("-pid=", strprintf(_("Specify pid file (default: %s)"), "komodod.pid")); + strUsage += HelpMessageOpt("-pid=", strprintf(_("Specify pid file (default: %s)"), "hushd.pid")); #endif strUsage += HelpMessageOpt("-txexpirynotify=", _("Execute command when transaction expires (%s in cmd is replaced by transaction id)")); strUsage += HelpMessageOpt("-prune=", strprintf(_("Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. " diff --git a/src/util.cpp b/src/util.cpp index cab379559..2668a2cd7 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -700,7 +700,7 @@ void ReadConfigFile(map& mapSettingsRet, #ifndef _WIN32 boost::filesystem::path GetPidFile() { - boost::filesystem::path pathPidFile(GetArg("-pid", "komodod.pid")); + boost::filesystem::path pathPidFile(GetArg("-pid", "hushd.pid")); if (!pathPidFile.is_complete()) pathPidFile = GetDataDir() / pathPidFile; return pathPidFile; } From 63dde4219c7e233f8e23ab949a716486805e49c8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 22:51:39 -0500 Subject: [PATCH 092/277] copyright --- src/komodo_port.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/komodo_port.c b/src/komodo_port.c index fe05b0e3f..f0af9e20c 100644 --- a/src/komodo_port.c +++ b/src/komodo_port.c @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -12,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include #include #include From 32fda4260278c84a70813f7921ac351feea6431d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 22:57:07 -0500 Subject: [PATCH 093/277] Notarization --- src/Makefile.am | 2 +- src/crosschain.cpp | 2 +- src/crosschain_authority.cpp | 2 +- src/init.cpp | 2 +- src/komodo_nSPV_fullnode.h | 2 +- src/main.cpp | 2 +- src/{notarisationdb.cpp => notarizationdb.cpp} | 2 +- src/{notarisationdb.h => notarizationdb.h} | 0 src/rpc/crosschain.cpp | 2 +- src/test-hush/testutils.cpp | 2 +- src/torcontrol.cpp | 3 --- 11 files changed, 9 insertions(+), 12 deletions(-) rename src/{notarisationdb.cpp => notarizationdb.cpp} (99%) rename src/{notarisationdb.h => notarizationdb.h} (100%) diff --git a/src/Makefile.am b/src/Makefile.am index dbae00399..7cde25d52 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -302,7 +302,7 @@ libbitcoin_server_a_SOURCES = \ miner.cpp \ net.cpp \ noui.cpp \ - notarisationdb.cpp \ + notarizationdb.cpp \ policy/fees.cpp \ pow.cpp \ rest.cpp \ diff --git a/src/crosschain.cpp b/src/crosschain.cpp index a1c5463ef..1e782d6fb 100644 --- a/src/crosschain.cpp +++ b/src/crosschain.cpp @@ -17,7 +17,7 @@ #include "crosschain.h" #include "importcoin.h" #include "main.h" -#include "notarisationdb.h" +#include "notarizationdb.h" #include "merkleblock.h" #include "cc/CCinclude.h" diff --git a/src/crosschain_authority.cpp b/src/crosschain_authority.cpp index 339a5178c..f8c335be6 100644 --- a/src/crosschain_authority.cpp +++ b/src/crosschain_authority.cpp @@ -3,7 +3,7 @@ // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include "cc/eval.h" #include "crosschain.h" -#include "notarisationdb.h" +#include "notarizationdb.h" int GetSymbolAuthority(const char* symbol) { diff --git a/src/init.cpp b/src/init.cpp index 483f1495f..14bdaf09f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -33,7 +33,7 @@ #include "httpserver.h" #include "httprpc.h" #include "key.h" -#include "notarisationdb.h" +#include "notarizationdb.h" #ifdef ENABLE_MINING #include "key_io.h" diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index 226cfe370..e1a274171 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -19,7 +19,7 @@ // NSPV_get... functions need to return the exact serialized length, which is the size of the structure minus size of pointers, plus size of allocated data -#include "notarisationdb.h" +#include "notarizationdb.h" #include "rpc/server.h" static std::map nspv_remote_commands = {{"channelsopen", true},{"channelspayment", true},{"channelsclose", true},{"channelsrefund", true}, diff --git a/src/main.cpp b/src/main.cpp index 918845357..cff2f0d53 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,7 +34,7 @@ #include "init.h" #include "merkleblock.h" #include "metrics.h" -#include "notarisationdb.h" +#include "notarizationdb.h" #include "net.h" #include "pow.h" #include "script/interpreter.h" diff --git a/src/notarisationdb.cpp b/src/notarizationdb.cpp similarity index 99% rename from src/notarisationdb.cpp rename to src/notarizationdb.cpp index f11eefe02..44b20efb6 100644 --- a/src/notarisationdb.cpp +++ b/src/notarizationdb.cpp @@ -2,7 +2,7 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include "dbwrapper.h" -#include "notarisationdb.h" +#include "notarizationdb.h" #include "uint256.h" #include "cc/eval.h" #include "crosschain.h" diff --git a/src/notarisationdb.h b/src/notarizationdb.h similarity index 100% rename from src/notarisationdb.h rename to src/notarizationdb.h diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index ddd57f1b8..318d9fa10 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -21,7 +21,7 @@ #include "chainparams.h" #include "checkpoints.h" #include "crosschain.h" -#include "notarisationdb.h" +#include "notarizationdb.h" #include "importcoin.h" #include "base58.h" #include "consensus/validation.h" diff --git a/src/test-hush/testutils.cpp b/src/test-hush/testutils.cpp index 1efb54c21..327e7fd93 100644 --- a/src/test-hush/testutils.cpp +++ b/src/test-hush/testutils.cpp @@ -8,7 +8,7 @@ #include "key.h" #include "main.h" #include "miner.h" -#include "notarisationdb.h" +#include "notarizationdb.h" #include "random.h" #include "rpc/server.h" #include "rpc/protocol.h" diff --git a/src/torcontrol.cpp b/src/torcontrol.cpp index 239fb062a..218fb903b 100644 --- a/src/torcontrol.cpp +++ b/src/torcontrol.cpp @@ -9,12 +9,10 @@ #include "net.h" #include "util.h" #include "crypto/hmac_sha256.h" - #include #include #include #include - #include #include #include @@ -23,7 +21,6 @@ #include #include #include - #include #include #include From b139d749718f2a13ba58ec6d2aa633299eedd2d6 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 6 Dec 2020 22:58:32 -0500 Subject: [PATCH 094/277] copyright --- src/zcbenchmarks.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/zcbenchmarks.cpp b/src/zcbenchmarks.cpp index 152ad7295..525eb64cb 100644 --- a/src/zcbenchmarks.cpp +++ b/src/zcbenchmarks.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2019-2020 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 #include #include @@ -6,7 +8,6 @@ #include #include #include - #include "coins.h" #include "util.h" #include "init.h" @@ -26,9 +27,7 @@ #include "streams.h" #include "txdb.h" #include "wallet/wallet.h" - #include "zcbenchmarks.h" - #include "zcash/Zcash.h" #include "zcash/IncrementalMerkleTree.hpp" #include "zcash/Note.hpp" From 12af88948677303a375241a37d8b8d5a227efa9b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:17:10 -0500 Subject: [PATCH 095/277] alert changes --- src/alert.h | 1 - src/alertkeys.h | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/alert.h b/src/alert.h index c1a103c3f..5bcd51740 100644 --- a/src/alert.h +++ b/src/alert.h @@ -24,7 +24,6 @@ #include "serialize.h" #include "sync.h" - #include #include #include diff --git a/src/alertkeys.h b/src/alertkeys.h index f76f9b87e..d14300afb 100644 --- a/src/alertkeys.h +++ b/src/alertkeys.h @@ -1,4 +1,6 @@ // Copyright (c) 2019-2020 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. * * * From ca774f29482dfd8d366c4437f51d77e39e7244e8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:18:04 -0500 Subject: [PATCH 096/277] Make AppInit2 less noisy unless -debug --- src/init.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 14bdaf09f..cf690608b 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -950,7 +950,7 @@ extern int32_t KOMODO_REWIND; bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) { - fprintf(stderr,"%s start\n", __FUNCTION__); + //fprintf(stderr,"%s start\n", __FUNCTION__); // ********************************************************* Step 1: setup #ifdef _MSC_VER // Turn off Microsoft heap dump noise @@ -977,7 +977,8 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) if (!SetupNetworking()) return InitError("Error: Initializing networking failed"); - fprintf(stderr,"%s networking setup\n", __FUNCTION__); + if(fDebug) + fprintf(stderr,"%s networking setup\n", __FUNCTION__); #ifndef _WIN32 if (GetBoolArg("-sysperms", false)) { @@ -1022,25 +1023,25 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // Set this early so that experimental features are correctly enabled/disabled fExperimentalMode = GetBoolArg("-experimentalfeatures", true); - fprintf(stderr,"%s: fExperimentalMode=%d\n", __FUNCTION__, fExperimentalMode); + if(fDebug) + fprintf(stderr,"%s: fExperimentalMode=%d\n", __FUNCTION__, fExperimentalMode); // Fail early if user has set experimental options without the global flag if (!fExperimentalMode) { if (mapArgs.count("-developerencryptwallet")) { fprintf(stderr,"%s wallet encryption error\n", __FUNCTION__); return InitError(_("Wallet encryption requires -experimentalfeatures.")); - //TODO: make this non experimental } else if (mapArgs.count("-zmergetoaddress")) { - fprintf(stderr,"%s zmerge error\n", __FUNCTION__); - return InitError(_("RPC method z_mergetoaddress requires -experimentalfeatures.")); + //fprintf(stderr,"%s zmerge error\n", __FUNCTION__); + //return InitError(_("RPC method z_mergetoaddress requires -experimentalfeatures.")); } } //fprintf(stderr,"%s tik2\n", __FUNCTION__); // Set this early so that parameter interactions go to console fPrintToConsole = GetBoolArg("-printtoconsole", false); - fLogTimestamps = GetBoolArg("-logtimestamps", true); - fLogIPs = GetBoolArg("-logips", false); + fLogTimestamps = GetBoolArg("-logtimestamps", true); + fLogIPs = GetBoolArg("-logips", false); LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); @@ -2184,7 +2185,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // ********************************************************* Step 11: start node - fprintf(stderr,"Checking disk space...\n"); + //fprintf(stderr,"Checking disk space...\n"); if (!CheckDiskSpace()) return false; @@ -2203,7 +2204,8 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) if (GetBoolArg("-listenonion", DEFAULT_LISTEN_ONION)) StartTorControl(threadGroup, scheduler); - fprintf(stderr,"Starting txnotify thread\n"); + if(fDebug) + fprintf(stderr,"Starting txnotify thread\n"); StartNode(threadGroup, scheduler); #ifdef ENABLE_MINING @@ -2220,16 +2222,19 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // ********************************************************* Step 11: finished SetRPCWarmupFinished(); - fprintf(stderr,"RPC warmump finished\n"); + if(fDebug) + fprintf(stderr,"RPC warmump finished\n"); uiInterface.InitMessage(_("Done loading!")); #ifdef ENABLE_WALLET if (pwalletMain) { - fprintf(stderr,"%s Reaccepting wallet xtns\n", __FUNCTION__); + if(fDebug) + fprintf(stderr,"%s Reaccepting wallet xtns\n", __FUNCTION__); // Add wallet transactions that aren't already in a block to mapTransactions pwalletMain->ReacceptWalletTransactions(); - fprintf(stderr,"%s Starting wallet flusher thread\n", __FUNCTION__); + if(fDebug) + fprintf(stderr,"%s Starting wallet flusher thread\n", __FUNCTION__); // Run a thread to flush wallet periodically threadGroup.create_thread(boost::bind(&ThreadFlushWalletDB, boost::ref(pwalletMain->strWalletFile))); } @@ -2238,6 +2243,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // SENDALERT threadGroup.create_thread(boost::bind(ThreadSendAlert)); - fprintf(stderr,"%s end fRequestShutdown=%d\n", __FUNCTION__, !!fRequestShutdown); + if(fDebug) + fprintf(stderr,"%s end fRequestShutdown=%d\n", __FUNCTION__, !!fRequestShutdown); return !fRequestShutdown; } From a56215532f9bbe5ea6f36f6c4e6ec2bd94d5b4f7 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:18:30 -0500 Subject: [PATCH 097/277] Logging free bytes on disk seems useful --- src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.cpp b/src/main.cpp index cff2f0d53..783457bd3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6004,6 +6004,7 @@ bool CheckDiskSpace(uint64_t nAdditionalBytes) { uint64_t nFreeBytesAvailable = boost::filesystem::space(GetDataDir()).available; + fprintf(stderr,"Free bytes on disk: %d\n", nFreeBytesAvailable); // Check for nMinDiskSpace bytes (currently 50MB) if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes) return AbortNode("Disk space is low!", _("Error: Disk space is low!")); From e324b748fa55a3a55a329713d01539eb5de3c022 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:19:20 -0500 Subject: [PATCH 098/277] Default to not listen on tor port, fewer threads by default --- src/torcontrol.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/torcontrol.h b/src/torcontrol.h index a0d0009a2..9d47b8d62 100644 --- a/src/torcontrol.h +++ b/src/torcontrol.h @@ -12,7 +12,10 @@ #include "scheduler.h" extern const std::string DEFAULT_TOR_CONTROL; -static const bool DEFAULT_LISTEN_ONION = true; +// Most users don't have Tor, those that do can turn it on +// This help reduce CPU usage, thread contention and helps +// low resource devices +static const bool DEFAULT_LISTEN_ONION = false; void StartTorControl(boost::thread_group& threadGroup, CScheduler& scheduler); void InterruptTorControl(); From f3e2d7caee06e74ea7bf5f0004520ec46d7eff1b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:19:41 -0500 Subject: [PATCH 099/277] Disable sending alerts, lulz --- src/sendalert.cpp | 117 +++------------------------------------------- 1 file changed, 7 insertions(+), 110 deletions(-) diff --git a/src/sendalert.cpp b/src/sendalert.cpp index b626f5b05..1513f40e0 100644 --- a/src/sendalert.cpp +++ b/src/sendalert.cpp @@ -1,6 +1,8 @@ // Copyright (c) 2019-2020 The Hush developers // Copyright (c) 2016 The Zcash developers // Original code from: https://gist.github.com/laanwj/0e689cfa37b52bcbbb44 +// 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. * @@ -54,20 +56,20 @@ the bad alert. */ +// Copyright (c) 2019-2020 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 #include "main.h" #include "net.h" #include "alert.h" #include "init.h" - #include "util.h" #include "utiltime.h" #include "key.h" #include "clientversion.h" #include "chainparams.h" - #include "alertkeys.h" - static const int64_t DAYS = 24 * 60 * 60; void ThreadSendAlert() @@ -75,112 +77,7 @@ void ThreadSendAlert() if (!mapArgs.count("-sendalert") && !mapArgs.count("-printalert")) return; - //TODO: wait until KOMODO_IN_SYNC - MilliSleep(60*1000); // Wait a minute so we get connected + fprintf(stderr,"Sending alerts not supported!\n"); + return; - // Alerts are relayed around the network until nRelayUntil, flood - // filling to every node. - // After the relay time is past, new nodes are told about alerts - // when they connect to peers, until either nExpiration or - // the alert is cancelled by a newer alert. - // Nodes never save alerts to disk, they are in-memory-only. - // - CAlert alert; - alert.nRelayUntil = GetTime() + 15 * 60; - alert.nExpiration = GetTime() + 10 * 365 * 24 * 60 * 60; - alert.nID = 1005; // HUSH3 has never had any alert id's - alert.nCancel = 1004; // cancels previous messages up to this ID number - - // These versions are protocol versions - // 170002 : 1.0.0 - alert.nMinVer = 170002; - alert.nMaxVer = 170004; - - // - // main.cpp: - // 1000 for Misc warnings like out of disk space and clock is wrong - // 2000 for longer invalid proof-of-work chain - // Higher numbers mean higher priority - // 4000 or higher will put the RPC into safe mode - alert.nPriority = 4000; - alert.strComment = ""; - alert.strStatusBar = "Your client version has degraded networking behavior. Please update to the most recent version of Hush (3.5.0 or later)."; - alert.strRPCError = alert.strStatusBar; - - // Set specific client version/versions here. If setSubVer is empty, no filtering on subver is done: - // alert.setSubVer.insert(std::string("/MagicBean:0.7.2/")); - const std::vector useragents = {}; //{"MagicBean", "BeanStalk", "AppleSeed" }; - - BOOST_FOREACH(const std::string& useragent, useragents) { - } - - // Sanity check - assert(alert.strComment.length() <= 65536); // max length in alert.h - assert(alert.strStatusBar.length() <= 256); - assert(alert.strRPCError.length() <= 256); - - // Sign - const CChainParams& chainparams = Params(); - std::string networkID = chainparams.NetworkIDString(); - bool fIsTestNet = networkID.compare("test") == 0; - std::vector vchTmp(ParseHex(fIsTestNet ? pszTestNetPrivKey : pszPrivKey)); - CPrivKey vchPrivKey(vchTmp.begin(), vchTmp.end()); - - CDataStream sMsg(SER_NETWORK, CLIENT_VERSION); - sMsg << *(CUnsignedAlert*)&alert; - alert.vchMsg = std::vector(sMsg.begin(), sMsg.end()); - CKey key; - if (!key.SetPrivKey(vchPrivKey, false)) - { - printf("ThreadSendAlert() : key.SetPrivKey failed\n"); - return; - } - if (!key.Sign(Hash(alert.vchMsg.begin(), alert.vchMsg.end()), alert.vchSig)) - { - printf("ThreadSendAlert() : key.Sign failed\n"); - return; - } - - // Test - CDataStream sBuffer(SER_NETWORK, CLIENT_VERSION); - sBuffer << alert; - CAlert alert2; - sBuffer >> alert2; - if (!alert2.CheckSignature(chainparams.AlertKey())) - { - printf("ThreadSendAlert() : CheckSignature failed\n"); - return; - } - assert(alert2.vchMsg == alert.vchMsg); - assert(alert2.vchSig == alert.vchSig); - alert.SetNull(); - printf("\nThreadSendAlert:\n"); - printf("hash=%s\n", alert2.GetHash().ToString().c_str()); - printf("%s\n", alert2.ToString().c_str()); - printf("vchMsg=%s\n", HexStr(alert2.vchMsg).c_str()); - printf("vchSig=%s\n", HexStr(alert2.vchSig).c_str()); - - // Confirm - if (!mapArgs.count("-sendalert")) - return; - while (vNodes.size() < 1 && !ShutdownRequested()) - MilliSleep(500); - if (ShutdownRequested()) - return; - - // Send - printf("ThreadSendAlert() : Sending alert\n"); - int nSent = 0; - { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - { - if (alert2.RelayTo(pnode)) - { - printf("ThreadSendAlert() : Sent alert to %s\n", pnode->addr.ToString().c_str()); - nSent++; - } - } - } - printf("ThreadSendAlert() : Alert sent to %d nodes\n", nSent); } From 8db68f55c627cca40a392cc7ef8c98a34ab20424 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:21:38 -0500 Subject: [PATCH 100/277] Cleanup --- src/rpc/misc.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index f71ef3b88..9a0434a97 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -225,11 +225,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) UniValue obj(UniValue::VOBJ); obj.push_back(Pair("version", CLIENT_VERSION)); obj.push_back(Pair("protocolversion", PROTOCOL_VERSION)); - // this KMD version represents the last time we did a full merge, we no longer merge - // in the post-KYC "era" of KMD - obj.push_back(Pair("KMDversion", KOMODO_VERSION)); // never change this again, it's set in stone. -- Duke obj.push_back(Pair("synced", HUSH_INSYNC!=0)); - // any height larger than this can be attacked! obj.push_back(Pair("notarized", notarized_height)); obj.push_back(Pair("prevMoMheight", prevMoMheight)); obj.push_back(Pair("notarizedhash", notarized_hash.ToString())); From 4f27af7545f1417622c53ee829da6bf4cafde1fe Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:24:09 -0500 Subject: [PATCH 101/277] Hush DPoW won't attack their own villages, lulz --- src/hush_notary.h | 2 +- src/main.cpp | 10 +++++----- src/rpc/blockchain.cpp | 8 ++++---- src/rpc/misc.cpp | 4 ++-- src/rpc/rawtransaction.cpp | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/hush_notary.h b/src/hush_notary.h index f6b14e658..bb8db7094 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -287,7 +287,7 @@ int32_t komodo_prevMoMheight() return(0); } -int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp) +int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp) { char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; *prevMoMheightp = 0; diff --git a/src/main.cpp b/src/main.cpp index 783457bd3..99becd5cb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -674,7 +674,7 @@ bool komodo_dailysnapshot(int32_t height) int reorglimit = 100; uint256 notarized_hash,notarized_desttxid; int32_t prevMoMheight,notarized_height,undo_height,extraoffset; // NOTE: To make this 100% safe under all sync conditions, it should be using a notarized notarization, from the DB. - // Under heavy reorg attack, its possible `komodo_notarized_height` can return a height that can't be found on chain sync. + // Under heavy reorg attack, its possible `hush_notarized_height` can return a height that can't be found on chain sync. // However, the DB can reorg the last notarization. By using 2 deep, we know 100% that the previous notarization cannot be reorged by online nodes, // and as such will always be notarizing the same height. May need to check heights on scan back to make sure they are confirmed in correct order. if ( (extraoffset= height % KOMODO_SNAPSHOT_INTERVAL) != 0 ) @@ -691,7 +691,7 @@ bool komodo_dailysnapshot(int32_t height) else { // we are at the right height in connect block to scan back to last notarized height. - notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); + notarized_height = hush_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); notarized_height > height-reorglimit ? undo_height = notarized_height : undo_height = height-reorglimit; } fprintf(stderr, "doing snapshot for height.%i undo_height.%i\n", height, undo_height); @@ -3976,7 +3976,7 @@ bool static DisconnectTip(CValidationState &state, bool fBare = false) { //if ( SMART_CHAIN_SYMBOL[0] != 0 || pindexDelete->GetHeight() > 1400000 ) { int32_t notarizedht,prevMoMheight; uint256 notarizedhash,txid; - notarizedht = komodo_notarized_height(&prevMoMheight,¬arizedhash,&txid); + notarizedht = hush_notarized_height(&prevMoMheight,¬arizedhash,&txid); if ( block.GetHash() == notarizedhash ) { fprintf(stderr,"DisconnectTip trying to disconnect notarized block at ht.%d\n",(int32_t)pindexDelete->GetHeight()); @@ -4340,7 +4340,7 @@ static bool ActivateBestChainStep(bool fSkipdpow, CValidationState &state, CBloc // stop trying to reorg if the reorged chain is before last notarized height. // stay on the same chain tip! int32_t notarizedht,prevMoMheight; uint256 notarizedhash,txid; - notarizedht = komodo_notarized_height(&prevMoMheight,¬arizedhash,&txid); + notarizedht = hush_notarized_height(&prevMoMheight,¬arizedhash,&txid); if ( !fSkipdpow && pindexFork != 0 && pindexOldTip->GetHeight() > notarizedht && pindexFork->GetHeight() < notarizedht ) { LogPrintf("pindexOldTip->GetHeight().%d > notarizedht %d && pindexFork->GetHeight().%d is < notarizedht %d, so ignore it\n",(int32_t)pindexOldTip->GetHeight(),notarizedht,(int32_t)pindexFork->GetHeight(),notarizedht); @@ -5886,7 +5886,7 @@ uint64_t CalculateCurrentUsage() bool PruneOneBlockFile(bool tempfile, const int fileNumber) { uint256 notarized_hash,notarized_desttxid; int32_t prevMoMheight,notarized_height; - notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); + notarized_height = hush_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); //fprintf(stderr, "pruneblockfile.%i\n",fileNumber); sleep(15); for (BlockMap::iterator it = mapBlockIndex.begin(); it != mapBlockIndex.end(); ++it) { diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 798c64717..18cd192f2 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -54,7 +54,7 @@ extern int32_t HUSH_INSYNC; extern bool fZindex; extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry); void ScriptPubKeyToJSON(const CScript& scriptPubKey, UniValue& out, bool fIncludeHex); -int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); +int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); #include "hush_defs.h" #include "hush_structs.h" @@ -138,7 +138,7 @@ UniValue blockheaderToJSON(const CBlockIndex* blockindex) return(result); } uint256 notarized_hash,notarized_desttxid; int32_t prevMoMheight,notarized_height; - notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); + notarized_height = hush_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); result.push_back(Pair("last_notarized_height", notarized_height)); result.push_back(Pair("hash", blockindex->GetBlockHash().GetHex())); int confirmations = -1; @@ -292,7 +292,7 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool tx { UniValue result(UniValue::VOBJ); uint256 notarized_hash,notarized_desttxid; int32_t prevMoMheight,notarized_height; - notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); + notarized_height = hush_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); result.push_back(Pair("last_notarized_height", notarized_height)); result.push_back(Pair("hash", block.GetHash().GetHex())); int confirmations = -1; @@ -1654,7 +1654,7 @@ UniValue getblockchaininfo(const UniValue& params, bool fHelp, const CPubKey& my int32_t longestchain = HUSH_LONGESTCHAIN;//hush_longestchain(); progress = (longestchain > 0 ) ? (double) chainActive.Height() / longestchain : 1.0; } - notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); + notarized_height = hush_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); UniValue obj(UniValue::VOBJ); obj.push_back(Pair("chain", Params().NetworkIDString())); obj.push_back(Pair("blocks", (int)chainActive.Height())); diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 9a0434a97..b3db69c5c 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -56,7 +56,7 @@ using namespace std; uint64_t komodo_interestsum(); int32_t hush_longestchain(); -int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); +int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); bool komodo_txnotarizedconfirmed(uint256 txid); uint32_t komodo_chainactive_timestamp(); int32_t komodo_whoami(char *pubkeystr,int32_t height,uint32_t timestamp); @@ -219,7 +219,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) proxyType proxy; GetProxy(NET_IPV4, proxy); - notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); + notarized_height = hush_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); //fprintf(stderr,"after notarized_height %u\n",(uint32_t)time(NULL)); UniValue obj(UniValue::VOBJ); diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 6c9f8f492..3bfbd5dcc 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -52,7 +52,7 @@ #include -int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); +int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); using namespace std; @@ -133,7 +133,7 @@ int32_t myIsutxo_spent(uint256 &spenttxid,uint256 txid,int32_t vout) void TxToJSONExpanded(const CTransaction& tx, const uint256 hashBlock, UniValue& entry, int nHeight = 0, int nConfirmations = 0, int nBlockTime = 0) { uint256 notarized_hash,notarized_desttxid; int32_t prevMoMheight,notarized_height; - notarized_height = komodo_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); + notarized_height = hush_notarized_height(&prevMoMheight,¬arized_hash,¬arized_desttxid); uint256 txid = tx.GetHash(); entry.push_back(Pair("txid", txid.GetHex())); entry.push_back(Pair("overwintered", tx.fOverwintered)); From 86ea1a4fed6735cbc221ae2403bfd1018141f679 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:41:26 -0500 Subject: [PATCH 102/277] Let's be real yo --- src/notarizationdb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/notarizationdb.cpp b/src/notarizationdb.cpp index 44b20efb6..569f7b633 100644 --- a/src/notarizationdb.cpp +++ b/src/notarizationdb.cpp @@ -20,7 +20,7 @@ NotarisationsInBlock ScanBlockNotarisations(const CBlock &block, int nHeight) bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; // No valid ntz's before this height on HUSH3 - if(ishush3 && (nHeight <= 350000)) { + if(ishush3 && (nHeight <= 360000)) { return vNotarisations; } From 8ae12ae952dc7debea169dd3f9f0f1aa780ae50f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 08:51:53 -0500 Subject: [PATCH 103/277] tweaks --- src/main.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 99becd5cb..c0fbf85bf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "main.h" #include "sodium.h" #include "addrman.h" @@ -64,7 +62,7 @@ using namespace std; #if defined(NDEBUG) -# error "Hush cannot be compiled without assertions." +# error "Hush cannot be compiled without assertions, lulz" #endif #include "librustzcash.h" @@ -1759,7 +1757,6 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa if ( nextBlockHeight <= 1 || chainActive.LastTip() == 0 ) tiptime = (uint32_t)time(NULL); else tiptime = (uint32_t)chainActive.LastTip()->nTime; -//fprintf(stderr,"addmempool 0\n"); // Node operator can choose to reject tx by number of transparent inputs static_assert(std::numeric_limits::max() >= std::numeric_limits::max(), "size_t too small"); size_t limit = (size_t) GetArg("-mempooltxinputlimit", 0); From 6e3d994b7749ea99985c590a576dc6f061a046d4 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:13:45 -0500 Subject: [PATCH 104/277] Mempool optimizations and cleanup --- src/main.cpp | 125 +++++++++------------------------------------------ src/main.h | 2 - 2 files changed, 21 insertions(+), 106 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index c0fbf85bf..8d5b9d371 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1770,14 +1770,8 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa return false; } } -//fprintf(stderr,"addmempool 1\n"); auto verifier = libzcash::ProofVerifier::Strict(); - if ( SMART_CHAIN_SYMBOL[0] == 0 && komodo_validate_interest(tx,chainActive.LastTip()->GetHeight()+1,chainActive.LastTip()->GetMedianTimePast() + 777,0) < 0 ) - { - fprintf(stderr,"AcceptToMemoryPool komodo_validate_interest failure\n"); - return error("AcceptToMemoryPool: komodo_validate_interest failed"); - } - + if (!CheckTransaction(tiptime,tx, state, verifier, 0, 0)) { return error("AcceptToMemoryPool: CheckTransaction failed"); @@ -1814,7 +1808,6 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa //fprintf(stderr,"AcceptToMemoryPool reject non-final\n"); return state.DoS(0, false, REJECT_NONSTANDARD, "non-final"); } -//fprintf(stderr,"addmempool 3\n"); // is it already in the memory pool? uint256 hash = tx.GetHash(); if (pool.exists(hash)) @@ -1835,21 +1828,14 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa return false; } } - BOOST_FOREACH(const JSDescription &joinsplit, tx.vjoinsplit) { - BOOST_FOREACH(const uint256 &nf, joinsplit.nullifiers) { - if (pool.nullifierExists(nf, SPROUT)) { - fprintf(stderr,"pool.mapNullifiers.count\n"); - return false; - } - } - } + for (const SpendDescription &spendDescription : tx.vShieldedSpend) { if (pool.nullifierExists(spendDescription.nullifier, SAPLING)) { return false; } } } -//fprintf(stderr,"addmempool 4\n"); + { CCoinsView dummy; CCoinsViewCache view(&dummy); @@ -1861,50 +1847,41 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa view.SetBackend(viewMemPool); // do we already have it? - if (view.HaveCoins(hash)) - { + if (view.HaveCoins(hash)) { //fprintf(stderr,"view.HaveCoins(hash) error\n"); return state.Invalid(false, REJECT_DUPLICATE, "already have coins"); } - if (tx.IsCoinImport() || tx.IsPegsImport()) - { + if (tx.IsCoinImport() || tx.IsPegsImport()) { // Inverse of normal case; if input exists, it's been spent if (ExistsImportTombstone(tx, view)) return state.Invalid(false, REJECT_DUPLICATE, "import tombstone exists"); - } - else - { + } else { // do all inputs exist? // Note that this does not check for the presence of actual outputs (see the next check for that), // and only helps with filling in pfMissingInputs (to determine missing vs spent). BOOST_FOREACH(const CTxIn txin, tx.vin) { - if (!view.HaveCoins(txin.prevout.hash)) - { + if (!view.HaveCoins(txin.prevout.hash)) { if (pfMissingInputs) *pfMissingInputs = true; //fprintf(stderr,"missing inputs\n"); return false; - /* - https://github.com/zcash/zcash/blob/master/src/main.cpp#L1490 - state.DoS(0, error("AcceptToMemoryPool: tx inputs not found"),REJECT_INVALID, "bad-txns-inputs-missing"); - */ + // https://github.com/zcash/zcash/blob/master/src/main.cpp#L1490 + // state.DoS(0, error("AcceptToMemoryPool: tx inputs not found"),REJECT_INVALID, "bad-txns-inputs-missing"); } } // are the actual inputs available? - if (!view.HaveInputs(tx)) - { - //fprintf(stderr,"accept failure.1\n"); + if (!view.HaveInputs(tx)) { + //fprintf(stderr,"accept failure. inputs-spent\n"); return state.Invalid(error("AcceptToMemoryPool: inputs already spent"),REJECT_DUPLICATE, "bad-txns-inputs-spent"); } } - // are the joinsplit's requirements met? - if (!view.HaveShieldedRequirements(tx)) - { - //fprintf(stderr,"accept failure.2\n"); - return state.Invalid(error("AcceptToMemoryPool: shielded requirements not met"),REJECT_DUPLICATE, "bad-txns-joinsplit-requirements-not-met"); + // are the zaddr requirements met? + if (!view.HaveShieldedRequirements(tx)) { + //fprintf(stderr,"accept failure. ztx reqs not met\n"); + return state.Invalid(error("AcceptToMemoryPool: shielded requirements not met"),REJECT_DUPLICATE, "bad-txns-shielded-requirements-not-met"); } // Bring the best block into scope @@ -1951,7 +1928,6 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa } } } -//fprintf(stderr,"addmempool 5\n"); // Grab the branch ID we expect this transaction to commit to. We don't // yet know if it does, but if the entry gets added to the mempool, then // it has passed ContextualCheckInputs and therefore this is correct. @@ -1960,14 +1936,13 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), mempool.HasNoInputsOf(tx), fSpendsCoinbase, consensusBranchId); unsigned int nSize = entry.GetTxSize(); - // Accept a tx if it contains joinsplits and has at least the default fee specified by z_sendmany. - if (tx.vjoinsplit.size() > 0 && nFees >= ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE) { - // In future we will we have more accurate and dynamic computation of fees for tx with joinsplits. + // Accept a tx if it contains zspends and has at least the default fee specified by z_sendmany. + if (tx.vShieldedSpend.size() > 0 && nFees >= ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE) { + // In future we will we have more accurate and dynamic computation of fees, derpz } else { - // Don't accept it if it can't get into a block + // Don't accept it if it can't get into a block, yallz CAmount txMinFee = GetMinRelayFee(tx, nSize, true); - if (fLimitFree && nFees < txMinFee) - { + if (fLimitFree && nFees < txMinFee) { //fprintf(stderr,"accept failure.5\n"); return state.DoS(0, error("AcceptToMemoryPool: not enough fees %s, %d < %d",hash.ToString(), nFees, txMinFee),REJECT_INSUFFICIENTFEE, "insufficient fee"); } @@ -2039,7 +2014,6 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa flag = 1; KOMODO_CONNECTING = (1<<30) + (int32_t)chainActive.LastTip()->GetHeight() + 1; } -//fprintf(stderr,"addmempool 7\n"); if (!ContextualCheckInputs(tx, state, view, true, MANDATORY_SCRIPT_VERIFY_FLAGS, true, txdata, Params().GetConsensus(), consensusBranchId)) { @@ -2306,25 +2280,7 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock return false; } -/*char *komodo_getspendscript(uint256 hash,int32_t n) - { - CTransaction tx; uint256 hashBlock; - if ( !GetTransaction(hash,tx,hashBlock,true) ) - { - printf("null GetTransaction\n"); - return(0); - } - if ( n >= 0 && n < tx.vout.size() ) - return((char *)tx.vout[n].scriptPubKey.ToString().c_str()); - else printf("getspendscript illegal n.%d\n",n); - return(0); - }*/ - - -////////////////////////////////////////////////////////////////////////////// -// // CBlock and CBlockIndex -// bool WriteBlockToDisk(const CBlock& block, CDiskBlockPos& pos, const CMessageHeader::MessageStartChars& messageStart) { @@ -2530,7 +2486,7 @@ void CheckForkWarningConditionsOnNewFork(CBlockIndex* pindexNewForkTip) { AssertLockHeld(cs_main); // If we are on a fork that is sufficiently large, set a warning flag - CBlockIndex* pfork = pindexNewForkTip; + CBlockIndex* pfork = pindexNewForkTip; CBlockIndex* plonger = chainActive.LastTip(); while (pfork && pfork != plonger) { @@ -2842,45 +2798,6 @@ bool ContextualCheckInputs( return true; } - -/*bool ContextualCheckInputs(const CTransaction& tx, CValidationState &state, const CCoinsViewCache &inputs, bool fScriptChecks, unsigned int flags, bool cacheStore, const Consensus::Params& consensusParams, std::vector *pvChecks) - { - if (!NonContextualCheckInputs(tx, state, inputs, fScriptChecks, flags, cacheStore, consensusParams, pvChecks)) { - fprintf(stderr,"ContextualCheckInputs failure.0\n"); - return false; - } - - if (!tx.IsCoinBase()) - { - // While checking, GetBestBlock() refers to the parent block. - // This is also true for mempool checks. - CBlockIndex *pindexPrev = mapBlockIndex.find(inputs.GetBestBlock())->second; - int nSpendHeight = pindexPrev->GetHeight() + 1; - for (unsigned int i = 0; i < tx.vin.size(); i++) - { - const COutPoint &prevout = tx.vin[i].prevout; - const CCoins *coins = inputs.AccessCoins(prevout.hash); - // Assertion is okay because NonContextualCheckInputs ensures the inputs - // are available. - assert(coins); - - // If prev is coinbase, check that it's matured - if (coins->IsCoinBase()) { - if ( SMART_CHAIN_SYMBOL[0] == 0 ) - COINBASE_MATURITY = _COINBASE_MATURITY; - if (nSpendHeight - coins->nHeight < COINBASE_MATURITY) { - fprintf(stderr,"ContextualCheckInputs failure.1 i.%d of %d\n",i,(int32_t)tx.vin.size()); - - return state.Invalid( - error("CheckInputs(): tried to spend coinbase at depth %d", nSpendHeight - coins->nHeight),REJECT_INVALID, "bad-txns-premature-spend-of-coinbase"); - } - } - } - } - - return true; - }*/ - namespace { bool UndoWriteToDisk(const CBlockUndo& blockundo, CDiskBlockPos& pos, const uint256& hashBlock, const CMessageHeader::MessageStartChars& messageStart) diff --git a/src/main.h b/src/main.h index f11e88053..eb14eeb3b 100644 --- a/src/main.h +++ b/src/main.h @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_MAIN_H #define HUSH_MAIN_H From 0f30b81d8e9c1288a6ec98ab569fc7a8e4d8e873 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:16:40 -0500 Subject: [PATCH 105/277] zzzzzz --- src/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8d5b9d371..ed17bdee9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2907,7 +2907,7 @@ static bool ApplyTxInUndo(const CTxInUndo& undo, CCoinsViewCache& view, const CO } -void ConnectNotarisations(const CBlock &block, int height) +void ConnectNotarizations(const CBlock &block, int height) { // Record Notarisations NotarisationsInBlock notarisations = ScanBlockNotarisations(block, height); @@ -2922,7 +2922,7 @@ void ConnectNotarisations(const CBlock &block, int height) } -void DisconnectNotarisations(const CBlock &block) +void DisconnectNotarizations(const CBlock &block) { // Delete from notarisations cache NotarisationsInBlock nibs; @@ -3652,7 +3652,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin setDirtyBlockIndex.insert(pindex); } - ConnectNotarisations(block, pindex->GetHeight()); // MoMoM notarisation DB. + ConnectNotarizations(block, pindex->GetHeight()); // MoMoM notarisation DB. if (fTxIndex) if (!pblocktree->WriteTxIndex(vPos)) @@ -3907,7 +3907,7 @@ bool static DisconnectTip(CValidationState &state, bool fBare = false) { if (!DisconnectBlock(block, state, pindexDelete, view)) return error("DisconnectTip(): DisconnectBlock %s failed", pindexDelete->GetBlockHash().ToString()); assert(view.Flush()); - DisconnectNotarisations(block); + DisconnectNotarizations(block); } pindexDelete->segid = -2; pindexDelete->nNotaryPay = 0; From db06da0345c7ad345d59931904806128df2025fd Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:22:33 -0500 Subject: [PATCH 106/277] Fix a warning a day to keep compiler errors away --- src/main.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ed17bdee9..e748605a5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5917,8 +5917,7 @@ void FindFilesToPrune(std::set& setFilesToPrune) bool CheckDiskSpace(uint64_t nAdditionalBytes) { uint64_t nFreeBytesAvailable = boost::filesystem::space(GetDataDir()).available; - - fprintf(stderr,"Free bytes on disk: %d\n", nFreeBytesAvailable); + fprintf(stderr,"Free bytes on disk: %lu\n", nFreeBytesAvailable); // Check for nMinDiskSpace bytes (currently 50MB) if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes) return AbortNode("Disk space is low!", _("Error: Disk space is low!")); From 194a1abf9969f41bc7d84ce9dfd28d80fae6dfe6 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:25:44 -0500 Subject: [PATCH 107/277] ntz yeah you know me --- src/main.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index e748605a5..a8e7baa3a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2906,32 +2906,28 @@ static bool ApplyTxInUndo(const CTxInUndo& undo, CCoinsViewCache& view, const CO return fClean; } - void ConnectNotarizations(const CBlock &block, int height) { - // Record Notarisations NotarisationsInBlock notarisations = ScanBlockNotarisations(block, height); if (notarisations.size() > 0) { CDBBatch batch = CDBBatch(*pnotarisations); batch.Write(block.GetHash(), notarisations); WriteBackNotarisations(notarisations, batch); pnotarisations->WriteBatch(batch, true); - LogPrintf("ConnectBlock: wrote %i block notarisations in block: %s\n", + LogPrintf("ConnectBlock: wrote %i block notarizations in block: %s\n", notarisations.size(), block.GetHash().GetHex().data()); } } - void DisconnectNotarizations(const CBlock &block) { - // Delete from notarisations cache NotarisationsInBlock nibs; if (GetBlockNotarisations(block.GetHash(), nibs)) { CDBBatch batch = CDBBatch(*pnotarisations); batch.Erase(block.GetHash()); EraseBackNotarisations(nibs, batch); pnotarisations->WriteBatch(batch, true); - LogPrintf("DisconnectTip: deleted %i block notarisations in block: %s\n", + LogPrintf("DisconnectTip: deleted %i block notarizations in block: %s\n", nibs.size(), block.GetHash().GetHex().data()); } } From 59ae954c56b7aacccdd08ac7538182ba23355b0a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:28:22 -0500 Subject: [PATCH 108/277] Hush DPoW knows how to spell, lulz --- src/init.cpp | 2 +- src/main.cpp | 2 +- src/notarizationdb.cpp | 6 +++--- src/notarizationdb.h | 2 +- src/test-hush/testutils.cpp | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index cf690608b..500727349 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1765,7 +1765,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex); pcoinscatcher = new CCoinsViewErrorCatcher(pcoinsdbview); pcoinsTip = new CCoinsViewCache(pcoinscatcher); - pnotarisations = new NotarisationDB(100*1024*1024, false, fReindex); + pnotarisations = new NotarizationDB(100*1024*1024, false, fReindex); if (fReindex) { diff --git a/src/main.cpp b/src/main.cpp index a8e7baa3a..56a7ce586 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2908,7 +2908,7 @@ static bool ApplyTxInUndo(const CTxInUndo& undo, CCoinsViewCache& view, const CO void ConnectNotarizations(const CBlock &block, int height) { - NotarisationsInBlock notarisations = ScanBlockNotarisations(block, height); + NotarisationsInBlock notarisations = ScanBlockNotarizations(block, height); if (notarisations.size() > 0) { CDBBatch batch = CDBBatch(*pnotarisations); batch.Write(block.GetHash(), notarisations); diff --git a/src/notarizationdb.cpp b/src/notarizationdb.cpp index 569f7b633..7b329b30f 100644 --- a/src/notarizationdb.cpp +++ b/src/notarizationdb.cpp @@ -9,10 +9,10 @@ #include "main.h" #include -NotarisationDB *pnotarisations; -NotarisationDB::NotarisationDB(size_t nCacheSize, bool fMemory, bool fWipe) : CDBWrapper(GetDataDir() / "notarizations", nCacheSize, fMemory, fWipe, false, 64) { } +NotarizationDB *pnotarisations; +NotarizationDB::NotarizationDB(size_t nCacheSize, bool fMemory, bool fWipe) : CDBWrapper(GetDataDir() / "notarizations", nCacheSize, fMemory, fWipe, false, 64) { } -NotarisationsInBlock ScanBlockNotarisations(const CBlock &block, int nHeight) +NotarisationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) { EvalRef eval; NotarisationsInBlock vNotarisations; diff --git a/src/notarizationdb.h b/src/notarizationdb.h index edd483639..4788331e1 100644 --- a/src/notarizationdb.h +++ b/src/notarizationdb.h @@ -18,7 +18,7 @@ extern NotarisationDB *pnotarisations; typedef std::pair Notarisation; typedef std::vector NotarisationsInBlock; -NotarisationsInBlock ScanBlockNotarisations(const CBlock &block, int nHeight); +NotarisationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight); bool GetBlockNotarisations(uint256 blockHash, NotarisationsInBlock &nibs); bool GetBackNotarisation(uint256 notarisationHash, Notarisation &n); void WriteBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch &batch); diff --git a/src/test-hush/testutils.cpp b/src/test-hush/testutils.cpp index 327e7fd93..94998ea97 100644 --- a/src/test-hush/testutils.cpp +++ b/src/test-hush/testutils.cpp @@ -62,7 +62,7 @@ void setupChain() pblocktree = new CBlockTreeDB(1 << 20, true); CCoinsViewDB *pcoinsdbview = new CCoinsViewDB(1 << 23, true); pcoinsTip = new CCoinsViewCache(pcoinsdbview); - pnotarisations = new NotarisationDB(1 << 20, true); + pnotarisations = new NotarizationDB(1 << 20, true); InitBlockIndex(); } From 58721f452f8e6c78044ce0dc678f5e2711597ce3 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:29:57 -0500 Subject: [PATCH 109/277] Inspiration and perspiration go together like Englishmen and bar fights --- src/init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/init.cpp b/src/init.cpp index 500727349..f7a306b63 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -2224,7 +2224,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) SetRPCWarmupFinished(); if(fDebug) fprintf(stderr,"RPC warmump finished\n"); - uiInterface.InitMessage(_("Done loading!")); + uiInterface.InitMessage(_("Hush Full Node Done Loading! :)")); #ifdef ENABLE_WALLET if (pwalletMain) { From f29e55a0df6c85991b929836f7c38b95806d71ee Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:41:18 -0500 Subject: [PATCH 110/277] update manpages, yet again --- doc/man/hushd.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/man/hushd.1 b/doc/man/hushd.1 index ad3f82548..0a8be8e5c 100644 --- a/doc/man/hushd.1 +++ b/doc/man/hushd.1 @@ -84,7 +84,7 @@ leave that many cores free, default: 0) .HP \fB\-pid=\fR .IP -Specify pid file (default: komodod.pid) +Specify pid file (default: hushd.pid) .HP \fB\-txexpirynotify=\fR .IP @@ -196,7 +196,7 @@ Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\ .HP \fB\-listenonion\fR .IP -Automatically create Tor hidden service (default: 1) +Automatically create Tor hidden service (default: 0) .HP \fB\-maxconnections=\fR .IP From 9d53ce4f46bb2f65cb39b89990f415b41491bf3a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:44:56 -0500 Subject: [PATCH 111/277] Give the relnotes some love --- doc/relnotes/README.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 8f7527735..d16e2cebf 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -5,9 +5,14 @@ and now are officially part of our Git repo. # 3.6.0 -Coming Soon + * Fixes "block 340k" sync issues! + * New Hush DPoW Notaries replace KMD Notaries (who attacked us, lulz) + * More secure+private TLS 1.3 implementation from miodrag, thanks! + * Faster release binaries with -03 + * Optimized AcceptToMemoryPool, deleting things which do not apply - * Fixes sync issues! - * New Hush DPoW - * Faster binaries - * More secure+private TLS implementation + +## Bounty + +Would you like to transcribe old Github releases to this file for a HUSH +bounty? Join https://hush.is/tg to learn more. From b9a48e387562028fd77e685d813ff491c8348069 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:46:43 -0500 Subject: [PATCH 112/277] Useful breadcrumbs --- src/test/README.md | 3 +++ src/test/bitcoin-util-test.py | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/README.md b/src/test/README.md index 12899acdd..ab0002eda 100644 --- a/src/test/README.md +++ b/src/test/README.md @@ -1,5 +1,8 @@ # Hush Unit tests +These tests were inherited from Bitcoin. For Hush-specific tests, see +the ./src/test-hush directory. + The sources in this directory are unit test cases. Boost includes a unit testing framework, and since bitcoin already uses boost, it makes sense to simply use this framework rather than require developers to diff --git a/src/test/bitcoin-util-test.py b/src/test/bitcoin-util-test.py index f4aa5b3b3..e843a0524 100755 --- a/src/test/bitcoin-util-test.py +++ b/src/test/bitcoin-util-test.py @@ -11,4 +11,3 @@ import buildenv if __name__ == '__main__': bctest.bctester(os.environ["srcdir"] + "/test/data", "bitcoin-util-test.json",buildenv) - From e8e615c9d969b534138b48229d6b4a8810342060 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 09:56:13 -0500 Subject: [PATCH 113/277] tweaks --- src/test-hush/test_eval_bet.cpp | 5 ----- src/test-hush/testutils.cpp | 35 +++++++++++---------------------- src/test-hush/testutils.h | 11 +++-------- 3 files changed, 15 insertions(+), 36 deletions(-) diff --git a/src/test-hush/test_eval_bet.cpp b/src/test-hush/test_eval_bet.cpp index fc772bdf0..1bf3ec7fc 100644 --- a/src/test-hush/test_eval_bet.cpp +++ b/src/test-hush/test_eval_bet.cpp @@ -3,7 +3,6 @@ // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include #include - #include "cc/betprotocol.h" #include "cc/eval.h" #include "base58.h" @@ -13,16 +12,12 @@ #include "primitives/transaction.h" #include "script/interpreter.h" #include "script/serverchecker.h" - #include "testutils.h" - extern Eval* EVAL_TEST; - namespace TestBet { - static std::vector playerSecrets; static std::vector players; diff --git a/src/test-hush/testutils.cpp b/src/test-hush/testutils.cpp index 94998ea97..b5e989bdc 100644 --- a/src/test-hush/testutils.cpp +++ b/src/test-hush/testutils.cpp @@ -22,30 +22,24 @@ #include "script/interpreter.h" #include "testutils.h" - +// We need to have control of Time Itself, otherwise block production can fail. +int64_t nMockTime; +extern uint32_t USE_EXTERNAL_PUBKEY; +extern std::string NOTARY_PUBKEY; +// This is a publicly burned keypair for Testing Purposes Only, lulz +// Have fun, Blockchain Analysts ;) std::string notaryPubkey = "0205a8ad0c1dbc515f149af377981aab58b836af008d4d7ab21bd76faf80550b47"; std::string notarySecret = "UxFWWxsf1d7w7K5TvAWSkeX4H95XQKwdwGv49DXwWUTzPTTjHBbU"; CKey notaryKey; - -/* - * We need to have control of clock, - * otherwise block production can fail. - */ -int64_t nMockTime; - -extern uint32_t USE_EXTERNAL_PUBKEY; -extern std::string NOTARY_PUBKEY; - -void setupChain() -{ +void setupChain() { SelectParams(CBaseChainParams::REGTEST); // Settings to get block reward - NOTARY_PUBKEY = notaryPubkey; - USE_EXTERNAL_PUBKEY = 1; + NOTARY_PUBKEY = notaryPubkey; + USE_EXTERNAL_PUBKEY = 1; mapArgs["-mineraddress"] = "bogus"; - COINBASE_MATURITY = 1; + COINBASE_MATURITY = 1; // Global mock time nMockTime = GetTime(); @@ -54,7 +48,7 @@ void setupChain() // Init blockchain ClearDatadirCache(); - auto pathTemp = GetTempPath() / strprintf("test_komodo_%li_%i", GetTime(), GetRand(100000)); + auto pathTemp = GetTempPath() / strprintf("test_hush_%li_%i", GetTime(), GetRand(100000)); if (SMART_CHAIN_SYMBOL[0]) pathTemp = pathTemp / strprintf("_%s", SMART_CHAIN_SYMBOL); boost::filesystem::create_directories(pathTemp); @@ -74,7 +68,7 @@ void generateBlock(CBlock *block) params.push_back(1); uint256 blockId; - SetMockTime(nMockTime+=100); // CreateNewBlock can fail if not enough time passes + SetMockTime(nMockTime+=100); // CreateNewBlock can fail if not enough Time Has Happened try { UniValue out = generate(params, false, CPubKey()); @@ -85,21 +79,18 @@ void generateBlock(CBlock *block) } } - void acceptTxFail(const CTransaction tx) { CValidationState state; if (!acceptTx(tx, state)) FAIL() << state.GetRejectReason(); } - bool acceptTx(const CTransaction tx, CValidationState &state) { LOCK(cs_main); return AcceptToMemoryPool(mempool, state, tx, false, NULL); } - CMutableTransaction spendTx(const CTransaction &txIn, int nOut) { CMutableTransaction mtx; @@ -111,7 +102,6 @@ CMutableTransaction spendTx(const CTransaction &txIn, int nOut) return mtx; } - std::vector getSig(const CMutableTransaction mtx, CScript inputPubKey, int nIn) { uint256 hash = SignatureHash(inputPubKey, mtx, nIn, SIGHASH_ALL, 0, 0); @@ -121,7 +111,6 @@ std::vector getSig(const CMutableTransaction mtx, CScript inputPubKey, return vchSig; } - /* * In order to do tests there needs to be inputs to spend. * This method creates a block and returns a transaction that spends the coinbase. diff --git a/src/test-hush/testutils.h b/src/test-hush/testutils.h index 07d4c3d3d..2155f742e 100644 --- a/src/test-hush/testutils.h +++ b/src/test-hush/testutils.h @@ -1,12 +1,11 @@ // Copyright (c) 2019-2020 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 -#ifndef TESTUTILS_H -#define TESTUTILS_H +#ifndef HUSH_TESTUTILS_H +#define HUSH_TESTUTILS_H #include "main.h" - #define VCH(a,b) std::vector(a, a + b) static char ccjsonerr[1000] = "\0"; @@ -14,12 +13,9 @@ static char ccjsonerr[1000] = "\0"; o = cc_conditionFromJSONString(s, ccjsonerr); \ if (!o) FAIL() << "bad json: " << ccjsonerr; - extern std::string notaryPubkey; extern std::string notarySecret; extern CKey notaryKey; - - void setupChain(); void generateBlock(CBlock *block=NULL); bool acceptTx(const CTransaction tx, CValidationState &state); @@ -28,5 +24,4 @@ void getInputTx(CScript scriptPubKey, CTransaction &txIn); CMutableTransaction spendTx(const CTransaction &txIn, int nOut=0); std::vector getSig(const CMutableTransaction mtx, CScript inputPubKey, int nIn=0); - -#endif /* TESTUTILS_H */ +#endif /* HUSH_TESTUTILS_H */ From 763c2def958b84e80068fafcdff18c89383670ec Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 10:00:00 -0500 Subject: [PATCH 114/277] Hush notarization database is too legit to quit --- src/init.cpp | 4 ++-- src/main.cpp | 8 ++++---- src/notarizationdb.cpp | 6 +++--- src/notarizationdb.h | 6 +++--- src/test-hush/testutils.cpp | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index f7a306b63..22608ce31 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1759,13 +1759,13 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) delete pcoinsdbview; delete pcoinscatcher; delete pblocktree; - delete pnotarisations; + delete pnotarizations; pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex, dbCompression, dbMaxOpenFiles); pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex); pcoinscatcher = new CCoinsViewErrorCatcher(pcoinsdbview); pcoinsTip = new CCoinsViewCache(pcoinscatcher); - pnotarisations = new NotarizationDB(100*1024*1024, false, fReindex); + pnotarizations = new NotarizationDB(100*1024*1024, false, fReindex); if (fReindex) { diff --git a/src/main.cpp b/src/main.cpp index 56a7ce586..2c9d98f80 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2910,10 +2910,10 @@ void ConnectNotarizations(const CBlock &block, int height) { NotarisationsInBlock notarisations = ScanBlockNotarizations(block, height); if (notarisations.size() > 0) { - CDBBatch batch = CDBBatch(*pnotarisations); + CDBBatch batch = CDBBatch(*pnotarizations); batch.Write(block.GetHash(), notarisations); WriteBackNotarisations(notarisations, batch); - pnotarisations->WriteBatch(batch, true); + pnotarizations->WriteBatch(batch, true); LogPrintf("ConnectBlock: wrote %i block notarizations in block: %s\n", notarisations.size(), block.GetHash().GetHex().data()); } @@ -2923,10 +2923,10 @@ void DisconnectNotarizations(const CBlock &block) { NotarisationsInBlock nibs; if (GetBlockNotarisations(block.GetHash(), nibs)) { - CDBBatch batch = CDBBatch(*pnotarisations); + CDBBatch batch = CDBBatch(*pnotarizations); batch.Erase(block.GetHash()); EraseBackNotarisations(nibs, batch); - pnotarisations->WriteBatch(batch, true); + pnotarizations->WriteBatch(batch, true); LogPrintf("DisconnectTip: deleted %i block notarizations in block: %s\n", nibs.size(), block.GetHash().GetHex().data()); } diff --git a/src/notarizationdb.cpp b/src/notarizationdb.cpp index 7b329b30f..0233248ee 100644 --- a/src/notarizationdb.cpp +++ b/src/notarizationdb.cpp @@ -9,7 +9,7 @@ #include "main.h" #include -NotarizationDB *pnotarisations; +NotarizationDB *pnotarizations; NotarizationDB::NotarizationDB(size_t nCacheSize, bool fMemory, bool fWipe) : CDBWrapper(GetDataDir() / "notarizations", nCacheSize, fMemory, fWipe, false, 64) { } NotarisationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) @@ -55,13 +55,13 @@ NotarisationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) bool GetBlockNotarisations(uint256 blockHash, NotarisationsInBlock &nibs) { - return pnotarisations->Read(blockHash, nibs); + return pnotarizations->Read(blockHash, nibs); } bool GetBackNotarisation(uint256 notarisationHash, Notarisation &n) { - return pnotarisations->Read(notarisationHash, n); + return pnotarizations->Read(notarisationHash, n); } diff --git a/src/notarizationdb.h b/src/notarizationdb.h index 4788331e1..89e9890b4 100644 --- a/src/notarizationdb.h +++ b/src/notarizationdb.h @@ -8,13 +8,13 @@ #include "dbwrapper.h" #include "cc/eval.h" -class NotarisationDB : public CDBWrapper +class NotarizationDB : public CDBWrapper { public: - NotarisationDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); + NotarizationDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); }; -extern NotarisationDB *pnotarisations; +extern NotarizationDB *pnotarizations; typedef std::pair Notarisation; typedef std::vector NotarisationsInBlock; diff --git a/src/test-hush/testutils.cpp b/src/test-hush/testutils.cpp index b5e989bdc..3f147eb41 100644 --- a/src/test-hush/testutils.cpp +++ b/src/test-hush/testutils.cpp @@ -56,7 +56,7 @@ void setupChain() { pblocktree = new CBlockTreeDB(1 << 20, true); CCoinsViewDB *pcoinsdbview = new CCoinsViewDB(1 << 23, true); pcoinsTip = new CCoinsViewCache(pcoinsdbview); - pnotarisations = new NotarizationDB(1 << 20, true); + pnotarizations = new NotarizationDB(1 << 20, true); InitBlockIndex(); } From 0b2c96d0db551b606ea2572750caeb8e8b42e28b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 10:12:27 -0500 Subject: [PATCH 115/277] Update Hush Docker environment scripts --- Dockerfile | 12 +++++++----- zcutil/docker-entrypoint.sh | 39 +++++++++++++------------------------ zcutil/docker-hush-cli.sh | 4 ++++ zcutil/docker-komodo-cli.sh | 6 ------ 4 files changed, 25 insertions(+), 36 deletions(-) create mode 100755 zcutil/docker-hush-cli.sh delete mode 100755 zcutil/docker-komodo-cli.sh diff --git a/Dockerfile b/Dockerfile index 3177f8964..0f2106689 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,6 @@ +# Copyright (c) 2019-2020 Hush developers FROM ubuntu:16.04 -MAINTAINER Mihail Fedorov +MAINTAINER Duke Leto RUN apt-get -y update && \ apt-get -y upgrade && \ @@ -17,13 +18,14 @@ WORKDIR /hush RUN cd /hush && \ ./autogen.sh && \ ./configure --with-incompatible-bdb --with-gui || true && \ - ./zcutil/build.sh -j$(nproc) - -# Unknown stuff goes here + ./build.sh -j$(nproc) RUN ln -sf /hush/src/komodod /usr/bin/komodod && \ ln -sf /hush/src/hushd /usr/bin/hushd && \ + ln -sf /hush/src/hush-tx /usr/bin/hush-tx && \ + ln -sf /hush/src/wallet-utility /usr/bin/hush-wallet-utility && \ + ln -sf /hush/src/hush-smart-chain /usr/bin/hush-smart-chain && \ ln -sf /hush/zcutil/docker-entrypoint.sh /usr/bin/entrypoint && \ - ln -sf /hush/zcutil/docker-komodo-cli.sh /usr/bin/hush-cli + ln -sf /hush/zcutil/docker-hush-cli.sh /usr/bin/hush-cli CMD ["entrypoint"] diff --git a/zcutil/docker-entrypoint.sh b/zcutil/docker-entrypoint.sh index aae6fc7e4..4615ba48f 100755 --- a/zcutil/docker-entrypoint.sh +++ b/zcutil/docker-entrypoint.sh @@ -1,47 +1,36 @@ #!/bin/bash +# Copyright (c) 2019-2020 Hush developers #set -ex +echo "...Checking HUSH3.conf" -echo "...Checking komodo.conf" +if [ ! -e "$HOME/.komodo/HUSH3/HUSH3.conf" ]; then + mkdir -p $HOME/.komodo/HUSH3 -if [ ! -e "$HOME/.komodo/komodo.conf" ]; then - mkdir -p $HOME/.komodo - - echo "...Creating komodo.conf" - cat < $HOME/.komodo/komodo.conf -rpcuser=${rpcuser:-komodorpc} + echo "...Creating HUSH3.conf" + cat < $HOME/.komodo/HUSH3.conf +rpcuser=hush rpcpassword=${rpcpassword:-`dd if=/dev/urandom bs=33 count=1 2>/dev/null | base64`} txindex=1 bind=${listenip:-127.0.0.1} rpcbind=${listenip:-127.0.0.1} +# Some knobs you might want to turn +debug=0 +zdebug=0 +zindex=0 EOF - cat $HOME/.komodo/komodo.conf + cat $HOME/.komodo/HUSH3/HUSH3.conf fi -echo "...Checking fetch-params" -$HOME/zcutil/fetch-params.sh -echo "Initialization completed successfully" -echo - -# ToDo: Needs some rework. I was sick if [ $# -gt 0 ]; then - args=("$@") - elif [ -z ${assetchain+x} ]; then - args=("-gen -genproclimit=${genproclimit:-2} -pubkey=${pubkey}") - else - args=("-pubkey=${pubkey} -ac_name=${assetchain} -addnode=${seednode}") - fi -echo -echo "****************************************************" -echo "Running: komodod ${args[@]}" -echo "****************************************************" +echo "Running: hushd ${args[@]}" -exec komodod ${args[@]} +exec hushd ${args[@]} diff --git a/zcutil/docker-hush-cli.sh b/zcutil/docker-hush-cli.sh new file mode 100755 index 000000000..9c2c11cee --- /dev/null +++ b/zcutil/docker-hush-cli.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# Copyright (c) 2019-2020 Hush developers + +/hush/src/hush-cli $@ diff --git a/zcutil/docker-komodo-cli.sh b/zcutil/docker-komodo-cli.sh deleted file mode 100755 index 121587bdf..000000000 --- a/zcutil/docker-komodo-cli.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -# ToDo: check for docker arg ac_name - -/komodo/src/komodo-cli $1 $2 $3 $4 - From 3d0000bf49b56d9605520cc813a5de48546cdf9e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 10:17:52 -0500 Subject: [PATCH 116/277] Mo relnotes no problem --- doc/relnotes/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index d16e2cebf..f91459353 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -8,8 +8,19 @@ and now are officially part of our Git repo. * Fixes "block 340k" sync issues! * New Hush DPoW Notaries replace KMD Notaries (who attacked us, lulz) * More secure+private TLS 1.3 implementation from miodrag, thanks! + * We now use WolfSSL instead of OpenSSL, a huge improvement and + decrease in attack surface as well as allowing use to do TLS + on low resource devices (like internet-of-shit light bulbs/etc) + * Hush Docker scripts are now officially maintained! * Faster release binaries with -03 * Optimized AcceptToMemoryPool, deleting things which do not apply + * Updated all our error messages and things for https://hush.is, + our new official domain + * getblocktemplate RPC now provides better error reporting about + whether there are no peers or if it's not in sync + * Increasd in-memory UTXO cache db by 100MB (25%) to increase + performance of initial syncing + * Removed more Sprout code which is tightly mixed into deep internals ## Bounty From e183abd89199e171846505c3340c335f33f7ee93 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 10:23:08 -0500 Subject: [PATCH 117/277] Hush does not use Gitlab --- .gitlab-ci.yml | 168 ------------------------------------------------- 1 file changed, 168 deletions(-) delete mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 2a06081f3..000000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,168 +0,0 @@ -stages: -- build -- test -######################################################################################################################## -####START#### PROJECT LEVEL VARIABLES ####START#### -######################################################################################################################## -variables: - PACKAGE_DIR_LINUX: linux64 - PACKAGE_DIR_WINDOWS: win64 - PACKAGE_DIR_MACOS: macos - AGAMA_ARTIFACTS_LINUX: ${PACKAGE_DIR_LINUX}.tar.gz - AGAMA_ARTIFACTS_WINDOWS: ${PACKAGE_DIR_WINDOWS}.zip - AGAMA_ARTIFACTS_MACOS: ${PACKAGE_DIR_MACOS}.tar.gz - AGAMA_ARTIFACTS_LINUX_CHECKSUM: ${AGAMA_ARTIFACTS_LINUX}.md5 - AGAMA_ARTIFACTS_WINDOWS_CHECKSUM: ${AGAMA_ARTIFACTS_WINDOWS}.md5 - AGAMA_ARTIFACTS_MACOS_CHECKSUM: ${AGAMA_ARTIFACTS_MACOS}.md5 - ARTIFACT_EXPIRATION: 1 week - -######################################################################################################################## -####END#### PROJECT LEVEL VARIABLES ####END#### -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -####START#### Build Stage: compile and package komodo binaries for the Agama Wallet. ####START##### -######################################################################################################################## -######################################################################################################################## -####START#### LINUX ####START#### -######################################################################################################################## -build:ubuntu: - stage: build - image: ca333/komodo-builders:komodo-ubuntu - variables: - DOCKER_DRIVER: overlay2 - cache: - key: ${CI_COMMIT_REF_SLUG} - paths: - - depends/ - script: - - zcutil/build.sh -j$(nproc) - - mkdir ${PACKAGE_DIR_LINUX} - - cp src/komodod - src/komodo-cli - zcutil/fetch-params.sh - ${PACKAGE_DIR_LINUX} - - chmod +x ${PACKAGE_DIR_LINUX}/komodod - - chmod +x ${PACKAGE_DIR_LINUX}/komodo-cli - - tar -czvf ${AGAMA_ARTIFACTS_LINUX} ${PACKAGE_DIR_LINUX} - - md5sum ${AGAMA_ARTIFACTS_LINUX} > ${AGAMA_ARTIFACTS_LINUX_CHECKSUM} - artifacts: - paths: - - ${AGAMA_ARTIFACTS_LINUX} - - ${AGAMA_ARTIFACTS_LINUX_CHECKSUM} - expire_in: 1 week - -######################################################################################################################## -####END#### LINUX ####END#### -######################################################################################################################## -####START#### WINDOWS ####START#### -######################################################################################################################## -build:windows: - stage: build - image: ca333/komodo-builders:komodo-windows - variables: - DOCKER_DRIVER: overlay2 - cache: - key: "${CI_JOB_NAME}${CI_COMMIT_REF_NAME}" - paths: - - depends/built - script: - - zcutil/build-win.sh -j$(nproc) - - mkdir ${PACKAGE_DIR_WINDOWS} - - cp src/komodod.exe - src/komodo-cli.exe - src/komodo-tx.exe - zcutil/wget64.exe - zcutil/fetch-params.bat - ${PACKAGE_DIR_WINDOWS} - - zip -r ${PACKAGE_DIR_WINDOWS}.zip ${PACKAGE_DIR_WINDOWS} - - md5sum ${AGAMA_ARTIFACTS_WINDOWS} > ${AGAMA_ARTIFACTS_WINDOWS_CHECKSUM} - artifacts: - paths: - - ${AGAMA_ARTIFACTS_WINDOWS} - - ${AGAMA_ARTIFACTS_WINDOWS_CHECKSUM} - expire_in: 1 week -######################################################################################################################## -####END#### WINDOWS ####END#### -######################################################################################################################## -####START#### MACOS ####START#### -######################################################################################################################## -build:macos: - stage: build - tags: ["High Sierra"] - cache: - key: "${CI_JOB_NAME}${CI_COMMIT_REF_NAME}" - paths: - - depends/built - allow_failure: true - script: - - zcutil/build-mac.sh -j$(sysctl -n hw.physicalcpu) - - ./makeRelease.sh ${PACKAGE_DIR_MACOS} - - tar -czvf ${AGAMA_ARTIFACTS_MACOS} ${PACKAGE_DIR_MACOS} - - md5sum ${AGAMA_ARTIFACTS_MACOS} > ${AGAMA_ARTIFACTS_MACOS_CHECKSUM} - artifacts: - paths: - - ${AGAMA_ARTIFACTS_MACOS} - - ${AGAMA_ARTIFACTS_MACOS_CHECKSUM} - expire_in: 1 week -######################################################################################################################## -####END#### MACOS ####END#### -######################################################################################################################## -######################################################################################################################## -####END#### Build Stage ####END#### -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -####START#### Test stage: Produce code quality and static application security test reports. ####START#### -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -####START#### Code Quality ####START#### -######################################################################################################################## -code_quality: - image: docker:stable - variables: - DOCKER_DRIVER: overlay2 - allow_failure: true - services: - - docker:stable-dind - script: - - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') - - docker run - --env SOURCE_CODE="$PWD" - --volume "$PWD":/code - --volume /var/run/docker.sock:/var/run/docker.sock - "registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code - artifacts: - paths: [gl-code-quality-report.json] -######################################################################################################################## -####END#### Code Quality ####END#### -######################################################################################################################## -######################################################################################################################## -####START#### Static Application Security Tests ####START#### -######################################################################################################################## -sast: - image: docker:stable - variables: - DOCKER_DRIVER: overlay2 - allow_failure: true - services: - - docker:stable-dind - script: - - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') - - docker run - --env SAST_CONFIDENCE_LEVEL="${SAST_CONFIDENCE_LEVEL:-3}" - --volume "$PWD:/code" - --volume /var/run/docker.sock:/var/run/docker.sock - "registry.gitlab.com/gitlab-org/security-products/sast:$SP_VERSION" /app/bin/run /code - artifacts: - paths: [gl-sast-report.json] -######################################################################################################################## -####END#### Static Application Security Tests ####END#### -######################################################################################################################## -######################################################################################################################## -######################################################################################################################## -####END#### Test stage ####END#### -######################################################################################################################## -######################################################################################################################## From 585fb8d8fc3e1f7c4994c3e88156577a8a1d7a38 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 10:30:26 -0500 Subject: [PATCH 118/277] Zeromq support on Windows is tenuous at best --- depends/packages/zeromq.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/depends/packages/zeromq.mk b/depends/packages/zeromq.mk index 89fb6ef1c..364c36f82 100644 --- a/depends/packages/zeromq.mk +++ b/depends/packages/zeromq.mk @@ -1,6 +1,7 @@ +# Unsupported until further notice ifeq ($(host_os),mingw32) $(package)_version=4.3.1 -$(package)_download_path=https://github.com/ca333/libzmq/archive +$(package)_download_path=https://git.hush.is/duke/libzmq/archive $(package)_download_file=v$($(package)_version).tar.gz $(package)_file_name=libzmq-$($(package)_version).tar.gz $(package)_sha256_hash=cb8ebe5b60dadeb526745610d6237f05a98aba287114d8991dad1fa14f4be354 From dacc7360e5e1138b97867d3a68977d5de4a2430d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 10:33:43 -0500 Subject: [PATCH 119/277] Update to hush.is --- depends/packages/libgmp.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/packages/libgmp.mk b/depends/packages/libgmp.mk index acd5d4c0e..240208e85 100644 --- a/depends/packages/libgmp.mk +++ b/depends/packages/libgmp.mk @@ -9,7 +9,7 @@ $(package)_git_commit=053c03b1cab347671d936f43ef66b48ab5e380ee $(package)_dependencies= $(package)_config_opts=--enable-cxx --disable-shared else ifeq ($(build_os),darwin) -$(package)_download_path=https://github.com/ca333/$(package)/archive +$(package)_download_path=https://git.hush.is/duke/$(package)/archive $(package)_file_name=$(package)-$($(package)_git_commit).tar.gz $(package)_download_file=$($(package)_git_commit).tar.gz $(package)_sha256_hash=59b2c2b5d58fdf5943bfde1fa709e9eb53e7e072c9699d28dc1c2cbb3c8cc32c From d8ca4034960fefdd2d03f0bd3def97029e901273 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 11:39:38 -0500 Subject: [PATCH 120/277] I deleted libsnark a long time ago --- depends/packages/libsnark.mk | 32 -------------------------------- doc/security-warnings.md | 3 +-- qa/hush/full-test-suite.sh | 15 --------------- 3 files changed, 1 insertion(+), 49 deletions(-) delete mode 100644 depends/packages/libsnark.mk diff --git a/depends/packages/libsnark.mk b/depends/packages/libsnark.mk deleted file mode 100644 index 895818216..000000000 --- a/depends/packages/libsnark.mk +++ /dev/null @@ -1,32 +0,0 @@ -package=libsnark -$(package)_version=0.1 -$(package)_download_path=https://github.com/MyHush/libsnark/releases/download/v$($(package)_version)-$($(package)_git_commit)/ -$(package)_file_name=$(package)-$($(package)_git_commit).tar.gz -$(package)_download_file=$(package)-$($(package)_git_commit).tar.gz -$(package)_sha256_hash=47478adc2ae88c448dc736d59dfe007de6478e41e88d2d4d2ff4135a17ee6f90 -$(package)_git_commit=3854b20c25e8bc567aab2b558dec84d45f4a3e73 - -$(package)_dependencies=libgmp libsodium - -ifeq ($(build_os),darwin) -define $(package)_set_vars - $(package)_build_env=CC="$($(package)_cc)" CXX="$($(package)_cxx)" - $(package)_build_env+=CXXFLAGS="$($(package)_cxxflags) -DBINARY_OUTPUT -DSTATICLIB -DNO_PT_COMPRESSION=1 " -endef -define $(package)_build_cmds - $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=1 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT OPTFLAGS="-O2 -march=x86-64 -g " -endef -else ifeq ($(host_os),mingw32) -define $(package)_build_cmds - CXX="x86_64-w64-mingw32-g++-posix" CXXFLAGS="-DBINARY_OUTPUT -DPTW32_STATIC_LIB -DSTATICLIB -DNO_PT_COMPRESSION=1 -fopenmp" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=1 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT OPTFLAGS="-O2 -march=x86-64 -g " -endef -else -define $(package)_build_cmds - CXXFLAGS="-fPIC -DBINARY_OUTPUT -DNO_PT_COMPRESSION=1" $(MAKE) lib DEPINST=$(host_prefix) CURVE=ALT_BN128 MULTICORE=1 NO_PROCPS=1 NO_GTEST=1 NO_DOCS=1 STATIC=1 NO_SUPERCOP=1 FEATUREFLAGS=-DMONTGOMERY_OUTPUT OPTFLAGS="-O2 -march=x86-64 -g " -endef -endif - - -define $(package)_stage_cmds - $(MAKE) install STATIC=1 DEPINST=$(host_prefix) PREFIX=$($(package)_staging_dir)$(host_prefix) CURVE=ALT_BN128 NO_SUPERCOP=1 -endef diff --git a/doc/security-warnings.md b/doc/security-warnings.md index 14d045982..bedaf4474 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -52,8 +52,7 @@ be able to: - Determine the values of your secret spending keys, as well as which notes you are spending, by observing cache side-channels as you perform a JoinSplit - operation. This is due to probable side-channel leakage in the libsnark - proving machinery. + operation. This is due to probable side-channel leakage in C++. - Determine which notes you own by observing cache side-channel information leakage from the incremental witnesses as they are updated with new notes. diff --git a/qa/hush/full-test-suite.sh b/qa/hush/full-test-suite.sh index 5c048ff9d..c995e10e2 100755 --- a/qa/hush/full-test-suite.sh +++ b/qa/hush/full-test-suite.sh @@ -1,9 +1,7 @@ #!/usr/bin/env python2 # Copyright (c) 2019-2020 The Hush developers # Released under the GPLv3 -# # Execute all of the automated tests related to Hush -# import argparse import os @@ -22,10 +20,7 @@ REPOROOT = os.path.dirname( def repofile(filename): return os.path.join(REPOROOT, filename) - -# # Custom test runners -# RE_RPATH_RUNPATH = re.compile('No RPATH.*No RUNPATH') RE_FORTIFY_AVAILABLE = re.compile('FORTIFY_SOURCE support available.*Yes') @@ -117,11 +112,7 @@ def util_test(): env={'PYTHONPATH': repofile('src/test'), 'srcdir': repofile('src')} ) == 0 - -# # Tests -# - STAGES = [ 'btest', 'gtest', @@ -129,7 +120,6 @@ STAGES = [ 'no-dot-so', 'util-test', 'secp256k1', - 'libsnark', 'univalue', 'rpc', ] @@ -141,16 +131,11 @@ STAGE_COMMANDS = { 'no-dot-so': ensure_no_dot_so_in_depends, 'util-test': util_test, 'secp256k1': ['make', '-C', repofile('src/secp256k1'), 'check'], - 'libsnark': ['make', '-C', repofile('src'), 'libsnark-tests'], 'univalue': ['make', '-C', repofile('src/univalue'), 'check'], 'rpc': [repofile('qa/pull-tester/rpc-tests.sh')], } - -# # Test driver -# - def run_stage(stage): print('Running stage %s' % stage) print('=' * (len(stage) + 14)) From 9469c2dd3ba32b9e7a7ccd303e65667e29c1c5a7 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Mon, 7 Dec 2020 13:27:17 -0500 Subject: [PATCH 121/277] Less spam plz --- src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 2c9d98f80..53df491a4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5913,7 +5913,9 @@ void FindFilesToPrune(std::set& setFilesToPrune) bool CheckDiskSpace(uint64_t nAdditionalBytes) { uint64_t nFreeBytesAvailable = boost::filesystem::space(GetDataDir()).available; - fprintf(stderr,"Free bytes on disk: %lu\n", nFreeBytesAvailable); + if(fDebug) { + fprintf(stderr,"Free bytes on disk: %lu\n", nFreeBytesAvailable); + } // Check for nMinDiskSpace bytes (currently 50MB) if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes) return AbortNode("Disk space is low!", _("Error: Disk space is low!")); From 7f879916aea4b929fc43492e0dac1549c597834f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:02:43 -0500 Subject: [PATCH 122/277] Update and comment TUSH, our unused testnet --- src/chainparams.cpp | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index bee5c607a..7266b4e88 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -237,39 +237,35 @@ void CChainParams::SetCheckpointData(CChainParams::CCheckpointData checkpointDat */ -/** - * Testnet (v3) - */ +// Unused Testnet, for completeness. We make testcoins instead. class CTestNetParams : public CChainParams { public: CTestNetParams() { - strNetworkID = "test"; - strCurrencyUnits = "TUSH"; - bip44CoinType = 1; - consensus.fCoinbaseMustBeProtected = true; - consensus.nSubsidySlowStartInterval = 20000; - consensus.nSubsidyHalvingInterval = 840000; + strNetworkID = "test"; + strCurrencyUnits = "TUSH"; + bip44CoinType = 1; + nDefaultPort = 15550; + nMinerThreads = 0; + consensus.fCoinbaseMustBeProtected = true; + consensus.nSubsidySlowStartInterval = 20000; + consensus.nSubsidyHalvingInterval = 840000; consensus.nMajorityEnforceBlockUpgrade = 51; consensus.nMajorityRejectBlockOutdated = 75; - consensus.nMajorityWindow = 400; - consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - consensus.powAlternate = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); - consensus.nPowAveragingWindow = 17; + consensus.nMajorityWindow = 400; + consensus.nMaxFutureBlockTime = 5 * 60; + consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + consensus.powAlternate = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + consensus.nPowAveragingWindow = 17; // respect to zawy assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); - consensus.nMaxFutureBlockTime = 7 * 60; - nDefaultPort = 17770; - nMinerThreads = 0; consensus.nPowMaxAdjustDown = 32; // 32% adjustment down - consensus.nPowMaxAdjustUp = 16; // 16% adjustment up + consensus.nPowMaxAdjustUp = 16; // 16% adjustment up consensus.nPowTargetSpacing = 2.5 * 60; consensus.nPowAllowMinDifficultyBlocksAfterHeight = 299187; consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; - consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = - Consensus::NetworkUpgrade::ALWAYS_ACTIVE; + consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = Consensus::NetworkUpgrade::ALWAYS_ACTIVE; consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nProtocolVersion = 170002; - consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nProtocolVersion = 170003; consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = 207500; consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nProtocolVersion = 170007; From 130325b2016fd351722a012383418a67e1483384 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:06:13 -0500 Subject: [PATCH 123/277] Hush those mindiff bits --- src/chainparams.cpp | 6 +++--- src/chainparams.h | 2 +- src/komodo_bitcoind.h | 2 +- src/komodo_gateway.h | 2 +- src/miner.cpp | 4 ++-- src/pow.cpp | 8 ++++---- src/test/pow_tests.cpp | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 7266b4e88..52960f24b 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -162,7 +162,7 @@ public: genesis.hashMerkleRoot = genesis.BuildMerkleTree(); genesis.nVersion = 1; genesis.nTime = 1231006505; - genesis.nBits = KOMODO_MINDIFF_NBITS; + genesis.nBits = HUSH_MINDIFF_NBITS; genesis.nNonce = uint256S("0x000000000000000000000000000000000000000000000000000000000000000b"); genesis.nSolution = ParseHex("000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2"); @@ -289,7 +289,7 @@ public: //! Modify the testnet genesis block so the timestamp is valid for a later start. genesis.nTime = 1296688602; - genesis.nBits = KOMODO_MINDIFF_NBITS; + genesis.nBits = HUSH_MINDIFF_NBITS; genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009"); genesis.nSolution = ParseHex("003423da3e41f916bf3ff0ee770eb844a240361abe08a8c9d46bd30226e2ad411a4047b6ddc230d173c60537e470e24f764120f5a2778b2a1285b0727bf79a0b085ad67e6266fb38fd72ef17f827315c42f921720248c983d4100e6ebd1c4b5e8762a973bac3bec7f7153b93752ebbb465f0fc9520bcfc30f9abfe303627338fed6ede9cf1b9173a736cf270cf4d9c6999ff4c3a301a78fd50dab6ccca67a0c5c2e41f216a1f3efd049a74bbe6252f9773bc309d3f9e554d996913ce8e1cec672a1fa4ea59726b61ea9e75d5ce9aa5dbfa96179a293810e02787f26de324fe7c88376ff57e29574a55faff7c2946f3e40e451861c32bf67da7377de3136858a18f34fab1bc8da37726ca2c25fc7b312a5427554ec944da81c7e27255d6c94ade9987ff7daedc2d1cc63d7d4cf93e691d13326fb1c7ee72ccdc0b134eb665fc6a9821e6fef6a6d45e4aac6dca6b505a0100ad56ea4f6fa4cdc2f0d1b65f730104a515172e34163bdb422f99d083e6eb860cf6b3f66642c4dbaf0d0fa1dca1b6166f1d1ffaa55a9d6d6df628afbdd14f1622c1c8303259299521a253bc28fcc93676723158067270fc710a09155a1e50c533e9b79ed5edba4ab70a08a9a2fc0eef0ddae050d75776a9804f8d6ad7e30ccb66c6a98d86710ca7a4dfb4feb159484796b9a015c5764aa3509051c87f729b9877ea41f8b470898c01388ed9098b1e006d3c30fc6e7c781072fa3f75d918505ee8ca75840fc62f67c57060666aa42578a2dd022eda62e3f1e447d7364074d34fd60ad9b138f60422afa6cfcb913fd6c213b496144dbfda7bfc7c24540cfe40ad0c0fd5a8c0902127f53d3178ba1b2a87bf1224d53d3a15e49ccdf121ae872a011c996d1b9793153cdcd4c0a7e99f8a35669788551cca2b62769eda24b6b55e2f4e0ac0d30aa50ecf33c6cdb24adfc922006a7bf434ced800fefe814c94c6fc8caa37b372d5088bb31d2f6b11a7a67ad3f70abbac0d5c256b637828de6cc525978cf151a2e50798e0c591787639a030291272c9ced3ab7d682e03f8c7db51f60163baa85315789666ea8c5cd6f789a7f4a5de4f8a9dfefce20f353cec606492fde8eab3e3b487b3a3a57434f8cf252a4b643fc125c8a5948b06744f5dc306aa587bdc85364c7488235c6edddd78763675e50a9637181519be06dd30c4ba0d845f9ba320d01706fd6dd64d1aa3cd4211a4a7d1d3f2c1ef2766d27d5d2cdf8e7f5e3ea309d4f149bb737305df1373a7f5313abe5986f4aa620bec4b0065d48aafac3631de3771f5c4d2f6eec67b09d9c70a3c1969fecdb014cb3c69832b63cc9d6efa378bff0ef95ffacdeb1675bb326e698f022c1a3a2e1c2b0f05e1492a6d2b7552388eca7ee8a2467ef5d4207f65d4e2ae7e33f13eb473954f249d7c20158ae703e1accddd4ea899f026618695ed2949715678a32a153df32c08922fafad68b1895e3b10e143e712940104b3b352369f4fe79bd1f1dbe03ea9909dbcf5862d1f15b3d1557a6191f54c891513cdb3c729bb9ab08c0d4c35a3ed67d517ffe1e2b7a798521aed15ff9822169c0ec860d7b897340bc2ef4c37f7eb73bd7dafef12c4fd4e6f5dd3690305257ae14ed03df5e3327b68467775a90993e613173fa6650ffa2a26e84b3ce79606bf234eda9f4053307f344099e3b10308d3785b8726fd02d8e94c2759bebd05748c3fe7d5fe087dc63608fb77f29708ab167a13f32da251e249a544124ed50c270cfc6986d9d1814273d2f0510d0d2ea335817207db6a4a23ae9b079967b63b25cb3ceea7001b65b879263f5009ac84ab89738a5b8b71fd032beb9f297326f1f5afa630a5198d684514e242f315a4d95fa6802e82799a525bb653b80b4518ec610a5996403b1391"); consensus.hashGenesisBlock = genesis.GetHash(); @@ -394,7 +394,7 @@ public: ParseHex("01936b7db1eb4ac39f151b8704642d0a8bda13ec547d54cd5e43ba142fc6d8877cab07b3"), - KOMODO_MINDIFF_NBITS, 4, 0); + HUSH_MINDIFF_NBITS, 4, 0); consensus.hashGenesisBlock = genesis.GetHash(); assert(consensus.hashGenesisBlock == uint256S("0x029f11d80ef9765602235e1bc9727e3eb6ba20839319f761fee920d63401e327")); assert(genesis.hashMerkleRoot == uint256S("0xc4eaa58879081de3c24a7b117ed2b28300e7ec4c4c1dff1d3f1268b7857a4ddb")); diff --git a/src/chainparams.h b/src/chainparams.h index f8275ca53..2f38f33de 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -27,7 +27,7 @@ #include "primitives/block.h" #include "protocol.h" -#define KOMODO_MINDIFF_NBITS 0x200f0f0f +#define HUSH_MINDIFF_NBITS 0x200f0f0f #include diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index b315842dc..e4f1046a3 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -1502,7 +1502,7 @@ arith_uint256 komodo_adaptivepow_target(int32_t height,arith_uint256 bnTarget,ui mult = (mult / ASSETCHAINS_BLOCKTIME) * ASSETCHAINS_BLOCKTIME + ASSETCHAINS_BLOCKTIME / 2; origtarget = bnTarget; bnTarget = bnTarget * arith_uint256(mult * mult); - easy.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow); + easy.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); if ( bnTarget < origtarget || bnTarget > easy ) // deal with overflow { bnTarget = easy; diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 892158c2b..e8d651694 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -774,7 +774,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block,uint32_t prevtim return(-1); } } - else if ( block.nBits == KOMODO_MINDIFF_NBITS && total > 0 ) // to deal with fee stealing + else if ( block.nBits == HUSH_MINDIFF_NBITS && total > 0 ) // to deal with fee stealing { fprintf(stderr,"notary mined ht.%d with extra %.8f\n",height,dstr(total)); if ( height > KOMODO_NOTARIES_HEIGHT1 ) diff --git a/src/miner.cpp b/src/miner.cpp index 7868f4b34..5c6899902 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -1291,7 +1291,7 @@ void static BitcoinMiner() } else fprintf(stderr,"no nonz pubkeys\n"); if ( (Mining_height >= 235300 && Mining_height < 236000) || (j == 65 && Mining_height > KOMODO_MAYBEMINED+1 && Mining_height > KOMODO_LASTMINED+64) ) { - HASHTarget = arith_uint256().SetCompact(KOMODO_MINDIFF_NBITS); + HASHTarget = arith_uint256().SetCompact(HUSH_MINDIFF_NBITS); fprintf(stderr,"I am the chosen one for %s ht.%d\n",SMART_CHAIN_SYMBOL,pindexPrev->GetHeight()+1); } //else fprintf(stderr,"duplicate at j.%d\n",j); } else Mining_start = 0; @@ -1301,7 +1301,7 @@ void static BitcoinMiner() { int32_t percPoS,z; bool fNegative,fOverflow; HASHTarget_POW = komodo_PoWtarget(&percPoS,HASHTarget,Mining_height,ASSETCHAINS_STAKED); - HASHTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow); + HASHTarget.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); if ( ASSETCHAINS_STAKED < 100 ) LogPrintf("Block %d : PoS %d%% vs target %d%% \n",Mining_height,percPoS,(int32_t)ASSETCHAINS_STAKED); } diff --git a/src/pow.cpp b/src/pow.cpp index 5958b43f5..88a682a4b 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -397,7 +397,7 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead bnTarget = arith_uint256().SetCompact(nbits); if ( height > (int32_t)(sizeof(ct)/sizeof(*ct)) && pblock != 0 && tipdiff > 0 ) { - easy.SetCompact(KOMODO_MINDIFF_NBITS & (~3),&fNegative,&fOverflow); + easy.SetCompact(HUSH_MINDIFF_NBITS & (~3),&fNegative,&fOverflow); if ( pblock != 0 ) { origtarget = bnTarget; @@ -482,7 +482,7 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead { bnTarget = easy; fprintf(stderr,"cmp.%d mult.%d ht.%d -> easy target\n",mult>1,(int32_t)mult,height); - return(KOMODO_MINDIFF_NBITS & (~3)); + return(HUSH_MINDIFF_NBITS & (~3)); } { int32_t z; @@ -716,7 +716,7 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t } if ( (flag != 0 || special2 > 0) && special2 != -2 ) { - bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow); + bnTarget.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); } } } @@ -726,7 +726,7 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t if ( ASSETCHAINS_STAKED != 0 ) { arith_uint256 bnMaxPoSdiff; - bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow); + bnTarget.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); } //else if ( ASSETCHAINS_ADAPTIVEPOW > 0 && ASSETCHAINS_STAKED == 0 ) // bnTarget = komodo_adaptivepow_target(height,bnTarget,blkHeader.nTime); diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index b942022bb..6b4947fb5 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -38,8 +38,8 @@ BOOST_AUTO_TEST_CASE(get_next_work_pow_limit) int64_t nThisTime = 1233061996; // Block #2015 of Bitcoin arith_uint256 bnAvg; // TODO change once the harder genesis block is generated - bnAvg.SetCompact(KOMODO_MINDIFF_NBITS); - BOOST_CHECK_EQUAL(KOMODO_MINDIFF_NBITS, + bnAvg.SetCompact(HUSH_MINDIFF_NBITS); + BOOST_CHECK_EQUAL(HUSH_MINDIFF_NBITS, CalculateNextWorkRequired(bnAvg, nThisTime, nLastRetargetTime, params)); } From 174b213cb8740a175782fc67d477e53efda15b0c Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:10:30 -0500 Subject: [PATCH 124/277] Fuck Travis CI for ending open source support, we don't even use them tho, lulz --- .travis.yml | 88 ----------------------------------------------------- 1 file changed, 88 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 899c78f35..000000000 --- a/.travis.yml +++ /dev/null @@ -1,88 +0,0 @@ -language: cpp - -matrix: - include: - - os: linux - dist: xenial - sudo: required - env: LINUX_DEPLOY="true" OSX_DEPLOY="false" $TRAVIS_OS_NAME="linux" -branches: - only: - - master - - dev - - duke -compiler: - - gcc -before_install: - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa; fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get update -qq; fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libgnutls28-dev; fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install build-essential pkg-config libcurl3-gnutls-dev libc6-dev libevent-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python zlib1g-dev wget bsdmainutils automake libssl-dev libprotobuf-dev protobuf-compiler libdb++-dev ntp ntpdate; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then rm '/usr/local/include/c++'; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install gcc@6; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew link --overwrite gcc@6; fi -script: - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./zcutil/build.sh -j 5; fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then tar cvfz hush_linux_$TRAVIS_BRANCH.tar.gz src/komodod src/komodo-cli src/komodo-tx src/hushd src/hush-cli src/hush-tx; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./zcutil/build-mac.sh -j 5; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./makeRelease.sh; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then tar cvfz hush_osx_$TRAVIS_BRANCH.tar.gz src/hushd src/hush-cli src/hust-tx src/komodod src/komodo-cli src/libgcc_s.1.dylib src/libgomp.1.dylib src/libstdc++.6.dylib; fi -notifications: - irc: - channels: - - chat.freenode.net#hush - template: - - "%{repository}/%{branch} (%{commit} - %{author}): %{message}" - - 'Alt Message : %{repository_slug} - (%{commit} - %{author}): %{message}, Build - Time: %{duration}' - - 'Change view : %{compare_url}' - - 'Build details : %{build_url}' -before_deploy: - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then git tag "$TRAVIS_BRANCH-linux-$(date +'%Y%m%d%H%M')-$(git log --format=%h -1)"; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then git tag "$TRAVIS_BRANCH-osx-$(date +'%Y%m%d%H%M')-$(git log --format=%h -1)"; fi -deploy: - - provider: releases - api_key: - secure: id69KBVsY0p41WFlqd5cGrAIksJAkUempmdrQwHtfqIbB6es7MVfXuxfmTxk7lZNEItSvLGilYtqhBMNVAVjRRPvk90hveGDMkbpjFz3XBbFEFqtrAr2GdIcpGtII2T3T/TG7j11TMtJ6GvBVt4OcatHFVsKBCFDIx0fB0fd1oLrEAwgRdBO2Jq7bMzoLdzGx3mVtdW5dSRBQzG/Z0yvx+R9mQHSvyPGh6oNPD6mvXPzEaCeRW6Y8g8y1SW/6zDJR6sSdOKA0jsHkr/hM8st3Qkr5Cu3roEbL8598uvfBahjxVHVT8+lu/nJnQyrvtWZKu/uUefybqgZl7UpGvZVFxbNwAB/ZNn0pBKIpZlX/kh6rdGF0XrAG7g+Ths6iklh7wDefYP2JeGwHWJ38YcdF8T/VcSdOXz7EiWwEeZO5sGcTRSl5Ql8mcU3YyyB7BTdViYNTHf5VFFJ/baLZG+shZ/0tb1Ntx5mLDbV8vcYXJpUNTJcXbhcUDSF3QuSz04ftkzgpcsODzcTzD6+2sezV1vlOAlxK04C+zzxG96Md/TegvZYYns78RSgrP/UH1qwEbgxTo3xpErGllzntzZfHJ887Goez+DeB9ga7pUBc5AXGpfRhYqJP66wR10zqfWuWYvjAwRBRNySjr3pUvaA3T1iSZ5HLrpKBfcHXJOTg8M= - name: hush_linux-$TRAVIS_BRANCH - prerelease: true - file: hush_linux_$TRAVIS_BRANCH.tar.gz - skip_cleanup: true - on: - repo: MyHush/hush3 - branch: master - condition: $LINUX_DEPLOY = "true" - - provider: releases - api_key: - secure: id69KBVsY0p41WFlqd5cGrAIksJAkUempmdrQwHtfqIbB6es7MVfXuxfmTxk7lZNEItSvLGilYtqhBMNVAVjRRPvk90hveGDMkbpjFz3XBbFEFqtrAr2GdIcpGtII2T3T/TG7j11TMtJ6GvBVt4OcatHFVsKBCFDIx0fB0fd1oLrEAwgRdBO2Jq7bMzoLdzGx3mVtdW5dSRBQzG/Z0yvx+R9mQHSvyPGh6oNPD6mvXPzEaCeRW6Y8g8y1SW/6zDJR6sSdOKA0jsHkr/hM8st3Qkr5Cu3roEbL8598uvfBahjxVHVT8+lu/nJnQyrvtWZKu/uUefybqgZl7UpGvZVFxbNwAB/ZNn0pBKIpZlX/kh6rdGF0XrAG7g+Ths6iklh7wDefYP2JeGwHWJ38YcdF8T/VcSdOXz7EiWwEeZO5sGcTRSl5Ql8mcU3YyyB7BTdViYNTHf5VFFJ/baLZG+shZ/0tb1Ntx5mLDbV8vcYXJpUNTJcXbhcUDSF3QuSz04ftkzgpcsODzcTzD6+2sezV1vlOAlxK04C+zzxG96Md/TegvZYYns78RSgrP/UH1qwEbgxTo3xpErGllzntzZfHJ887Goez+DeB9ga7pUBc5AXGpfRhYqJP66wR10zqfWuWYvjAwRBRNySjr3pUvaA3T1iSZ5HLrpKBfcHXJOTg8M= - name: hush_linux-$TRAVIS_BRANCH - prerelease: true - file: hush_linux_$TRAVIS_BRANCH.tar.gz - skip_cleanup: true - on: - repo: MyHush/hush3 - branch: dev - condition: $LINUX_DEPLOY = "true" - - provider: releases - api_key: - secure: id69KBVsY0p41WFlqd5cGrAIksJAkUempmdrQwHtfqIbB6es7MVfXuxfmTxk7lZNEItSvLGilYtqhBMNVAVjRRPvk90hveGDMkbpjFz3XBbFEFqtrAr2GdIcpGtII2T3T/TG7j11TMtJ6GvBVt4OcatHFVsKBCFDIx0fB0fd1oLrEAwgRdBO2Jq7bMzoLdzGx3mVtdW5dSRBQzG/Z0yvx+R9mQHSvyPGh6oNPD6mvXPzEaCeRW6Y8g8y1SW/6zDJR6sSdOKA0jsHkr/hM8st3Qkr5Cu3roEbL8598uvfBahjxVHVT8+lu/nJnQyrvtWZKu/uUefybqgZl7UpGvZVFxbNwAB/ZNn0pBKIpZlX/kh6rdGF0XrAG7g+Ths6iklh7wDefYP2JeGwHWJ38YcdF8T/VcSdOXz7EiWwEeZO5sGcTRSl5Ql8mcU3YyyB7BTdViYNTHf5VFFJ/baLZG+shZ/0tb1Ntx5mLDbV8vcYXJpUNTJcXbhcUDSF3QuSz04ftkzgpcsODzcTzD6+2sezV1vlOAlxK04C+zzxG96Md/TegvZYYns78RSgrP/UH1qwEbgxTo3xpErGllzntzZfHJ887Goez+DeB9ga7pUBc5AXGpfRhYqJP66wR10zqfWuWYvjAwRBRNySjr3pUvaA3T1iSZ5HLrpKBfcHXJOTg8M= - name: hush_osx-$TRAVIS_BRANCH - prerelease: true - file: hush_osx_$TRAVIS_BRANCH.tar.gz - skip_cleanup: true - on: - repo: MyHush/hush3 - branch: master - condition: $OSX_DEPLOY = "true" - - provider: releases - api_key: - secure: id69KBVsY0p41WFlqd5cGrAIksJAkUempmdrQwHtfqIbB6es7MVfXuxfmTxk7lZNEItSvLGilYtqhBMNVAVjRRPvk90hveGDMkbpjFz3XBbFEFqtrAr2GdIcpGtII2T3T/TG7j11TMtJ6GvBVt4OcatHFVsKBCFDIx0fB0fd1oLrEAwgRdBO2Jq7bMzoLdzGx3mVtdW5dSRBQzG/Z0yvx+R9mQHSvyPGh6oNPD6mvXPzEaCeRW6Y8g8y1SW/6zDJR6sSdOKA0jsHkr/hM8st3Qkr5Cu3roEbL8598uvfBahjxVHVT8+lu/nJnQyrvtWZKu/uUefybqgZl7UpGvZVFxbNwAB/ZNn0pBKIpZlX/kh6rdGF0XrAG7g+Ths6iklh7wDefYP2JeGwHWJ38YcdF8T/VcSdOXz7EiWwEeZO5sGcTRSl5Ql8mcU3YyyB7BTdViYNTHf5VFFJ/baLZG+shZ/0tb1Ntx5mLDbV8vcYXJpUNTJcXbhcUDSF3QuSz04ftkzgpcsODzcTzD6+2sezV1vlOAlxK04C+zzxG96Md/TegvZYYns78RSgrP/UH1qwEbgxTo3xpErGllzntzZfHJ887Goez+DeB9ga7pUBc5AXGpfRhYqJP66wR10zqfWuWYvjAwRBRNySjr3pUvaA3T1iSZ5HLrpKBfcHXJOTg8M= - name: hush_osx-$TRAVIS_BRANCH - prerelease: true - file: hush_osx_$TRAVIS_BRANCH.tar.gz - skip_cleanup: true - on: - repo: MyHush/hush3 - branch: dev - condition: $OSX_DEPLOY = "true" From 987045da98345f6aab6b478d1dacee53ad9479e4 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:13:05 -0500 Subject: [PATCH 125/277] Unsupported or never used --- AUTH_KEY.json.enc | Bin 2352 -> 0 bytes Brewfile | 17 ----------------- 2 files changed, 17 deletions(-) delete mode 100644 AUTH_KEY.json.enc delete mode 100644 Brewfile diff --git a/AUTH_KEY.json.enc b/AUTH_KEY.json.enc deleted file mode 100644 index ac619b9cbf091faf73f5d7d2ac8b9f7d105b3106..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2352 zcmV-03D5RU@o^3PEC(vu^h6KExE+ylqL;_v$nd)f!Qr1&7sx{*mz4jx%occ`dKiro zmIhyb7AJgTO;Vyb0H^kr-_4zw2V1F%;ul~)QkF8g&W!< z&b=OKoYeaeh146DvIGZ2XCNNZjs2zsz4gEi55P7!E(xxUySdy8S9+fDj#vf+6#GMa z-U44eX0SP-PETBo;M0EH8I3ePS8>cah-8R6eZw7fU=azTgOb9e$(|et zS@fI(_F#jWiE$eJIb_jt zcarcCR^QCQa5W#e>iFSC=}Z&_aS&Ko{<-jfzQK`_+GJ~2fZHr8*e~_vl|x{r+#cI% zq@wsImKSFWz*+EGxh4h^U%L!*=c0enIrSRvpS-SoGC5(<^Svjv(^2V7Na)vmpm2jR z84qRHhe7fP0Z2JOB(__XvP&5J7`v}qfo=C&o_+z#ZZ@L+}$cqZO$e*1wSQO^A!X z!?FC2=yuaE>uA}5pf7PNEH{cKm^=62=?i(jq1Gln%yCrQt|_op?7x#06W!NeAFThX z;+Dg+P88h8ydjD)9XnmE<+p!>PPM95s(e^IFOxgX&e6h2D}4w<4E(% z_ZCp)A_4iabG)shLy7J>V}Az5lZWQEpQ(4IB8u$_PG&IFlNc;kV03|XY(mnq{USv1# z6PK~TGFNxL5pI!r3U;H4MHXx)`3t0T`tk^#egLJJesI+X*3OZLPyKi5f|%k5q?|Rf z{BSrlaNxM`gk2Ar7U=_M73iv^M=#vKRvwKVgS3j3>ecTZkyMNGl`VY#!ql_&=-|;1 zpO?8LF+m@a`V|^)q+f zz-gL)bBbbo*@;qKJwl}&q1zY}h|rxvskAB`JkQ;Rx+RT`@Os*~^Eb7;g}y*53!cqJ zachq}!I}A}{s`S4XZp(mY~>V#C#wMXoYw!psx&9ax$6}bZpmhTUD+JUqyZ8K^3O$f zjSLZwYoAnOO6iDux~6?m`6y#dgm1R`B|7DBgg|43Pb0V|tITq4_L?$YN7aPszLHn%0zsxZ%GDJU zHxXFjEJ%HiJ{ea7%5CAwOClQ@6tdiqF(_~&$_Bj4914ocVST|i zZ~~9TI}rgj+871s&XrR1vwRGK5;-uE45wBDNDe=tj0g&S>`@!^# zll41bTRSp9_ycw6{>3~pCIUR6XD`M=8wp+9z##|8gz-;@kf!g=i-DqL5Cr96SeyhU%mz8 zTVU@pKk6}jQ@wgD9s)cB_-3V>ZL=|&lX%?B-%&m zs%ti8?uVm3AN!v)8%{HDWLdTI3o9QpsK~)jdyS>$uj>HUI%#bSU~Jq~+I|R1sQv{3T*OI@N4%FwR@w^TXT44j8s%sD(l_iX1b?d z4FnxK$#;0pIC9rIz0xo9J6`&B(lY|DC1<0Ro}Gbi(~v2SZ)(X#OdCg=0TKk$S)hIf za6ldC!LEtk64{D8M?3GKVAuujp(;KNO(eX)!rz*E0<>bVomtsVk0s-fo$~3f!8wx8 zNsU(Z+6rEHB%`A(6K{Yt!quVW+L^y3_>u547C>snR$1rB$SATEr4PLDs$%?$6Ok}1 z`SG(N!zk`;zIb!>+5wLi;lJaf*pO@7A?4;JFJdlxmLdvy=JamyO`417C{MSV+dz8D~Ig2!)kZKo4~sDw{Ds z$4i^4hSAT-4_W|9;$eN*MP>YzbA6S<(xUR?PJuO(Y+`yw+9JJ?AAlqgF|kSMyp{nd zB3zDmqfJ%J9nTi#0TI>+mBEqYsQ3%u>M#86kV16u`G5jXBx?)e3+ZJir>PL-*6v=K zlNIxvHKcMG0-GO&wxnjGw(b2;SYu-zk%E1T(`{{ Date: Tue, 8 Dec 2020 07:15:42 -0500 Subject: [PATCH 126/277] Update migratecoin.sh --- migratecoin.sh | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/migratecoin.sh b/migratecoin.sh index 104e21a8f..be1d1fd62 100644 --- a/migratecoin.sh +++ b/migratecoin.sh @@ -2,15 +2,12 @@ # Copyright (c) 2019-2020 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 - # This script makes the neccesary transactions to migrate # coin between 2 assetchains on the same -ac_cc id - set -e - -source=TXSCL -target=TXSCL000 -address="RFw7byY4xZpZCrtkMk3nFuuG1NTs9rSGgQ" +source=DERPZ +target=DERPZ000 +address="Rxxx" amount=1 # Alias for running cli on source chain @@ -36,7 +33,7 @@ exportSignedTx=`echo $exportSignedData | jq -r .hex` echo "Sending export tx" $cli_source sendrawtransaction $exportSignedTx -read -p "Wait for a notarisation to KMD, and then two more notarisations from the target chain, and then press enter to continue" +read -p "Wait for a notarization to HUSH, and then two more notarizations from the target chain, and then press enter to continue" # Create import importTx=`$cli_source migrate_createimporttransaction $exportSignedTx $payouts` From c8fa685319341aef9b5861548ca555fc803dbf91 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:16:19 -0500 Subject: [PATCH 127/277] yep --- zcutil/build-arm.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 zcutil/build-arm.sh diff --git a/zcutil/build-arm.sh b/zcutil/build-arm.sh old mode 100644 new mode 100755 From 5f3aa7cdf68f62e48cfbbaebaacab78cd2d273da Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:17:39 -0500 Subject: [PATCH 128/277] Hush does not need use or need this --- zcutil/wget64.exe | Bin 3957640 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 zcutil/wget64.exe diff --git a/zcutil/wget64.exe b/zcutil/wget64.exe deleted file mode 100644 index f6fb628e44926454be939f58377f5aefe8e51bcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3957640 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%0AAp9xg1UH>AAy32-j-n|lYuhCBgFzTZXf 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

F1xKFq%0nqXC&;%2 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≥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

*mJi7*T2f`i*gF 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

B5#(`6pCcc~Ng0H`zX;g<&?*Qu-*YXAJ8g<6{K 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¥nG_K&L4nj=ZvLasA#|| z%3fVmT*K|rVD_VLCo$@0as0TxP8guBu#FuW@*ocqUc**j32oV1qQdyK0`%>+1d;{0 za<>~ydR1CgrGlwoe-0?pY@LS%=c7d2?vPck3&0~y7Mtv#webW+S%$x8^fGm zsx!B#3okr1@>=lAN6y}*f~=wy_v84A@dF}3rhCa?5WxuqRj

QLjb?Eb3N9f%5aO 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

ZBB$?zB?$Ic)anE1oSoth&`;+axFmR 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�W$k6+Xzhza%1L`TL)M;K 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

qy9$}?R40e0xcoVtuwi1e2rnq~e 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%0A!vddWP^OgUquKWS&KIjI$VIo+TjjEM>h-c$b09 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 z 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%0D-TmMtcP`a*5j;qcr3-0wIkQxoWkvcE2Af|^y~X` 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

Q>DCX~#`Z*-`a}6>OKx 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 |h2Y!s@`x<2!V3Bp9xf<>2wvoP1kb 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 From 11b2846ba5638b3dac5384c23cd50f4e470de8d2 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:17:58 -0500 Subject: [PATCH 129/277] We don't fetch params --- zcutil/fetch-params.bat | 20 ---- zcutil/fetch-params.sh | 204 ---------------------------------------- 2 files changed, 224 deletions(-) delete mode 100644 zcutil/fetch-params.bat delete mode 100755 zcutil/fetch-params.sh diff --git a/zcutil/fetch-params.bat b/zcutil/fetch-params.bat deleted file mode 100644 index e2327d7e3..000000000 --- a/zcutil/fetch-params.bat +++ /dev/null @@ -1,20 +0,0 @@ -@echo off -call :GET_CURRENT_DIR -cd %THIS_DIR% -IF NOT EXIST %APPDATA%\ZcashParams ( -MKDIR %APPDATA%\ZcashParams -) -IF NOT EXIST %APPDATA%\ZcashParams\sapling-spend.params ( - ECHO Downloading Zcash trusted setup sapling-spend.key, this may take a while ... - .\wget64.exe --progress=dot:giga --continue --retry-connrefused --waitretry=3 --timeout=30 https://z.cash/downloads/sapling-spend.params -O %APPDATA%\ZcashParams\sapling-spend.params -) -IF NOT EXIST %APPDATA%\ZcashParams\sapling-output.params ( - ECHO Downloading Zcash trusted setup sapling-output.key, this may take a while ... - .\wget64.exe --progress=dot:giga --continue --retry-connrefused --waitretry=3 --timeout=30 https://z.cash/downloads/sapling-output.params -O %APPDATA%\ZcashParams\sapling-output.params -) -goto :EOF -:GET_CURRENT_DIR -pushd %~dp0 -set THIS_DIR=%CD% -popd -goto :EOF diff --git a/zcutil/fetch-params.sh b/zcutil/fetch-params.sh deleted file mode 100755 index 8b5d0bb6f..000000000 --- a/zcutil/fetch-params.sh +++ /dev/null @@ -1,204 +0,0 @@ -#!/bin/bash -# Copyright 2019 The Hush developers - -set -eu - -# We do not declare our own location because we can use the params -# from any other installed coins -if [[ "$OSTYPE" == "darwin"* ]]; then - PARAMS_DIR="$HOME/Library/Application Support/ZcashParams" -else - PARAMS_DIR="$HOME/.zcash-params" -fi - -SAPLING_SPEND_NAME='sapling-spend.params' -SAPLING_OUTPUT_NAME='sapling-output.params' -URL="https://z.cash/downloads" -IPFS="/ipfs/QmZKKx7Xup7LiAtFRhYsE1M7waXcv9ir9eCECyXAFGxhEo" - -SHA256CMD="$(command -v sha256sum || echo shasum)" -SHA256ARGS="$(command -v sha256sum >/dev/null || echo '-a 256')" - -WGETCMD="$(command -v wget || echo '')" -IPFSCMD="$(command -v ipfs || echo '')" -CURLCMD="$(command -v curl || echo '')" - -# fetch methods can be disabled with ZC_DISABLE_SOMETHING=1 -ZC_DISABLE_WGET="${ZC_DISABLE_WGET:-}" -ZC_DISABLE_IPFS="${ZC_DISABLE_IPFS:-}" -ZC_DISABLE_CURL="${ZC_DISABLE_CURL:-}" - -function fetch_wget { - if [ -z "$WGETCMD" ] || ! [ -z "$ZC_DISABLE_WGET" ]; then - return 1 - fi - - local filename="$1" - local dlname="$2" - - cat <&2 <&2 - exit 1 - fi - fi -} - -# Use flock to prevent parallel execution. -function lock() { - local lockfile=/tmp/fetch_params.lock - if [[ "$OSTYPE" == "darwin"* ]]; then - if shlock -f ${lockfile} -p $$; then - return 0 - else - return 1 - fi - else - # create lock file - eval "exec 200>$lockfile" - # acquire the lock - flock -n 200 \ - && return 0 \ - || return 1 - fi -} - -function exit_locked_error { - echo "Only one instance of fetch-params.sh can be run at a time." >&2 - exit 1 -} - -function main() { - - lock fetch-params.sh \ - || exit_locked_error - - cat <> "$README_PATH" < Date: Tue, 8 Dec 2020 07:18:19 -0500 Subject: [PATCH 130/277] Nobody uses this bath salt shit --- zcutil/cleanup-tags.sh | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100755 zcutil/cleanup-tags.sh diff --git a/zcutil/cleanup-tags.sh b/zcutil/cleanup-tags.sh deleted file mode 100755 index 0d01d2d63..000000000 --- a/zcutil/cleanup-tags.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -# -# Warning: This deletes tags on "origin", so point that at the right target! -# -# Note: It doesn't delete any local tags. - -set -exu -o pipefail - -ZCASH_TAG_RGX='^v[0-9]+.[0-9]+.[0-9]+.z[0-9]+' -MAXJOBS=7 - -i=0 - -for nonzctag in $(git ls-remote origin \ - | grep refs/tags/ \ - | grep -v '\^{}$' \ - | sed 's,^.*refs/tags/,,'\ - | grep -Ev "$ZCASH_TAG_RGX" - ) -do - git push origin ":refs/tags/${nonzctag}" & - i="$(expr "$i" + 1)" - [ "$i" -ge "$MAXJOBS" ] && wait -n -done - -wait From 27597f55509148e4203125667321fcd688ba7bd4 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:20:14 -0500 Subject: [PATCH 131/277] Update debian package script --- zcutil/build-debian-package.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index 04fba33ec..59a7dc221 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -1,10 +1,11 @@ #!/bin/bash -# Copyright 2019 Hush Developers # Released under the GPLv3 -## Usage: -## ./zcutil/build-debian-package.sh +# Copyright (c) 2019-2020 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 +## Usage: ./zcutil/build-debian-package.sh -echo "Let There Be Debian Packages" +echo "Let There Be Hush Debian Packages" set -e set -x From a750c64ca9c41a0cc50717facdb0b4c800329eac Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:24:19 -0500 Subject: [PATCH 132/277] Copyrights --- zcutil/afl/afl-build.sh | 5 ++++- zcutil/afl/afl-get.sh | 7 +++++-- zcutil/afl/afl-getbuildrun.sh | 7 +++++-- zcutil/afl/afl-run.sh | 5 ++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/zcutil/afl/afl-build.sh b/zcutil/afl/afl-build.sh index 912d285b5..3a187e3c2 100755 --- a/zcutil/afl/afl-build.sh +++ b/zcutil/afl/afl-build.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# Copyright (c) 2019-2020 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 # A wrapper around ./zcutil/build.sh for instrumenting the build with AFL: # ./zcutil/afl/afl-build.sh # You may obtain a copy of AFL using ./zcutil/afl/afl-get.sh. @@ -13,7 +16,7 @@ export ZCUTIL=$(realpath "./zcutil") cp "./src/fuzzing/$FUZZ_CASE/fuzz.cpp" src/fuzz.cpp -CONFIGURE_FLAGS="--enable-tests=no --enable-fuzz-main" "$ZCUTIL/build.sh" "CC=$ZCUTIL/afl/zcash-wrapper-gcc" "CXX=$ZCUTIL/afl/zcash-wrapper-g++" AFL_HARDEN=1 "$@" +CONFIGURE_FLAGS="--enable-tests=no --enable-fuzz-main" "$ZCUTIL/build.sh" "CC=$ZCUTIL/afl/hush-wrapper-gcc" "CXX=$ZCUTIL/afl/hush-wrapper-g++" AFL_HARDEN=1 "$@" echo "You can now run AFL as follows:" echo "$ ./zcutil/afl/afl-run.sh '$AFL_INSTALL_DIR' '$FUZZ_CASE'" diff --git a/zcutil/afl/afl-get.sh b/zcutil/afl/afl-get.sh index 641536f07..fe9084902 100755 --- a/zcutil/afl/afl-get.sh +++ b/zcutil/afl/afl-get.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# Copyright (c) 2019-2020 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 # Obtains and builds a copy of AFL from source. # ./zcutil/afl/afl-get.sh @@ -27,7 +30,7 @@ mv afl-*/* . # Build AFL make -echo "You can now build zcashd with AFL instrumentation as follows:" -echo "$ make clean # if you've already built zcashd without AFL instrumentation" +echo "You can now build hushd with AFL instrumentation as follows:" +echo "$ make clean # if you've already built hushd without AFL instrumentation" echo "$ ./zcutil/afl/afl-build.sh '$(pwd)' -j\$(nproc)" echo "...where is the name of a directory in src/fuzzing." diff --git a/zcutil/afl/afl-getbuildrun.sh b/zcutil/afl/afl-getbuildrun.sh index 1af352fce..07e3f8354 100755 --- a/zcutil/afl/afl-getbuildrun.sh +++ b/zcutil/afl/afl-getbuildrun.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash -# Builds AFL and an instrumented zcashd, then begins fuzzing. -# This script must be run from within the top level directory of a zcash clone. +# Copyright (c) 2019-2020 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 +# Builds AFL and an instrumented hushd, then begins fuzzing. +# This script must be run from within the top level directory of a hush clone. # Pass it the name of a directory in ./src/fuzzing. # Additional arguments are passed-through to AFL. diff --git a/zcutil/afl/afl-run.sh b/zcutil/afl/afl-run.sh index 245997563..b89b3ad5b 100755 --- a/zcutil/afl/afl-run.sh +++ b/zcutil/afl/afl-run.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# Copyright (c) 2019-2020 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 set -eu -o pipefail @@ -6,4 +9,4 @@ AFL_INSTALL_DIR="$1" FUZZ_CASE="$2" shift 2 -"$AFL_INSTALL_DIR/afl-fuzz" -i "./src/fuzzing/$FUZZ_CASE/input" -o "./src/fuzzing/$FUZZ_CASE/output" "$@" ./src/zcashd @@ +"$AFL_INSTALL_DIR/afl-fuzz" -i "./src/fuzzing/$FUZZ_CASE/input" -o "./src/fuzzing/$FUZZ_CASE/output" "$@" ./src/hushd @@ From 6555acc672ecbc380d635a2718db1eff7743f421 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:26:11 -0500 Subject: [PATCH 133/277] Cleanliness --- zcutil/build-debian-package.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index 59a7dc221..e4dccda83 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -22,8 +22,7 @@ if [ ! -d $BUILD_PATH ]; then mkdir $BUILD_PATH fi -## PACKAGE_VERSION=$($SRC_PATH/src/zcashd --version | grep version | cut -d' ' -f4 | tr -d v) -#PACKAGE_VERSION=3.2.0 +#PACKAGE_VERSION=3.6.0 PACKAGE_VERSION=$($SRC_PATH/src/hushd --version|grep version|cut -d' ' -f4|cut -d- -f1|sed 's/v//g') DEBVERSION=$(echo $PACKAGE_VERSION | sed 's/-beta/~beta/' | sed 's/-rc/~rc/' | sed 's/-/+/') BUILD_DIR="$BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-amd64" @@ -58,7 +57,6 @@ strip $DEB_BIN/hush-komodo-tx cp $SRC_PATH/src/hushd $DEB_BIN cp $SRC_PATH/src/hush-cli $DEB_BIN cp $SRC_PATH/src/hush-tx $DEB_BIN -#cp $SRC_PATH/zcutil/fetch-params.sh $DEB_BIN/zcash-fetch-params #cp $SRC_DEB/changelog $DEB_DOC/changelog.Debian cp $SRC_DEB/copyright $DEB_DOC cp -r $SRC_DEB/examples $DEB_DOC @@ -72,7 +70,6 @@ cp $SRC_DOC/man/komodo-cli.1 $DEB_MAN/hush-cli.1 cp $SRC_DOC/man/komodo-tx.1 $DEB_MAN/hush-tx.1 #TODO: process these copies and update names/binaries/etc -#cp $SRC_DOC/man/zcash-fetch-params.1 $DEB_MAN # Copy bash completion files cp $SRC_PATH/contrib/hushd.bash-completion $DEB_CMP/hushd cp $SRC_PATH/contrib/hush-cli.bash-completion $DEB_CMP/hush-cli @@ -86,7 +83,6 @@ gzip --best -n $DEB_MAN/hush-komodo-tx.1 gzip --best -n $DEB_MAN/hushd.1 gzip --best -n $DEB_MAN/hush-cli.1 gzip --best -n $DEB_MAN/hush-tx.1 -#gzip --best -n $DEB_MAN/zcash-fetch-params.1 cd $SRC_PATH/contrib From 011bbba0adeca487b2217bd43f88bfd364c84395 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:35:21 -0500 Subject: [PATCH 134/277] update docker --- zcutil/docker-entrypoint.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zcutil/docker-entrypoint.sh b/zcutil/docker-entrypoint.sh index 4615ba48f..1ffc95b08 100755 --- a/zcutil/docker-entrypoint.sh +++ b/zcutil/docker-entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2019-2020 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 #set -ex echo "...Checking HUSH3.conf" @@ -7,8 +9,10 @@ echo "...Checking HUSH3.conf" if [ ! -e "$HOME/.komodo/HUSH3/HUSH3.conf" ]; then mkdir -p $HOME/.komodo/HUSH3 + DATE=$(date) echo "...Creating HUSH3.conf" cat < $HOME/.komodo/HUSH3.conf +# Generated by docker-entrypoint.sh at $DATE rpcuser=hush rpcpassword=${rpcpassword:-`dd if=/dev/urandom bs=33 count=1 2>/dev/null | base64`} txindex=1 From 076ee2ad16f182405d01259a40e59e19231d720e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:35:35 -0500 Subject: [PATCH 135/277] copyright --- zcutil/build-debian-package.sh | 1 - zcutil/build-win.sh | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index e4dccda83..a5c7a3f07 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -1,5 +1,4 @@ #!/bin/bash -# Released under the GPLv3 # Copyright (c) 2019-2020 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 diff --git a/zcutil/build-win.sh b/zcutil/build-win.sh index ccf6657e8..a954b0467 100755 --- a/zcutil/build-win.sh +++ b/zcutil/build-win.sh @@ -1,4 +1,7 @@ #!/bin/bash +# Copyright (c) 2019-2020 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 export HOST=x86_64-w64-mingw32 CXX=x86_64-w64-mingw32-g++-posix CC=x86_64-w64-mingw32-gcc-posix From c40c45fc66826f596a7c705dcaa0b4c9aa2d86eb Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:40:26 -0500 Subject: [PATCH 136/277] update main build script --- zcutil/build.sh | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/zcutil/build.sh b/zcutil/build.sh index 687957389..4f0c03c32 100755 --- a/zcutil/build.sh +++ b/zcutil/build.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2019-2020 The Hush developers -# Released under the GPLv3 +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html set -eu -o pipefail @@ -12,14 +13,16 @@ function cmd_pref() { fi } cat <<'EOF' - ________________ -< Building Hush! > - ---------------- + .~~~~~~~~~~~~~~~~. +{{ Building Hush!! }} + `~~~~~~~~~~~~~~~~` \ ^__^ - \ (oo)\_______ - (__)\ )\/\ - ||----w | - || || + \ (@@)\_______ + (__)\ HUSH )\/\ $ + z zz ||----w | z | +zz zz z || z ||xxx z z|z zz +zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz EOF # If a g-prefixed version of the command exists, use it preferentially. From cfca53de2994258ae7066fdc6162a72932be3ccd Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 07:40:35 -0500 Subject: [PATCH 137/277] update ARM build script --- zcutil/build-arm.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/zcutil/build-arm.sh b/zcutil/build-arm.sh index 838607c7e..fa62b08bc 100755 --- a/zcutil/build-arm.sh +++ b/zcutil/build-arm.sh @@ -2,18 +2,22 @@ # Copyright (c) 2019-2020 radix42 # Copyright (c) 2019-2020 The Hush developers # Original aarch64 port by radix42. Thank you! +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html set -eu -o pipefail cat <<'EOF' - ________________ -< Building Hush! > - ---------------- + .~~~~~~~~~~~~~~~~. +{{ Building Hush!! }} + `~~~~~~~~~~~~~~~~` \ ^__^ - \ (oo)\_______ - (__)\ )\/\ - ||----w | - || || + \ (@@)\_______ + (__)\ HUSH )\/\ $ + z zz ||----w | z | +zz zz z || z ||xxx z z|z zz +zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz EOF if [ "x$*" = 'x--help' ] From b0ce723aab908d75007f35498ebd5d890083b51d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:01:44 -0500 Subject: [PATCH 138/277] Delete Zcash CI bullshit we never used --- contrib/ci-workers/README.md | 62 ------ contrib/ci-workers/ansible.cfg | 2 - contrib/ci-workers/files/bashrc | 2 - contrib/ci-workers/grind.yml | 27 --- contrib/ci-workers/tasks/install-brew.yml | 10 - contrib/ci-workers/tasks/install-pip.yml | 8 - .../templates/buildbot-worker.plist.j2 | 23 -- .../templates/buildbot-worker.service.j2 | 17 -- contrib/ci-workers/templates/host.ec2.j2 | 1 - contrib/ci-workers/templates/host.j2 | 3 - contrib/ci-workers/unix.yml | 209 ------------------ contrib/ci-workers/vars/Archlinux.yml | 7 - contrib/ci-workers/vars/CentOS.yml | 13 -- contrib/ci-workers/vars/Debian.yml | 6 - contrib/ci-workers/vars/Fedora.yml | 11 - contrib/ci-workers/vars/FreeBSD.yml | 10 - contrib/ci-workers/vars/MacOSX.yml | 6 - contrib/ci-workers/vars/Ubuntu.yml | 4 - contrib/ci-workers/vars/buildbot.yml | 5 - contrib/ci-workers/vars/default.yml | 53 ----- 20 files changed, 479 deletions(-) delete mode 100644 contrib/ci-workers/README.md delete mode 100644 contrib/ci-workers/ansible.cfg delete mode 100644 contrib/ci-workers/files/bashrc delete mode 100644 contrib/ci-workers/grind.yml delete mode 100644 contrib/ci-workers/tasks/install-brew.yml delete mode 100644 contrib/ci-workers/tasks/install-pip.yml delete mode 100644 contrib/ci-workers/templates/buildbot-worker.plist.j2 delete mode 100644 contrib/ci-workers/templates/buildbot-worker.service.j2 delete mode 100644 contrib/ci-workers/templates/host.ec2.j2 delete mode 100644 contrib/ci-workers/templates/host.j2 delete mode 100644 contrib/ci-workers/unix.yml delete mode 100644 contrib/ci-workers/vars/Archlinux.yml delete mode 100644 contrib/ci-workers/vars/CentOS.yml delete mode 100644 contrib/ci-workers/vars/Debian.yml delete mode 100644 contrib/ci-workers/vars/Fedora.yml delete mode 100644 contrib/ci-workers/vars/FreeBSD.yml delete mode 100644 contrib/ci-workers/vars/MacOSX.yml delete mode 100644 contrib/ci-workers/vars/Ubuntu.yml delete mode 100644 contrib/ci-workers/vars/buildbot.yml delete mode 100644 contrib/ci-workers/vars/default.yml diff --git a/contrib/ci-workers/README.md b/contrib/ci-workers/README.md deleted file mode 100644 index 8ce9dc764..000000000 --- a/contrib/ci-workers/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# Zcash CI workers - -This folder contains the Ansible playbooks for configuring a fresh OS -installation for use as a Buildbot worker in Zcash's CI. - -# Criteria for Adding Workers - -a. Don't add workers until users complain about a problem on a platform that - doesn't yet have workers. However, if we anticipate many users will use a - platform, we may pre-emptively add an unsupported worker for it. - -b. Prioritize the platforms that seem to have the most users. - -c. When adding workers, start by adding workers for the "most common" variant of - any distro. Then if users later encounter problems with a sub-variant, we can - consider adding new workers at that point. Example: add Ubuntu Desktop before - Xubuntu, on the assumption the former has a larger population base, and the - latter only materially differs in the GUI. - -# Setting up a latent worker on Amazon EC2 - -1. Add a regular (non-latent) worker to the master.cfg for dev-ci.z.cash, and - deploy the changes. - - This enables the Ansible playbook to run to completion, ending in the worker - connecting to the master. - -2. Start a basic EC2 instance using the template AMI for the target OS. - - Choose the smallest instance size, it won't be used for building Zcash. - -3. Figure out which user to log into the instance with. - - E.g. for the Ubuntu template, use "ubuntu" instead of "root" - - If you get an Ansible error later with a message like "Failed to connect to - the host via ssh: Received message too long 1349281121\r\n", that means the - instance is sending a text string in response to the SSH connection, and the - Ansible protocol is balking. Try manually logging in with the same - credentials to diagnose. - -4. Create `inventory/hosts` containing the following: - - [zcash-ci-worker-unix] - some-name ansible_host= ansible_ssh_user= - -5. Run `ansible-playbook -e buildbot_worker_host_template=templates/host.ec2.j2 -i inventory/hosts unix.yml`, - passing in the worker's Buildbot name and password. - - After a successful run, the worker should be connected to dev-ci.z.cash and - visible in its worker list. - -6. Create an AMI from the instance. This is the worker AMI to put into the - master.cfg for dev-ci.z.cash. - - 16 GB of storage should be sufficient. - -7. SSH into the instance, and edit the worker config to connect to ci.z.cash. - -8. Create an AMI from the instance. This is the worker AMI to put into the - master.cfg for ci.z.cash. - - 16 GB of storage should be sufficient. - -9. Delete the instance (it is no longer needed). - -10. Edit the master.cfg to turn the new worker into a latent (using the new AMI - IDs), add it to the appropriate worker groups, set up new builders etc. - - Deploy this via the normal PR review process. diff --git a/contrib/ci-workers/ansible.cfg b/contrib/ci-workers/ansible.cfg deleted file mode 100644 index c58fea3c0..000000000 --- a/contrib/ci-workers/ansible.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[ssh_connection] -pipelining = True diff --git a/contrib/ci-workers/files/bashrc b/contrib/ci-workers/files/bashrc deleted file mode 100644 index aaad18b92..000000000 --- a/contrib/ci-workers/files/bashrc +++ /dev/null @@ -1,2 +0,0 @@ -export PATH=$HOME/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -export EDITOR=vim diff --git a/contrib/ci-workers/grind.yml b/contrib/ci-workers/grind.yml deleted file mode 100644 index ef7e5758e..000000000 --- a/contrib/ci-workers/grind.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -# Configure a Buildbot worker -- include: unix.yml - -- name: Install grind-specific worker dependencies - hosts: zcash-ci-worker-unix - become: true - - vars_files: - - vars/default.yml - - tasks: - - name: Get dependencies for distribution - include_vars: "{{ item }}" - with_first_found: - - files: - - "vars/{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml" - - "vars/{{ ansible_distribution }}-{{ ansible_distribution_major_version | int }}.yml" - - "vars/{{ ansible_distribution }}.yml" - - "vars/{{ ansible_os_family }}.yml" - skip: true - - - name: Install required packages - package: - name: "{{ item }}" - state: present - with_items: "{{ grind_deps }}" diff --git a/contrib/ci-workers/tasks/install-brew.yml b/contrib/ci-workers/tasks/install-brew.yml deleted file mode 100644 index 5faedad0b..000000000 --- a/contrib/ci-workers/tasks/install-brew.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: Check if brew is installed - stat: - path: /usr/local/bin/brew - register: brew_check - -- name: Fail if brew is unavailable - fail: - msg: 'brew is not installed! Please install Homebrew: https://docs.brew.sh/Installation.html' - when: not brew_check.stat.exists diff --git a/contrib/ci-workers/tasks/install-pip.yml b/contrib/ci-workers/tasks/install-pip.yml deleted file mode 100644 index 8beff50ef..000000000 --- a/contrib/ci-workers/tasks/install-pip.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -- name: Fetch pip installer - get_url: - url: https://bootstrap.pypa.io/get-pip.py - dest: /tmp/get-pip.py - -- name: Install pip - command: "{{ ansible_python.executable }} /tmp/get-pip.py" diff --git a/contrib/ci-workers/templates/buildbot-worker.plist.j2 b/contrib/ci-workers/templates/buildbot-worker.plist.j2 deleted file mode 100644 index 225c73b8a..000000000 --- a/contrib/ci-workers/templates/buildbot-worker.plist.j2 +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Label - net.buildbot.worker - ProgramArguments - - {{ buildbot_worker_dir }}/venv/bin/buildbot-worker - start - {{ buildbot_worker_name }} - - WorkingDirectory - {{ buildbot_worker_dir }} - UserName - {{ buildbot_worker_user }} - KeepAlive - - NetworkState - - - - diff --git a/contrib/ci-workers/templates/buildbot-worker.service.j2 b/contrib/ci-workers/templates/buildbot-worker.service.j2 deleted file mode 100644 index 625323be6..000000000 --- a/contrib/ci-workers/templates/buildbot-worker.service.j2 +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Buildbot worker -Wants=network.target -After=network.target - -[Service] -Type=forking -PIDFile={{ buildbot_worker_dir }}/{{ buildbot_worker_name }}/twistd.pid -WorkingDirectory={{ buildbot_worker_dir }} -ExecStart={{ buildbot_worker_dir }}/venv/bin/buildbot-worker start {{ buildbot_worker_name }} -ExecReload={{ buildbot_worker_dir }}/venv/bin/buildbot-worker restart {{ buildbot_worker_name }} -ExecStop={{ buildbot_worker_dir }}/venv/bin/buildbot-worker stop {{ buildbot_worker_name }} -Restart=always -User={{ buildbot_worker_user }} - -[Install] -WantedBy=multi-user.target diff --git a/contrib/ci-workers/templates/host.ec2.j2 b/contrib/ci-workers/templates/host.ec2.j2 deleted file mode 100644 index dee692e02..000000000 --- a/contrib/ci-workers/templates/host.ec2.j2 +++ /dev/null @@ -1 +0,0 @@ -OS: {{ ansible_distribution }} {{ ansible_distribution_version }} diff --git a/contrib/ci-workers/templates/host.j2 b/contrib/ci-workers/templates/host.j2 deleted file mode 100644 index 65c4cb709..000000000 --- a/contrib/ci-workers/templates/host.j2 +++ /dev/null @@ -1,3 +0,0 @@ -OS: {{ ansible_distribution }} {{ ansible_distribution_version }} -Memory: {{ ansible_memtotal_mb }} MB -CPU: {{ ansible_processor if ansible_processor is string else ansible_processor[1] }} ({{ ansible_processor_cores }} cores) diff --git a/contrib/ci-workers/unix.yml b/contrib/ci-workers/unix.yml deleted file mode 100644 index cbb693401..000000000 --- a/contrib/ci-workers/unix.yml +++ /dev/null @@ -1,209 +0,0 @@ ---- -- name: Configure a Buildbot worker for Zcash CI - hosts: zcash-ci-worker-unix - become: true - gather_facts: False - - vars_files: - - vars/default.yml - - vars/buildbot.yml - - vars_prompt: - - name: "buildbot_worker_admin" - prompt: "Admin details" - default: "Zcash " - - name: "buildbot_worker_name" - prompt: "Buildbot worker name (provided by ZECC)" - private: no - - name: "buildbot_worker_password" - prompt: "Buildbot worker password (provided by ZECC)" - - pre_tasks: - - name: Install Python 2.7 for Ansible and Buildbot - raw: test -e /usr/bin/python || test -e /usr/bin/python2 || test -e /usr/bin/python2.7 || test -e /usr/local/bin/python2.7 || (test -e /usr/bin/apt && apt -qqy update && apt install -qqy python) || (test -e /usr/bin/dnf && dnf install -qqy python2) || (test -e /usr/sbin/pkg && pkg install -qqy python2) - register: output - changed_when: - - output.stdout != "" - - output.stdout != "\r\n" - - - name: Check if Python is in the configured location - raw: test -e {{ ansible_python_interpreter }} - ignore_errors: true - register: python_check - when: ansible_python_interpreter is defined - - - name: Fail if configured Python is unavailable - fail: - msg: "Python is not accessible at {{ ansible_python_interpreter }} on this host! Please set the inventory variable 'ansible_python_interpreter' to the location of the Python 2.7 binary." - when: ansible_python_interpreter is defined and python_check.rc == 1 - - - name: Check if Python is in the default location - raw: test -e /usr/bin/python - ignore_errors: true - register: python_check - when: ansible_python_interpreter is undefined - - - name: Fail if default Python is unavailable - fail: - msg: Python is not accessible at /usr/bin/python on this host! Please set the inventory variable 'ansible_python_interpreter' to the location of the Python 2.7 binary. - when: ansible_python_interpreter is undefined and python_check.rc == 1 - - - name: Gathering Facts - setup: - tags: deps - - - name: Fail if Python is the wrong version - fail: - msg: "The Python binary at {{ ansible_python.executable }} is version {{ ansible_python_version }}! Please set the inventory variable 'ansible_python_interpreter' to the location of the Python 2.7 binary." - when: ansible_python.version.major != 2 or ansible_python.version.minor != 7 - - tasks: - - name: Get dependencies for distribution - include_vars: "{{ item }}" - with_first_found: - - files: - - "vars/{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml" - - "vars/{{ ansible_distribution }}-{{ ansible_distribution_major_version | int }}.yml" - - "vars/{{ ansible_distribution }}.yml" - - "vars/{{ ansible_os_family }}.yml" - skip: true - tags: deps - - - name: Collate dependencies - set_fact: - package_deps: "{{ buildbot_deps + fetch_deps + conf_deps + build_deps + link_deps + dist_deps }}" - python_modules: "{{ buildbot_modules + rpc_test_modules }}" - tags: deps - - - name: Install Homebrew [MacOSX] - include: tasks/install-brew.yml - when: ansible_distribution == 'MacOSX' - tags: deps - - - name: Update rolling release [Arch Linux] - pacman: - update_cache: yes - upgrade: yes - when: ansible_distribution == 'Archlinux' - tags: deps - - - name: Install required packages - package: - name: "{{ item }}" - state: present - with_items: "{{ package_deps }}" - become_user: "{{ ansible_ssh_user if ansible_distribution == 'MacOSX' else 'root' }}" - tags: deps - - - name: Install pip [CentOS, MacOSX] - include: tasks/install-pip.yml - when: ansible_distribution in ['CentOS', 'MacOSX'] - - - name: Install required Python system modules - pip: - name: "{{ item }}" - state: latest - executable: "{{ '/usr/local/bin/pip' if ansible_distribution == 'MacOSX' else omit }}" - with_items: "{{ system_modules }}" - - - name: Set up the Buildbot worker user - user: - name: "{{ buildbot_worker_user }}" - comment: Buildbot worker - shell: /bin/bash - state: present - - - name: Get absolute path to Buildbot worker home directory - command: echo ~ - register: homedir - become_user: "{{ buildbot_worker_user }}" - - - name: Save absolute path to Buildbot worker home directory - set_fact: - buildbot_worker_dir: "{{ homedir.stdout }}" - - - name: Install required Python modules - pip: - name: "{{ item }}" - state: latest - virtualenv: "~{{ buildbot_worker_user }}/venv" - virtualenv_command: "{{ '/usr/local/bin/virtualenv' if ansible_distribution == 'MacOSX' else omit }}" - with_items: "{{ python_modules }}" - become_user: "{{ buildbot_worker_user }}" - notify: restart buildbot-worker - - - name: Create Buildbot worker - command: > - ~{{ buildbot_worker_user }}/venv/bin/buildbot-worker create-worker ~/{{ buildbot_worker_name }} - {{ buildbot_master_host }}:{{ buildbot_master_port }} - {{ buildbot_worker_name|quote }} {{ buildbot_worker_password|quote }} - args: - creates: "~/{{ buildbot_worker_name }}/buildbot.tac" - become_user: "{{ buildbot_worker_user }}" - - - name: Set admin details for Buildbot worker - copy: - content: "{{ buildbot_worker_admin }}" - dest: "~{{ buildbot_worker_user }}/{{ buildbot_worker_name }}/info/admin" - owner: "{{ buildbot_worker_user }}" - group: "{{ omit if ansible_distribution == 'MacOSX' else buildbot_worker_user }}" - mode: "0644" - - - name: Set host details for Buildbot worker - template: - src: "{{ buildbot_worker_host_template }}" - dest: "~{{ buildbot_worker_user }}/{{ buildbot_worker_name }}/info/host" - owner: "{{ buildbot_worker_user }}" - group: "{{ omit if ansible_distribution == 'MacOSX' else buildbot_worker_user }}" - mode: "0644" - - - name: Install custom bashrc for virtualenv - copy: - src: bashrc - dest: "~{{ buildbot_worker_user }}/.bashrc" - owner: "{{ buildbot_worker_user }}" - group: "{{ omit if ansible_distribution == 'MacOSX' else buildbot_worker_user }}" - mode: "0644" - - - name: Copy Buildbot worker systemd service unit - template: - src: templates/buildbot-worker.service.j2 - dest: "/etc/systemd/system/buildbot-worker.service" - owner: root - group: root - mode: "0644" - when: ansible_distribution != 'MacOSX' - notify: reload systemd - - - name: Copy Buildbot worker launchd service unit - template: - src: templates/buildbot-worker.plist.j2 - dest: "/Library/LaunchDaemons/net.buildbot.worker.plist" - owner: root - group: wheel - mode: "0644" - when: ansible_distribution == 'MacOSX' - - - name: Start Buildbot worker - service: - name: buildbot-worker - state: started - enabled: yes - when: ansible_distribution != 'MacOSX' - - - name: Load Buildbot worker service [MacOSX] - command: launchctl load /Library/LaunchDaemons/net.buildbot.worker.plist - when: ansible_distribution == 'MacOSX' - - - name: Start Buildbot worker [MacOSX] - command: launchctl start net.buildbot.worker - when: ansible_distribution == 'MacOSX' - - handlers: - - name: restart buildbot-worker - service: - name: buildbot-worker - state: restarted - - - name: reload systemd - command: /bin/systemctl daemon-reload diff --git a/contrib/ci-workers/vars/Archlinux.yml b/contrib/ci-workers/vars/Archlinux.yml deleted file mode 100644 index 50e5577c3..000000000 --- a/contrib/ci-workers/vars/Archlinux.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -buildbot_deps: - - python2-pip -build_deps: - - cmake - - multilib/gcc - - make diff --git a/contrib/ci-workers/vars/CentOS.yml b/contrib/ci-workers/vars/CentOS.yml deleted file mode 100644 index f577af5c0..000000000 --- a/contrib/ci-workers/vars/CentOS.yml +++ /dev/null @@ -1,13 +0,0 @@ ---- -buildbot_deps: [] # Empty to remove python-pip -build_deps: - - bzip2 - - cmake - - gcc - - gcc-c++ - - make - - patch -dist_deps: - - pkgconfig # Required until b556beda264308e040f8d88aca4f2f386a0183d9 is pulled in - - python-devel - - redhat-rpm-config diff --git a/contrib/ci-workers/vars/Debian.yml b/contrib/ci-workers/vars/Debian.yml deleted file mode 100644 index b6a46f0cd..000000000 --- a/contrib/ci-workers/vars/Debian.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -build_deps: - - build-essential # Depends on g++, libc6-dev, make - - cmake -dist_deps: - - python-dev diff --git a/contrib/ci-workers/vars/Fedora.yml b/contrib/ci-workers/vars/Fedora.yml deleted file mode 100644 index 2a7351c69..000000000 --- a/contrib/ci-workers/vars/Fedora.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -build_deps: - - cmake - - gcc - - gcc-c++ - - make - - patch -dist_deps: - - pkgconfig # Required until b556beda264308e040f8d88aca4f2f386a0183d9 is pulled in - - python-devel - - redhat-rpm-config diff --git a/contrib/ci-workers/vars/FreeBSD.yml b/contrib/ci-workers/vars/FreeBSD.yml deleted file mode 100644 index 4b1f01997..000000000 --- a/contrib/ci-workers/vars/FreeBSD.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -buildbot_deps: - - py27-pip -build_deps: - - cmake - - gcc - - gmake -dist_deps: - - bash - - pkgconf # Required until b556beda264308e040f8d88aca4f2f386a0183d9 is pulled in diff --git a/contrib/ci-workers/vars/MacOSX.yml b/contrib/ci-workers/vars/MacOSX.yml deleted file mode 100644 index 80b1ae608..000000000 --- a/contrib/ci-workers/vars/MacOSX.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -buildbot_deps: - - coreutils # For gnproc etc. -# Most are already installed -build_deps: - - cmake diff --git a/contrib/ci-workers/vars/Ubuntu.yml b/contrib/ci-workers/vars/Ubuntu.yml deleted file mode 100644 index 0d0f584b4..000000000 --- a/contrib/ci-workers/vars/Ubuntu.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -build_deps: - - build-essential # Depends on g++, libc6-dev, make - - cmake diff --git a/contrib/ci-workers/vars/buildbot.yml b/contrib/ci-workers/vars/buildbot.yml deleted file mode 100644 index 38e3fd25a..000000000 --- a/contrib/ci-workers/vars/buildbot.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -buildbot_worker_user: zcbbworker -buildbot_master_host: dev-ci.z.cash -buildbot_master_port: 9899 -buildbot_worker_host_template: templates/host.j2 diff --git a/contrib/ci-workers/vars/default.yml b/contrib/ci-workers/vars/default.yml deleted file mode 100644 index a0b0da9e6..000000000 --- a/contrib/ci-workers/vars/default.yml +++ /dev/null @@ -1,53 +0,0 @@ ---- -# These variables can be overridden in distribution files. - -# Dependencies required to install Buildbot -buildbot_deps: - - python-pip # So we can install Python modules - -# Dependencies required to download files -fetch_deps: - - curl # For depends/ - - git - - wget # For zcutil/fetch-params.sh - -# Dependencies required to configure Zcash -conf_deps: - - autoconf - - automake - - m4 - - pkg-config - -# Dependencies required to compile Zcash -build_deps: - - cmake - - g++ - - gcc - - make - -# Dependencies required to link Zcash -link_deps: - - libtool - -# Additional distribution-specific dependencies -dist_deps: [] - -# Additional grind-specific dependencies -grind_deps: - - lcov - - valgrind - -# Python modules required on the system -system_modules: - - virtualenv - -# Python modules required for a Zcash Buildbot worker -buildbot_modules: - - pip # Needs to be updated first so Buildbot installs - - buildbot-worker - - pyflakes - -# Python modules required to run the Zcash RPC test suite -rpc_test_modules: - - pyblake2 - - pyzmq From a8f8e7837f0404b1d6ea6a2cdf118cb576dd5230 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:02:08 -0500 Subject: [PATCH 139/277] We have no Sprout and so do not need this garbage like ZEC+KMD do, lulz --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index a86c86eed..307eeffa4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -242,7 +242,7 @@ endif endif -dist_bin_SCRIPTS = zcutil/fetch-params.sh +dist_bin_SCRIPTS = dist_noinst_SCRIPTS = autogen.sh zcutil/build-debian-package.sh zcutil/build.sh EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests qa/hush $(DIST_DOCS) $(BIN_CHECKS) From 07ce5c5f0d98faa14e6bc03bb5d096c5940b6977 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:05:51 -0500 Subject: [PATCH 140/277] copyright --- contrib/hush_scanner | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contrib/hush_scanner b/contrib/hush_scanner index f43b3994f..fb6901891 100755 --- a/contrib/hush_scanner +++ b/contrib/hush_scanner @@ -1,6 +1,7 @@ #!/usr/bin/env perl -# Copyright (c) 2019 The Hush developers -# Released under the GPLv3 +# Copyright (c) 2019-2020 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 use strict; use warnings; From c568f7a16faf8c582e79fe93a82888a76637b2fa Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:10:30 -0500 Subject: [PATCH 141/277] Trust is earned --- contrib/verify-commits/gpg.sh | 3 +++ contrib/verify-commits/pre-push-hook.sh | 5 ++++- contrib/verify-commits/trusted-keys | 5 ----- contrib/verify-commits/verify-commits.sh | 5 ++++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/contrib/verify-commits/gpg.sh b/contrib/verify-commits/gpg.sh index 6b5137e7b..4710049de 100755 --- a/contrib/verify-commits/gpg.sh +++ b/contrib/verify-commits/gpg.sh @@ -1,4 +1,7 @@ #!/bin/sh +# Copyright (c) 2019-2020 Hush developers +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html INPUT=$( Date: Tue, 8 Dec 2020 08:11:01 -0500 Subject: [PATCH 142/277] Add a readme --- contrib/verify-commits/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 contrib/verify-commits/README.md diff --git a/contrib/verify-commits/README.md b/contrib/verify-commits/README.md new file mode 100644 index 000000000..1de380514 --- /dev/null +++ b/contrib/verify-commits/README.md @@ -0,0 +1,3 @@ +# Verifying Git Commits with GPG + +Yep From c9b519c99f4cfb969508e2a66ba0b9b1a7bc63e3 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:31:11 -0500 Subject: [PATCH 143/277] copyright --- src/cc/eval.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cc/eval.cpp b/src/cc/eval.cpp index 9e6a21676..c664dc0a3 100644 --- a/src/cc/eval.cpp +++ b/src/cc/eval.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -12,10 +15,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include #include - #include "primitives/block.h" #include "primitives/transaction.h" #include "script/cc.h" From bfa454d8ec248c2a1216b9a62eaa03ccd3a4a0d1 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:38:15 -0500 Subject: [PATCH 144/277] Copyrights --- src/cc/CCGateways.h | 4 +++- src/cc/CCHeir.h | 4 +++- src/cc/CCfaucet.h | 7 +++---- src/cc/eval.cpp | 11 ++--------- src/cc/faucet.cpp | 4 +++- src/cc/heir.cpp | 3 +++ src/cc/heir_validate.h | 3 +++ src/cc/makecclib | 2 ++ 8 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/cc/CCGateways.h b/src/cc/CCGateways.h index 8793c0dc4..936637a7d 100644 --- a/src/cc/CCGateways.h +++ b/src/cc/CCGateways.h @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -13,7 +16,6 @@ * * ******************************************************************************/ - #ifndef CC_GATEWAYS_H #define CC_GATEWAYS_H diff --git a/src/cc/CCHeir.h b/src/cc/CCHeir.h index fa1f72263..34911cc06 100644 --- a/src/cc/CCHeir.h +++ b/src/cc/CCHeir.h @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -13,7 +16,6 @@ * * ******************************************************************************/ - #ifndef CC_HEIR_H #define CC_HEIR_H diff --git a/src/cc/CCfaucet.h b/src/cc/CCfaucet.h index af3237ab1..b364e6971 100644 --- a/src/cc/CCfaucet.h +++ b/src/cc/CCfaucet.h @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -12,13 +15,9 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - - #ifndef CC_FAUCET_H #define CC_FAUCET_H - #include "CCinclude.h" - #define EVAL_FAUCET 0xe4 #define FAUCETSIZE (COIN / 10) diff --git a/src/cc/eval.cpp b/src/cc/eval.cpp index c664dc0a3..0d5b068fa 100644 --- a/src/cc/eval.cpp +++ b/src/cc/eval.cpp @@ -180,9 +180,7 @@ bool Eval::CheckNotaryInputs(const CTransaction &tx, uint32_t height, uint32_t t return CheckTxAuthority(tx, auth); } -/* - * Get MoM from a notarisation tx hash (on KMD) - */ +// Get MoM from a notarisation tx hash (on HUSH) bool Eval::GetNotarisationData(const uint256 notaryHash, NotarisationData &data) const { CTransaction notarisationTx; @@ -218,10 +216,7 @@ bool ParseNotarisationOpReturn(const CTransaction &tx, NotarisationData &data) return out; } - -/* - * Misc - */ +// Misc std::string EvalToStr(EvalCode c) { FOREACH_EVAL(EVAL_GENERATE_STRING); @@ -231,7 +226,6 @@ std::string EvalToStr(EvalCode c) } - uint256 SafeCheckMerkleBranch(uint256 hash, const std::vector& vMerkleBranch, int nIndex) { if (nIndex == -1) @@ -252,7 +246,6 @@ uint256 SafeCheckMerkleBranch(uint256 hash, const std::vector& vMerkleB return hash; } - uint256 GetMerkleRoot(const std::vector& vLeaves) { bool fMutated; diff --git a/src/cc/faucet.cpp b/src/cc/faucet.cpp index 2c0a08451..b581c9a75 100644 --- a/src/cc/faucet.cpp +++ b/src/cc/faucet.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -248,4 +251,3 @@ UniValue FaucetInfo() result.push_back(Pair("funding",numstr)); return(result); } - diff --git a/src/cc/heir.cpp b/src/cc/heir.cpp index 728d82f26..9eee52f45 100644 --- a/src/cc/heir.cpp +++ b/src/cc/heir.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * diff --git a/src/cc/heir_validate.h b/src/cc/heir_validate.h index 768390aa3..9e384968a 100644 --- a/src/cc/heir_validate.h +++ b/src/cc/heir_validate.h @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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 #ifndef HEIR_VALIDATE_H #define HEIR_VALIDATE_H diff --git a/src/cc/makecclib b/src/cc/makecclib index c5e394740..1e03628f3 100755 --- a/src/cc/makecclib +++ b/src/cc/makecclib @@ -1,5 +1,7 @@ #!/bin/bash # Copyright (c) 2019-2020 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 rm *.so rogue/rogue games/tetris games/prices From b849780ab5c05ef4c5efb0e4e99607f6b57c3b0e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:40:39 -0500 Subject: [PATCH 145/277] update readme --- contrib/init/README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/contrib/init/README.md b/contrib/init/README.md index 0d19da303..d3142512e 100644 --- a/contrib/init/README.md +++ b/contrib/init/README.md @@ -1,10 +1,12 @@ +# Example System Configs + Sample configuration files for: -SystemD: bitcoind.service -Upstart: bitcoind.conf -OpenRC: bitcoind.openrc - bitcoind.openrcconf -CentOS: bitcoind.init +SystemD: hushd.service +Upstart: hushd.conf +OpenRC: hushd.openrc + hushd.openrcconf +CentOS: hushd.init have been made available to assist packagers in creating node packages here. From 24781a50b4203544284039f8aca359e794a3dd73 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:42:45 -0500 Subject: [PATCH 146/277] yep --- contrib/init/bitcoind.conf | 65 ------------------- contrib/init/hushd.conf | 65 +++++++++++++++++++ contrib/init/{bitcoind.init => hushd.init} | 0 .../init/{bitcoind.openrc => hushd.openrc} | 0 .../{bitcoind.openrcconf => hushd.openrcconf} | 0 .../init/{bitcoind.service => hushd.service} | 0 6 files changed, 65 insertions(+), 65 deletions(-) delete mode 100644 contrib/init/bitcoind.conf create mode 100644 contrib/init/hushd.conf rename contrib/init/{bitcoind.init => hushd.init} (100%) rename contrib/init/{bitcoind.openrc => hushd.openrc} (100%) rename contrib/init/{bitcoind.openrcconf => hushd.openrcconf} (100%) rename contrib/init/{bitcoind.service => hushd.service} (100%) diff --git a/contrib/init/bitcoind.conf b/contrib/init/bitcoind.conf deleted file mode 100644 index f9554eecd..000000000 --- a/contrib/init/bitcoind.conf +++ /dev/null @@ -1,65 +0,0 @@ -description "Bitcoin Core Daemon" - -start on runlevel [2345] -stop on starting rc RUNLEVEL=[016] - -env BITCOIND_BIN="/usr/bin/bitcoind" -env BITCOIND_USER="bitcoin" -env BITCOIND_GROUP="bitcoin" -env BITCOIND_PIDDIR="/var/run/bitcoind" -# upstart can't handle variables constructed with other variables -env BITCOIND_PIDFILE="/var/run/bitcoind/bitcoind.pid" -env BITCOIND_CONFIGFILE="/etc/bitcoin/bitcoin.conf" -env BITCOIND_DATADIR="/var/lib/bitcoind" - -expect fork - -respawn -respawn limit 5 120 -kill timeout 60 - -pre-start script - # this will catch non-existent config files - # bitcoind will check and exit with this very warning, but it can do so - # long after forking, leaving upstart to think everything started fine. - # since this is a commonly encountered case on install, just check and - # warn here. - if ! grep -qs '^rpcpassword=' "$BITCOIND_CONFIGFILE" ; then - echo "ERROR: You must set a secure rpcpassword to run bitcoind." - echo "The setting must appear in $BITCOIND_CONFIGFILE" - echo - echo "This password is security critical to securing wallets " - echo "and must not be the same as the rpcuser setting." - echo "You can generate a suitable random password using the following" - echo "command from the shell:" - echo - echo "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'" - echo - echo "It is also recommended that you also set alertnotify so you are " - echo "notified of problems:" - echo - echo "ie: alertnotify=echo %%s | mail -s \"Bitcoin Alert\"" \ - "admin@foo.com" - echo - exit 1 - fi - - mkdir -p "$BITCOIND_PIDDIR" - chmod 0755 "$BITCOIND_PIDDIR" - chown $BITCOIND_USER:$BITCOIND_GROUP "$BITCOIND_PIDDIR" - chown $BITCOIND_USER:$BITCOIND_GROUP "$BITCOIND_CONFIGFILE" - chmod 0660 "$BITCOIND_CONFIGFILE" -end script - -exec start-stop-daemon \ - --start \ - --pidfile "$BITCOIND_PIDFILE" \ - --chuid $BITCOIND_USER:$BITCOIND_GROUP \ - --exec "$BITCOIND_BIN" \ - -- \ - -pid="$BITCOIND_PIDFILE" \ - -conf="$BITCOIND_CONFIGFILE" \ - -datadir="$BITCOIND_DATADIR" \ - -disablewallet \ - -daemon - diff --git a/contrib/init/hushd.conf b/contrib/init/hushd.conf new file mode 100644 index 000000000..649df7796 --- /dev/null +++ b/contrib/init/hushd.conf @@ -0,0 +1,65 @@ +description "Hush Daemon" + +start on runlevel [2345] +stop on starting rc RUNLEVEL=[016] + +env HUSHD_BIN="/usr/bin/hushd" +env HUSHD_USER="hush" +env HUSHD_GROUP="hush" +env HUSHD_PIDDIR="/var/run/hushd" +# upstart can't handle variables constructed with other variables +env HUSHD_PIDFILE="/var/run/hushd/hushd.pid" +env HUSHD_CONFIGFILE="/etc/hush/hush.conf" +env HUSHD_DATADIR="/var/lib/hushd" + +expect fork + +respawn +respawn limit 5 120 +kill timeout 60 + +pre-start script + # this will catch non-existent config files + # hushd will check and exit with this very warning, but it can do so + # long after forking, leaving upstart to think everything started fine. + # since this is a commonly encountered case on install, just check and + # warn here. + if ! grep -qs '^rpcpassword=' "$HUSHD_CONFIGFILE" ; then + echo "ERROR: You must set a secure rpcpassword to run hushd." + echo "The setting must appear in $HUSHD_CONFIGFILE" + echo + echo "This password is security critical to securing wallets " + echo "and must not be the same as the rpcuser setting." + echo "You can generate a suitable random password using the following" + echo "command from the shell:" + echo + echo "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'" + echo + echo "It is also recommended that you also set alertnotify so you are " + echo "notified of problems:" + echo + echo "ie: alertnotify=echo %%s | mail -s \"Hush Alert\"" \ + "admin@foo.com" + echo + exit 1 + fi + + mkdir -p "$HUSHD_PIDDIR" + chmod 0755 "$HUSHD_PIDDIR" + chown $HUSHD_USER:$HUSHD_GROUP "$HUSHD_PIDDIR" + chown $HUSHD_USER:$HUSHD_GROUP "$HUSHD_CONFIGFILE" + chmod 0660 "$HUSHD_CONFIGFILE" +end script + +exec start-stop-daemon \ + --start \ + --pidfile "$HUSHD_PIDFILE" \ + --chuid $HUSHD_USER:$HUSHD_GROUP \ + --exec "$HUSHD_BIN" \ + -- \ + -pid="$HUSHD_PIDFILE" \ + -conf="$HUSHD_CONFIGFILE" \ + -datadir="$HUSHD_DATADIR" \ + -disablewallet \ + -daemon + diff --git a/contrib/init/bitcoind.init b/contrib/init/hushd.init similarity index 100% rename from contrib/init/bitcoind.init rename to contrib/init/hushd.init diff --git a/contrib/init/bitcoind.openrc b/contrib/init/hushd.openrc similarity index 100% rename from contrib/init/bitcoind.openrc rename to contrib/init/hushd.openrc diff --git a/contrib/init/bitcoind.openrcconf b/contrib/init/hushd.openrcconf similarity index 100% rename from contrib/init/bitcoind.openrcconf rename to contrib/init/hushd.openrcconf diff --git a/contrib/init/bitcoind.service b/contrib/init/hushd.service similarity index 100% rename from contrib/init/bitcoind.service rename to contrib/init/hushd.service From edcc2aec82b2f32081cd676021e38d39496c2666 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 08:45:23 -0500 Subject: [PATCH 147/277] update system scripts --- contrib/init/hushd.init | 28 +++++++-------- contrib/init/hushd.openrc | 68 +++++++++++++++++------------------ contrib/init/hushd.openrcconf | 34 +++++++++--------- contrib/init/hushd.service | 12 +++---- 4 files changed, 71 insertions(+), 71 deletions(-) diff --git a/contrib/init/hushd.init b/contrib/init/hushd.init index db5061874..225a5ea2a 100644 --- a/contrib/init/hushd.init +++ b/contrib/init/hushd.init @@ -1,36 +1,36 @@ #!/bin/bash # -# bitcoind The bitcoin core server. +# hushd The hush core server. # # # chkconfig: 345 80 20 -# description: bitcoind -# processname: bitcoind +# description: hushd +# processname: hushd # # Source function library. . /etc/init.d/functions -# you can override defaults in /etc/sysconfig/bitcoind, see below -if [ -f /etc/sysconfig/bitcoind ]; then - . /etc/sysconfig/bitcoind +# you can override defaults in /etc/sysconfig/hushd, see below +if [ -f /etc/sysconfig/hushd ]; then + . /etc/sysconfig/hushd fi RETVAL=0 -prog=bitcoind -# you can override the lockfile via BITCOIND_LOCKFILE in /etc/sysconfig/bitcoind -lockfile=${BITCOIND_LOCKFILE-/var/lock/subsys/bitcoind} +prog=hushd +# you can override the lockfile via HUSHD_LOCKFILE in /etc/sysconfig/hushd +lockfile=${HUSHD_LOCKFILE-/var/lock/subsys/hushd} -# bitcoind defaults to /usr/bin/bitcoind, override with BITCOIND_BIN -bitcoind=${BITCOIND_BIN-/usr/bin/bitcoind} +# hushd defaults to /usr/bin/hushd, override with HUSHD_BIN +hushd=${HUSHD_BIN-/usr/bin/hushd} -# bitcoind opts default to -disablewallet, override with BITCOIND_OPTS -bitcoind_opts=${BITCOIND_OPTS--disablewallet} +# hushd opts default to -disablewallet, override with HUSHD_OPTS +hushd_opts=${HUSHD_OPTS--disablewallet} start() { echo -n $"Starting $prog: " - daemon $DAEMONOPTS $bitcoind $bitcoind_opts + daemon $DAEMONOPTS $hushd $hushd_opts RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $lockfile diff --git a/contrib/init/hushd.openrc b/contrib/init/hushd.openrc index eda1a96fb..08e04a00f 100644 --- a/contrib/init/hushd.openrc +++ b/contrib/init/hushd.openrc @@ -2,41 +2,41 @@ # backward compatibility for existing gentoo layout # -if [ -d "/var/lib/bitcoin/.bitcoin" ]; then - BITCOIND_DEFAULT_DATADIR="/var/lib/bitcoin/.bitcoin" +if [ -d "/var/lib/hush/.hush" ]; then + HUSHD_DEFAULT_DATADIR="/var/lib/hush/.hush" else - BITCOIND_DEFAULT_DATADIR="/var/lib/bitcoind" + HUSHD_DEFAULT_DATADIR="/var/lib/hushd" fi -BITCOIND_CONFIGFILE=${BITCOIND_CONFIGFILE:-/etc/bitcoin/bitcoin.conf} -BITCOIND_PIDDIR=${BITCOIND_PIDDIR:-/var/run/bitcoind} -BITCOIND_PIDFILE=${BITCOIND_PIDFILE:-${BITCOIND_PIDDIR}/bitcoind.pid} -BITCOIND_DATADIR=${BITCOIND_DATADIR:-${BITCOIND_DEFAULT_DATADIR}} -BITCOIND_USER=${BITCOIND_USER:-${BITCOIN_USER:-bitcoin}} -BITCOIND_GROUP=${BITCOIND_GROUP:-bitcoin} -BITCOIND_BIN=${BITCOIND_BIN:-/usr/bin/bitcoind} -BITCOIND_NICE=${BITCOIND_NICE:-${NICELEVEL:-0}} -BITCOIND_OPTS="${BITCOIND_OPTS:-${BITCOIN_OPTS}}" +HUSHD_CONFIGFILE=${HUSHD_CONFIGFILE:-/etc/hush/hush.conf} +HUSHD_PIDDIR=${HUSHD_PIDDIR:-/var/run/hushd} +HUSHD_PIDFILE=${HUSHD_PIDFILE:-${HUSHD_PIDDIR}/hushd.pid} +HUSHD_DATADIR=${HUSHD_DATADIR:-${HUSHD_DEFAULT_DATADIR}} +HUSHD_USER=${HUSHD_USER:-${HUSH_USER:-hush}} +HUSHD_GROUP=${HUSHD_GROUP:-hush} +HUSHD_BIN=${HUSHD_BIN:-/usr/bin/hushd} +HUSHD_NICE=${HUSHD_NICE:-${NICELEVEL:-0}} +HUSHD_OPTS="${HUSHD_OPTS:-${HUSH_OPTS}}" -name="Bitcoin Core Daemon" -description="Bitcoin cryptocurrency P2P network daemon" +name="Hush Full Node Daemon" +description="Hush cryptocurrency P2P network daemon" -command="/usr/bin/bitcoind" -command_args="-pid=\"${BITCOIND_PIDFILE}\" \ - -conf=\"${BITCOIND_CONFIGFILE}\" \ - -datadir=\"${BITCOIND_DATADIR}\" \ +command="/usr/bin/hushd" +command_args="-pid=\"${HUSHD_PIDFILE}\" \ + -conf=\"${HUSHD_CONFIGFILE}\" \ + -datadir=\"${HUSHD_DATADIR}\" \ -daemon \ - ${BITCOIND_OPTS}" + ${HUSHD_OPTS}" -required_files="${BITCOIND_CONFIGFILE}" -start_stop_daemon_args="-u ${BITCOIND_USER} \ - -N ${BITCOIND_NICE} -w 2000" -pidfile="${BITCOIND_PIDFILE}" +required_files="${HUSHD_CONFIGFILE}" +start_stop_daemon_args="-u ${HUSHD_USER} \ + -N ${HUSHD_NICE} -w 2000" +pidfile="${HUSHD_PIDFILE}" # The retry schedule to use when stopping the daemon. Could be either # a timeout in seconds or multiple signal/timeout pairs (like # "SIGKILL/180 SIGTERM/300") -retry="${BITCOIND_SIGTERM_TIMEOUT}" +retry="${HUSHD_SIGTERM_TIMEOUT}" depend() { need localmount net @@ -50,29 +50,29 @@ start_pre() { checkpath \ -d \ --mode 0750 \ - --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" \ - "${BITCOIND_DATADIR}" + --owner "${HUSHD_USER}:${HUSHD_GROUP}" \ + "${HUSHD_DATADIR}" checkpath \ -d \ --mode 0755 \ - --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" \ - "${BITCOIND_PIDDIR}" + --owner "${HUSHD_USER}:${HUSHD_GROUP}" \ + "${HUSHD_PIDDIR}" checkpath -f \ - -o ${BITCOIND_USER}:${BITCOIND_GROUP} \ + -o ${HUSHD_USER}:${HUSHD_GROUP} \ -m 0660 \ - ${BITCOIND_CONFIGFILE} + ${HUSHD_CONFIGFILE} checkconfig || return 1 } checkconfig() { - if ! grep -qs '^rpcpassword=' "${BITCOIND_CONFIGFILE}" ; then + if ! grep -qs '^rpcpassword=' "${HUSHD_CONFIGFILE}" ; then eerror "" - eerror "ERROR: You must set a secure rpcpassword to run bitcoind." - eerror "The setting must appear in ${BITCOIND_CONFIGFILE}" + eerror "ERROR: You must set a secure rpcpassword to run hushd." + eerror "The setting must appear in ${HUSHD_CONFIGFILE}" eerror "" eerror "This password is security critical to securing wallets " eerror "and must not be the same as the rpcuser setting." @@ -84,7 +84,7 @@ checkconfig() eerror "It is also recommended that you also set alertnotify so you are " eerror "notified of problems:" eerror "" - eerror "ie: alertnotify=echo %%s | mail -s \"Bitcoin Alert\"" \ + eerror "ie: alertnotify=echo %%s | mail -s \"Hush Alert\"" \ "admin@foo.com" eerror "" return 1 diff --git a/contrib/init/hushd.openrcconf b/contrib/init/hushd.openrcconf index 0cbff6d30..b36b81f28 100644 --- a/contrib/init/hushd.openrcconf +++ b/contrib/init/hushd.openrcconf @@ -1,33 +1,33 @@ -# /etc/conf.d/bitcoind: config file for /etc/init.d/bitcoind +# /etc/conf.d/hushd: config file for /etc/init.d/hushd # Config file location -#BITCOIND_CONFIGFILE="/etc/bitcoin/bitcoin.conf" +#HUSHD_CONFIGFILE="/etc/hush/hush.conf" -# What directory to write pidfile to? (created and owned by $BITCOIND_USER) -#BITCOIND_PIDDIR="/var/run/bitcoind" +# What directory to write pidfile to? (created and owned by $HUSHD_USER) +#HUSHD_PIDDIR="/var/run/hushd" # What filename to give the pidfile -#BITCOIND_PIDFILE="${BITCOIND_PIDDIR}/bitcoind.pid" +#HUSHD_PIDFILE="${HUSHD_PIDDIR}/hushd.pid" -# Where to write bitcoind data (be mindful that the blockchain is large) -#BITCOIND_DATADIR="/var/lib/bitcoind" +# Where to write hushd data (be mindful that the blockchain is large) +#HUSHD_DATADIR="/var/lib/hushd" -# User and group to own bitcoind process -#BITCOIND_USER="bitcoin" -#BITCOIND_GROUP="bitcoin" +# User and group to own hushd process +#HUSHD_USER="hush" +#HUSHD_GROUP="hush" -# Path to bitcoind executable -#BITCOIND_BIN="/usr/bin/bitcoind" +# Path to hushd executable +#HUSHD_BIN="/usr/bin/hushd" -# Nice value to run bitcoind under -#BITCOIND_NICE=0 +# Nice value to run hushd under +#HUSHD_NICE=0 # Additional options (avoid -conf and -datadir, use flags above) -BITCOIND_OPTS="-disablewallet" +HUSHD_OPTS="-disablewallet" -# The timeout in seconds OpenRC will wait for bitcoind to terminate +# The timeout in seconds OpenRC will wait for hushd to terminate # after a SIGTERM has been raised. # Note that this will be mapped as argument to start-stop-daemon's # '--retry' option, which means you can specify a retry schedule # here. For more information see man 8 start-stop-daemon. -BITCOIND_SIGTERM_TIMEOUT=60 +HUSHD_SIGTERM_TIMEOUT=60 diff --git a/contrib/init/hushd.service b/contrib/init/hushd.service index 9132957c3..f014f54d4 100644 --- a/contrib/init/hushd.service +++ b/contrib/init/hushd.service @@ -1,15 +1,15 @@ [Unit] -Description=Bitcoin's distributed currency daemon +Description=Hush: Speak And Transact Freely After=network.target [Service] -User=bitcoin -Group=bitcoin +User=hush +Group=hush Type=forking -PIDFile=/var/lib/bitcoind/bitcoind.pid -ExecStart=/usr/bin/bitcoind -daemon -pid=/var/lib/bitcoind/bitcoind.pid \ --conf=/etc/bitcoin/bitcoin.conf -datadir=/var/lib/bitcoind -disablewallet +PIDFile=/var/lib/hushd/hushd.pid +ExecStart=/usr/bin/hushd -daemon -pid=/var/lib/hushd/hushd.pid \ +-conf=/etc/hush/hush.conf -datadir=/var/lib/hushd -disablewallet Restart=always PrivateTmp=true From 4e8dc646ad140b4409b5bab49c82bcf8e65cc510 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 14:21:00 -0500 Subject: [PATCH 148/277] delete this garbage from Gavin Andresen, lulz --- contrib/spendfrom/README.md | 35 ----- contrib/spendfrom/setup.py | 9 -- contrib/spendfrom/spendfrom.py | 267 --------------------------------- 3 files changed, 311 deletions(-) delete mode 100644 contrib/spendfrom/README.md delete mode 100644 contrib/spendfrom/setup.py delete mode 100755 contrib/spendfrom/spendfrom.py diff --git a/contrib/spendfrom/README.md b/contrib/spendfrom/README.md deleted file mode 100644 index c0a9c9ccf..000000000 --- a/contrib/spendfrom/README.md +++ /dev/null @@ -1,35 +0,0 @@ -### SpendFrom ### - -Use the raw transactions API to send coins received on a particular -address (or addresses). - -### Usage: ### -Depends on [jsonrpc](http://json-rpc.org/). - - spendfrom.py --from=FROMADDRESS1[,FROMADDRESS2] --to=TOADDRESS --amount=amount \ - --fee=fee --datadir=/path/to/.bitcoin --testnet --dry_run - -With no arguments, outputs a list of amounts associated with addresses. - -With arguments, sends coins received by the `FROMADDRESS` addresses to the `TOADDRESS`. - -### Notes ### - -- You may explicitly specify how much fee to pay (a fee more than 1% of the amount -will fail, though, to prevent bitcoin-losing accidents). Spendfrom may fail if -it thinks the transaction would never be confirmed (if the amount being sent is -too small, or if the transaction is too many bytes for the fee). - -- If a change output needs to be created, the change will be sent to the last -`FROMADDRESS` (if you specify just one `FROMADDRESS`, change will go back to it). - -- If `--datadir` is not specified, the default datadir is used. - -- The `--dry_run` option will just create and sign the transaction and print -the transaction data (as hexadecimal), instead of broadcasting it. - -- If the transaction is created and broadcast successfully, a transaction id -is printed. - -- If this was a tool for end-users and not programmers, it would have much friendlier -error-handling. diff --git a/contrib/spendfrom/setup.py b/contrib/spendfrom/setup.py deleted file mode 100644 index 01b9768a5..000000000 --- a/contrib/spendfrom/setup.py +++ /dev/null @@ -1,9 +0,0 @@ -from distutils.core import setup -setup(name='btcspendfrom', - version='1.0', - description='Command-line utility for bitcoin "coin control"', - author='Gavin Andresen', - author_email='gavin@bitcoinfoundation.org', - requires=['jsonrpc'], - scripts=['spendfrom.py'], - ) diff --git a/contrib/spendfrom/spendfrom.py b/contrib/spendfrom/spendfrom.py deleted file mode 100755 index 0729234eb..000000000 --- a/contrib/spendfrom/spendfrom.py +++ /dev/null @@ -1,267 +0,0 @@ -#!/usr/bin/env python -# -# Use the raw transactions API to spend bitcoins received on particular addresses, -# and send any change back to that same address. -# -# Example usage: -# spendfrom.py # Lists available funds -# spendfrom.py --from=ADDRESS --to=ADDRESS --amount=11.00 -# -# Assumes it will talk to a bitcoind or Bitcoin-Qt running -# on localhost. -# -# Depends on jsonrpc -# - -from decimal import * -import getpass -import math -import os -import os.path -import platform -import sys -import time -from jsonrpc import ServiceProxy, json - -BASE_FEE=Decimal("0.001") - -def check_json_precision(): - """Make sure json library being used does not lose precision converting BTC values""" - n = Decimal("20000000.00000003") - satoshis = int(json.loads(json.dumps(float(n)))*1.0e8) - if satoshis != 2000000000000003: - raise RuntimeError("JSON encode/decode loses precision") - -def determine_db_dir(): - """Return the default location of the bitcoin data directory""" - if platform.system() == "Darwin": - return os.path.expanduser("~/Library/Application Support/Bitcoin/") - elif platform.system() == "Windows": - return os.path.join(os.environ['APPDATA'], "Bitcoin") - return os.path.expanduser("~/.bitcoin") - -def read_bitcoin_config(dbdir): - """Read the bitcoin.conf file from dbdir, returns dictionary of settings""" - from ConfigParser import SafeConfigParser - - class FakeSecHead(object): - def __init__(self, fp): - self.fp = fp - self.sechead = '[all]\n' - def readline(self): - if self.sechead: - try: return self.sechead - finally: self.sechead = None - else: - s = self.fp.readline() - if s.find('#') != -1: - s = s[0:s.find('#')].strip() +"\n" - return s - - config_parser = SafeConfigParser() - config_parser.readfp(FakeSecHead(open(os.path.join(dbdir, "bitcoin.conf")))) - return dict(config_parser.items("all")) - -def connect_JSON(config): - """Connect to a bitcoin JSON-RPC server""" - testnet = config.get('testnet', '0') - testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False - if not 'rpcport' in config: - config['rpcport'] = 18232 if testnet else 8232 - connect = "http://%s:%s@127.0.0.1:%s"%(config['rpcuser'], config['rpcpassword'], config['rpcport']) - try: - result = ServiceProxy(connect) - # ServiceProxy is lazy-connect, so send an RPC command mostly to catch connection errors, - # but also make sure the bitcoind we're talking to is/isn't testnet: - if result.getmininginfo()['testnet'] != testnet: - sys.stderr.write("RPC server at "+connect+" testnet setting mismatch\n") - sys.exit(1) - return result - except: - sys.stderr.write("Error connecting to RPC server at "+connect+"\n") - sys.exit(1) - -def unlock_wallet(bitcoind): - info = bitcoind.getinfo() - if 'unlocked_until' not in info: - return True # wallet is not encrypted - t = int(info['unlocked_until']) - if t <= time.time(): - try: - passphrase = getpass.getpass("Wallet is locked; enter passphrase: ") - bitcoind.walletpassphrase(passphrase, 5) - except: - sys.stderr.write("Wrong passphrase\n") - - info = bitcoind.getinfo() - return int(info['unlocked_until']) > time.time() - -def list_available(bitcoind): - address_summary = dict() - - address_to_account = dict() - for info in bitcoind.listreceivedbyaddress(0): - address_to_account[info["address"]] = info["account"] - - unspent = bitcoind.listunspent(0) - for output in unspent: - # listunspent doesn't give addresses, so: - rawtx = bitcoind.getrawtransaction(output['txid'], 1) - vout = rawtx["vout"][output['vout']] - pk = vout["scriptPubKey"] - - # This code only deals with ordinary pay-to-bitcoin-address - # or pay-to-script-hash outputs right now; anything exotic is ignored. - if pk["type"] != "pubkeyhash" and pk["type"] != "scripthash": - continue - - address = pk["addresses"][0] - if address in address_summary: - address_summary[address]["total"] += vout["value"] - address_summary[address]["outputs"].append(output) - else: - address_summary[address] = { - "total" : vout["value"], - "outputs" : [output], - "account" : address_to_account.get(address, "") - } - - return address_summary - -def select_coins(needed, inputs): - # Feel free to improve this, this is good enough for my simple needs: - outputs = [] - have = Decimal("0.0") - n = 0 - while have < needed and n < len(inputs): - outputs.append({ "txid":inputs[n]["txid"], "vout":inputs[n]["vout"]}) - have += inputs[n]["amount"] - n += 1 - return (outputs, have-needed) - -def create_tx(bitcoind, fromaddresses, toaddress, amount, fee): - all_coins = list_available(bitcoind) - - total_available = Decimal("0.0") - needed = amount+fee - potential_inputs = [] - for addr in fromaddresses: - if addr not in all_coins: - continue - potential_inputs.extend(all_coins[addr]["outputs"]) - total_available += all_coins[addr]["total"] - - if total_available < needed: - sys.stderr.write("Error, only %f BTC available, need %f\n"%(total_available, needed)); - sys.exit(1) - - # - # Note: - # Python's json/jsonrpc modules have inconsistent support for Decimal numbers. - # Instead of wrestling with getting json.dumps() (used by jsonrpc) to encode - # Decimals, I'm casting amounts to float before sending them to bitcoind. - # - outputs = { toaddress : float(amount) } - (inputs, change_amount) = select_coins(needed, potential_inputs) - if change_amount > BASE_FEE: # don't bother with zero or tiny change - change_address = fromaddresses[-1] - if change_address in outputs: - outputs[change_address] += float(change_amount) - else: - outputs[change_address] = float(change_amount) - - rawtx = bitcoind.createrawtransaction(inputs, outputs) - signed_rawtx = bitcoind.signrawtransaction(rawtx) - if not signed_rawtx["complete"]: - sys.stderr.write("signrawtransaction failed\n") - sys.exit(1) - txdata = signed_rawtx["hex"] - - return txdata - -def compute_amount_in(bitcoind, txinfo): - result = Decimal("0.0") - for vin in txinfo['vin']: - in_info = bitcoind.getrawtransaction(vin['txid'], 1) - vout = in_info['vout'][vin['vout']] - result = result + vout['value'] - return result - -def compute_amount_out(txinfo): - result = Decimal("0.0") - for vout in txinfo['vout']: - result = result + vout['value'] - return result - -def sanity_test_fee(bitcoind, txdata_hex, max_fee): - class FeeError(RuntimeError): - pass - try: - txinfo = bitcoind.decoderawtransaction(txdata_hex) - total_in = compute_amount_in(bitcoind, txinfo) - total_out = compute_amount_out(txinfo) - if total_in-total_out > max_fee: - raise FeeError("Rejecting transaction, unreasonable fee of "+str(total_in-total_out)) - - tx_size = len(txdata_hex)/2 - kb = tx_size/1000 # integer division rounds down - if kb > 1 and fee < BASE_FEE: - raise FeeError("Rejecting no-fee transaction, larger than 1000 bytes") - if total_in < 0.01 and fee < BASE_FEE: - raise FeeError("Rejecting no-fee, tiny-amount transaction") - # Exercise for the reader: compute transaction priority, and - # warn if this is a very-low-priority transaction - - except FeeError as err: - sys.stderr.write((str(err)+"\n")) - sys.exit(1) - -def main(): - import optparse - - parser = optparse.OptionParser(usage="%prog [options]") - parser.add_option("--from", dest="fromaddresses", default=None, - help="addresses to get bitcoins from") - parser.add_option("--to", dest="to", default=None, - help="address to get send bitcoins to") - parser.add_option("--amount", dest="amount", default=None, - help="amount to send") - parser.add_option("--fee", dest="fee", default="0.0", - help="fee to include") - parser.add_option("--datadir", dest="datadir", default=determine_db_dir(), - help="location of bitcoin.conf file with RPC username/password (default: %default)") - parser.add_option("--testnet", dest="testnet", default=False, action="store_true", - help="Use the test network") - parser.add_option("--dry_run", dest="dry_run", default=False, action="store_true", - help="Don't broadcast the transaction, just create and print the transaction data") - - (options, args) = parser.parse_args() - - check_json_precision() - config = read_bitcoin_config(options.datadir) - if options.testnet: config['testnet'] = True - bitcoind = connect_JSON(config) - - if options.amount is None: - address_summary = list_available(bitcoind) - for address,info in address_summary.iteritems(): - n_transactions = len(info['outputs']) - if n_transactions > 1: - print("%s %.8f %s (%d transactions)"%(address, info['total'], info['account'], n_transactions)) - else: - print("%s %.8f %s"%(address, info['total'], info['account'])) - else: - fee = Decimal(options.fee) - amount = Decimal(options.amount) - while unlock_wallet(bitcoind) == False: - pass # Keep asking for passphrase until they get it right - txdata = create_tx(bitcoind, options.fromaddresses.split(","), options.to, amount, fee) - sanity_test_fee(bitcoind, txdata, amount*Decimal("0.01")) - if options.dry_run: - print(txdata) - else: - txid = bitcoind.sendrawtransaction(txdata) - print(txid) - -if __name__ == '__main__': - main() From 91e546f6a7185e7c80eeea0696cbf0fa706f4241 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 14:25:32 -0500 Subject: [PATCH 149/277] Clean up contrib/ --- contrib/block_time.pl | 4 +++- contrib/checkpoints.pl | 4 +++- contrib/hush-cli.bash-completion | 4 ++-- contrib/test-patches/README.md | 7 ------- contrib/testgen/README.md | 4 ++-- contrib/zmq/zmq_sub.py | 3 ++- 6 files changed, 12 insertions(+), 14 deletions(-) delete mode 100644 contrib/test-patches/README.md diff --git a/contrib/block_time.pl b/contrib/block_time.pl index 17da3c461..4d28b8c80 100755 --- a/contrib/block_time.pl +++ b/contrib/block_time.pl @@ -1,6 +1,8 @@ #!/usr/bin/perl # Copyright 2019-2020 The Hush developers -# Released under the GPLv3 +# Copyright (c) 2019-2020 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 use warnings; use strict; diff --git a/contrib/checkpoints.pl b/contrib/checkpoints.pl index bf11a8f7f..08bcf4e20 100755 --- a/contrib/checkpoints.pl +++ b/contrib/checkpoints.pl @@ -1,6 +1,8 @@ #!/usr/bin/perl # Copyright 2019-2020 The Hush developers -# Released under the GPLv3 +# Copyright (c) 2019-2020 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 use warnings; use strict; # Generate checkpoint data for use in src/main.cpp diff --git a/contrib/hush-cli.bash-completion b/contrib/hush-cli.bash-completion index b750e4ae9..90209c0d7 100644 --- a/contrib/hush-cli.bash-completion +++ b/contrib/hush-cli.bash-completion @@ -1,7 +1,7 @@ # bash programmable completion for hush-cli(1) # Copyright (c) 2012-2016 The Bitcoin Core developers -# Copyright (c) 2018 The Hush developers -# Distributed under the MIT software license, see the accompanying +# Copyright (c) 2018-2020 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 # call $hush-cli for RPC diff --git a/contrib/test-patches/README.md b/contrib/test-patches/README.md deleted file mode 100644 index def40b0d6..000000000 --- a/contrib/test-patches/README.md +++ /dev/null @@ -1,7 +0,0 @@ -### Test Patches ### - -These patches are applied when the automated pull-tester -tests each pull and when master is tested using jenkins. -You can find more information about the tests run at -[http://jenkins.bluematt.me/pull-tester/files/ -](http://jenkins.bluematt.me/pull-tester/files/) \ No newline at end of file diff --git a/contrib/testgen/README.md b/contrib/testgen/README.md index 83624f443..903e4ed6d 100644 --- a/contrib/testgen/README.md +++ b/contrib/testgen/README.md @@ -1,8 +1,8 @@ ### TestGen ### -Utilities to generate test vectors for the data-driven Bitcoin tests. +Utilities to generate test vectors for the data-driven Hush tests. Usage: gen_base58_test_vectors.py valid 50 > ../../src/test/data/base58_keys_valid.json - gen_base58_test_vectors.py invalid 50 > ../../src/test/data/base58_keys_invalid.json \ No newline at end of file + gen_base58_test_vectors.py invalid 50 > ../../src/test/data/base58_keys_invalid.json diff --git a/contrib/zmq/zmq_sub.py b/contrib/zmq/zmq_sub.py index b1603e3d0..b2ef3022e 100755 --- a/contrib/zmq/zmq_sub.py +++ b/contrib/zmq/zmq_sub.py @@ -1,6 +1,7 @@ #!/usr/bin/env python2 # Copyright (c) 2014-2016 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying +# Copyright (c) 2019-2020 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 import array From 3ef46f405a41ff7b1ec16bcb3e2e8e04bb44a720 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 14:26:17 -0500 Subject: [PATCH 150/277] We vibe the GPLv3, fix some typos --- contrib/devtools/symbol-check.py | 2 +- contrib/hush-tx.bash-completion | 2 +- contrib/hushd.bash-completion | 2 +- contrib/komodo-cli.bash-completion | 2 +- contrib/komodo-tx.bash-completion | 2 +- contrib/komodod.bash-completion | 2 +- contrib/linearize/linearize-data.py | 2 +- contrib/linearize/linearize-hashes.py | 2 +- contrib/seeds/generate-seeds.py | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py index ea671d774..664895a09 100755 --- a/contrib/devtools/symbol-check.py +++ b/contrib/devtools/symbol-check.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # Copyright (c) 2014 Wladimir J. van der Laan -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html ''' A script to check that the (Linux) executables produced by gitian only contain diff --git a/contrib/hush-tx.bash-completion b/contrib/hush-tx.bash-completion index b49ada489..23fcacf0c 100644 --- a/contrib/hush-tx.bash-completion +++ b/contrib/hush-tx.bash-completion @@ -1,6 +1,6 @@ # bash programmable completion for hush-tx(1) # Copyright (c) 2016 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html _hush_tx() { diff --git a/contrib/hushd.bash-completion b/contrib/hushd.bash-completion index 418659a16..bd341a6fd 100644 --- a/contrib/hushd.bash-completion +++ b/contrib/hushd.bash-completion @@ -2,7 +2,7 @@ # Copyright (c) 2012-2017 The Bitcoin Core developers # Copyright (c) 2016-2017 The Zcash developers # Copyright (c) 2018 The Hush developers -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html _hushd() { diff --git a/contrib/komodo-cli.bash-completion b/contrib/komodo-cli.bash-completion index 784e5c807..f190872e2 100644 --- a/contrib/komodo-cli.bash-completion +++ b/contrib/komodo-cli.bash-completion @@ -1,6 +1,6 @@ # bash programmable completion for komodo-cli(1) # Copyright (c) 2012-2016 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # call $komodo-cli for RPC diff --git a/contrib/komodo-tx.bash-completion b/contrib/komodo-tx.bash-completion index aa80cfd6c..897a63206 100644 --- a/contrib/komodo-tx.bash-completion +++ b/contrib/komodo-tx.bash-completion @@ -1,6 +1,6 @@ # bash programmable completion for komodo-tx(1) # Copyright (c) 2016 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html _komodo_tx() { diff --git a/contrib/komodod.bash-completion b/contrib/komodod.bash-completion index ad73f5fbf..85c6b7e39 100644 --- a/contrib/komodod.bash-completion +++ b/contrib/komodod.bash-completion @@ -1,7 +1,7 @@ # bash programmable completion for komodod(1) # Copyright (c) 2012-2017 The Bitcoin Core developers # Copyright (c) 2016-2017 The komodo developers -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html _komodod() { diff --git a/contrib/linearize/linearize-data.py b/contrib/linearize/linearize-data.py index 54a460a44..d291d9d06 100755 --- a/contrib/linearize/linearize-data.py +++ b/contrib/linearize/linearize-data.py @@ -3,7 +3,7 @@ # linearize-data.py: Construct a linear, no-fork version of the chain. # # Copyright (c) 2013-2014 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # diff --git a/contrib/linearize/linearize-hashes.py b/contrib/linearize/linearize-hashes.py index 17afd4e2a..fea69d47a 100755 --- a/contrib/linearize/linearize-hashes.py +++ b/contrib/linearize/linearize-hashes.py @@ -3,7 +3,7 @@ # linearize-hashes.py: List blocks in a linear, no-fork version of the chain. # # Copyright (c) 2013-2014 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # diff --git a/contrib/seeds/generate-seeds.py b/contrib/seeds/generate-seeds.py index 1772c07e6..ab9b4c68c 100755 --- a/contrib/seeds/generate-seeds.py +++ b/contrib/seeds/generate-seeds.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # Copyright (c) 2014 Wladimir J. van der Laan -# Distributed under the MIT software license, see the accompanying +# Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html ''' Script to generate list of seed nodes for chainparams.cpp. From b6e0b4a62b09f0e2e3f0be2909a509311b614a7b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 14:27:46 -0500 Subject: [PATCH 151/277] Tidy the tidy script --- contrib/tidy_datadir.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/contrib/tidy_datadir.sh b/contrib/tidy_datadir.sh index 5d6d82644..6e5300394 100755 --- a/contrib/tidy_datadir.sh +++ b/contrib/tidy_datadir.sh @@ -1,10 +1,13 @@ #!/bin/bash +# Copyright (c) 2018-2020 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 if [ -d "$1" ]; then cd "$1" else echo "Usage: $0 " >&2 - echo "Removes obsolete Bitcoin database files" >&2 + echo "Removes obsolete Hush database files" >&2 exit 1 fi @@ -16,22 +19,22 @@ if [ -f wallet.dat -a -f peers.dat -a -f chainstate/CURRENT -a -f blocks/index/C case $LEVEL in 0) - echo "Error: no Bitcoin datadir detected." + echo "Error: no Hush datadir detected." exit 1 ;; 1) - echo "Detected old Bitcoin datadir (before 0.7)." + echo "Detected old Hush datadir (before 0.7)." echo "Nothing to do." exit 0 ;; 2) - echo "Detected Bitcoin 0.7 datadir." + echo "Detected Hush 0.7 datadir." ;; 3) - echo "Detected Bitcoin pre-0.8 datadir." + echo "Detected Hush pre-0.8 datadir." ;; 4) - echo "Detected Bitcoin 0.8 datadir." + echo "Detected Hush 0.8 datadir." ;; esac From fc5c773d66dd5298b86e3a15890709d4793ed990 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 14:31:02 -0500 Subject: [PATCH 152/277] Update secure allocator --- src/support/allocators/secure.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/support/allocators/secure.h b/src/support/allocators/secure.h index 6eb306e2a..4bf80adfe 100644 --- a/src/support/allocators/secure.h +++ b/src/support/allocators/secure.h @@ -1,10 +1,11 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying +// Copyright (c) 2019-2020 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 -#ifndef BITCOIN_SUPPORT_ALLOCATORS_SECURE_H -#define BITCOIN_SUPPORT_ALLOCATORS_SECURE_H +#ifndef HUSH_SUPPORT_ALLOCATORS_SECURE_H +#define HUSH_SUPPORT_ALLOCATORS_SECURE_H #include "support/pagelocker.h" @@ -59,4 +60,4 @@ struct secure_allocator : public std::allocator { // This is exactly like std::string, but with a custom allocator. typedef std::basic_string, secure_allocator > SecureString; -#endif // BITCOIN_SUPPORT_ALLOCATORS_SECURE_H +#endif // HUSH_SUPPORT_ALLOCATORS_SECURE_H From 4fd9ae6f949d631ae5df8339d0d1b41e923d750a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 14:37:58 -0500 Subject: [PATCH 153/277] Various updates --- src/support/allocators/secure.h | 4 ---- src/support/allocators/zeroafterfree.h | 10 +++++----- src/test/bctest.py | 5 +++-- src/test/data/README.md | 13 +++++-------- src/test/wallet-utility.py | 25 +++++++++++++------------ src/wallet/test/wallet_tests.cpp | 6 ++---- 6 files changed, 28 insertions(+), 35 deletions(-) diff --git a/src/support/allocators/secure.h b/src/support/allocators/secure.h index 4bf80adfe..b0fba425e 100644 --- a/src/support/allocators/secure.h +++ b/src/support/allocators/secure.h @@ -8,13 +8,9 @@ #define HUSH_SUPPORT_ALLOCATORS_SECURE_H #include "support/pagelocker.h" - #include - -// // Allocator that locks its contents from being paged // out of memory and clears its contents before deletion. -// template struct secure_allocator : public std::allocator { // MSVC8 default copy constructor is broken diff --git a/src/support/allocators/zeroafterfree.h b/src/support/allocators/zeroafterfree.h index 035ea23bc..1e18eba38 100644 --- a/src/support/allocators/zeroafterfree.h +++ b/src/support/allocators/zeroafterfree.h @@ -1,13 +1,13 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying +// Copyright (c) 2019-2020 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 -#ifndef BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H -#define BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H +#ifndef HUSH_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H +#define HUSH_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H #include "support/cleanse.h" - #include #include @@ -45,4 +45,4 @@ struct zero_after_free_allocator : public std::allocator { // Byte-vector that clears its contents before deletion. typedef std::vector > CSerializeData; -#endif // BITCOIN_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H +#endif // HUSH_SUPPORT_ALLOCATORS_ZEROAFTERFREE_H diff --git a/src/test/bctest.py b/src/test/bctest.py index 50311cfea..5d5d0a4fc 100644 --- a/src/test/bctest.py +++ b/src/test/bctest.py @@ -1,6 +1,7 @@ # Copyright 2014 BitPay, Inc. -# Distributed under the MIT software license, see the accompanying -# file COPYING or https://www.opensource.org/licenses/mit-license.php +# Copyright (c) 2019-2020 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 import subprocess import json diff --git a/src/test/data/README.md b/src/test/data/README.md index 49fc3a6b4..237417a2a 100644 --- a/src/test/data/README.md +++ b/src/test/data/README.md @@ -1,12 +1,9 @@ -Description ------------- +# Data-Driven Hush Tests -This directory contains data-driven tests for various aspects of Bitcoin. +This directory contains data-driven tests for various aspects of Hush -License --------- +# License -The data files in this directory are distributed under the MIT software -license, see the accompanying file COPYING or -https://www.opensource.org/licenses/mit-license.php +Distributed under the GPLv3 software license, see the accompanying +file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/wallet-utility.py b/src/test/wallet-utility.py index bb32b5a4f..9abe1e9ae 100644 --- a/src/test/wallet-utility.py +++ b/src/test/wallet-utility.py @@ -1,7 +1,8 @@ #!/usr/bin/python # Copyright 2014 BitPay, Inc. -# Distributed under the MIT software license, see the accompanying -# file COPYING or https://www.opensource.org/licenses/mit-license.php +# Copyright (c) 2019-2020 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 import subprocess import os @@ -29,9 +30,9 @@ if __name__ == '__main__': output = json.loads(outs[0]) - assert_equal(output[0], "13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av") - assert_equal(output[1], "1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8") - assert_equal(output[2], "13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F") + assert_equal(output[0], "R3EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av") + assert_equal(output[1], "RFKCLGTpPeYBUqfNxktck8k5nqxB8sjim8") + assert_equal(output[2], "R3cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F") execargs = '-datadir=' + datadir + ' -dumppass' execrun = execprog + ' ' + execargs @@ -45,12 +46,12 @@ if __name__ == '__main__': output = json.loads(outs[0]) - assert_equal(output[0]['addr'], "13EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av") - assert_equal(output[0]['pkey'], "5Jz5BWE2WQxp1hGqDZeisQFV1mRFR2AVBAgiXCbNcZyXNjD9aUd") - assert_equal(output[1]['addr'], "1FKCLGTpPeYBUqfNxktck8k5nqxB8sjim8") - assert_equal(output[1]['pkey'], "5HsX2b3v2GjngYQ5ZM4mLp2b2apw6aMNVaPELV1YmpiYR1S4jzc") - assert_equal(output[2]['addr'], "13cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F") - assert_equal(output[2]['pkey'], "5KCWAs1wX2ESiL4PfDR8XYVSSETHFd2jaRGxt1QdanBFTit4XcH") + assert_equal(output[0]['addr'], "R3EngsxkRi7SJPPqCyJsKf34U8FoX9E9Av") + assert_equal(output[0]['pkey'], "UJz5BWE2WQxp1hGqDZeisQFV1mRFR2AVBAgiXCbNcZyXNjD9aUd") + assert_equal(output[1]['addr'], "RFKCLGTpPeYBUqfNxktck8k5nqxB8sjim8") + assert_equal(output[1]['pkey'], "UHsX2b3v2GjngYQ5ZM4mLp2b2apw6aMNVaPELV1YmpiYR1S4jzc") + assert_equal(output[2]['addr'], "R3cdtE9tnNeXCZJ8KQ5WELgEmLSBLnr48F") + assert_equal(output[2]['pkey'], "UKCWAs1wX2ESiL4PfDR8XYVSSETHFd2jaRGxt1QdanBFTit4XcH") if os.path.exists(datadir + '/database'): if os.path.isdir(datadir + '/database'): @@ -58,4 +59,4 @@ if __name__ == '__main__': if os.path.exists(datadir + '/db.log'): os.remove(datadir + '/db.log') - sys.exit(0) \ No newline at end of file + sys.exit(0) diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index 3853e977a..47addd306 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -1,16 +1,14 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying +// Copyright (c) 2019-2020 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 #include "wallet/wallet.h" - #include #include #include #include - #include "test/test_bitcoin.h" - #include #include From 928bfb7177fa3957fe26e0edab8f51a8fbd1ef0f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 17:37:27 -0500 Subject: [PATCH 154/277] doc update --- depends/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/depends/README.md b/depends/README.md index 112847af0..50f0790bb 100644 --- a/depends/README.md +++ b/depends/README.md @@ -12,9 +12,9 @@ For example: make HOST=x86_64-w64-mingw32 -j4 -A prefix will be generated that's suitable for plugging into Bitcoin's +A prefix will be generated that's suitable for plugging into Hush's configure. In the above example, a dir named `x86_64-w64-mingw32` will be -created. To use it for Bitcoin: +created. To use it for Hush: ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32 From 39e0096affb0505ca3db3cc1b8f7765e42352d7f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 17:43:42 -0500 Subject: [PATCH 155/277] mo copyrights --- Dockerfile | 4 +++- depends/funcs.mk | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 0f2106689..3ee058477 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,6 @@ -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 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 FROM ubuntu:16.04 MAINTAINER Duke Leto diff --git a/depends/funcs.mk b/depends/funcs.mk index 289a400cb..22c792ef0 100644 --- a/depends/funcs.mk +++ b/depends/funcs.mk @@ -1,3 +1,6 @@ +# Copyright (c) 2016-2020 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 define int_vars #Set defaults for vars which may be overridden per-package $(1)_cc=$($($(1)_type)_CC) From 689597a37b164f06617640f78d68a0cd9fd6c86e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 17:53:22 -0500 Subject: [PATCH 156/277] Check it out y'allz, mo checkpointz --- src/chainparams.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 52960f24b..861ff0903 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -665,10 +665,14 @@ void *chainparams_commandline() (341000, uint256S("0x0000000c5f55bf23437210f797ebf188a6457f1a4eca47de821a668c2fad8e25")) (342000, uint256S("0x0000000a2ce9f59248a544d7d53bba47065430e748ce98f8f942847f7396b887")) (343000, uint256S("0x0000000b186a3e4883076a0771a44a019c35a6844293fb03aad121195d8f6af3")) - (344000, uint256S("0x0000000313abd30aa3828b9b6e5ff312fa3dfa161c47f7e8a10d01d17c877fb4")), - - (int64_t) 1607081800, // time of last checkpointed block - (int64_t) 600000, // total txs + (344000, uint256S("0x0000000313abd30aa3828b9b6e5ff312fa3dfa161c47f7e8a10d01d17c877fb4")) + (345000, uint256S("0x00000001d2160a1a6873e7bb8507d4cdd3961398cf73820b1480611812f3eb53")) + (346000, uint256S("0x0000000114bcd5b0b4a3c6dd175ee4c2173c7408edba61fc40826209044b717f")) + (347000, uint256S("0x00000007ab3ec746a2e279a784cc6710d41a518d2b27941d231a7ff4e4a834ea")) + (348000, uint256S("0x0000000c0b772a11bb41c362b74890d4538c325386aea4abbaae15d6789e6acc")) + (349000, uint256S("0x0000000138e50eded6f2f3cf8048d0332209c2b0f8093c6bf2695ce6e6e1c149")), + (int64_t) 1607389064, // time of last checkpointed block + (int64_t) 645127, // total txs (double) (double) 1134 // txs in the last day before last checkpoint block }; } else { From a42c063b52043a0774a4f7bfbe61682c542f3957 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 19:49:42 -0500 Subject: [PATCH 157/277] Remove more remnants of JoinSplits --- qa/rpc-tests/test_framework/mininode.py | 28 +++---- src/gtest/main.cpp | 7 +- src/gtest/test_checktransaction.cpp | 14 ++-- src/gtest/test_validation.cpp | 77 ------------------- src/init.cpp | 3 - src/primitives/transaction.h | 35 ++++----- src/test/test_bitcoin.cpp | 23 ++---- src/test/transaction_tests.cpp | 4 +- .../asyncrpcoperation_mergetoaddress.cpp | 2 +- src/wallet/gtest/test_transaction.cpp | 16 ++-- src/wallet/wallet.h | 2 +- src/zcash/JoinSplit.hpp | 12 +-- src/zcash/NoteEncryption.hpp | 2 +- src/zcash/Zcash.h | 4 +- 14 files changed, 62 insertions(+), 167 deletions(-) diff --git a/qa/rpc-tests/test_framework/mininode.py b/qa/rpc-tests/test_framework/mininode.py index 3d1f7e5aa..8ae512932 100755 --- a/qa/rpc-tests/test_framework/mininode.py +++ b/qa/rpc-tests/test_framework/mininode.py @@ -410,8 +410,8 @@ class ZCProof(object): repr(self.g_K), repr(self.g_H)) -ZC_NUM_JS_INPUTS = 2 -ZC_NUM_JS_OUTPUTS = 2 +HUSH_NUM_JS_INPUTS = 2 +HUSH_NUM_JS_OUTPUTS = 2 ZC_NOTEPLAINTEXT_LEADING = 1 ZC_V_SIZE = 8 @@ -439,13 +439,13 @@ class JSDescription(object): self.vpub_old = 0 self.vpub_new = 0 self.anchor = 0 - self.nullifiers = [0] * ZC_NUM_JS_INPUTS - self.commitments = [0] * ZC_NUM_JS_OUTPUTS + self.nullifiers = [0] * HUSH_NUM_JS_INPUTS + self.commitments = [0] * HUSH_NUM_JS_OUTPUTS self.onetimePubKey = 0 self.randomSeed = 0 - self.macs = [0] * ZC_NUM_JS_INPUTS + self.macs = [0] * HUSH_NUM_JS_INPUTS self.proof = None - self.ciphertexts = [None] * ZC_NUM_JS_OUTPUTS + self.ciphertexts = [None] * HUSH_NUM_JS_OUTPUTS def deserialize(self, f): self.vpub_old = struct.unpack(" #include #include - #include "main.h" #include "primitives/transaction.h" #include "consensus/validation.h" -extern ZCJoinSplit* params; - +//TODO: Update these tests for Sapling +/* TEST(checktransaction_tests, check_vpub_not_both_nonzero) { CMutableTransaction tx; tx.nVersion = 2; @@ -733,16 +732,16 @@ TEST(checktransaction_tests, SaplingSproutInputSumsTooLarge) { // create JSDescription uint256 rt; uint256 joinSplitPubKey; - std::array inputs = { + std::array inputs = { libzcash::JSInput(), libzcash::JSInput() }; - std::array outputs = { + std::array outputs = { libzcash::JSOutput(), libzcash::JSOutput() }; - std::array inputMap; - std::array outputMap; + std::array inputMap; + std::array outputMap; auto jsdesc = JSDescription::Randomized( true, @@ -1037,3 +1036,4 @@ TEST(checktransaction_tests, BadTxReceivedOverNetwork) } } } +*/ diff --git a/src/gtest/test_validation.cpp b/src/gtest/test_validation.cpp index 91ed81176..44cc1d52c 100644 --- a/src/gtest/test_validation.cpp +++ b/src/gtest/test_validation.cpp @@ -2,14 +2,11 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include - #include "consensus/upgrades.h" #include "consensus/validation.h" #include "main.h" #include "utiltest.h" -extern ZCJoinSplit* params; - extern bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBlockIndex *pindexNew, const CDiskBlockPos& pos); void ExpectOptionalAmount(CAmount expected, boost::optional actual) { @@ -88,77 +85,3 @@ TEST(Validation, ContextualCheckInputsPassesWithCoinbase) { EXPECT_TRUE(ContextualCheckInputs(tx, state, view, false, 0, false, txdata, Params(CBaseChainParams::MAIN).GetConsensus(), consensusBranchId)); } } - -TEST(Validation, ReceivedBlockTransactions) { - auto sk = libzcash::SproutSpendingKey::random(); - - // Create a fake genesis block - CBlock block1; - block1.vtx.push_back(GetValidReceive(*params, sk, 5, true)); - block1.hashMerkleRoot = block1.BuildMerkleTree(); - CBlockIndex fakeIndex1 {block1}; - - // Create a fake child block - CBlock block2; - block2.hashPrevBlock = block1.GetHash(); - block2.vtx.push_back(GetValidReceive(*params, sk, 10, true)); - block2.hashMerkleRoot = block2.BuildMerkleTree(); - CBlockIndex fakeIndex2 {block2}; - fakeIndex2.pprev = &fakeIndex1; - - CDiskBlockPos pos1; - CDiskBlockPos pos2; - - // Set initial state of indices - ASSERT_TRUE(fakeIndex1.RaiseValidity(BLOCK_VALID_TREE)); - ASSERT_TRUE(fakeIndex2.RaiseValidity(BLOCK_VALID_TREE)); - EXPECT_TRUE(fakeIndex1.IsValid(BLOCK_VALID_TREE)); - EXPECT_TRUE(fakeIndex2.IsValid(BLOCK_VALID_TREE)); - EXPECT_FALSE(fakeIndex1.IsValid(BLOCK_VALID_TRANSACTIONS)); - EXPECT_FALSE(fakeIndex2.IsValid(BLOCK_VALID_TRANSACTIONS)); - - // Sprout pool values should not be set - EXPECT_FALSE((bool)fakeIndex1.nSproutValue); - EXPECT_FALSE((bool)fakeIndex1.nChainSproutValue); - EXPECT_FALSE((bool)fakeIndex2.nSproutValue); - EXPECT_FALSE((bool)fakeIndex2.nChainSproutValue); - - // Mark the second block's transactions as received first - CValidationState state; - EXPECT_TRUE(ReceivedBlockTransactions(block2, state, &fakeIndex2, pos2)); - EXPECT_FALSE(fakeIndex1.IsValid(BLOCK_VALID_TRANSACTIONS)); - EXPECT_TRUE(fakeIndex2.IsValid(BLOCK_VALID_TRANSACTIONS)); - - // Sprout pool value delta should now be set for the second block, - // but not any chain totals - EXPECT_FALSE((bool)fakeIndex1.nSproutValue); - EXPECT_FALSE((bool)fakeIndex1.nChainSproutValue); - { - SCOPED_TRACE("ExpectOptionalAmount call"); - ExpectOptionalAmount(20, fakeIndex2.nSproutValue); - } - EXPECT_FALSE((bool)fakeIndex2.nChainSproutValue); - - // Now mark the first block's transactions as received - EXPECT_TRUE(ReceivedBlockTransactions(block1, state, &fakeIndex1, pos1)); - EXPECT_TRUE(fakeIndex1.IsValid(BLOCK_VALID_TRANSACTIONS)); - EXPECT_TRUE(fakeIndex2.IsValid(BLOCK_VALID_TRANSACTIONS)); - - // Sprout pool values should now be set for both blocks - { - SCOPED_TRACE("ExpectOptionalAmount call"); - ExpectOptionalAmount(10, fakeIndex1.nSproutValue); - } - { - SCOPED_TRACE("ExpectOptionalAmount call"); - ExpectOptionalAmount(10, fakeIndex1.nChainSproutValue); - } - { - SCOPED_TRACE("ExpectOptionalAmount call"); - ExpectOptionalAmount(20, fakeIndex2.nSproutValue); - } - { - SCOPED_TRACE("ExpectOptionalAmount call"); - ExpectOptionalAmount(30, fakeIndex2.nChainSproutValue); - } -} diff --git a/src/init.cpp b/src/init.cpp index 22608ce31..2b660bf2f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -93,11 +93,8 @@ extern bool komodo_dailysnapshot(int32_t height); extern int32_t KOMODO_LOADINGBLOCKS; extern char SMART_CHAIN_SYMBOL[]; extern int32_t KOMODO_SNAPSHOT_INTERVAL; - extern void komodo_init(int32_t height); -//ZCJoinSplit* pzcashParams = NULL; - #ifdef ENABLE_WALLET CWallet* pwalletMain = NULL; #endif diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 9268005dd..85478a8d0 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -37,9 +37,7 @@ #endif #include - #include - #include "zcash/NoteEncryption.hpp" #include "zcash/Zcash.h" #include "zcash/JoinSplit.hpp" @@ -53,20 +51,15 @@ extern std::string ASSETCHAINS_SELFIMPORT; #define OUTPUTDESCRIPTION_SIZE GetSerializeSize(OutputDescription(), SER_NETWORK, PROTOCOL_VERSION) #define SPENDDESCRIPTION_SIZE GetSerializeSize(SpendDescription(), SER_NETWORK, PROTOCOL_VERSION) - // Overwinter transaction version static const int32_t OVERWINTER_TX_VERSION = 3; -static_assert(OVERWINTER_TX_VERSION >= OVERWINTER_MIN_TX_VERSION, - "Overwinter tx version must not be lower than minimum"); -static_assert(OVERWINTER_TX_VERSION <= OVERWINTER_MAX_TX_VERSION, - "Overwinter tx version must not be higher than maximum"); +static_assert(OVERWINTER_TX_VERSION >= OVERWINTER_MIN_TX_VERSION, "Overwinter tx version must not be lower than minimum"); +static_assert(OVERWINTER_TX_VERSION <= OVERWINTER_MAX_TX_VERSION, "Overwinter tx version must not be higher than maximum"); // Sapling transaction version static const int32_t SAPLING_TX_VERSION = 4; -static_assert(SAPLING_TX_VERSION >= SAPLING_MIN_TX_VERSION, - "Sapling tx version must not be lower than minimum"); -static_assert(SAPLING_TX_VERSION <= SAPLING_MAX_TX_VERSION, - "Sapling tx version must not be higher than maximum"); +static_assert(SAPLING_TX_VERSION >= SAPLING_MIN_TX_VERSION, "Sapling tx version must not be lower than minimum"); +static_assert(SAPLING_TX_VERSION <= SAPLING_MAX_TX_VERSION, "Sapling tx version must not be higher than maximum"); /** * A shielded input to a transaction. It contains data that describes a Spend transfer. @@ -225,14 +218,14 @@ public: // are derived from the secrets placed in the note // and the secret spend-authority key known by the // spender. - std::array nullifiers; + std::array nullifiers; // Note commitments are introduced into the commitment // tree, blinding the public about the values and // destinations involved in the JoinSplit. The presence of // a commitment in the note commitment tree is required // to spend it. - std::array commitments; + std::array commitments; // Ephemeral key uint256 ephemeralKey; @@ -241,7 +234,7 @@ public: // These contain trapdoors, values and other information // that the recipient needs, including a memo field. It // is encrypted using the scheme implemented in crypto/NoteEncryption.cpp - std::array ciphertexts = {{ {{0}} }}; + std::array ciphertexts = {{ {{0}} }}; // Random seed uint256 randomSeed; @@ -249,7 +242,7 @@ public: // MACs // The verification of the JoinSplit requires these MACs // to be provided as an input. - std::array macs; + std::array macs; // JoinSplit proof // This is a zk-SNARK which ensures that this JoinSplit is valid. @@ -261,8 +254,8 @@ public: ZCJoinSplit& params, const uint256& joinSplitPubKey, const uint256& rt, - const std::array& inputs, - const std::array& outputs, + const std::array& inputs, + const std::array& outputs, CAmount vpub_old, CAmount vpub_new, bool computeProof = true, // Set to false in some tests @@ -273,10 +266,10 @@ public: ZCJoinSplit& params, const uint256& joinSplitPubKey, const uint256& rt, - std::array& inputs, - std::array& outputs, - std::array& inputMap, - std::array& outputMap, + std::array& inputs, + std::array& outputs, + std::array& inputMap, + std::array& outputMap, CAmount vpub_old, CAmount vpub_new, bool computeProof = true, // Set to false in some tests diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp index be3ff13fb..d0801aa81 100644 --- a/src/test/test_bitcoin.cpp +++ b/src/test/test_bitcoin.cpp @@ -3,12 +3,10 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#define BOOST_TEST_MODULE Bitcoin Test Suite +#define BOOST_TEST_MODULE Hush Test Suite #include "test_bitcoin.h" - #include "crypto/common.h" - #include "key.h" #include "main.h" #include "random.h" @@ -27,29 +25,24 @@ #include #include #include - #include "librustzcash.h" CClientUIInterface uiInterface; // Declared but not defined in ui_interface.h CWallet* pwalletMain; -ZCJoinSplit *pzcashParams; extern bool fPrintToConsole; extern void noui_connect(); JoinSplitTestingSetup::JoinSplitTestingSetup() { - boost::filesystem::path pk_path = ZC_GetParamsDir() / "sprout-proving.key"; - boost::filesystem::path vk_path = ZC_GetParamsDir() / "sprout-verifying.key"; - pzcashParams = ZCJoinSplit::Prepared(vk_path.string(), pk_path.string()); - boost::filesystem::path sapling_spend = ZC_GetParamsDir() / "sapling-spend.params"; + boost::filesystem::path sapling_spend = ZC_GetParamsDir() / "sapling-spend.params"; boost::filesystem::path sapling_output = ZC_GetParamsDir() / "sapling-output.params"; static_assert( sizeof(boost::filesystem::path::value_type) == sizeof(codeunit), "librustzcash not configured correctly"); - auto sapling_spend_str = sapling_spend.native(); + auto sapling_spend_str = sapling_spend.native(); auto sapling_output_str = sapling_output.native(); librustzcash_init_zksnark_params( @@ -67,7 +60,6 @@ JoinSplitTestingSetup::JoinSplitTestingSetup() JoinSplitTestingSetup::~JoinSplitTestingSetup() { - delete pzcashParams; } BasicTestingSetup::BasicTestingSetup() @@ -94,12 +86,12 @@ TestingSetup::TestingSetup() RegisterWalletRPCCommands(tableRPC); #endif ClearDatadirCache(); - pathTemp = GetTempPath() / strprintf("test_bitcoin_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000))); + pathTemp = GetTempPath() / strprintf("test_hush_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000))); boost::filesystem::create_directories(pathTemp); mapArgs["-datadir"] = pathTemp.string(); - pblocktree = new CBlockTreeDB(1 << 20, true); - pcoinsdbview = new CCoinsViewDB(1 << 23, true); - pcoinsTip = new CCoinsViewCache(pcoinsdbview); + pblocktree = new CBlockTreeDB(1 << 20, true); + pcoinsdbview = new CCoinsViewDB(1 << 23, true); + pcoinsTip = new CCoinsViewCache(pcoinsdbview); InitBlockIndex(); #ifdef ENABLE_WALLET bool fFirstRun; @@ -134,7 +126,6 @@ TestingSetup::~TestingSetup() boost::filesystem::remove_all(pathTemp); } - CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(CMutableTransaction &tx, CTxMemPool *pool) { return CTxMemPoolEntry(tx, nFee, nTime, dPriority, nHeight, pool ? pool->HasNoInputsOf(tx) : hadNoDependencies, diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index acbe4025c..56fc7642c 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -362,11 +362,11 @@ BOOST_AUTO_TEST_CASE(test_basic_joinsplit_verification) // create JSDescription uint256 joinSplitPubKey; - std::array inputs = { + std::array inputs = { libzcash::JSInput(witness, note, k), libzcash::JSInput() // dummy input of zero value }; - std::array outputs = { + std::array outputs = { libzcash::JSOutput(addr, 50), libzcash::JSOutput(addr, 50) }; diff --git a/src/wallet/asyncrpcoperation_mergetoaddress.cpp b/src/wallet/asyncrpcoperation_mergetoaddress.cpp index ffbd02faf..7714cf90a 100644 --- a/src/wallet/asyncrpcoperation_mergetoaddress.cpp +++ b/src/wallet/asyncrpcoperation_mergetoaddress.cpp @@ -60,7 +60,7 @@ int mta_find_output(UniValue obj, int n) } UniValue outputMap = outputMapValue.get_array(); - assert(outputMap.size() == ZC_NUM_JS_OUTPUTS); + assert(outputMap.size() == HUSH_NUM_JS_OUTPUTS); for (size_t i = 0; i < outputMap.size(); i++) { if (outputMap[i].get_int() == n) { return i; diff --git a/src/wallet/gtest/test_transaction.cpp b/src/wallet/gtest/test_transaction.cpp index f0a311a49..df25f2ccf 100644 --- a/src/wallet/gtest/test_transaction.cpp +++ b/src/wallet/gtest/test_transaction.cpp @@ -34,16 +34,16 @@ TEST(Transaction, JSDescriptionRandomized) { // create JSDescription uint256 pubKeyHash; - boost::array inputs = { + boost::array inputs = { libzcash::JSInput(witness, note, k), libzcash::JSInput() // dummy input of zero value }; - boost::array outputs = { + boost::array outputs = { libzcash::JSOutput(addr, 50), libzcash::JSOutput(addr, 50) }; - std::array inputMap; - std::array outputMap; + std::array inputMap; + std::array outputMap; { auto jsdesc = JSDescription::Randomized( @@ -73,8 +73,8 @@ TEST(Transaction, JSDescriptionRandomized) { inputMap, outputMap, 0, 0, false, GenZero); - std::array expectedInputMap {1, 0}; - std::array expectedOutputMap {1, 0}; + std::array expectedInputMap {1, 0}; + std::array expectedOutputMap {1, 0}; EXPECT_EQ(expectedInputMap, inputMap); EXPECT_EQ(expectedOutputMap, outputMap); } @@ -86,8 +86,8 @@ TEST(Transaction, JSDescriptionRandomized) { inputMap, outputMap, 0, 0, false, GenMax); - boost::array expectedInputMap {0, 1}; - boost::array expectedOutputMap {0, 1}; + boost::array expectedInputMap {0, 1}; + boost::array expectedOutputMap {0, 1}; EXPECT_EQ(expectedInputMap, inputMap); EXPECT_EQ(expectedOutputMap, outputMap); } diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 1f9820dc4..0c12a3f99 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -203,7 +203,7 @@ public: uint256 hash; // Index into CTransaction.vjoinsplit uint64_t js; - // Index into JSDescription fields of length ZC_NUM_JS_OUTPUTS + // Index into JSDescription fields of length HUSH_NUM_JS_OUTPUTS uint8_t n; JSOutPoint() { SetNull(); } diff --git a/src/zcash/JoinSplit.hpp b/src/zcash/JoinSplit.hpp index ceac79fe4..3d5d43e79 100644 --- a/src/zcash/JoinSplit.hpp +++ b/src/zcash/JoinSplit.hpp @@ -2,8 +2,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef ZC_JOINSPLIT_H_ -#define ZC_JOINSPLIT_H_ +#ifndef HUSH_JOINSPLIT_H_ +#define HUSH_JOINSPLIT_H_ #include "Zcash.h" #include "Proof.hpp" @@ -13,7 +13,6 @@ #include "NoteEncryption.hpp" #include "uint256.h" #include "uint252.h" - #include namespace libzcash { @@ -25,16 +24,13 @@ static constexpr size_t GROTH_PROOF_SIZE = ( typedef std::array GrothProof; typedef boost::variant SproutProof; - class JSInput { }; - class JSOutput { }; - template class JoinSplit { }; } -typedef libzcash::JoinSplit ZCJoinSplit; +typedef libzcash::JoinSplit ZCJoinSplit; -#endif // ZC_JOINSPLIT_H_ +#endif // HUSH_JOINSPLIT_H_ diff --git a/src/zcash/NoteEncryption.hpp b/src/zcash/NoteEncryption.hpp index bafda8032..ff121470c 100644 --- a/src/zcash/NoteEncryption.hpp +++ b/src/zcash/NoteEncryption.hpp @@ -117,7 +117,7 @@ public: } // Encrypts `message` with `pk_enc` and returns the ciphertext. - // This is only called ZC_NUM_JS_OUTPUTS times for a given instantiation; + // This is only called HUSH_NUM_JS_OUTPUTS times for a given instantiation; // but can be called 255 times before the nonce-space runs out. Ciphertext encrypt(const uint256 &pk_enc, const Plaintext &message diff --git a/src/zcash/Zcash.h b/src/zcash/Zcash.h index 14f2ed411..a8bb78f26 100644 --- a/src/zcash/Zcash.h +++ b/src/zcash/Zcash.h @@ -4,8 +4,8 @@ #ifndef ZC_ZCASH_H_ #define ZC_ZCASH_H_ -#define ZC_NUM_JS_INPUTS 2 -#define ZC_NUM_JS_OUTPUTS 2 +#define HUSH_NUM_JS_INPUTS 2 +#define HUSH_NUM_JS_OUTPUTS 2 #define INCREMENTAL_MERKLE_TREE_DEPTH 29 #define INCREMENTAL_MERKLE_TREE_DEPTH_TESTING 4 From 4a546996fc196a0daad963006eb2f408dac67041 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 19:59:41 -0500 Subject: [PATCH 158/277] Better logging and cleanup --- src/main.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 53df491a4..689aa9510 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5240,16 +5240,15 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta int nHeight = pindexPrev->GetHeight()+1; - // Check proof of work + // Check Proof-of-Work if ( (SMART_CHAIN_SYMBOL[0] != 0 || nHeight < 235300 || nHeight > 236000) && block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) { - cout << block.nBits << " block.nBits vs. calc " << GetNextWorkRequired(pindexPrev, &block, consensusParams) << " for block #" << nHeight << endl; + cout "Incorrect Proof-of-Work! " << block.nBits << " block.nBits vs. calc " << GetNextWorkRequired(pindexPrev, &block, consensusParams) << " for height " << nHeight << " " << block.GetHash().ToString() << " with time " << block.GetBlockTime() << endl; return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); } // Check timestamp against prev - if ( ASSETCHAINS_ADAPTIVEPOW <= 0 || nHeight < 30 ) - { + if ( ASSETCHAINS_ADAPTIVEPOW <= 0 || nHeight < 30 ) { if (block.GetBlockTime() <= pindexPrev->GetMedianTimePast() ) { fprintf(stderr,"ht.%d too early %u vs %u\n",(int32_t)nHeight,(uint32_t)block.GetBlockTime(),(uint32_t)pindexPrev->GetMedianTimePast()); @@ -5264,22 +5263,14 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta } // Check that timestamp is not too far in the future - if (block.GetBlockTime() > GetTime() + consensusParams.nMaxFutureBlockTime) - { + if (block.GetBlockTime() > GetTime() + consensusParams.nMaxFutureBlockTime) { return state.Invalid(error("%s: block timestamp too far in the future", __func__), REJECT_INVALID, "time-too-new"); } - if (fCheckpointsEnabled) - { + if (fCheckpointsEnabled) { // Check that the block chain matches the known block chain up to a checkpoint if (!Checkpoints::CheckBlock(chainParams.Checkpoints(), nHeight, hash)) { - /*CBlockIndex *heightblock = chainActive[nHeight]; - if ( heightblock != 0 && heightblock->GetBlockHash() == hash ) - { - //fprintf(stderr,"got a pre notarization block that matches height.%d\n",(int32_t)nHeight); - return true; - }*/ return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight),REJECT_CHECKPOINT, "checkpoint mismatch"); } // Don't accept any forks from the main chain prior to last checkpoint From 5207bffe5b90174c15e9a83238e71f601093e8ae Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 20:03:03 -0500 Subject: [PATCH 159/277] Cleanup --- src/main.cpp | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 689aa9510..e550d9cb2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5330,7 +5330,7 @@ bool ContextualCheckBlock(int32_t slowflag,const CBlock& block, CValidationState } // Enforce BIP 34 rule that the coinbase starts with serialized block height. - // In Zcash this has been enforced since launch, except that the genesis + // In Hush this has been enforced since launch, except that the genesis // block didn't include the height in the coinbase (see Zcash protocol spec // section '6.8 Bitcoin Improvement Proposals'). if (nHeight > 0) @@ -5365,21 +5365,11 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat { if ( ASSETCHAINS_CC == 0 )//&& (ASSETCHAINS_PRIVATE == 0 || HUSH_INSYNC >= Params().GetConsensus().vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight) ) return state.Invalid(error("%s: block is marked invalid", __func__), 0, "duplicate"); - else - { + } else { fprintf(stderr,"reconsider block %s\n",hash.GetHex().c_str()); pindex->nStatus &= ~BLOCK_FAILED_MASK; } } - /*if ( pindex != 0 && hash == komodo_requestedhash ) - { - fprintf(stderr,"AddToBlockIndex A komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); - memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); - komodo_requestedcount = 0; - }*/ - - //if ( pindex == 0 ) - // fprintf(stderr,"accepthdr %s already known but no pindex\n",hash.ToString().c_str()); return true; } if (!CheckBlockHeader(futureblockp,*ppindex!=0?(*ppindex)->GetHeight():0,*ppindex, block, state,0)) @@ -5429,12 +5419,6 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat } if (ppindex) *ppindex = pindex; - /*if ( pindex != 0 && hash == komodo_requestedhash ) - { - fprintf(stderr,"AddToBlockIndex komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); - memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); - komodo_requestedcount = 0; - }*/ return true; } From f6f15799170532ce177a29a275b951b5b0ba3807 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 20:38:27 -0500 Subject: [PATCH 160/277] Cleanup --- src/main.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index e550d9cb2..012ec8c4f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5694,13 +5694,7 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo mapBlockSource[pindex->GetBlockHash()] = pfrom->GetId(); } CheckBlockIndex(); - if (!ret && futureblock == 0) - { - /*if ( SMART_CHAIN_SYMBOL[0] == 0 ) - { - //fprintf(stderr,"request headers from failed process block peer\n"); - pfrom->PushMessage("getheaders", chainActive.GetLocator(chainActive.LastTip()), uint256()); - }*/ + if (!ret && futureblock == 0) { hush_longestchain(); return error("%s: AcceptBlock FAILED", __func__); } From 710559576c2b7a943e2ad92d762a94f8ffbed03d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 8 Dec 2020 20:41:05 -0500 Subject: [PATCH 161/277] Delete dead code and cleaning --- src/main.cpp | 64 ++++------------------------------------------------ 1 file changed, 4 insertions(+), 60 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 012ec8c4f..666127761 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5585,59 +5585,6 @@ CBlockIndex *komodo_ensure(CBlock *pblock, uint256 hash) return(pindex); } -CBlockIndex *oldkomodo_ensure(CBlock *pblock, uint256 hash) -{ - CBlockIndex *pindex=0,*previndex=0; - if ( (pindex = komodo_getblockindex(hash)) == 0 ) - { - pindex = new CBlockIndex(); - if (!pindex) - throw runtime_error("komodo_ensure: new CBlockIndex failed"); - BlockMap::iterator mi = mapBlockIndex.insert(make_pair(hash, pindex)).first; - pindex->phashBlock = &((*mi).first); - } - BlockMap::iterator miSelf = mapBlockIndex.find(hash); - if ( miSelf == mapBlockIndex.end() ) - { - LogPrintf("komodo_ensure unexpected missing hash %s\n",hash.ToString().c_str()); - return(0); - } - if ( miSelf->second == 0 ) // create pindex so first Accept block doesnt fail - { - if ( pindex == 0 ) - { - pindex = AddToBlockIndex(*pblock); - fprintf(stderr,"ensure call addtoblockindex, got %p\n",pindex); - } - if ( pindex != 0 ) - { - miSelf->second = pindex; - LogPrintf("Block header %s is already known, but without pindex -> ensured %p\n",hash.ToString().c_str(),miSelf->second); - } else LogPrintf("komodo_ensure unexpected null pindex\n"); - } - /*if ( hash != Params().GetConsensus().hashGenesisBlock ) - { - miSelf = mapBlockIndex.find(pblock->hashPrevBlock); - if ( miSelf == mapBlockIndex.end() ) - previndex = InsertBlockIndex(pblock->hashPrevBlock); - if ( (miSelf= mapBlockIndex.find(pblock->hashPrevBlock)) != mapBlockIndex.end() ) - { - if ( miSelf->second == 0 ) // create pindex so first Accept block doesnt fail - { - if ( previndex == 0 ) - previndex = InsertBlockIndex(pblock->hashPrevBlock); - if ( previndex != 0 ) - { - miSelf->second = previndex; - LogPrintf("autocreate previndex %s\n",pblock->hashPrevBlock.ToString().c_str()); - } else LogPrintf("komodo_ensure unexpected null previndex\n"); - } - } else LogPrintf("komodo_ensure unexpected null miprev\n"); - } - }*/ - return(pindex); -} - bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNode* pfrom, CBlock* pblock, bool fForceProcessing, CDiskBlockPos *dbp) { // Preliminary checks @@ -5673,15 +5620,12 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo } } fRequested |= fForceProcessing; - if ( checked != 0 && komodo_checkPOW(0,pblock,height) < 0 ) //from_miner && ASSETCHAINS_STAKED == 0 - { + if ( checked != 0 && komodo_checkPOW(0,pblock,height) < 0 ) { checked = 0; - //fprintf(stderr,"passed checkblock but failed checkPOW.%d\n",from_miner && ASSETCHAINS_STAKED == 0); + //fprintf(stderr,"passed checkblock but failed checkPOW.%d\n",from_miner); } - if (!checked && futureblock == 0) - { - if ( pfrom != 0 ) - { + if (!checked && futureblock == 0) { + if ( pfrom != 0 ) { Misbehaving(pfrom->GetId(), 1); } return error("%s: CheckBlock FAILED", __func__); From 6a30b40415c10afef832de9ac6ad3bcd662748b7 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 07:23:08 -0500 Subject: [PATCH 162/277] Once men turned their thinking over to machines in the hope that this would set them free. But that only permitted other men with machines to enslave them. -- Reverend Mother Gaius Helen Mohiam --- src/cc/CCutils.cpp | 24 +-- src/cc/betprotocol.cpp | 4 +- src/cc/cclib.cpp | 25 +-- src/cc/eval.cpp | 8 +- src/cc/eval.h | 20 +- src/cc/importpayout.cpp | 4 +- src/crosschain.cpp | 78 +++---- src/crosschain.h | 4 +- src/hush.h | 16 +- src/hush_defs.h | 2 +- src/hush_globals.h | 18 +- src/hush_notary.h | 2 +- src/hush_utils.h | 12 +- src/init.cpp | 16 +- src/komodo_bitcoind.h | 44 ++-- src/komodo_events.h | 41 +--- src/komodo_nSPV_fullnode.h | 4 +- src/main.cpp | 195 +++++++----------- src/miner.cpp | 40 ++-- src/notarizationdb.cpp | 92 +++------ src/notarizationdb.h | 17 +- src/pow.cpp | 6 +- src/rpc/client.cpp | 2 +- src/rpc/crosschain.cpp | 42 ++-- src/rpc/server.cpp | 4 +- src/rpc/server.h | 4 +- src/test-hush/test_eval_bet.cpp | 10 +- ...isation.cpp => test_eval_notarization.cpp} | 46 ++--- ...sation.cpp => test_parse_notarization.cpp} | 20 +- src/wallet/wallet.cpp | 4 +- 30 files changed, 346 insertions(+), 458 deletions(-) rename src/test-hush/{test_eval_notarisation.cpp => test_eval_notarization.cpp} (82%) rename src/test-hush/{test_parse_notarisation.cpp => test_parse_notarization.cpp} (87%) diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index 1abd6429a..4dfb4a8f3 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * @@ -13,10 +16,7 @@ * * ******************************************************************************/ -/* - CCutils has low level functions that are universally useful for all contracts. - */ - +// CCutils has low level functions that are universally useful for all contracts. #include "CCinclude.h" #include "hush_structs.h" #include "key_io.h" @@ -28,7 +28,7 @@ #endif // TESTMODE int32_t hush_dpowconfs(int32_t height,int32_t numconfs); struct hush_state *hush_stateptr(char *symbol,char *dest); -extern uint32_t KOMODO_DPOWCONFS; +extern uint32_t HUSH_DPOWCONFS; void endiancpy(uint8_t *dest,uint8_t *src,int32_t len) { @@ -823,12 +823,12 @@ int64_t TotalPubkeyCCInputs(const CTransaction &tx, const CPubKey &pubkey) bool ProcessCC(struct CCcontract_info *cp,Eval* eval, std::vector paramsNull,const CTransaction &ctx, unsigned int nIn) { CTransaction createTx; uint256 assetid,assetid2,hashBlock; uint8_t funcid; int32_t height,i,n,from_mempool = 0; int64_t amount; std::vector origpubkey; - height = KOMODO_CONNECTING; - if ( KOMODO_CONNECTING < 0 ) // always comes back with > 0 for final confirmation + height = HUSH_CONNECTING; + if ( HUSH_CONNECTING < 0 ) // always comes back with > 0 for final confirmation return(true); if ( ASSETCHAINS_CC == 0 || (height & ~(1<<30)) < KOMODO_CCACTIVATE ) return eval->Invalid("CC are disabled or not active yet"); - if ( (KOMODO_CONNECTING & (1<<30)) != 0 ) + if ( (HUSH_CONNECTING & (1<<30)) != 0 ) { from_mempool = 1; height &= ((1<<30) - 1); @@ -836,7 +836,7 @@ bool ProcessCC(struct CCcontract_info *cp,Eval* eval, std::vector param if (cp->validate == NULL) return eval->Invalid("validation not supported for eval code"); - //fprintf(stderr,"KOMODO_CONNECTING.%d mempool.%d vs CCactive.%d\n",height,from_mempool,KOMODO_CCACTIVATE); + //fprintf(stderr,"HUSH_CONNECTING.%d mempool.%d vs CCactive.%d\n",height,from_mempool,KOMODO_CCACTIVATE); // there is a chance CC tx is valid in mempool, but invalid when in block, so we cant filter duplicate requests. if any of the vins are spent, for example //txid = ctx.GetHash(); //if ( txid == cp->prevtxid ) @@ -869,12 +869,12 @@ bool CClib_Dispatch(const CC *cond,Eval *eval,std::vector paramsNull,co fprintf(stderr,"-ac_cclib=%s vs myname %s\n",ASSETCHAINS_CCLIB.c_str(),MYCCLIBNAME.c_str()); return eval->Invalid("-ac_cclib name mismatches myname"); } - height = KOMODO_CONNECTING; - if ( KOMODO_CONNECTING < 0 ) // always comes back with > 0 for final confirmation + height = HUSH_CONNECTING; + if ( HUSH_CONNECTING < 0 ) // always comes back with > 0 for final confirmation return(true); if ( ASSETCHAINS_CC == 0 || (height & ~(1<<30)) < KOMODO_CCACTIVATE ) return eval->Invalid("CC are disabled or not active yet"); - if ( (KOMODO_CONNECTING & (1<<30)) != 0 ) + if ( (HUSH_CONNECTING & (1<<30)) != 0 ) { from_mempool = 1; height &= ((1<<30) - 1); diff --git a/src/cc/betprotocol.cpp b/src/cc/betprotocol.cpp index 0724f2fea..b117ad104 100644 --- a/src/cc/betprotocol.cpp +++ b/src/cc/betprotocol.cpp @@ -215,8 +215,8 @@ bool Eval::ImportPayout(const std::vector params, const CTransaction &i // Check disputeTx solves momproof from vout[0] { - NotarisationData data(0); - if (!GetNotarisationData(proof.notarisationHash, data)) + NotarizationData data(0); + if (!GetNotarizationData(proof.notarisationHash, data)) return Invalid("coudnt-load-mom"); if (data.MoM != proof.branch.Exec(disputeTx.GetHash())) diff --git a/src/cc/cclib.cpp b/src/cc/cclib.cpp index 67440f3da..6421f1c23 100644 --- a/src/cc/cclib.cpp +++ b/src/cc/cclib.cpp @@ -1,4 +1,6 @@ -// Copyright © 2019-2020 The Hush Developers +// Copyright (c) 2016-2020 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. * * * @@ -13,10 +15,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include #include - #include "primitives/block.h" #include "primitives/transaction.h" #include "script/cc.h" @@ -27,15 +27,12 @@ #include "chain.h" #include "core_io.h" #include "crosschain.h" - #define FAUCET2SIZE COIN #define EVAL_FAUCET2 EVAL_FIRSTUSER - #ifdef BUILD_ROGUE #define EVAL_ROGUE 17 std::string MYCCLIBNAME = (char *)"rogue"; - #elif BUILD_CUSTOMCC #include "customcc.h" @@ -446,13 +443,12 @@ bool CClib_validate(struct CCcontract_info *cp,int32_t height,Eval *eval,const C else return eval->Invalid("invalid evalcode"); #endif } - numvins = tx.vin.size(); - numvouts = tx.vout.size(); + numvins = tx.vin.size(); + numvouts = tx.vout.size(); preventCCvins = preventCCvouts = -1; - if ( numvouts < 1 ) + if ( numvouts < 1 ) { return eval->Invalid("no vouts"); - else - { + } else { for (i=0; iunspendableCCaddr) != 0 ) { diff --git a/src/cc/eval.cpp b/src/cc/eval.cpp index 0d5b068fa..a0fd9bca8 100644 --- a/src/cc/eval.cpp +++ b/src/cc/eval.cpp @@ -181,13 +181,13 @@ bool Eval::CheckNotaryInputs(const CTransaction &tx, uint32_t height, uint32_t t } // Get MoM from a notarisation tx hash (on HUSH) -bool Eval::GetNotarisationData(const uint256 notaryHash, NotarisationData &data) const +bool Eval::GetNotarizationData(const uint256 notaryHash, NotarizationData &data) const { CTransaction notarisationTx; CBlockIndex block; if (!GetTxConfirmed(notaryHash, notarisationTx, block)) return false; if (!CheckNotaryInputs(notarisationTx, block.GetHeight(), block.nTime)) return false; - if (!ParseNotarisationOpReturn(notarisationTx, data)) return false; + if (!ParseNotarizationOpReturn(notarisationTx, data)) return false; return true; } @@ -205,9 +205,9 @@ std::string Eval::GetAssetchainsSymbol() const /* - * Notarisation data, ie, OP_RETURN payload in notarisation transactions + * Notarization data, ie, OP_RETURN payload in notarisation transactions */ -bool ParseNotarisationOpReturn(const CTransaction &tx, NotarisationData &data) +bool ParseNotarizationOpReturn(const CTransaction &tx, NotarizationData &data) { if (tx.vout.size() < 2) return false; std::vector vdata; diff --git a/src/cc/eval.h b/src/cc/eval.h index cbb9d4967..0b421cbc8 100644 --- a/src/cc/eval.h +++ b/src/cc/eval.h @@ -69,7 +69,7 @@ typedef uint8_t EvalCode; class AppVM; -class NotarisationData; +class NotarizationData; class Eval @@ -110,7 +110,7 @@ public: virtual bool GetSpendsConfirmed(uint256 hash, std::vector &spends) const; virtual bool GetBlock(uint256 hash, CBlockIndex& blockIdx) const; virtual int32_t GetNotaries(uint8_t pubkeys[64][33], int32_t height, uint32_t timestamp) const; - virtual bool GetNotarisationData(uint256 notarisationHash, NotarisationData &data) const; + virtual bool GetNotarizationData(uint256 notarisationHash, NotarizationData &data) const; virtual bool CheckNotaryInputs(const CTransaction &tx, uint32_t height, uint32_t timestamp) const; virtual uint32_t GetAssetchainsCC() const; virtual std::string GetAssetchainsSymbol() const; @@ -160,10 +160,10 @@ extern char SMART_CHAIN_SYMBOL[65]; /* * Data from notarisation OP_RETURN from chain being notarised */ -class NotarisationData +class NotarizationData { public: - int IsBackNotarisation = 0; + int IsBackNotarization = 0; uint256 blockHash = uint256(); uint32_t height = 0; uint256 txHash = uint256(); @@ -174,7 +174,7 @@ public: uint256 MoMoM = uint256(); uint32_t MoMoMDepth = 0; - NotarisationData(int IsBack=2) : IsBackNotarisation(IsBack) { + NotarizationData(int IsBack=2) : IsBackNotarization(IsBack) { symbol[0] = '\0'; } @@ -183,8 +183,8 @@ public: template inline void SerializationOp(Stream& s, Operation ser_action) { - bool IsBack = IsBackNotarisation; - if (2 == IsBackNotarisation) IsBack = DetectBackNotarisation(s, ser_action); + bool IsBack = IsBackNotarization; + if (2 == IsBackNotarization) IsBack = DetectBackNotarization(s, ser_action); READWRITE(blockHash); READWRITE(height); @@ -219,7 +219,7 @@ public: } template - bool DetectBackNotarisation(Stream& s, CSerActionUnserialize act) + bool DetectBackNotarization(Stream& s, CSerActionUnserialize act) { if (SMART_CHAIN_SYMBOL[0]) return 1; if (s.size() >= 72) { @@ -230,14 +230,14 @@ public: } template - bool DetectBackNotarisation(Stream& s, CSerActionSerialize act) + bool DetectBackNotarization(Stream& s, CSerActionSerialize act) { return !txHash.IsNull(); } }; -bool ParseNotarisationOpReturn(const CTransaction &tx, NotarisationData &data); +bool ParseNotarizationOpReturn(const CTransaction &tx, NotarizationData &data); /* diff --git a/src/cc/importpayout.cpp b/src/cc/importpayout.cpp index be31a8414..6df9a6b6a 100644 --- a/src/cc/importpayout.cpp +++ b/src/cc/importpayout.cpp @@ -79,8 +79,8 @@ bool Eval::ImportPayout(const std::vector params, const CTransaction &i // Check disputeTx solves momproof from vout[0] { - NotarisationData data; - if (!GetNotarisationData(proof.notarisationHash, data)) + NotarizationData data; + if (!GetNotarizationData(proof.notarisationHash, data)) return Invalid("coudnt-load-mom"); if (data.MoM != proof.Exec(disputeTx.GetHash())) diff --git a/src/crosschain.cpp b/src/crosschain.cpp index 1e782d6fb..22369b35b 100644 --- a/src/crosschain.cpp +++ b/src/crosschain.cpp @@ -48,7 +48,7 @@ CBlockIndex *komodo_getblockindex(uint256 hash); /* On KMD */ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int kmdHeight, - std::vector &moms, uint256 &destNotarisationTxid) + std::vector &moms, uint256 &destNotarizationTxid) { /* * Notaries don't wait for confirmation on KMD before performing a backnotarisation, @@ -67,33 +67,33 @@ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int kmdHeigh if (kmdHeight < 0 || kmdHeight > chainActive.Height()) return uint256(); - int seenOwnNotarisations = 0, i = 0; + int seenOwnNotarizations = 0, i = 0; int authority = GetSymbolAuthority(symbol); std::set tmp_moms; for (i=0; i kmdHeight) break; - NotarisationsInBlock notarisations; + NotarizationsInBlock notarisations; uint256 blockHash = *chainActive[kmdHeight-i]->phashBlock; - if (!GetBlockNotarisations(blockHash, notarisations)) + if (!GetBlockNotarizations(blockHash, notarisations)) continue; // See if we have an own notarisation in this block - BOOST_FOREACH(Notarisation& nota, notarisations) { + BOOST_FOREACH(Notarization& nota, notarisations) { if (strcmp(nota.second.symbol, symbol) == 0) { - seenOwnNotarisations++; - if (seenOwnNotarisations == 1) - destNotarisationTxid = nota.first; - else if (seenOwnNotarisations == 7) + seenOwnNotarizations++; + if (seenOwnNotarizations == 1) + destNotarizationTxid = nota.first; + else if (seenOwnNotarizations == 7) goto end; //break; } } - if (seenOwnNotarisations >= 1) { - BOOST_FOREACH(Notarisation& nota, notarisations) { + if (seenOwnNotarizations >= 1) { + BOOST_FOREACH(Notarization& nota, notarisations) { if (GetSymbolAuthority(nota.second.symbol) == authority) if (nota.second.ccId == targetCCid) { tmp_moms.insert(nota.second.MoM); @@ -104,7 +104,7 @@ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int kmdHeigh } // Not enough own notarisations found to return determinate MoMoM - destNotarisationTxid = uint256(); + destNotarizationTxid = uint256(); moms.clear(); return uint256(); @@ -112,7 +112,7 @@ end: // add set to vector. Set makes sure there are no dupes included. moms.clear(); std::copy(tmp_moms.begin(), tmp_moms.end(), std::back_inserter(moms)); - //fprintf(stderr, "SeenOwnNotarisations.%i moms.size.%li blocks scanned.%i\n",seenOwnNotarisations, moms.size(), i); + //fprintf(stderr, "SeenOwnNotarizations.%i moms.size.%li blocks scanned.%i\n",seenOwnNotarizations, moms.size(), i); return GetMerkleRoot(moms); } @@ -123,15 +123,15 @@ end: * Will scan notarisations leveldb up to a limit */ template -int ScanNotarisationsFromHeight(int nHeight, const IsTarget f, Notarisation &found) +int ScanNotarizationsFromHeight(int nHeight, const IsTarget f, Notarization &found) { int limit = std::min(nHeight + NOTARISATION_SCAN_LIMIT_BLOCKS, chainActive.Height()); int start = std::max(nHeight, 1); for (int h=start; hphashBlock, notarisations)) + if (!GetBlockNotarizations(*chainActive[h]->phashBlock, notarisations)) continue; BOOST_FOREACH(found, notarisations) { @@ -160,11 +160,11 @@ TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_ // Get a kmd height for given notarisation Txid int kmdHeight; { - CTransaction sourceNotarisation; + CTransaction sourceNotarization; uint256 hashBlock; CBlockIndex blockIdx; - if (!eval->GetTxConfirmed(assetChainProof.first, sourceNotarisation, blockIdx)) - throw std::runtime_error("Notarisation not found"); + if (!eval->GetTxConfirmed(assetChainProof.first, sourceNotarization, blockIdx)) + throw std::runtime_error("Notarization not found"); kmdHeight = blockIdx.GetHeight(); } @@ -174,11 +174,11 @@ TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_ // a notarisation from B, and it might not include our notarisation from A // at all. So, the thing we need to do is scan forwards to find the notarisation for B, // that is inclusive of A. - Notarisation nota; - auto isTarget = [&](Notarisation ¬a) { + Notarization nota; + auto isTarget = [&](Notarization ¬a) { return strcmp(nota.second.symbol, targetSymbol) == 0; }; - kmdHeight = ScanNotarisationsFromHeight(kmdHeight, isTarget, nota); + kmdHeight = ScanNotarizationsFromHeight(kmdHeight, isTarget, nota); if (!kmdHeight) throw std::runtime_error("Cannot find notarisation for target inclusive of source"); @@ -187,8 +187,8 @@ TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_ // Get MoMs for kmd height and symbol std::vector moms; - uint256 targetChainNotarisationTxid; - uint256 MoMoM = CalculateProofRoot(targetSymbol, targetCCid, kmdHeight, moms, targetChainNotarisationTxid); + uint256 targetChainNotarizationTxid; + uint256 MoMoM = CalculateProofRoot(targetSymbol, targetCCid, kmdHeight, moms, targetChainNotarizationTxid); if (MoMoM.IsNull()) throw std::runtime_error("No MoMs found"); @@ -222,7 +222,7 @@ cont: if (newBranch.Exec(txid) != MoMoM) throw std::runtime_error("Proof check failed"); - return std::make_pair(targetChainNotarisationTxid,newBranch); + return std::make_pair(targetChainNotarizationTxid,newBranch); } @@ -251,21 +251,21 @@ void CompleteImportTransaction(CTransaction &importTx, int32_t offset) importTx = MakeImportCoinTransaction(newProof, burnTx, payouts); } -bool IsSameAssetChain(const Notarisation ¬a) { +bool IsSameAssetChain(const Notarization ¬a) { return strcmp(nota.second.symbol, SMART_CHAIN_SYMBOL) == 0; }; /* On assetchain */ -bool GetNextBacknotarisation(uint256 kmdNotarisationTxid, Notarisation &out) +bool GetNextBacknotarisation(uint256 kmdNotarizationTxid, Notarization &out) { /* * Here we are given a txid, and a proof. * We go from the KMD notarisation txid to the backnotarisation, * then jump to the next backnotarisation, which contains the corresponding MoMoM. */ - Notarisation bn; - if (!GetBackNotarisation(kmdNotarisationTxid, bn)) + Notarization bn; + if (!GetBackNotarization(kmdNotarizationTxid, bn)) return false; // Need to get block height of that backnotarisation @@ -277,11 +277,11 @@ bool GetNextBacknotarisation(uint256 kmdNotarisationTxid, Notarisation &out) return false; } - return (bool) ScanNotarisationsFromHeight(block.GetHeight()+1, &IsSameAssetChain, out); + return (bool) ScanNotarizationsFromHeight(block.GetHeight()+1, &IsSameAssetChain, out); } -bool CheckMoMoM(uint256 kmdNotarisationHash, uint256 momom) +bool CheckMoMoM(uint256 kmdNotarizationHash, uint256 momom) { /* * Given a notarisation hash and an MoMoM. Backnotarisations may arrive out of order @@ -290,8 +290,8 @@ bool CheckMoMoM(uint256 kmdNotarisationHash, uint256 momom) * This is a sledgehammer approach... */ - Notarisation bn; - if (!GetBackNotarisation(kmdNotarisationHash, bn)) + Notarization bn; + if (!GetBackNotarization(kmdNotarizationHash, bn)) return false; // Need to get block height of that backnotarisation @@ -303,12 +303,12 @@ bool CheckMoMoM(uint256 kmdNotarisationHash, uint256 momom) return false; } - Notarisation nota; - auto checkMoMoM = [&](Notarisation ¬a) { + Notarization nota; + auto checkMoMoM = [&](Notarization ¬a) { return nota.second.MoMoM == momom; }; - return (bool) ScanNotarisationsFromHeight(block.GetHeight()-100, checkMoMoM, nota); + return (bool) ScanNotarizationsFromHeight(block.GetHeight()-100, checkMoMoM, nota); } @@ -428,7 +428,7 @@ TxProof GetAssetchainProof(uint256 hash,CTransaction burnTx) { int nIndex; CBlockIndex* blockIndex; - Notarisation nota; + Notarization nota; std::vector branch; { uint256 blockHash; @@ -444,11 +444,11 @@ TxProof GetAssetchainProof(uint256 hash,CTransaction burnTx) // The assumption here is that the first notarisation for a height GTE than // the transaction block height will contain the corresponding MoM. If there // are sequence issues with the notarisations this may fail. - auto isTarget = [&](Notarisation ¬a) { + auto isTarget = [&](Notarization ¬a) { if (!IsSameAssetChain(nota)) return false; return nota.second.height >= blockIndex->GetHeight(); }; - if (!ScanNotarisationsFromHeight(blockIndex->GetHeight(), isTarget, nota)) + if (!ScanNotarizationsFromHeight(blockIndex->GetHeight(), isTarget, nota)) throw std::runtime_error("backnotarisation not yet confirmed"); // index of block in MoM leaves diff --git a/src/crosschain.h b/src/crosschain.h index ef4c26101..10a7c1d45 100644 --- a/src/crosschain.h +++ b/src/crosschain.h @@ -36,13 +36,13 @@ TxProof GetAssetchainProof(uint256 hash,CTransaction burnTx); /* On HUSH */ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int kmdHeight, - std::vector &moms, uint256 &destNotarisationTxid); + std::vector &moms, uint256 &destNotarizationTxid); TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_t targetCCid, const TxProof assetChainProof,int32_t offset); void CompleteImportTransaction(CTransaction &importTx,int32_t offset); /* On assetchain */ -bool CheckMoMoM(uint256 kmdNotarisationHash, uint256 momom); +bool CheckMoMoM(uint256 kmdNotarizationHash, uint256 momom); bool CheckNotariesApproval(uint256 burntxid, const std::vector & notaryTxids); #endif /* CROSSCHAIN_H */ diff --git a/src/hush.h b/src/hush.h index c212ab120..076ed2705 100644 --- a/src/hush.h +++ b/src/hush.h @@ -15,17 +15,15 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - -#ifndef H_KOMODO_H -#define H_KOMODO_H +#ifndef H_HUSH_H +#define H_HUSH_H #include "hush_defs.h" #ifdef _WIN32 #define printf(...) #endif -// Todo: verify: reorgs - +// Todo: verify: reorgs, lollerskates #define HUSH_SMART_CHAINS_WAITNOTARIZE #define KOMODO_PAXMAX (10000 * COIN) extern int32_t NOTARIZED_HEIGHT; @@ -59,7 +57,7 @@ int32_t komodo_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char * #include "komodo_events.h" #include "komodo_ccdata.h" -void komodo_currentheight_set(int32_t height) +void hush_currentheight_set(int32_t height) { char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; if ( (sp= hush_stateptr(symbol,dest)) != 0 ) @@ -525,11 +523,11 @@ int32_t komodo_validate_chain(uint256 srchash,int32_t notarized_height) else if ( notarized_height > 101 ) rewindtarget = notarized_height - 101; else rewindtarget = 0; - if ( rewindtarget != 0 && rewindtarget > KOMODO_REWIND && rewindtarget > last_rewind ) + if ( rewindtarget != 0 && rewindtarget > HUSH_REWIND && rewindtarget > last_rewind ) { if ( last_rewind != 0 ) { - //KOMODO_REWIND = rewindtarget; + //HUSH_REWIND = rewindtarget; fprintf(stderr,"%s FORK detected. notarized.%d %s not in this chain! last notarization %d -> rewindtarget.%d\n",SMART_CHAIN_SYMBOL,notarized_height,srchash.ToString().c_str(),sp->NOTARIZED_HEIGHT,rewindtarget); } last_rewind = rewindtarget; @@ -848,7 +846,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) hush_stateupdate(pindex->GetHeight(),0,0,0,zero,0,0,0,0,-pindex->GetHeight(),pindex->nTime,0,0,0,0,zero,0); } } - komodo_currentheight_set(chainActive.LastTip()->GetHeight()); + hush_currentheight_set(chainActive.LastTip()->GetHeight()); int transaction = 0; if ( pindex != 0 ) { diff --git a/src/hush_defs.h b/src/hush_defs.h index 6c846e73d..ffad3fbc0 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -513,7 +513,7 @@ extern std::vector ASSETCHAINS_PRICES,ASSETCHAINS_STOCKS; extern uint256 KOMODO_EARLYTXID; -extern int32_t KOMODO_CONNECTING,KOMODO_CCACTIVATE,KOMODO_DEALERNODE; +extern int32_t HUSH_CONNECTING,KOMODO_CCACTIVATE,KOMODO_DEALERNODE; extern uint32_t ASSETCHAINS_CC; extern std::string CCerror,ASSETCHAINS_CCLIB; extern uint8_t ASSETCHAINS_CCDISABLES[256]; diff --git a/src/hush_globals.h b/src/hush_globals.h index 5bb8398dc..10e56cf2a 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -17,7 +17,6 @@ ******************************************************************************/ #include "hush_defs.h" - void komodo_prefetch(FILE *fp); uint32_t komodo_heightstamp(int32_t height); void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t kheight,uint32_t ktime,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout,uint256 MoM,int32_t MoMdepth); @@ -33,7 +32,6 @@ int32_t hush_longestchain(); uint64_t komodo_maxallowed(int32_t baseid); int32_t komodo_bannedset(int32_t *indallvoutsp,uint256 *array,int32_t max); int32_t komodo_checkvout(int32_t vout,int32_t k,int32_t indallvouts); - pthread_mutex_t komodo_mutex,staked_mutex; #define KOMODO_ELECTION_GAP 2000 //((SMART_CHAIN_SYMBOL[0] == 0) ? 2000 : 100) @@ -42,7 +40,6 @@ pthread_mutex_t komodo_mutex,staked_mutex; struct pax_transaction *PAX; int32_t NUM_PRICES; uint32_t *PVALS; struct knotaries_entry *Pubkeys; - struct hush_state KOMODO_STATES[34]; #define _COINBASE_MATURITY 100 @@ -50,7 +47,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100; unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 KOMODO_EARLYTXID; -int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,KOMODO_REWIND,STAKED_ERA,KOMODO_CONNECTING = -1,KOMODO_DEALERNODE,KOMODO_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; +int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; @@ -62,7 +59,7 @@ char NOTARY_ADDRESSES[NUM_HUSH_SEASONS][64][64]; char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN],ASSETCHAINS_USERPASS[4096]; uint16_t ASSETCHAINS_P2PPORT,ASSETCHAINS_RPCPORT,ASSETCHAINS_BEAMPORT,ASSETCHAINS_CODAPORT; -uint32_t ASSETCHAIN_INIT,ASSETCHAINS_CC,KOMODO_STOPAT,KOMODO_DPOWCONFS = 1,STAKING_MIN_DIFF; +uint32_t ASSETCHAIN_INIT,ASSETCHAINS_CC,KOMODO_STOPAT,HUSH_DPOWCONFS = 1,STAKING_MIN_DIFF; uint32_t ASSETCHAINS_MAGIC = 2387029918; int64_t ASSETCHAINS_GENESISTXVAL = 5000000000; @@ -101,7 +98,7 @@ uint64_t ASSETCHAINS_COMMISSION,ASSETCHAINS_SUPPLY = 10,ASSETCHAINS_FOUNDERS_REW uint32_t HUSH_INITDONE; char KMDUSERPASS[8192+512+1],BTCUSERPASS[8192]; uint16_t KMD_PORT = 7771,BITCOIND_RPCPORT = 7771; uint64_t PENDING_KOMODO_TX; -extern int32_t KOMODO_LOADINGBLOCKS; +extern int32_t HUSH_LOADINGBLOCKS; unsigned int MAX_BLOCK_SIGOPS = 20000; int32_t HUSH_TESTNODE, KOMODO_SNAPSHOT_INTERVAL; CScript KOMODO_EARLYTXID_SCRIPTPUB; @@ -131,7 +128,7 @@ int32_t komodo_baseid(char *origbase) #ifndef SATOSHIDEN #define SATOSHIDEN ((uint64_t)100000000L) #endif -uint64_t komodo_current_supply(uint32_t nHeight) +uint64_t hush_current_supply(uint32_t nHeight) { uint64_t cur_money; int32_t baseid; @@ -255,9 +252,7 @@ uint64_t komodo_current_supply(uint32_t nHeight) // add more for the base rectangle if lowest subsidy is not 0 cur_money += lowestSubsidy * (curEnd - lastEnd); - } - else - { + } else { for ( int k = lastEnd; k < curEnd; k += period ) { cur_money += period * reward; @@ -272,8 +267,7 @@ uint64_t komodo_current_supply(uint32_t nHeight) } if ( KOMODO_BIT63SET(cur_money) != 0 ) return(KOMODO_MAXNVALUE); - if ( ASSETCHAINS_COMMISSION != 0 ) - { + if ( ASSETCHAINS_COMMISSION != 0 ) { uint64_t newval = (cur_money + (cur_money/COIN * ASSETCHAINS_COMMISSION)); if ( KOMODO_BIT63SET(newval) != 0 ) return(KOMODO_MAXNVALUE); diff --git a/src/hush_notary.h b/src/hush_notary.h index bb8db7094..a87a0de9b 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -317,7 +317,7 @@ int32_t hush_dpowconfs(int32_t txheight,int32_t numconfs) { static int32_t hadnotarization; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; - if ( KOMODO_DPOWCONFS != 0 && txheight > 0 && numconfs > 0 && (sp= hush_stateptr(symbol,dest)) != 0 ) + if ( HUSH_DPOWCONFS != 0 && txheight > 0 && numconfs > 0 && (sp= hush_stateptr(symbol,dest)) != 0 ) { if ( sp->NOTARIZED_HEIGHT > 0 ) { diff --git a/src/hush_utils.h b/src/hush_utils.h index c4e5fabf1..622a99c0d 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1541,7 +1541,7 @@ char *argv0names[] = { // Large total supplies lead to numerical errors, beware! uint64_t hush_max_money() { - return komodo_current_supply(10000000); + return hush_current_supply(10000000); } @@ -1859,9 +1859,9 @@ void hush_args(char *argv0) i++; } - if ( (KOMODO_REWIND= GetArg("-rewind",0)) != 0 ) + if ( (HUSH_REWIND= GetArg("-rewind",0)) != 0 ) { - printf("KOMODO_REWIND %d\n",KOMODO_REWIND); + printf("HUSH_REWIND %d\n",HUSH_REWIND); } KOMODO_EARLYTXID = Parseuint256(GetArg("-earlytxid","0").c_str()); ASSETCHAINS_EARLYTXIDCONTRACT = GetArg("-ac_earlytxidcontract",0); @@ -2433,7 +2433,7 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); break; } } - int32_t dpowconfs = KOMODO_DPOWCONFS; + int32_t dpowconfs = HUSH_DPOWCONFS; if ( SMART_CHAIN_SYMBOL[0] != 0 ) { BITCOIND_RPCPORT = GetArg("-rpcport", ASSETCHAINS_RPCPORT); @@ -2502,9 +2502,9 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); CCENABLE(EVAL_ORACLES); } } else BITCOIND_RPCPORT = GetArg("-rpcport", BaseParams().RPCPort()); - KOMODO_DPOWCONFS = GetArg("-dpowconfs",dpowconfs); + HUSH_DPOWCONFS = GetArg("-dpowconfs",dpowconfs); if ( SMART_CHAIN_SYMBOL[0] == 0 || strcmp(SMART_CHAIN_SYMBOL,"SUPERNET") == 0 || strcmp(SMART_CHAIN_SYMBOL,"DEX") == 0 || strcmp(SMART_CHAIN_SYMBOL,"COQUI") == 0 || strcmp(SMART_CHAIN_SYMBOL,"PIRATE") == 0 || strcmp(SMART_CHAIN_SYMBOL,"KMDICE") == 0 ) - KOMODO_EXTRASATOSHI = 1; + HUSH_EXTRASATOSHI = 1; } void komodo_nameset(char *symbol,char *dest,char *source) diff --git a/src/init.cpp b/src/init.cpp index 2b660bf2f..5c5f76863 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -90,7 +90,7 @@ using namespace std; #include "hush_defs.h" extern void ThreadSendAlert(); extern bool komodo_dailysnapshot(int32_t height); -extern int32_t KOMODO_LOADINGBLOCKS; +extern int32_t HUSH_LOADINGBLOCKS; extern char SMART_CHAIN_SYMBOL[]; extern int32_t KOMODO_SNAPSHOT_INTERVAL; extern void komodo_init(int32_t height); @@ -693,7 +693,7 @@ void ThreadImport(std::vector vImportFiles) LogPrintf("Reindexing finished\n"); // To avoid ending up in a situation without genesis block, re-try initializing (no-op if reindexing worked): InitBlockIndex(); - KOMODO_LOADINGBLOCKS = 0; + HUSH_LOADINGBLOCKS = 0; } // hardcoded $DATADIR/bootstrap.dat @@ -943,7 +943,7 @@ bool AppInitServers(boost::thread_group& threadGroup) /** Initialize Hush. * @pre Parameters should be parsed and config file should be read. */ -extern int32_t KOMODO_REWIND; +extern int32_t HUSH_REWIND; bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) { @@ -1792,7 +1792,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) strLoadError = _("Error initializing block database"); break; } - KOMODO_LOADINGBLOCKS = 0; + HUSH_LOADINGBLOCKS = 0; // Check for changed -txindex state if (fTxIndex != GetBoolArg("-txindex", true)) { strLoadError = _("You need to rebuild the database using -reindex to change -txindex"); @@ -1834,7 +1834,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) LogPrintf("Prune: pruned datadir may not have more than %d blocks; -checkblocks=%d may fail\n", MIN_BLOCKS_TO_KEEP, GetArg("-checkblocks", 288)); } - if ( KOMODO_REWIND == 0 ) + if ( HUSH_REWIND == 0 ) { LogPrintf("Verifying block DB..."); if (!CVerifyDB().VerifyDB(pcoinsdbview, GetArg("-checklevel", 3), GetArg("-checkblocks", 288))) { @@ -1870,7 +1870,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) } } } - KOMODO_LOADINGBLOCKS = 0; + HUSH_LOADINGBLOCKS = 0; // As LoadBlockIndex can take several minutes, it's possible the user // requested to kill the GUI during the last operation. If so, exit. @@ -2145,7 +2145,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) uiInterface.NotifyBlockTip.connect(BlockNotifyCallback); if (mapArgs.count("-txexpirynotify")) uiInterface.NotifyTxExpiration.connect(TxExpiryNotifyCallback); - if ( KOMODO_REWIND >= 0 ) + if ( HUSH_REWIND >= 0 ) { uiInterface.InitMessage(_("Activating best chain...")); // scan for better chains in the block chain database, that are not yet connected in the active best chain @@ -2153,7 +2153,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) if ( !ActivateBestChain(true,state)) strErrors << "Failed to connect best block"; } else { - fprintf(stderr,"KOMODO_REWIND < 0\n"); + fprintf(stderr,"HUSH_REWIND < 0\n"); } std::vector vImportFiles; if (mapArgs.count("-loadblock")) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index e4f1046a3..2a789f05e 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -754,7 +754,7 @@ int32_t komodo_is_notarytx(const CTransaction& tx) return(0); } -int32_t komodo_block2height(CBlock *block) +int32_t hush_block2height(CBlock *block) { static uint32_t match,mismatch; int32_t i,n,height2=-1,height = 0; uint8_t *ptr; CBlockIndex *pindex = NULL; @@ -796,7 +796,7 @@ int32_t komodo_block2height(CBlock *block) int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block) { int32_t n; - if ( KOMODO_LOADINGBLOCKS == 0 ) + if ( HUSH_LOADINGBLOCKS == 0 ) memset(pubkey33,0xff,33); else memset(pubkey33,0,33); if ( block->vtx[0].vout.size() > 0 ) @@ -872,7 +872,7 @@ uint32_t komodo_heightstamp(int32_t height) if ( pindex->didinit == 0 ) { pindex->notaryid = -1; - if ( KOMODO_LOADINGBLOCKS == 0 ) + if ( HUSH_LOADINGBLOCKS == 0 ) memset(pindex->pubkey33,0xff,33); else memset(pindex->pubkey33,0,33); if ( komodo_blockload(block,pindex) == 0 ) @@ -882,7 +882,7 @@ uint32_t komodo_heightstamp(int32_t height) // fprintf(stderr,"%02x",pindex->pubkey33[i]); //fprintf(stderr," set pubkey at height %d/%d\n",pindex->GetHeight(),height); //if ( pindex->pubkey33[0] == 2 || pindex->pubkey33[0] == 3 ) - // pindex->didinit = (KOMODO_LOADINGBLOCKS == 0); + // pindex->didinit = (HUSH_LOADINGBLOCKS == 0); } // else fprintf(stderr,"error loading block at %d/%d",pindex->GetHeight(),height); } if ( pindex->didinit != 0 && pindex->GetHeight() >= 0 && (num= hush_notaries(pubkeys,(int32_t)pindex->GetHeight(),(uint32_t)pindex->nTime)) > 0 ) @@ -1203,7 +1203,7 @@ int32_t komodo_isrealtime(int32_t *kmdheightp) int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t cmptime,int32_t dispflag) { dispflag = 1; - if ( KOMODO_REWIND == 0 && SMART_CHAIN_SYMBOL[0] == 0 && (int64_t)tx.nLockTime >= LOCKTIME_THRESHOLD ) //1473793441 ) + if ( HUSH_REWIND == 0 && SMART_CHAIN_SYMBOL[0] == 0 && (int64_t)tx.nLockTime >= LOCKTIME_THRESHOLD ) //1473793441 ) { if ( txheight > 246748 ) { @@ -1838,7 +1838,7 @@ int32_t komodo_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *sc return(notarizedheight); } -uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &NotarisationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len) +uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &NotarizationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len) { // fetch notary pubkey array. uint64_t total = 0, AmountToPay = 0; @@ -1855,16 +1855,16 @@ uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &Notar return(0); // resize coinbase vouts to number of notary nodes +1 for coinbase itself. - txNew.vout.resize(NotarisationNotaries.size()+1); + txNew.vout.resize(NotarizationNotaries.size()+1); // Calcualte the amount to pay according to the current era. - AmountToPay = komodo_notarypayamount(height,NotarisationNotaries.size()); + AmountToPay = komodo_notarypayamount(height,NotarizationNotaries.size()); if ( AmountToPay == 0 ) return(0); // loop over notarisation vins and add transaction to coinbase. // Commented prints here can be used to verify manually the pubkeys match. - for (int8_t n = 0; n < NotarisationNotaries.size(); n++) + for (int8_t n = 0; n < NotarizationNotaries.size(); n++) { uint8_t *ptr; txNew.vout[n+1].scriptPubKey.resize(35); @@ -1872,18 +1872,18 @@ uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &Notar ptr[0] = 33; for (int8_t i=0; i<33; i++) { - ptr[i+1] = notarypubkeys[NotarisationNotaries[n]][i]; + ptr[i+1] = notarypubkeys[NotarizationNotaries[n]][i]; //fprintf(stderr,"%02x",ptr[i+1]); } ptr[34] = OP_CHECKSIG; - //fprintf(stderr," set notary %i PUBKEY33 into vout[%i] amount.%lu\n",NotarisationNotaries[n],n+1,AmountToPay); + //fprintf(stderr," set notary %i PUBKEY33 into vout[%i] amount.%lu\n",NotarizationNotaries[n],n+1,AmountToPay); txNew.vout[n+1].nValue = AmountToPay; total += txNew.vout[n+1].nValue; } return(total); } -bool GetNotarisationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const std::vector &vin, std::vector &NotarisationNotaries) +bool GetNotarizationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const std::vector &vin, std::vector &NotarizationNotaries) { uint8_t *script; int32_t scriptlen; if ( notarypubkeys[0][0] == 0 ) @@ -1898,7 +1898,7 @@ bool GetNotarisationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const script = (uint8_t *)&tx1.vout[txin.prevout.n].scriptPubKey[0]; scriptlen = (int32_t)tx1.vout[txin.prevout.n].scriptPubKey.size(); if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[i],33) == 0 ) - NotarisationNotaries.push_back(i); + NotarizationNotaries.push_back(i); } } else return false; } @@ -1907,16 +1907,16 @@ bool GetNotarisationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const uint64_t komodo_checknotarypay(CBlock *pblock,int32_t height) { - std::vector NotarisationNotaries; uint8_t *script; int32_t scriptlen; + std::vector NotarizationNotaries; uint8_t *script; int32_t scriptlen; uint64_t timestamp = pblock->nTime; int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; numSN = hush_notaries(notarypubkeys, height, timestamp); - if ( !GetNotarisationNotaries(notarypubkeys, numSN, pblock->vtx[1].vin, NotarisationNotaries) ) + if ( !GetNotarizationNotaries(notarypubkeys, numSN, pblock->vtx[1].vin, NotarizationNotaries) ) return(0); // check a notary didnt sign twice (this would be an invalid notarisation later on and cause problems) - std::set checkdupes( NotarisationNotaries.begin(), NotarisationNotaries.end() ); - if ( checkdupes.size() != NotarisationNotaries.size() ) { + std::set checkdupes( NotarizationNotaries.begin(), NotarizationNotaries.end() ); + if ( checkdupes.size() != NotarizationNotaries.size() ) { fprintf(stderr, "Possible notarisation is signed multiple times by same notary. It is invalid.\n"); return(0); } @@ -1933,7 +1933,7 @@ uint64_t komodo_checknotarypay(CBlock *pblock,int32_t height) { // Create the coinbase tx again, using the extracted data, this is the same function the miner uses, with the same data. // This allows us to know exactly that the coinbase is correct. - totalsats = komodo_notarypay(txNew, NotarisationNotaries, pblock->nTime, height, script, scriptlen); + totalsats = komodo_notarypay(txNew, NotarizationNotaries, pblock->nTime, height, script, scriptlen); } else { @@ -1968,20 +1968,20 @@ uint64_t komodo_checknotarypay(CBlock *pblock,int32_t height) // Check the pubkeys match the pubkeys in the notarisation. script = (uint8_t *)&txout.scriptPubKey[0]; scriptlen = (int32_t)txout.scriptPubKey.size(); - if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[NotarisationNotaries[n-1]],33) == 0 ) + if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[NotarizationNotaries[n-1]],33) == 0 ) { // check the value is correct if ( pblock->vtx[0].vout[n].nValue == AmountToPay ) { matches++; total += txout.nValue; - //fprintf(stderr, "MATCHED AmountPaid.%lu notaryid.%i\n",AmountToPay,NotarisationNotaries[n-1]); + //fprintf(stderr, "MATCHED AmountPaid.%lu notaryid.%i\n",AmountToPay,NotarizationNotaries[n-1]); } - else fprintf(stderr, "NOT MATCHED AmountPaid.%llu AmountToPay.%llu notaryid.%i\n", (long long)pblock->vtx[0].vout[n].nValue, (long long)AmountToPay, NotarisationNotaries[n-1]); + else fprintf(stderr, "NOT MATCHED AmountPaid.%llu AmountToPay.%llu notaryid.%i\n", (long long)pblock->vtx[0].vout[n].nValue, (long long)AmountToPay, NotarizationNotaries[n-1]); } n++; } - if ( matches != 0 && matches == NotarisationNotaries.size() && totalsats == total ) + if ( matches != 0 && matches == NotarizationNotaries.size() && totalsats == total ) { //fprintf(stderr, "Validated coinbase matches notarisation in tx position 1.\n" ); return(totalsats); diff --git a/src/komodo_events.h b/src/komodo_events.h index 070aa407d..4e11de718 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -13,8 +16,8 @@ * * ******************************************************************************/ -#ifndef H_KOMODOEVENTS_H -#define H_KOMODOEVENTS_H +#ifndef H_HUSHEVENTS_H +#define H_HUSHEVENTS_H #include "hush_defs.h" struct komodo_event *komodo_eventadd(struct hush_state *sp,int32_t height,char *symbol,uint8_t type,uint8_t *data,uint16_t datalen) @@ -169,16 +172,13 @@ void komodo_setkmdheight(struct hush_state *sp,int32_t kmdheight,uint32_t timest void komodo_eventadd_kmdheight(struct hush_state *sp,char *symbol,int32_t height,int32_t kmdheight,uint32_t timestamp) { uint32_t buf[2]; - if ( kmdheight > 0 ) - { + if ( kmdheight > 0 ) { buf[0] = (uint32_t)kmdheight; buf[1] = timestamp; komodo_eventadd(sp,height,symbol,KOMODO_EVENT_KMDHEIGHT,(uint8_t *)buf,sizeof(buf)); if ( sp != 0 ) komodo_setkmdheight(sp,kmdheight,timestamp); - } - else - { + } else { //fprintf(stderr,"REWIND kmdheight.%d\n",kmdheight); kmdheight = -kmdheight; komodo_eventadd(sp,height,symbol,KOMODO_EVENT_REWIND,(uint8_t *)&height,sizeof(height)); @@ -188,31 +188,4 @@ void komodo_eventadd_kmdheight(struct hush_state *sp,char *symbol,int32_t height } -/*void komodo_eventadd_deposit(int32_t actionflag,char *symbol,int32_t height,uint64_t komodoshis,char *fiat,uint64_t fiatoshis,uint8_t rmd160[20],bits256 kmdtxid,uint16_t kmdvout,uint64_t price) - { - uint8_t opret[512]; uint16_t opretlen; - komodo_eventadd_opreturn(symbol,height,KOMODO_OPRETURN_DEPOSIT,kmdtxid,komodoshis,kmdvout,opret,opretlen); - } - - void komodo_eventadd_issued(int32_t actionflag,char *symbol,int32_t height,int32_t fiatheight,bits256 fiattxid,uint16_t fiatvout,bits256 kmdtxid,uint16_t kmdvout,uint64_t fiatoshis) - { - uint8_t opret[512]; uint16_t opretlen; - komodo_eventadd_opreturn(symbol,height,KOMODO_OPRETURN_ISSUED,fiattxid,fiatoshis,fiatvout,opret,opretlen); - } - - void komodo_eventadd_withdraw(int32_t actionflag,char *symbol,int32_t height,uint64_t komodoshis,char *fiat,uint64_t fiatoshis,uint8_t rmd160[20],bits256 fiattxid,int32_t fiatvout,uint64_t price) - { - uint8_t opret[512]; uint16_t opretlen; - komodo_eventadd_opreturn(symbol,height,KOMODO_OPRETURN_WITHDRAW,fiattxid,fiatoshis,fiatvout,opret,opretlen); - } - - void komodo_eventadd_redeemed(int32_t actionflag,char *symbol,int32_t height,bits256 kmdtxid,uint16_t kmdvout,int32_t fiatheight,bits256 fiattxid,uint16_t fiatvout,uint64_t komodoshis) - { - uint8_t opret[512]; uint16_t opretlen; - komodo_eventadd_opreturn(symbol,height,KOMODO_OPRETURN_REDEEMED,kmdtxid,komodoshis,kmdvout,opret,opretlen); - }*/ - -// process events -// - #endif diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index e1a274171..86d9a2eb6 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -36,12 +36,12 @@ struct NSPV_ntzargs int32_t NSPV_notarization_find(struct NSPV_ntzargs *args,int32_t height,int32_t dir) { - int32_t ntzheight = 0; uint256 hashBlock; CTransaction tx; Notarisation nota; char *symbol; std::vector opret; + int32_t ntzheight = 0; uint256 hashBlock; CTransaction tx; Notarization nota; char *symbol; std::vector opret; symbol = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"KMD" : SMART_CHAIN_SYMBOL; memset(args,0,sizeof(*args)); if ( dir > 0 ) height += 10; - if ( (args->txidht= ScanNotarisationsDB(height,symbol,1440,nota)) == 0 ) + if ( (args->txidht= ScanNotarizationsDB(height,symbol,1440,nota)) == 0 ) return(-1); args->txid = nota.first; if ( !GetTransaction(args->txid,tx,hashBlock,false) || tx.vout.size() < 2 ) diff --git a/src/main.cpp b/src/main.cpp index 666127761..d68eaadd5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -65,24 +65,22 @@ using namespace std; # error "Hush cannot be compiled without assertions, lulz" #endif +// which fork? lulzzzzzzz #include "librustzcash.h" -/** - * Global state - */ +// Global state #define TMPFILE_START 100000000 CCriticalSection cs_main; extern uint8_t NOTARY_PUBKEY33[33]; -extern int32_t KOMODO_LOADINGBLOCKS,HUSH_LONGESTCHAIN,HUSH_INSYNC,KOMODO_CONNECTING,KOMODO_EXTRASATOSHI; -int32_t KOMODO_NEWBLOCKS; +extern int32_t HUSH_LOADINGBLOCKS,HUSH_LONGESTCHAIN,HUSH_INSYNC,HUSH_CONNECTING,HUSH_EXTRASATOSHI; +int32_t HUSH_NEWBLOCKS; int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block); //void komodo_broadcast(CBlock *pblock,int32_t limit); bool Getscriptaddress(char *destaddr,const CScript &scriptPubKey); void hush_setactivation(int32_t height); void hush_changeblocktime(); void komodo_pricesupdate(int32_t height,CBlock *pblock); - BlockMap mapBlockIndex; CChain chainActive; CBlockIndex *pindexBestHeader = NULL; @@ -679,9 +677,9 @@ bool komodo_dailysnapshot(int32_t height) { // we are on chain init, and need to scan all the way back to the correct height, other wise our node will have a diffrent snapshot to online nodes. // use the notarizationsDB to scan back from the consesnus height to get the offset we need. - std::string symbol; Notarisation nota; + std::string symbol; Notarization nota; symbol.assign(SMART_CHAIN_SYMBOL); - if ( ScanNotarisationsDB(height-extraoffset, symbol, 100, nota) == 0 ) + if ( ScanNotarizationsDB(height-extraoffset, symbol, 100, nota) == 0 ) undo_height = height-extraoffset-reorglimit; else undo_height = nota.second.height; //fprintf(stderr, "height.%i-extraoffset.%i = startscanfrom.%i to get undo_height.%i\n", height, extraoffset, height-extraoffset, undo_height); @@ -2009,20 +2007,20 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa // invalid blocks, however allowing such transactions into the mempool // can be exploited as a DoS attack. // XXX: is this neccesary for CryptoConditions? - if ( KOMODO_CONNECTING <= 0 && chainActive.LastTip() != 0 ) + if ( HUSH_CONNECTING <= 0 && chainActive.LastTip() != 0 ) { flag = 1; - KOMODO_CONNECTING = (1<<30) + (int32_t)chainActive.LastTip()->GetHeight() + 1; + HUSH_CONNECTING = (1<<30) + (int32_t)chainActive.LastTip()->GetHeight() + 1; } if (!ContextualCheckInputs(tx, state, view, true, MANDATORY_SCRIPT_VERIFY_FLAGS, true, txdata, Params().GetConsensus(), consensusBranchId)) { if ( flag != 0 ) - KOMODO_CONNECTING = -1; + HUSH_CONNECTING = -1; return error("AcceptToMemoryPool: BUG! PLEASE REPORT THIS! ConnectInputs failed against MANDATORY but not STANDARD flags %s", hash.ToString()); } if ( flag != 0 ) - KOMODO_CONNECTING = -1; + HUSH_CONNECTING = -1; { LOCK(pool.cs); @@ -2908,11 +2906,11 @@ static bool ApplyTxInUndo(const CTxInUndo& undo, CCoinsViewCache& view, const CO void ConnectNotarizations(const CBlock &block, int height) { - NotarisationsInBlock notarisations = ScanBlockNotarizations(block, height); + NotarizationsInBlock notarisations = ScanBlockNotarizations(block, height); if (notarisations.size() > 0) { CDBBatch batch = CDBBatch(*pnotarizations); batch.Write(block.GetHash(), notarisations); - WriteBackNotarisations(notarisations, batch); + WriteBackNotarizations(notarisations, batch); pnotarizations->WriteBatch(batch, true); LogPrintf("ConnectBlock: wrote %i block notarizations in block: %s\n", notarisations.size(), block.GetHash().GetHex().data()); @@ -2921,11 +2919,11 @@ void ConnectNotarizations(const CBlock &block, int height) void DisconnectNotarizations(const CBlock &block) { - NotarisationsInBlock nibs; - if (GetBlockNotarisations(block.GetHash(), nibs)) { + NotarizationsInBlock nibs; + if (GetBlockNotarizations(block.GetHash(), nibs)) { CDBBatch batch = CDBBatch(*pnotarizations); batch.Erase(block.GetHash()); - EraseBackNotarisations(nibs, batch); + EraseBackNotarizations(nibs, batch); pnotarizations->WriteBatch(batch, true); LogPrintf("DisconnectTip: deleted %i block notarizations in block: %s\n", nibs.size(), block.GetHash().GetHex().data()); @@ -3594,7 +3592,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin return state.DoS(100, error("ConnectBlock(): coinbase for block 1 pays wrong amount (actual=%d vs correct=%d)", block.vtx[0].GetValueOut(), blockReward), REJECT_INVALID, "bad-cb-amount"); } - if ( block.vtx[0].GetValueOut() > blockReward+KOMODO_EXTRASATOSHI ) + if ( block.vtx[0].GetValueOut() > blockReward+HUSH_EXTRASATOSHI ) { if ( SMART_CHAIN_SYMBOL[0] != 0 || pindex->GetHeight() >= KOMODO_NOTARIES_HEIGHT1 || block.vtx[0].vout[0].nValue > blockReward ) { @@ -3844,7 +3842,7 @@ void static UpdateTip(CBlockIndex *pindexNew) { // New best block nTimeBestReceived = GetTime(); mempool.AddTransactionsUpdated(1); - KOMODO_NEWBLOCKS++; + HUSH_NEWBLOCKS++; double progress; if ( SMART_CHAIN_SYMBOL[0] == 0 ) { progress = Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.LastTip()); @@ -4044,7 +4042,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * return AbortNode(state, "Failed to read block"); pblock = █ } - KOMODO_CONNECTING = (int32_t)pindexNew->GetHeight(); + HUSH_CONNECTING = (int32_t)pindexNew->GetHeight(); //fprintf(stderr,"%s connecting ht.%d maxsize.%d vs %d\n",SMART_CHAIN_SYMBOL,(int32_t)pindexNew->GetHeight(),MAX_BLOCK_SIZE(pindexNew->GetHeight()),(int32_t)::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); // Apply the block atomically to the chain state. @@ -4054,7 +4052,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * { CCoinsViewCache view(pcoinsTip); bool rv = ConnectBlock(*pblock, state, pindexNew, view, false, true); - KOMODO_CONNECTING = -1; + HUSH_CONNECTING = -1; GetMainSignals().BlockChecked(*pblock, state); if (!rv) { if (state.IsInvalid()) @@ -4322,11 +4320,11 @@ static bool ActivateBestChainStep(bool fSkipdpow, CValidationState &state, CBloc return false; fBlocksDisconnected = true; } - if ( KOMODO_REWIND != 0 ) + if ( HUSH_REWIND != 0 ) { CBlockIndex *tipindex; - fprintf(stderr,">>>>>>>>>>> rewind start ht.%d -> KOMODO_REWIND.%d\n",chainActive.LastTip()->GetHeight(),KOMODO_REWIND); - while ( KOMODO_REWIND > 0 && (tipindex= chainActive.LastTip()) != 0 && tipindex->GetHeight() > KOMODO_REWIND ) + fprintf(stderr,">>>>>>>>>>> rewind start ht.%d -> HUSH_REWIND.%d\n",chainActive.LastTip()->GetHeight(),HUSH_REWIND); + while ( HUSH_REWIND > 0 && (tipindex= chainActive.LastTip()) != 0 && tipindex->GetHeight() > HUSH_REWIND ) { fBlocksDisconnected = true; fprintf(stderr,"%d ",(int32_t)tipindex->GetHeight()); @@ -4334,10 +4332,10 @@ static bool ActivateBestChainStep(bool fSkipdpow, CValidationState &state, CBloc if ( !DisconnectTip(state) ) break; } - fprintf(stderr,"reached rewind.%d, best to do: ./komodo-cli -ac_name=%s stop\n",KOMODO_REWIND,SMART_CHAIN_SYMBOL); + fprintf(stderr,"reached rewind.%d, best to do: ./komodo-cli -ac_name=%s stop\n",HUSH_REWIND,SMART_CHAIN_SYMBOL); sleep(20); fprintf(stderr,"resuming normal operations\n"); - KOMODO_REWIND = 0; + HUSH_REWIND = 0; //return(true); } // Build list of new blocks to connect. @@ -5185,7 +5183,7 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C for (uint32_t i = 0; i < block.vtx.size(); i++) { const CTransaction& tx = block.vtx[i]; - if ( komodo_validate_interest(tx,height == 0 ? komodo_block2height((CBlock *)&block) : height,block.nTime,0) < 0 ) + if ( komodo_validate_interest(tx,height == 0 ? hush_block2height((CBlock *)&block) : height,block.nTime,0) < 0 ) { fprintf(stderr, "validate intrest failed for txnum.%i tx.%s\n", i, tx.ToString().c_str()); return error("CheckBlock: komodo_validate_interest failed"); @@ -5241,9 +5239,14 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta int nHeight = pindexPrev->GetHeight()+1; // Check Proof-of-Work - if ( (SMART_CHAIN_SYMBOL[0] != 0 || nHeight < 235300 || nHeight > 236000) && block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) - { - cout "Incorrect Proof-of-Work! " << block.nBits << " block.nBits vs. calc " << GetNextWorkRequired(pindexPrev, &block, consensusParams) << " for height " << nHeight << " " << block.GetHash().ToString() << " with time " << block.GetBlockTime() << endl; + if ( (SMART_CHAIN_SYMBOL[0] != 0 || nHeight < 235300 || nHeight > 236000) && block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) { + cout << "Incorrect Proof-of-Work! " << + block.nBits << " block.nBits vs. calc " << + GetNextWorkRequired(pindexPrev, &block, consensusParams) << + " for height " << nHeight << " " << + block.GetHash().ToString() << " with time " << + block.GetBlockTime() << endl; + return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); } @@ -5361,9 +5364,8 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat miSelf->second = pindex = AddToBlockIndex(block); if (ppindex) *ppindex = pindex; - if ( pindex != 0 && (pindex->nStatus & BLOCK_FAILED_MASK) != 0 ) - { - if ( ASSETCHAINS_CC == 0 )//&& (ASSETCHAINS_PRIVATE == 0 || HUSH_INSYNC >= Params().GetConsensus().vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight) ) + if ( pindex != 0 && (pindex->nStatus & BLOCK_FAILED_MASK) != 0 ) { + if ( ASSETCHAINS_CC == 0 ) { return state.Invalid(error("%s: block is marked invalid", __func__), 0, "duplicate"); } else { fprintf(stderr,"reconsider block %s\n",hash.GetHex().c_str()); @@ -5372,11 +5374,9 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat } return true; } - if (!CheckBlockHeader(futureblockp,*ppindex!=0?(*ppindex)->GetHeight():0,*ppindex, block, state,0)) - { - if ( *futureblockp == 0 ) - { - LogPrintf("AcceptBlockHeader CheckBlockHeader error\n"); + if (!CheckBlockHeader(futureblockp,*ppindex!=0?(*ppindex)->GetHeight():0,*ppindex, block, state,0)) { + if ( *futureblockp == 0 ) { + LogPrintf("%s: CheckBlockHeader futureblock=0\n", __func__); return false; } } @@ -5387,7 +5387,7 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock); if (mi == mapBlockIndex.end()) { - LogPrintf("AcceptBlockHeader hashPrevBlock %s not found\n",block.hashPrevBlock.ToString().c_str()); + LogPrintf("%s: hashPrevBlock %s not found\n",__func__, block.hashPrevBlock.ToString().c_str()); //*futureblockp = 1; return(false); //return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk"); @@ -5395,7 +5395,7 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat pindexPrev = (*mi).second; if (pindexPrev == 0 ) { - LogPrintf("AcceptBlockHeader hashPrevBlock %s no pindexPrev\n",block.hashPrevBlock.ToString().c_str()); + LogPrintf("%s: hashPrevBlock %s no pindexPrev\n",__func__,block.hashPrevBlock.ToString().c_str()); return(false); } if ( (pindexPrev->nStatus & BLOCK_FAILED_MASK) ) @@ -5404,7 +5404,7 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat if (!ContextualCheckBlockHeader(block, state, pindexPrev)) { //fprintf(stderr,"AcceptBlockHeader ContextualCheckBlockHeader failed\n"); - LogPrintf("AcceptBlockHeader ContextualCheckBlockHeader failed\n"); + LogPrintf("%s: ContextualCheckBlockHeader failed\n",__func__); return false; } if (pindex == NULL) @@ -5434,13 +5434,13 @@ bool AcceptBlock(int32_t *futureblockp,CBlock& block, CValidationState& state, C { if ( *futureblockp == 0 ) { - LogPrintf("AcceptBlock AcceptBlockHeader error\n"); + LogPrintf("%s: AcceptBlockHeader error\n",__func__); return false; } } if ( pindex == 0 ) { - LogPrintf("AcceptBlock null pindex\n"); + LogPrintf("%s: null pindex\n", __func__); *futureblockp = true; return false; } @@ -5556,7 +5556,7 @@ static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned return (nFound >= nRequired); } -void komodo_currentheight_set(int32_t height); +void hush_currentheight_set(int32_t height); CBlockIndex *komodo_ensure(CBlock *pblock, uint256 hash) { @@ -5595,26 +5595,23 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo { LOCK(cs_main); if ( chainActive.LastTip() != 0 ) - komodo_currentheight_set(chainActive.LastTip()->GetHeight()); - checked = CheckBlock(&futureblock,height!=0?height:komodo_block2height(pblock),0,*pblock, state, verifier,0); + hush_currentheight_set(chainActive.LastTip()->GetHeight()); + checked = CheckBlock(&futureblock,height!=0?height:hush_block2height(pblock),0,*pblock, state, verifier,0); bool fRequested = MarkBlockAsReceived(hash); - // Test thing on LABS to test viability of rejecting a node pushing a chain. - // Supposed to stop malicious forks being pushed. Untested. Disabled incase of problems it may cause. - if ( 0 && pfrom && !fRequested && vNodes.size() > 1 ) - { + // Reject nodes which push malicious chainforks. + // Originally researched and written by blackjok3r, core dev of KMD+LABS + // Optimized by Hush developers ;) + if ( GetArg("-debugchainforks",false) && (pfrom && !fRequested && vNodes.size() > 1) ) { pfrom->nBlocksinARow += 1; if ( pfrom->nBlocksinARow >= 10 ) { pfrom->nBlocksinARow2 += 1; - if ( pfrom->nBlocksinARow2 > 5 ) - { - pfrom->nBlocksinARow = 0; + if ( pfrom->nBlocksinARow2 > 5 ) { + pfrom->nBlocksinARow = 0; pfrom->nBlocksinARow2 = 0; - fprintf(stderr, "reset node.%i\n",(int32_t)pfrom->GetId()); - } - else - { - fprintf(stderr, "Requesting new peer node.%i blocksinrow.%i blocsinrow2.%i\n",(int32_t)pfrom->GetId(),pfrom->nBlocksinARow,pfrom->nBlocksinARow2); + fprintf(stderr, "%s: reset node.%i\n",__func__, (int32_t)pfrom->GetId()); + } else { + fprintf(stderr, "%s: Requesting new peer node.%i blocksinrow.%i blocsinrow2.%i\n",__func__, (int32_t)pfrom->GetId(),pfrom->nBlocksinARow,pfrom->nBlocksinARow2); return(false); } } @@ -5661,7 +5658,7 @@ bool TestBlockValidity(CValidationState &state, const CBlock& block, CBlockIndex CBlockIndex indexDummy(block); indexDummy.pprev = pindexPrev; indexDummy.SetHeight(pindexPrev->GetHeight() + 1); - // JoinSplit proofs are verified in ConnectBlock + // zk proofs are verified in ConnectBlock auto verifier = libzcash::ProofVerifier::Disabled(); // NOTE: CheckBlockHeader is called by CheckBlock if (!ContextualCheckBlockHeader(block, state, pindexPrev)) @@ -5691,10 +5688,7 @@ bool TestBlockValidity(CValidationState &state, const CBlock& block, CBlockIndex return true; } -/** - * BLOCK PRUNING CODE - */ - +// BLOCK PRUNING CODE /* Calculate the amount of disk space the block & undo files currently use */ uint64_t CalculateCurrentUsage() { @@ -5899,12 +5893,10 @@ CBlockIndex * InsertBlockIndex(uint256 hash) return pindexNew; } -//void komodo_pindex_init(CBlockIndex *pindex,int32_t height); - bool static LoadBlockIndexDB() { const CChainParams& chainparams = Params(); - LogPrintf("%s: start loading guts\n", __func__); + //LogPrintf("%s: start loading guts\n", __func__); if (!pblocktree->LoadBlockIndexGuts()) return false; LogPrintf("%s: loaded guts\n", __func__); @@ -5917,11 +5909,13 @@ bool static LoadBlockIndexDB() { CBlockIndex* pindex = item.second; vSortedByHeight.push_back(make_pair(pindex->GetHeight(), pindex)); - //komodo_pindex_init(pindex,(int32_t)pindex->GetHeight()); } - //fprintf(stderr,"load blockindexDB paired %u\n",(uint32_t)time(NULL)); + if(fDebug) + fprintf(stderr,"load blockindexDB paired %u\n",(uint32_t)time(NULL)); sort(vSortedByHeight.begin(), vSortedByHeight.end()); - //fprintf(stderr,"load blockindexDB sorted %u\n",(uint32_t)time(NULL)); + if(fDebug) + fprintf(stderr,"load blockindexDB sorted %u\n",(uint32_t)time(NULL)); + BOOST_FOREACH(const PAIRTYPE(int, CBlockIndex*)& item, vSortedByHeight) { CBlockIndex* pindex = item.second; @@ -6015,7 +6009,6 @@ bool static LoadBlockIndexDB() pindex->BuildSkip(); if (pindex->IsValid(BLOCK_VALID_TREE) && (pindexBestHeader == NULL || CBlockIndexWorkComparator()(pindexBestHeader, pindex))) pindexBestHeader = pindex; - //komodo_pindex_init(pindex,(int32_t)pindex->GetHeight()); } fprintf(stderr,"load blockindexDB chained %u\n",(uint32_t)time(NULL)); @@ -6098,7 +6091,6 @@ bool static LoadBlockIndexDB() if (pindex->pprev) { pindex->pprev->hashFinalSproutRoot = pindex->hashSproutAnchor; } - //komodo_pindex_init(pindex,(int32_t)pindex->GetHeight()); } // Load pointer to end of best chain @@ -6422,10 +6414,10 @@ void UnloadBlockIndex() bool LoadBlockIndex() { // Load block index from databases - KOMODO_LOADINGBLOCKS = 1; + HUSH_LOADINGBLOCKS = 1; if (!fReindex && !LoadBlockIndexDB()) { - KOMODO_LOADINGBLOCKS = 0; + HUSH_LOADINGBLOCKS = 0; return false; } fprintf(stderr,"finished loading blocks %s\n",SMART_CHAIN_SYMBOL); @@ -6951,7 +6943,7 @@ void static ProcessGetData(CNode* pfrom) //hash = block.GetHash(); //for (z=31; z>=0; z--) // fprintf(stderr,"%02x",((uint8_t *)&hash)[z]); - //fprintf(stderr," send block %d\n",komodo_block2height(&block)); + //fprintf(stderr," send block %d\n",hush_block2height(&block)); pfrom->PushMessage("block", block); } else // MSG_FILTERED_BLOCK) @@ -8136,9 +8128,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) if (pto->nVersion == 0) return true; - // // Message: ping - // bool pingSend = false; if (pto->fPingQueued) { // RPC ping request by user @@ -8187,9 +8177,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) nLastRebroadcast = GetTime(); } - // // Message: addr - // if (fSendTrickle) { vector vAddr; @@ -8215,9 +8203,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle) CNodeState &state = *State(pto->GetId()); if (state.fShouldBan) { - if (pto->fWhitelisted) + if (pto->fWhitelisted) { LogPrintf("Warning: not punishing whitelisted peer %s!\n", pto->addr.ToString()); - else { + } else { pto->fDisconnect = true; if (pto->addr.IsLocal()) LogPrintf("Warning: not banning local peer %s!\n", pto->addr.ToString()); @@ -8260,9 +8248,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) GetMainSignals().Broadcast(nTimeBestReceived); } - // // Message: inventory - // vector vInv; vector vInvWait; { @@ -8340,9 +8326,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } } - // // Message: getdata (blocks) - // static uint256 zero; vector vGetData; if (!pto->fDisconnect && !pto->fClient && (fFetch || !IsInitialBlockDownload()) && state.nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT_PER_PEER) { @@ -8352,8 +8336,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) BOOST_FOREACH(CBlockIndex *pindex, vToDownload) { vGetData.push_back(CInv(MSG_BLOCK, pindex->GetBlockHash())); MarkBlockAsInFlight(pto->GetId(), pindex->GetBlockHash(), consensusParams, pindex); - LogPrint("net", "Requesting block %s (%d) peer=%d\n", pindex->GetBlockHash().ToString(), - pindex->GetHeight(), pto->id); + LogPrint("net", "Requesting block %s (%d) peer=%d\n", pindex->GetBlockHash().ToString(), pindex->GetHeight(), pto->id); } if (state.nBlocksInFlight == 0 && staller != -1) { if (State(staller)->nStallingSince == 0) { @@ -8362,24 +8345,8 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } } } - /*CBlockIndex *pindex; - if ( komodo_requestedhash != zero && komodo_requestedcount < 16 && (pindex= komodo_getblockindex(komodo_requestedhash)) != 0 ) - { - LogPrint("net","komodo_requestedhash.%d request %s to nodeid.%d\n",komodo_requestedcount,komodo_requestedhash.ToString().c_str(),pto->GetId()); - fprintf(stderr,"komodo_requestedhash.%d request %s to nodeid.%d\n",komodo_requestedcount,komodo_requestedhash.ToString().c_str(),pto->GetId()); - vGetData.push_back(CInv(MSG_BLOCK, komodo_requestedhash)); - MarkBlockAsInFlight(pto->GetId(), komodo_requestedhash, consensusParams, pindex); - komodo_requestedcount++; - if ( komodo_requestedcount > 16 ) - { - memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); - komodo_requestedcount = 0; - } - }*/ - // // Message: getdata (non-blocks) - // while (!pto->fDisconnect && !pto->mapAskFor.empty() && (*pto->mapAskFor.begin()).first <= nNow) { const CInv& inv = (*pto->mapAskFor.begin()).second; @@ -8441,28 +8408,24 @@ CMutableTransaction CreateNewContextualCMutableTransaction(const Consensus::Para CMutableTransaction mtx; if ( KOMODO_NSPV_SUPERLITE ) { - mtx.fOverwintered = true; - mtx.nExpiryHeight = 0; + mtx.fOverwintered = true; + mtx.nExpiryHeight = 0; mtx.nVersionGroupId = SAPLING_VERSION_GROUP_ID; - mtx.nVersion = SAPLING_TX_VERSION; - } - else - { + mtx.nVersion = SAPLING_TX_VERSION; + } else { bool isOverwintered = NetworkUpgradeActive(nHeight, consensusParams, Consensus::UPGRADE_OVERWINTER); if (isOverwintered) { - mtx.fOverwintered = true; - mtx.nExpiryHeight = nHeight + expiryDelta; + mtx.fOverwintered = true; + mtx.nExpiryHeight = nHeight + expiryDelta; if (NetworkUpgradeActive(nHeight, consensusParams, Consensus::UPGRADE_SAPLING)) { mtx.nVersionGroupId = SAPLING_VERSION_GROUP_ID; - mtx.nVersion = SAPLING_TX_VERSION; - } - else - { + mtx.nVersion = SAPLING_TX_VERSION; + } else { mtx.nVersionGroupId = OVERWINTER_VERSION_GROUP_ID; - mtx.nVersion = OVERWINTER_TX_VERSION; - mtx.nExpiryHeight = std::min(mtx.nExpiryHeight,static_cast(consensusParams.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight - 1)); + mtx.nVersion = OVERWINTER_TX_VERSION; + mtx.nExpiryHeight = std::min(mtx.nExpiryHeight,static_cast(consensusParams.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight - 1)); } } } diff --git a/src/miner.cpp b/src/miner.cpp index 5c6899902..e4732b70d 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -151,7 +151,7 @@ uint64_t the_commission(const CBlock *block,int32_t height); int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *ptr); int32_t decode_hex(uint8_t *bytes,int32_t n,char *hex); int32_t komodo_is_notarytx(const CTransaction& tx); -uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &NotarisationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len); +uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &NotarizationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len); int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); int32_t komodo_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *script, int32_t len); CScript komodo_mineropret(int32_t nHeight); @@ -175,7 +175,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 } else pk = _pk; uint64_t deposits,voutsum=0; int32_t isrealtime,kmdheight; uint32_t blocktime; const CChainParams& chainparams = Params(); - bool fNotarisationBlock = false; std::vector NotarisationNotaries; + bool fNotarizationBlock = false; std::vector NotarizationNotaries; //fprintf(stderr,"create new block\n"); // Create new block @@ -276,7 +276,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 vecPriority.reserve(mempool.mapTx.size() + 1); // now add transactions from the mem pool - int32_t Notarisations = 0; uint64_t txvalue; + int32_t Notarizations = 0; uint64_t txvalue; for (CTxMemPool::indexed_transaction_set::iterator mi = mempool.mapTx.begin(); mi != mempool.mapTx.end(); ++mi) { @@ -307,15 +307,15 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 double dPriority = 0; CAmount nTotalIn = 0; bool fMissingInputs = false; - bool fNotarisation = false; - std::vector TMP_NotarisationNotaries; + bool fNotarization = false; + std::vector TMP_NotarizationNotaries; if (tx.IsCoinImport()) { CAmount nValueIn = GetCoinImportValue(tx); // burn amount nTotalIn += nValueIn; dPriority += (double)nValueIn * 1000; // flat multiplier... max = 1e16. } else { - TMP_NotarisationNotaries.clear(); + TMP_NotarizationNotaries.clear(); bool fToCryptoAddress = false; if ( numSN != 0 && notarypubkeys[0][0] != 0 && komodo_is_notarytx(tx) == 1 ) fToCryptoAddress = true; @@ -376,20 +376,20 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[i],33) == 0 ) { // We can add the index of each notary to vector, and clear it if this notarisation is not valid later on. - TMP_NotarisationNotaries.push_back(i); + TMP_NotarizationNotaries.push_back(i); } } } dPriority += (double)nValueIn * nConf; } - if ( numSN != 0 && notarypubkeys[0][0] != 0 && TMP_NotarisationNotaries.size() >= numSN / 5 ) + if ( numSN != 0 && notarypubkeys[0][0] != 0 && TMP_NotarizationNotaries.size() >= numSN / 5 ) { // check a notary didnt sign twice (this would be an invalid notarisation later on and cause problems) - std::set checkdupes( TMP_NotarisationNotaries.begin(), TMP_NotarisationNotaries.end() ); - if ( checkdupes.size() != TMP_NotarisationNotaries.size() ) + std::set checkdupes( TMP_NotarizationNotaries.begin(), TMP_NotarizationNotaries.end() ); + if ( checkdupes.size() != TMP_NotarizationNotaries.size() ) { fprintf(stderr, "possible notarisation is signed multiple times by same notary, passed as normal transaction.\n"); - } else fNotarisation = true; + } else fNotarization = true; } nTotalIn += tx.GetShieldedValueIn(); } @@ -405,7 +405,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 CFeeRate feeRate(nTotalIn-tx.GetValueOut(), nTxSize); - if ( fNotarisation ) + if ( fNotarization ) { // Special miner for notary pay chains. Can only enter this if numSN/notarypubkeys is set higher up. if ( tx.vout.size() == 2 && tx.vout[1].nValue == 0 ) @@ -415,10 +415,10 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 int32_t scriptlen = (int32_t)tx.vout[1].scriptPubKey.size(); if ( script[0] == OP_RETURN ) { - Notarisations++; - if ( Notarisations > 1 ) + Notarizations++; + if ( Notarizations > 1 ) { - fprintf(stderr, "skipping notarization.%d\n",Notarisations); + fprintf(stderr, "skipping notarization.%d\n",Notarizations); // Any attempted notarization needs to be in its own block! continue; } @@ -426,10 +426,10 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 if ( notarizedheight != 0 ) { // this is the first one we see, add it to the block as TX1 - NotarisationNotaries = TMP_NotarisationNotaries; + NotarizationNotaries = TMP_NotarizationNotaries; dPriority = 1e16; - fNotarisationBlock = true; - //fprintf(stderr, "Notarisation %s set to maximum priority\n",hash.ToString().c_str()); + fNotarizationBlock = true; + //fprintf(stderr, "Notarization %s set to maximum priority\n",hash.ToString().c_str()); } } } @@ -673,14 +673,14 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 LEAVE_CRITICAL_SECTION(mempool.cs); return(0); } - else if ( fNotarisationBlock && ASSETCHAINS_NOTARY_PAY[0] != 0 && pblock->vtx[1].vout.size() == 2 && pblock->vtx[1].vout[1].nValue == 0 ) + else if ( fNotarizationBlock && ASSETCHAINS_NOTARY_PAY[0] != 0 && pblock->vtx[1].vout.size() == 2 && pblock->vtx[1].vout[1].nValue == 0 ) { // Get the OP_RETURN for the notarisation uint8_t *script = (uint8_t *)&pblock->vtx[1].vout[1].scriptPubKey[0]; int32_t scriptlen = (int32_t)pblock->vtx[1].vout[1].scriptPubKey.size(); if ( script[0] == OP_RETURN ) { - uint64_t totalsats = komodo_notarypay(txNew, NotarisationNotaries, pblock->nTime, nHeight, script, scriptlen); + uint64_t totalsats = komodo_notarypay(txNew, NotarizationNotaries, pblock->nTime, nHeight, script, scriptlen); if ( totalsats == 0 ) { fprintf(stderr, "Could not create notary payment, trying again.\n"); diff --git a/src/notarizationdb.cpp b/src/notarizationdb.cpp index 0233248ee..4ce29a86c 100644 --- a/src/notarizationdb.cpp +++ b/src/notarizationdb.cpp @@ -12,66 +12,64 @@ NotarizationDB *pnotarizations; NotarizationDB::NotarizationDB(size_t nCacheSize, bool fMemory, bool fWipe) : CDBWrapper(GetDataDir() / "notarizations", nCacheSize, fMemory, fWipe, false, 64) { } -NotarisationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) +NotarizationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) { EvalRef eval; - NotarisationsInBlock vNotarisations; + NotarizationsInBlock vNotarizations; int timestamp = block.nTime; bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; - // No valid ntz's before this height on HUSH3 - if(ishush3 && (nHeight <= 360000)) { - return vNotarisations; + // No valid ntz's before this height + int minheight = ishush3 ? 360000 : 1; + if(ishush3 && (nHeight <= GetArg("-dpow_height",minheight))) { + return vNotarizations; } for (unsigned int i = 0; i < block.vtx.size(); i++) { CTransaction tx = block.vtx[i]; - NotarisationData data; - bool parsed = ParseNotarisationOpReturn(tx, data); - if (!parsed) data = NotarisationData(); + NotarizationData data; + bool parsed = ParseNotarizationOpReturn(tx, data); + if (!parsed) data = NotarizationData(); if (strlen(data.symbol) == 0) continue; - //printf("Checked notarisation data for %s \n",data.symbol); + //printf("Checked notarization data for %s \n",data.symbol); int authority = GetSymbolAuthority(data.symbol); if (authority == CROSSCHAIN_HUSH) { if (!eval->CheckNotaryInputs(tx, nHeight, block.nTime)) continue; - //printf("Authorised notarisation data for %s \n",data.symbol); } if (parsed) { - vNotarisations.push_back(std::make_pair(tx.GetHash(), data)); - //printf("Parsed a notarisation for: %s, txid:%s, ccid:%i, momdepth:%i\n", - // data.symbol, tx.GetHash().GetHex().data(), data.ccId, data.MoMDepth); - //if (!data.MoMoM.IsNull()) printf("MoMoM:%s\n", data.MoMoM.GetHex().data()); + vNotarizations.push_back(std::make_pair(tx.GetHash(), data)); + if(fDebug) { + printf("Parsed a notarization for: %s, txid:%s, ccid:%i, momdepth:%i\n", data.symbol, tx.GetHash().GetHex().data(), data.ccId, data.MoMDepth); + if (!data.MoMoM.IsNull()) printf("MoMoM:%s\n", data.MoMoM.GetHex().data()); + } } else - LogPrintf("WARNING: Couldn't parse notarisation for tx: %s at height %i\n", tx.GetHash().GetHex().data(), nHeight); + LogPrintf("WARNING: Couldn't parse notarization for tx: %s at height %i\n", tx.GetHash().GetHex().data(), nHeight); } - return vNotarisations; + return vNotarizations; } -bool GetBlockNotarisations(uint256 blockHash, NotarisationsInBlock &nibs) +bool GetBlockNotarizations(uint256 blockHash, NotarizationsInBlock &nibs) { return pnotarizations->Read(blockHash, nibs); } -bool GetBackNotarisation(uint256 notarisationHash, Notarisation &n) +bool GetBackNotarization(uint256 notarisationHash, Notarization &n) { return pnotarizations->Read(notarisationHash, n); } - -/* - * Write an index of HUSH notarisation id -> backnotarisation - */ -void WriteBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch &batch) +// Write an index of HUSH notarisation id -> backnotarisation +void WriteBackNotarizations(const NotarizationsInBlock notarisations, CDBBatch &batch) { int wrote = 0; - BOOST_FOREACH(const Notarisation &n, notarisations) + BOOST_FOREACH(const Notarization &n, notarisations) { if (!n.second.txHash.IsNull()) { batch.Write(n.second.txHash, n); @@ -80,33 +78,30 @@ void WriteBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch & } } - -void EraseBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch &batch) +void EraseBackNotarizations(const NotarizationsInBlock notarisations, CDBBatch &batch) { - BOOST_FOREACH(const Notarisation &n, notarisations) + BOOST_FOREACH(const Notarization &n, notarisations) { if (!n.second.txHash.IsNull()) batch.Erase(n.second.txHash); } } -/* - * Scan notarisationsdb backwards for blocks containing a notarisation - * for given symbol. Return height of matched notarisation or 0. - */ -int ScanNotarisationsDB(int height, std::string symbol, int scanLimitBlocks, Notarisation& out) +// Scan notarisationsdb backwards for blocks containing a notarisation +// for given symbol. Return height of matched notarisation or 0. +int ScanNotarizationsDB(int height, std::string symbol, int scanLimitBlocks, Notarization& out) { if (height < 0 || height > chainActive.Height()) return false; for (int i=0; i height) break; - NotarisationsInBlock notarisations; + NotarizationsInBlock notarisations; uint256 blockHash = *chainActive[height-i]->phashBlock; - if (!GetBlockNotarisations(blockHash, notarisations)) + if (!GetBlockNotarizations(blockHash, notarisations)) continue; - BOOST_FOREACH(Notarisation& nota, notarisations) { + BOOST_FOREACH(Notarization& nota, notarisations) { if (strcmp(nota.second.symbol, symbol.data()) == 0) { out = nota; return height-i; @@ -115,30 +110,3 @@ int ScanNotarisationsDB(int height, std::string symbol, int scanLimitBlocks, Not } return 0; } - -int ScanNotarisationsDB2(int height, std::string symbol, int scanLimitBlocks, Notarisation& out) -{ - int32_t i,maxheight,ht; - maxheight = chainActive.Height(); - if ( height < 0 || height > maxheight ) - return false; - for (i=0; i maxheight ) - break; - NotarisationsInBlock notarisations; - uint256 blockHash = *chainActive[ht]->phashBlock; - if ( !GetBlockNotarisations(blockHash,notarisations) ) - continue; - BOOST_FOREACH(Notarisation& nota,notarisations) - { - if ( strcmp(nota.second.symbol,symbol.data()) == 0 ) - { - out = nota; - return(ht); - } - } - } - return 0; -} diff --git a/src/notarizationdb.h b/src/notarizationdb.h index 89e9890b4..176889e03 100644 --- a/src/notarizationdb.h +++ b/src/notarizationdb.h @@ -15,15 +15,14 @@ public: }; extern NotarizationDB *pnotarizations; -typedef std::pair Notarisation; -typedef std::vector NotarisationsInBlock; +typedef std::pair Notarization; +typedef std::vector NotarizationsInBlock; -NotarisationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight); -bool GetBlockNotarisations(uint256 blockHash, NotarisationsInBlock &nibs); -bool GetBackNotarisation(uint256 notarisationHash, Notarisation &n); -void WriteBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch &batch); -void EraseBackNotarisations(const NotarisationsInBlock notarisations, CDBBatch &batch); -int ScanNotarisationsDB(int height, std::string symbol, int scanLimitBlocks, Notarisation& out); -int ScanNotarisationsDB2(int height, std::string symbol, int scanLimitBlocks, Notarisation& out); +NotarizationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight); +bool GetBlockNotarizations(uint256 blockHash, NotarizationsInBlock &nibs); +bool GetBackNotarization(uint256 notarisationHash, Notarization &n); +void WriteBackNotarizations(const NotarizationsInBlock notarisations, CDBBatch &batch); +void EraseBackNotarizations(const NotarizationsInBlock notarisations, CDBBatch &batch); +int ScanNotarizationsDB(int height, std::string symbol, int scanLimitBlocks, Notarization& out); #endif /* HUSH_NOTARISATIONDB_H */ diff --git a/src/pow.cpp b/src/pow.cpp index 88a682a4b..bb87f96ea 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -661,13 +661,13 @@ extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; #define KOMODO_ELECTION_GAP 2000 int32_t komodo_eligiblenotary(uint8_t pubkeys[66][33],int32_t *mids,uint32_t blocktimes[66],int32_t *nonzpkeysp,int32_t height); -int32_t KOMODO_LOADINGBLOCKS = 1; +int32_t HUSH_LOADINGBLOCKS = 1; extern std::string NOTARY_PUBKEY; bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t height, const Consensus::Params& params) { - extern int32_t KOMODO_REWIND; + extern int32_t HUSH_REWIND; uint256 hash; bool fNegative,fOverflow; uint8_t origpubkey33[33]; int32_t i,nonzpkeys=0,nonz=0,special=0,special2=0,notaryid=-1,flag = 0, mids[66]; uint32_t tiptime,blocktimes[66]; arith_uint256 bnTarget; uint8_t pubkeys[66][33]; @@ -733,7 +733,7 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t // Check proof of work matches claimed amount if ( UintToArith256(hash = blkHeader.GetHash()) > bnTarget ) { - if ( KOMODO_LOADINGBLOCKS != 0 ) + if ( HUSH_LOADINGBLOCKS != 0 ) return true; if ( SMART_CHAIN_SYMBOL[0] != 0 || height > 792000 ) diff --git a/src/rpc/client.cpp b/src/rpc/client.cpp index 3132f4d0f..070e339f5 100644 --- a/src/rpc/client.cpp +++ b/src/rpc/client.cpp @@ -179,7 +179,7 @@ static const CRPCConvertParam vRPCConvertParams[] = { "assetchainproof", 1}, { "crosschainproof", 1}, { "getproofroot", 2}, - { "getNotarisationsForBlock", 0}, + { "getNotarizationsForBlock", 0}, { "height_MoM", 1}, { "calc_MoM", 2}, { "migrate_completeimporttransaction", 1}, diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index 318d9fa10..c6d6b0cc0 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -143,14 +143,14 @@ UniValue MoMoMdata(const UniValue& params, bool fHelp, const CPubKey& mypk) ret.push_back(Pair("kmdheight",kmdheight-5)); ret.push_back(Pair("ccid", (int) ccid)); - uint256 destNotarisationTxid; + uint256 destNotarizationTxid; std::vector moms; - uint256 MoMoM = CalculateProofRoot(symbol, ccid, kmdheight-5, moms, destNotarisationTxid); + uint256 MoMoM = CalculateProofRoot(symbol, ccid, kmdheight-5, moms, destNotarizationTxid); UniValue valMoms(UniValue::VARR); for (int i=0; i &vin, std::vector &NotarisationNotaries); +bool GetNotarizationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const std::vector &vin, std::vector &NotarizationNotaries); UniValue importdual(const UniValue& params, bool fHelp, const CPubKey& mypk) @@ -1121,11 +1121,11 @@ UniValue importgatewaydumpprivkey(const UniValue& params, bool fHelp, const CPub return(ImportGatewayDumpPrivKey(bindtxid,vchSecret)); } -UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp, const CPubKey& mypk) +UniValue getNotarizationsForBlock(const UniValue& params, bool fHelp, const CPubKey& mypk) { // TODO take timestamp as param, and loop blockindex to get starting/finish height. if (fHelp || params.size() != 1) - throw runtime_error("getNotarisationsForBlock height\n\n" + throw runtime_error("getNotarizationsForBlock height\n\n" "Takes a block height and returns notarisation information " "within the block"); @@ -1136,21 +1136,21 @@ UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp, const CPub uint256 blockHash = chainActive[height]->GetBlockHash(); - NotarisationsInBlock nibs; - GetBlockNotarisations(blockHash, nibs); + NotarizationsInBlock nibs; + GetBlockNotarizations(blockHash, nibs); UniValue out(UniValue::VOBJ); //out.push_back(make_pair("blocktime",(int))); UniValue hush(UniValue::VARR); int8_t numNN = 0; uint8_t notarypubkeys[64][33] = {0}; numNN = hush_notaries(notarypubkeys, height, chainActive[height]->nTime); - BOOST_FOREACH(const Notarisation& n, nibs) + BOOST_FOREACH(const Notarization& n, nibs) { - UniValue item(UniValue::VOBJ); UniValue notaryarr(UniValue::VARR); std::vector NotarisationNotaries; + UniValue item(UniValue::VOBJ); UniValue notaryarr(UniValue::VARR); std::vector NotarizationNotaries; uint256 hash; CTransaction tx; if ( myGetTransaction(n.first,tx,hash) ) { - if ( !GetNotarisationNotaries(notarypubkeys, numNN, tx.vin, NotarisationNotaries) ) + if ( !GetNotarizationNotaries(notarypubkeys, numNN, tx.vin, NotarizationNotaries) ) continue; } item.push_back(make_pair("txid", n.first.GetHex())); @@ -1159,7 +1159,7 @@ UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp, const CPub item.push_back(make_pair("blockhash", n.second.blockHash.GetHex())); //item.push_back(make_pair("HUSH_height", height)); // for when timstamp input is used. - for ( auto notary : NotarisationNotaries ) + for ( auto notary : NotarizationNotaries ) notaryarr.push_back(notary); item.push_back(make_pair("notaries",notaryarr)); hush.push_back(item); @@ -1168,19 +1168,19 @@ UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp, const CPub return out; } -/*UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp, const CPubKey& mypk) +/*UniValue getNotarizationsForBlock(const UniValue& params, bool fHelp, const CPubKey& mypk) { if (fHelp || params.size() != 1) - throw runtime_error("getNotarisationsForBlock blockHash\n\n" + throw runtime_error("getNotarizationsForBlock blockHash\n\n" "Takes a block hash and returns notarisation transactions " "within the block"); uint256 blockHash = uint256S(params[0].get_str()); - NotarisationsInBlock nibs; - GetBlockNotarisations(blockHash, nibs); + NotarizationsInBlock nibs; + GetBlockNotarizations(blockHash, nibs); UniValue out(UniValue::VARR); - BOOST_FOREACH(const Notarisation& n, nibs) + BOOST_FOREACH(const Notarization& n, nibs) { UniValue item(UniValue::VARR); item.push_back(n.first.GetHex()); @@ -1191,10 +1191,10 @@ UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp, const CPub }*/ -UniValue scanNotarisationsDB(const UniValue& params, bool fHelp, const CPubKey& mypk) +UniValue scanNotarizationsDB(const UniValue& params, bool fHelp, const CPubKey& mypk) { if (fHelp || params.size() < 2 || params.size() > 3) - throw runtime_error("scanNotarisationsDB blockHeight symbol [blocksLimit=1440]\n\n" + throw runtime_error("scanNotarizationsDB blockHeight symbol [blocksLimit=1440]\n\n" "Scans notarisationsdb backwards from height for a notarisation" " of given symbol"); int height = atoi(params[0].get_str().c_str()); @@ -1209,8 +1209,8 @@ UniValue scanNotarisationsDB(const UniValue& params, bool fHelp, const CPubKey& height = chainActive.Height(); } - Notarisation nota; - int matchedHeight = ScanNotarisationsDB(height, symbol, limit, nota); + Notarization nota; + int matchedHeight = ScanNotarizationsDB(height, symbol, limit, nota); if (!matchedHeight) return NullUniValue; UniValue out(UniValue::VOBJ); out.pushKV("height", matchedHeight); diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index ecf014ead..f648919c2 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -354,8 +354,8 @@ static const CRPCCommand vRPCCommands[] = { "crosschain", "height_MoM", &height_MoM, true }, { "crosschain", "assetchainproof", &assetchainproof, true }, { "crosschain", "crosschainproof", &crosschainproof, true }, - { "crosschain", "getNotarisationsForBlock", &getNotarisationsForBlock, true }, - { "crosschain", "scanNotarisationsDB", &scanNotarisationsDB, true }, + { "crosschain", "getNotarizationsForBlock", &getNotarizationsForBlock, true }, + { "crosschain", "scanNotarizationsDB", &scanNotarizationsDB, true }, { "crosschain", "getimports", &getimports, true }, { "crosschain", "getwalletburntransactions", &getwalletburntransactions, true }, { "crosschain", "migrate_converttoexport", &migrate_converttoexport, true }, diff --git a/src/rpc/server.h b/src/rpc/server.h index b81bef49b..847798cdd 100644 --- a/src/rpc/server.h +++ b/src/rpc/server.h @@ -495,8 +495,8 @@ extern UniValue calc_MoM(const UniValue& params, bool fHelp, const CPubKey& mypk extern UniValue height_MoM(const UniValue& params, bool fHelp, const CPubKey& mypk); extern UniValue assetchainproof(const UniValue& params, bool fHelp, const CPubKey& mypk); extern UniValue crosschainproof(const UniValue& params, bool fHelp, const CPubKey& mypk); -extern UniValue getNotarisationsForBlock(const UniValue& params, bool fHelp, const CPubKey& mypk); -extern UniValue scanNotarisationsDB(const UniValue& params, bool fHelp, const CPubKey& mypk); +extern UniValue getNotarizationsForBlock(const UniValue& params, bool fHelp, const CPubKey& mypk); +extern UniValue scanNotarizationsDB(const UniValue& params, bool fHelp, const CPubKey& mypk); extern UniValue getimports(const UniValue& params, bool fHelp, const CPubKey& mypk); extern UniValue getwalletburntransactions(const UniValue& params, bool fHelp, const CPubKey& mypk); extern UniValue migrate_converttoexport(const UniValue& params, bool fHelp, const CPubKey& mypk); diff --git a/src/test-hush/test_eval_bet.cpp b/src/test-hush/test_eval_bet.cpp index 1bf3ec7fc..e3a1a3bd1 100644 --- a/src/test-hush/test_eval_bet.cpp +++ b/src/test-hush/test_eval_bet.cpp @@ -123,16 +123,16 @@ public: return true; } - bool GetNotarisationData(uint256 notarisationHash, NotarisationData &data) const + bool GetNotarizationData(uint256 notarisationHash, NotarizationData &data) const { - if (notarisationHash == NotarisationHash()) { + if (notarisationHash == NotarizationHash()) { data.MoM = MoM; return true; } return false; } - static uint256 NotarisationHash() + static uint256 NotarizationHash() { uint256 h; h.begin()[0] = 123; @@ -206,7 +206,7 @@ public: int nIndex = 5; std::vector vBranch; vBranch.resize(3); - return {MerkleBranch(nIndex, vBranch), EvalMock::NotarisationHash()}; + return {MerkleBranch(nIndex, vBranch), EvalMock::NotarizationHash()}; } CMutableTransaction ImportPayoutTx() @@ -562,7 +562,7 @@ TEST_F(TestBet, testImportPayoutMangleSessionId) } -TEST_F(TestBet, testImportPayoutInvalidNotarisationHash) +TEST_F(TestBet, testImportPayoutInvalidNotarizationHash) { EvalMock eval = ebet.SetEvalMock(12); diff --git a/src/test-hush/test_eval_notarisation.cpp b/src/test-hush/test_eval_notarization.cpp similarity index 82% rename from src/test-hush/test_eval_notarisation.cpp rename to src/test-hush/test_eval_notarization.cpp index 7816b7fd9..866f40aa0 100644 --- a/src/test-hush/test_eval_notarisation.cpp +++ b/src/test-hush/test_eval_notarization.cpp @@ -21,7 +21,7 @@ extern int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); -namespace TestEvalNotarisation { +namespace TestEvalNotarization { class EvalMock : public Eval @@ -96,14 +96,14 @@ namespace TestEvalNotarisation { static auto vMomProof = ParseHex("0303faecbdd4b3da128c2cd2701bb143820a967069375b2ec5b612f39bbfe78a8611978871c193457ab1e21b9520f4139f113b8d75892eb93ee247c18bccfd067efed7eacbfcdc8946cf22de45ad536ec0719034fb9bc825048fe6ab61fee5bd6e9aae0bb279738d46673c53d68eb2a72da6dbff215ee41a4d405a74ff7cd355805b"); // $ fiat/bots txMoMproof $proofTxHash /* - TEST(TestEvalNotarisation, testGetNotarisation) + TEST(TestEvalNotarization, testGetNotarization) { EvalMock eval; CMutableTransaction notary(notaryTx); SetupEval(eval, notary, noop); - NotarisationData data; - ASSERT_TRUE(eval.GetNotarisationData(notary.GetHash(), data)); + NotarizationData data; + ASSERT_TRUE(eval.GetNotarizationData(notary.GetHash(), data)); EXPECT_EQ(data.height, 77455); EXPECT_EQ(data.blockHash.GetHex(), "000030ef29d072f417cec86ad5a5ab4f8c413c7f96f572a098e45d6e3e0f8eae"); EXPECT_STREQ(data.symbol, "BOTS"); @@ -116,7 +116,7 @@ namespace TestEvalNotarisation { } -TEST(TestEvalNotarisation, testInvalidNotaryPubkey) +TEST(TestEvalNotarization, testInvalidNotaryPubkey) { EvalMock eval; CMutableTransaction notary(notaryTx); @@ -124,13 +124,13 @@ TEST(TestEvalNotarisation, testInvalidNotaryPubkey) memset(eval.notaries[10], 0, 33); - NotarisationData data; - ASSERT_FALSE(eval.GetNotarisationData(notary.GetHash(), data)); + NotarizationData data; + ASSERT_FALSE(eval.GetNotarizationData(notary.GetHash(), data)); } */ -TEST(TestEvalNotarisation, testInvalidNotarisationBadOpReturn) +TEST(TestEvalNotarization, testInvalidNotarizationBadOpReturn) { EvalMock eval; CMutableTransaction notary(notaryTx); @@ -138,12 +138,12 @@ TEST(TestEvalNotarisation, testInvalidNotarisationBadOpReturn) notary.vout[1].scriptPubKey = CScript() << OP_RETURN << 0; SetupEval(eval, notary, noop); - NotarisationData data(0); - ASSERT_FALSE(eval.GetNotarisationData(notary.GetHash(), data)); + NotarizationData data(0); + ASSERT_FALSE(eval.GetNotarizationData(notary.GetHash(), data)); } -TEST(TestEvalNotarisation, testInvalidNotarisationTxNotEnoughSigs) +TEST(TestEvalNotarization, testInvalidNotarizationTxNotEnoughSigs) { EvalMock eval; CMutableTransaction notary(notaryTx); @@ -152,24 +152,24 @@ TEST(TestEvalNotarisation, testInvalidNotarisationTxNotEnoughSigs) tx.vin.resize(10); }); - NotarisationData data(0); - ASSERT_FALSE(eval.GetNotarisationData(notary.GetHash(), data)); + NotarizationData data(0); + ASSERT_FALSE(eval.GetNotarizationData(notary.GetHash(), data)); } -TEST(TestEvalNotarisation, testInvalidNotarisationTxDoesntExist) +TEST(TestEvalNotarization, testInvalidNotarizationTxDoesntExist) { EvalMock eval; CMutableTransaction notary(notaryTx); SetupEval(eval, notary, noop); - NotarisationData data(0); - ASSERT_FALSE(eval.GetNotarisationData(uint256(), data)); + NotarizationData data(0); + ASSERT_FALSE(eval.GetNotarizationData(uint256(), data)); } -TEST(TestEvalNotarisation, testInvalidNotarisationDupeNotary) +TEST(TestEvalNotarization, testInvalidNotarizationDupeNotary) { EvalMock eval; CMutableTransaction notary(notaryTx); @@ -178,12 +178,12 @@ TEST(TestEvalNotarisation, testInvalidNotarisationDupeNotary) tx.vin[1] = tx.vin[3]; }); - NotarisationData data(0); - ASSERT_FALSE(eval.GetNotarisationData(notary.GetHash(), data)); + NotarizationData data(0); + ASSERT_FALSE(eval.GetNotarizationData(notary.GetHash(), data)); } -TEST(TestEvalNotarisation, testInvalidNotarisationInputNotCheckSig) +TEST(TestEvalNotarization, testInvalidNotarizationInputNotCheckSig) { EvalMock eval; CMutableTransaction notary(notaryTx); @@ -197,10 +197,10 @@ TEST(TestEvalNotarisation, testInvalidNotarisationInputNotCheckSig) eval.txs[txIn.GetHash()] = CTransaction(txIn); }); - NotarisationData data(0); - ASSERT_FALSE(eval.GetNotarisationData(notary.GetHash(), data)); + NotarizationData data(0); + ASSERT_FALSE(eval.GetNotarizationData(notary.GetHash(), data)); } -} /* namespace TestEvalNotarisation */ +} /* namespace TestEvalNotarization */ diff --git a/src/test-hush/test_parse_notarisation.cpp b/src/test-hush/test_parse_notarization.cpp similarity index 87% rename from src/test-hush/test_parse_notarisation.cpp rename to src/test-hush/test_parse_notarization.cpp index 6222e5932..c950d77d4 100644 --- a/src/test-hush/test_parse_notarisation.cpp +++ b/src/test-hush/test_parse_notarization.cpp @@ -10,42 +10,42 @@ #include "testutils.h" -namespace TestParseNotarisation { +namespace TestParseNotarization { -class TestParseNotarisation : public ::testing::Test, public Eval {}; +class TestParseNotarization : public ::testing::Test, public Eval {}; -TEST(TestParseNotarisation, test_ee2fa) +TEST(TestParseNotarization, test_ee2fa) { // ee2fa47820a31a979f9f21cb3fedbc484bf9a8957cb6c9acd0af28ced29bdfe1 std::vector opret = ParseHex("c349ff90f3bce62c1b7b49d1da0423b1a3d9b733130cce825b95b9e047c729066e020d00743a06fdb95ad5775d032b30bbb3680dac2091a0f800cf54c79fd3461ce9b31d4b4d4400"); - NotarisationData nd; + NotarizationData nd; ASSERT_TRUE(E_UNMARSHAL(opret, ss >> nd)); } -TEST(TestParseNotarisation, test__) +TEST(TestParseNotarization, test__) { // 576e910a1f704207bcbcf724124ff9adc5237f45cb6919589cd0aa152caec424 std::vector opret = ParseHex("b3ed7fbbfbc027caeeeec81e65489ec5d9cd47cda675a5cbb75b4a845e67cf0ef6330300b5a6bd8385feb833f3be961c9d8a46fcecd36dcdfa42ad81a20a892433722f0b4b4d44004125a06024eae24c11f36ea110acd707b041d5355b6e1b42de5e2614357999c6aa02000d26ad0300000000404b4c000000000005130300500d000061f22ba7d19fe29ac3baebd839af8b7127d1f90755534400"); - NotarisationData nd; + NotarizationData nd; // We can't parse this one ASSERT_FALSE(E_UNMARSHAL(opret, ss >> nd)); } -TEST(TestParseNotarisation, test__a) +TEST(TestParseNotarization, test__a) { // be55101e6c5a93fb3611a44bd66217ad8714d204275ea4e691cfff9d65dff85c TXSCL std::vector opret = ParseHex("fb9ea2818eec8b07f8811bab49d64379db074db478997f8114666f239bd79803cc460000d0fac4e715b7e2b917a5d79f85ece0c423d27bd3648fd39ac1dc7db8e1bd4b16545853434c00a69eab9f23d7fb63c4624973e7a9079d6ada2f327040936356d7af5e849f6d670a0003001caf7b7b9e1c9bc59d0c7a619c9683ab1dd0794b6f3ea184a19f8fda031150e700000000"); - NotarisationData nd(1); + NotarizationData nd(1); bool res = E_UNMARSHAL(opret, ss >> nd); ASSERT_TRUE(res); } -TEST(TestParseNotarisation, test__b) +TEST(TestParseNotarization, test__b) { // 03085dafed656aaebfda25bf43ffe9d1fb72565bb1fc8b2a12a631659f28f877 TXSCL std::vector opret = ParseHex("48c71a10aa060eab1a43f52acefac3b81fb2a2ce310186b06141884c0501d403c246000052e6d49afd82d9ab3d97c996dd9b6a78a554ffa1625e8dadf0494bd1f8442e3e545853434c007cc5c07e3b67520fd14e23cd5b49f2aa022f411500fd3326ff91e6dc0544a1c90c0003008b69117bb1376ac8df960f785d8c208c599d3a36248c98728256bb6d4737e59600000000"); - NotarisationData nd(1); + NotarizationData nd(1); bool res = E_UNMARSHAL(opret, ss >> nd); ASSERT_TRUE(res); } diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 2561dbdbb..e4619611b 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -918,7 +918,7 @@ void CWallet::DecrementNoteWitnesses(const CBlockIndex* pindex) { LOCK(cs_wallet); - extern int32_t KOMODO_REWIND; + extern int32_t HUSH_REWIND; for (std::pair& wtxItem : mapWallet) { //Sapling @@ -937,7 +937,7 @@ void CWallet::DecrementNoteWitnesses(const CBlockIndex* pindex) } } } - assert(KOMODO_REWIND != 0 || WITNESS_CACHE_SIZE != _COINBASE_MATURITY+10); + assert(HUSH_REWIND != 0 || WITNESS_CACHE_SIZE != _COINBASE_MATURITY+10); } template From 5eac26ea3c75768f30d634d930025b3b1abaa029 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 07:28:23 -0500 Subject: [PATCH 163/277] One mo checkpoint --- src/chainparams.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 861ff0903..ed071ed5b 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -17,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "key_io.h" #include "main.h" #include "crypto/equihash.h" @@ -670,9 +669,10 @@ void *chainparams_commandline() (346000, uint256S("0x0000000114bcd5b0b4a3c6dd175ee4c2173c7408edba61fc40826209044b717f")) (347000, uint256S("0x00000007ab3ec746a2e279a784cc6710d41a518d2b27941d231a7ff4e4a834ea")) (348000, uint256S("0x0000000c0b772a11bb41c362b74890d4538c325386aea4abbaae15d6789e6acc")) - (349000, uint256S("0x0000000138e50eded6f2f3cf8048d0332209c2b0f8093c6bf2695ce6e6e1c149")), - (int64_t) 1607389064, // time of last checkpointed block - (int64_t) 645127, // total txs (double) + (349000, uint256S("0x0000000138e50eded6f2f3cf8048d0332209c2b0f8093c6bf2695ce6e6e1c149")) + (349686, uint256S("0x0000000ea29fff8d05b3755407269e25cf220a918260e43cea2c9957abfca16a")), + (int64_t) 1607519064, // time of last checkpointed block + (int64_t) 645127, // total txs (double) 1134 // txs in the last day before last checkpoint block }; } else { From c3bb1a677418f924f5189f4726fa2dd2b8dac845 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 18:29:50 -0500 Subject: [PATCH 164/277] copyright --- src/amount.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/amount.cpp b/src/amount.cpp index 338a06dc5..01a751b79 100644 --- a/src/amount.cpp +++ b/src/amount.cpp @@ -1,8 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers +// Copyright (c) 2016-2020 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. * * * @@ -17,12 +17,10 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "amount.h" - #include "tinyformat.h" -const std::string CURRENCY_UNIT = "KMD"; +const std::string CURRENCY_UNIT = "HUSH"; CFeeRate::CFeeRate(const CAmount& nFeePaid, size_t nSize) { From 46327f9def83b4556f17eb3acd9bb7bf7b4002ec Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 18:30:31 -0500 Subject: [PATCH 165/277] copyrights --- src/arith_uint256.cpp | 5 +---- src/asyncrpcqueue.cpp | 2 +- src/bloom.cpp | 7 +------ 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/arith_uint256.cpp b/src/arith_uint256.cpp index e0e25011e..134988327 100644 --- a/src/arith_uint256.cpp +++ b/src/arith_uint256.cpp @@ -1,8 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin developers +// Copyright (c) 2016-2020 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. * * * @@ -17,13 +17,10 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "arith_uint256.h" - #include "uint256.h" #include "utilstrencodings.h" #include "crypto/common.h" - #include #include diff --git a/src/asyncrpcqueue.cpp b/src/asyncrpcqueue.cpp index 529667508..f200ec96b 100644 --- a/src/asyncrpcqueue.cpp +++ b/src/asyncrpcqueue.cpp @@ -1,7 +1,7 @@ +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2016 The Zcash 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. * * * diff --git a/src/bloom.cpp b/src/bloom.cpp index 51c06cba5..c9625ed60 100644 --- a/src/bloom.cpp +++ b/src/bloom.cpp @@ -1,7 +1,7 @@ +// Copyright (c) 2019-2020 The Hush developers // Copyright (c) 2012-2014 The Bitcoin Core 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. * * * @@ -16,21 +16,16 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "bloom.h" - #include "primitives/transaction.h" #include "hash.h" #include "script/script.h" #include "script/standard.h" #include "random.h" #include "streams.h" - #include #include - #include - #define LN2SQUARED 0.4804530139182014246671025263266649717305529515945455 #define LN2 0.6931471805599453094172321214581765680755001343602552 From 18ce9a6070b29e98b97d11ea370cc1221698fcc1 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 18:30:57 -0500 Subject: [PATCH 166/277] crosschain updates --- src/chain.h | 2 -- src/crosschain.cpp | 58 ++++++++++++++++++++++-------------------- src/crosschain.h | 11 ++++---- src/main.cpp | 26 +++++++++++-------- src/pow.cpp | 3 +-- src/utilmoneystr.cpp | 3 +-- src/wallet-utility.cpp | 5 ++-- 7 files changed, 56 insertions(+), 52 deletions(-) diff --git a/src/chain.h b/src/chain.h index 3ecc2776e..2e1b542f6 100644 --- a/src/chain.h +++ b/src/chain.h @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_CHAIN_H #define HUSH_CHAIN_H diff --git a/src/crosschain.cpp b/src/crosschain.cpp index 22369b35b..5b1fd7009 100644 --- a/src/crosschain.cpp +++ b/src/crosschain.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -19,13 +22,12 @@ #include "main.h" #include "notarizationdb.h" #include "merkleblock.h" - #include "cc/CCinclude.h" /* * The crosschain workflow. * - * 3 chains, A, B, and KMD. We would like to prove TX on B. + * 3 chains, A, B, and HUSH. We would like to prove TX on B. * There is a notarisation, nA0, which will include TX via an MoM. * The notarisation nA0 must fall between 2 notarisations of B, * ie, nB0 and nB1. An MoMoM including this range is propagated to @@ -33,7 +35,7 @@ * * A: TX bnA0 * \ / - * KMD: nB0 nA0 nB1 nB2 + * HUSH: nB0 nA0 nB1 nB2 * \ \ \ * B: bnB0 bnB1 bnB2 */ @@ -42,21 +44,21 @@ // because it might be disconnecting blocks at the same time. +// TODO: this assumes a blocktime of 60 seconds and limiting of 1 day of blocks int NOTARISATION_SCAN_LIMIT_BLOCKS = 1440; CBlockIndex *komodo_getblockindex(uint256 hash); - -/* On KMD */ -uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int kmdHeight, +/* On HUSH */ +uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int hushHeight, std::vector &moms, uint256 &destNotarizationTxid) { /* - * Notaries don't wait for confirmation on KMD before performing a backnotarisation, + * Notaries don't wait for confirmation on HUSH before performing a backnotarisation, * but we need a determinable range that will encompass all merkle roots. Include MoMs * including the block height of the last notarisation until the height before the * previous notarisation. * - * kmdHeight notarisations-0 notarisations-1 + * hushHeight notarisations-0 notarisations-1 * *********************| * > scan backwards > */ @@ -64,7 +66,7 @@ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int kmdHeigh if (targetCCid < 2) return uint256(); - if (kmdHeight < 0 || kmdHeight > chainActive.Height()) + if (hushHeight < 0 || hushHeight > chainActive.Height()) return uint256(); int seenOwnNotarizations = 0, i = 0; @@ -73,9 +75,9 @@ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int kmdHeigh std::set tmp_moms; for (i=0; i kmdHeight) break; + if (i > hushHeight) break; NotarizationsInBlock notarisations; - uint256 blockHash = *chainActive[kmdHeight-i]->phashBlock; + uint256 blockHash = *chainActive[hushHeight-i]->phashBlock; if (!GetBlockNotarizations(blockHash, notarisations)) continue; @@ -144,31 +146,31 @@ int ScanNotarizationsFromHeight(int nHeight, const IsTarget f, Notarization &fou } -/* On KMD */ +/* On HUSH */ TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_t targetCCid, const TxProof assetChainProof, int32_t offset) { /* * Here we are given a proof generated by an assetchain A which goes from given txid to * an assetchain MoM. We need to go from the notarisationTxid for A to the MoMoM range of the - * backnotarisation for B (given by kmdheight of notarisation), find the MoM within the MoMs for + * backnotarisation for B (given by hushHeight of notarisation), find the MoM within the MoMs for * that range, and finally extend the proof to lead to the MoMoM (proof root). */ EvalRef eval; uint256 MoM = assetChainProof.second.Exec(txid); - // Get a kmd height for given notarisation Txid - int kmdHeight; + // Get a Hush height for given notarisation Txid + int hushHeight; { CTransaction sourceNotarization; uint256 hashBlock; CBlockIndex blockIdx; if (!eval->GetTxConfirmed(assetChainProof.first, sourceNotarization, blockIdx)) throw std::runtime_error("Notarization not found"); - kmdHeight = blockIdx.GetHeight(); + hushHeight = blockIdx.GetHeight(); } - // We now have a kmdHeight of the notarisation from chain A. So we know that a MoM exists + // We now have a hushHeight of the notarisation from chain A. So we know that a MoM exists // at that height. // If we call CalculateProofRoot with that height, it'll scan backwards, until it finds // a notarisation from B, and it might not include our notarisation from A @@ -178,17 +180,17 @@ TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_ auto isTarget = [&](Notarization ¬a) { return strcmp(nota.second.symbol, targetSymbol) == 0; }; - kmdHeight = ScanNotarizationsFromHeight(kmdHeight, isTarget, nota); - if (!kmdHeight) + hushHeight = ScanNotarizationsFromHeight(hushHeight, isTarget, nota); + if (!hushHeight) throw std::runtime_error("Cannot find notarisation for target inclusive of source"); if ( offset != 0 ) - kmdHeight += offset; + hushHeight += offset; - // Get MoMs for kmd height and symbol + // Get MoMs for Hush height and symbol std::vector moms; uint256 targetChainNotarizationTxid; - uint256 MoMoM = CalculateProofRoot(targetSymbol, targetCCid, kmdHeight, moms, targetChainNotarizationTxid); + uint256 MoMoM = CalculateProofRoot(targetSymbol, targetCCid, hushHeight, moms, targetChainNotarizationTxid); if (MoMoM.IsNull()) throw std::runtime_error("No MoMs found"); @@ -257,15 +259,15 @@ bool IsSameAssetChain(const Notarization ¬a) { /* On assetchain */ -bool GetNextBacknotarisation(uint256 kmdNotarizationTxid, Notarization &out) +bool GetNextBacknotarisation(uint256 hushNotarizationTxid, Notarization &out) { /* * Here we are given a txid, and a proof. - * We go from the KMD notarisation txid to the backnotarisation, + * We go from the HUSH notarisation txid to the backnotarisation, * then jump to the next backnotarisation, which contains the corresponding MoMoM. */ Notarization bn; - if (!GetBackNotarization(kmdNotarizationTxid, bn)) + if (!GetBackNotarization(hushNotarizationTxid, bn)) return false; // Need to get block height of that backnotarisation @@ -281,17 +283,17 @@ bool GetNextBacknotarisation(uint256 kmdNotarizationTxid, Notarization &out) } -bool CheckMoMoM(uint256 kmdNotarizationHash, uint256 momom) +bool CheckMoMoM(uint256 hushNotarizationHash, uint256 momom) { /* * Given a notarisation hash and an MoMoM. Backnotarisations may arrive out of order * or multiple in the same block. So dereference the notarisation hash to the corresponding - * backnotarisation and scan around the kmdheight to see if the MoMoM is a match. + * backnotarisation and scan around the hushheight to see if the MoMoM is a match. * This is a sledgehammer approach... */ Notarization bn; - if (!GetBackNotarization(kmdNotarizationHash, bn)) + if (!GetBackNotarization(hushNotarizationHash, bn)) return false; // Need to get block height of that backnotarisation diff --git a/src/crosschain.h b/src/crosschain.h index 10a7c1d45..7aa8d40dc 100644 --- a/src/crosschain.h +++ b/src/crosschain.h @@ -15,9 +15,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - -#ifndef CROSSCHAIN_H -#define CROSSCHAIN_H +#ifndef HUSH_CROSSCHAIN_H +#define HUSH_CROSSCHAIN_H #include "cc/eval.h" const int CROSSCHAIN_HUSH = 1; @@ -35,14 +34,14 @@ bool CheckTxAuthority(const CTransaction &tx, CrosschainAuthority auth); TxProof GetAssetchainProof(uint256 hash,CTransaction burnTx); /* On HUSH */ -uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int kmdHeight, +uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int hushHeight, std::vector &moms, uint256 &destNotarizationTxid); TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_t targetCCid, const TxProof assetChainProof,int32_t offset); void CompleteImportTransaction(CTransaction &importTx,int32_t offset); /* On assetchain */ -bool CheckMoMoM(uint256 kmdNotarizationHash, uint256 momom); +bool CheckMoMoM(uint256 hushNotarizationHash, uint256 momom); bool CheckNotariesApproval(uint256 burntxid, const std::vector & notaryTxids); -#endif /* CROSSCHAIN_H */ +#endif /* HUSH_CROSSCHAIN_H */ diff --git a/src/main.cpp b/src/main.cpp index d68eaadd5..b7a569233 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -264,11 +264,7 @@ namespace { set setDirtyFileInfo; } // anon namespace -////////////////////////////////////////////////////////////////////////////// -// // Registration of network node signals. -// - namespace { struct CBlockReject { @@ -5356,9 +5352,11 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat // Check for duplicate uint256 hash = block.GetHash(); BlockMap::iterator miSelf = mapBlockIndex.find(hash); + if(fDebug) { + std::cerr << __func__ << ": blockhash=" << hash.ToString() << endl; + } CBlockIndex *pindex = NULL; - if (miSelf != mapBlockIndex.end()) - { + if (miSelf != mapBlockIndex.end()) { // Block header is already known. if ( (pindex = miSelf->second) == 0 ) miSelf->second = pindex = AddToBlockIndex(block); @@ -5366,6 +5364,7 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat *ppindex = pindex; if ( pindex != 0 && (pindex->nStatus & BLOCK_FAILED_MASK) != 0 ) { if ( ASSETCHAINS_CC == 0 ) { + std::cerr << __func__ << ": block " << hash.ToString() << " marked invalid"; return state.Invalid(error("%s: block is marked invalid", __func__), 0, "duplicate"); } else { fprintf(stderr,"reconsider block %s\n",hash.GetHex().c_str()); @@ -5380,6 +5379,9 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat return false; } } + if(fDebug) { + fprintf(stderr,"%s: CheckBlockHeader passed\n",__func__); + } // Get prev block index CBlockIndex* pindexPrev = NULL; if (hash != chainparams.GetConsensus().hashGenesisBlock) @@ -5401,12 +5403,14 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat if ( (pindexPrev->nStatus & BLOCK_FAILED_MASK) ) return state.DoS(100, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk"); } - if (!ContextualCheckBlockHeader(block, state, pindexPrev)) - { + if (!ContextualCheckBlockHeader(block, state, pindexPrev)) { //fprintf(stderr,"AcceptBlockHeader ContextualCheckBlockHeader failed\n"); LogPrintf("%s: ContextualCheckBlockHeader failed\n",__func__); return false; } + if(fDebug) { + fprintf(stderr,"%s: ContextualCheckBlockHeader passed\n", hash.ToString()); + } if (pindex == NULL) { if ( (pindex= AddToBlockIndex(block)) != 0 ) @@ -7775,8 +7779,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, CBlockIndex *pindexLast = NULL; BOOST_FOREACH(const CBlockHeader& header, headers) { - //printf("size.%i, solution size.%i\n", (int)sizeof(header), (int)header.nSolution.size()); - //printf("hash.%s prevhash.%s nonce.%s\n", header.GetHash().ToString().c_str(), header.hashPrevBlock.ToString().c_str(), header.nNonce.ToString().c_str()); + if(fDebug) { + printf("%s: size.%i, solution size.%i\n", __func__, (int)sizeof(header), (int)header.nSolution.size()); + printf("%s: hash.%s prevhash.%s nonce.%s\n", __func__, header.GetHash().ToString().c_str(), header.hashPrevBlock.ToString().c_str(), header.nNonce.ToString().c_str()); + } CValidationState state; if (pindexLast != NULL && header.hashPrevBlock != pindexLast->GetBlockHash()) { diff --git a/src/pow.cpp b/src/pow.cpp index bb87f96ea..95f23a1ad 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "pow.h" #include "consensus/upgrades.h" #include "arith_uint256.h" @@ -501,6 +499,7 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead nbits = bnTarget.GetCompact(); nbits = (nbits & 0xfffffffc) | zawyflag; } + fprintf(stderr,"%s: nbits=%d\n", __func__, nbits); return(nbits); } diff --git a/src/utilmoneystr.cpp b/src/utilmoneystr.cpp index 5f75a93f8..f56bbb1af 100644 --- a/src/utilmoneystr.cpp +++ b/src/utilmoneystr.cpp @@ -1,10 +1,9 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers +// Copyright (c) 2016-2020 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 - #include "utilmoneystr.h" - #include "primitives/transaction.h" #include "tinyformat.h" #include "utilstrencodings.h" diff --git a/src/wallet-utility.cpp b/src/wallet-utility.cpp index 46cbb1e28..c46bcebbc 100644 --- a/src/wallet-utility.cpp +++ b/src/wallet-utility.cpp @@ -1,7 +1,8 @@ +// Copyright (c) 2019-2020 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 #include #include - -// Include local headers #include "wallet/walletdb.h" #include "util.h" #include "base58.h" From 86bd4998180a16c84d00bb64cd61e6dece60087a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 19:20:26 -0500 Subject: [PATCH 167/277] Tweaks --- src/chainparams.cpp | 10 +++++----- src/init.cpp | 24 +++++------------------- src/pow.cpp | 5 ++++- src/rpc/net.cpp | 4 ---- 4 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index ed071ed5b..15fba01cc 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -548,17 +548,17 @@ void hush_changeblocktime() void hush_setactivation(int32_t height) { - pCurrentParams->consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = height; + pCurrentParams->consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = height; pCurrentParams->consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = height; ASSETCHAINS_SAPLING = height; fprintf(stderr,"SET SAPLING ACTIVATION height.%d\n",height); } -void *chainparams_commandline() -{ - fprintf(stderr,"chainparams_commandline called\n"); +void *chainparams_commandline() { CChainParams::CCheckpointData checkpointData; - //fprintf(stderr,">>>>>>>> port.%u\n",ASSETCHAINS_P2PPORT); + if(fDebug) { + fprintf(stderr,"chainparams_commandline called with port=%u\n", ASSETCHAINS_P2PPORT); + } if ( SMART_CHAIN_SYMBOL[0] != 0 ) { if ( ASSETCHAINS_BLOCKTIME != 60 ) diff --git a/src/init.cpp b/src/init.cpp index 5c5f76863..8a5f8b5cb 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -127,11 +127,7 @@ static const char* DEFAULT_ASMAP_FILENAME="ip_asn.map"; CClientUIInterface uiInterface; // Declared but not defined in ui_interface.h -////////////////////////////////////////////////////////////////////////////// -// // Shutdown -// - // // Thread management and startup/shutdown: // @@ -151,7 +147,6 @@ CClientUIInterface uiInterface; // Declared but not defined in ui_interface.h // Note that if running -daemon the parent process returns from AppInit2 // before adding any threads to the threadGroup, so .join_all() returns // immediately and the parent exits from main(). -// std::atomic fRequestShutdown(false); @@ -201,7 +196,8 @@ void Interrupt(boost::thread_group& threadGroup) void Shutdown() { - fprintf(stderr,"%s: start\n", __FUNCTION__); + if(fDebug) + fprintf(stderr,"%s: start\n", __FUNCTION__); LogPrintf("%s: In progress...\n", __func__); static CCriticalSection cs_Shutdown; TRY_LOCK(cs_Shutdown, lockShutdown); @@ -217,7 +213,7 @@ void Shutdown() RenameThread(shutoffstr); mempool.AddTransactionsUpdated(1); - fprintf(stderr,"%s: stopping HTTP/REST/RPC\n", __FUNCTION__); + fprintf(stderr,"%s: stopping HUSH HTTP/REST/RPC\n", __FUNCTION__); StopHTTPRPC(); StopREST(); StopRPC(); @@ -288,17 +284,13 @@ void Shutdown() delete pwalletMain; pwalletMain = NULL; #endif - //delete pzcashParams; - //pzcashParams = NULL; globalVerifyHandle.reset(); ECC_Stop(); CNode::NetCleanup(); LogPrintf("%s: done\n", __func__); } -/** - * Signal handlers are very limited in what they are allowed to do, so: - */ +// Signal handlers are very limited in what they are allowed to do, so: void HandleSIGTERM(int) { fprintf(stderr,"%s\n",__FUNCTION__); @@ -359,7 +351,6 @@ std::string HelpMessage(HelpMessageMode mode) string strUsage = HelpMessageGroup(_("Options:")); strUsage += HelpMessageOpt("-?", _("This help message")); - strUsage += HelpMessageOpt("-alerts", strprintf(_("Receive and display P2P network alerts (default: %u)"), DEFAULT_ALERTS)); strUsage += HelpMessageOpt("-alertnotify=", _("Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message)")); strUsage += HelpMessageOpt("-blocknotify=", _("Execute command when the best block changes (%s in cmd is replaced by block hash)")); strUsage += HelpMessageOpt("-checkblocks=", strprintf(_("How many blocks to check at startup (default: %u, 0 = all)"), 288)); @@ -1028,9 +1019,6 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) if (mapArgs.count("-developerencryptwallet")) { fprintf(stderr,"%s wallet encryption error\n", __FUNCTION__); return InitError(_("Wallet encryption requires -experimentalfeatures.")); - } else if (mapArgs.count("-zmergetoaddress")) { - //fprintf(stderr,"%s zmerge error\n", __FUNCTION__); - //return InitError(_("RPC method z_mergetoaddress requires -experimentalfeatures.")); } } //fprintf(stderr,"%s tik2\n", __FUNCTION__); @@ -2024,9 +2012,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) { pwalletMain->ClearNoteWitnessCache(); pindexRescan = chainActive.Genesis(); - } - else - { + } else { CWalletDB walletdb(strWalletFile); CBlockLocator locator; if (walletdb.ReadBestBlock(locator)) diff --git a/src/pow.cpp b/src/pow.cpp index 95f23a1ad..256f61c19 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -499,7 +499,8 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead nbits = bnTarget.GetCompact(); nbits = (nbits & 0xfffffffc) | zawyflag; } - fprintf(stderr,"%s: nbits=%d\n", __func__, nbits); + if(fDebug) + fprintf(stderr,"%s: nbits=%d\n", __func__, nbits); return(nbits); } @@ -542,6 +543,8 @@ unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg, LogPrint("pow", "Current average: %08x %s\n", bnAvg.GetCompact(), bnAvg.ToString()); LogPrint("pow", "After: %08x %s\n", bnNew.GetCompact(), bnNew.ToString()); + if(fDebug) + fprintf(stderr,"%s: nbits=%u\n",__func__,nbits); return bnNew.GetCompact(); } diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 9834fde31..8b21ba029 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -17,9 +17,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "rpc/server.h" - #include "clientversion.h" #include "main.h" #include "net.h" @@ -31,9 +29,7 @@ #include "version.h" #include "deprecation.h" #include "hush/utiltls.h" - #include - #include using namespace std; From 31fc4099dfc9a58fdc581ad637beda5ff0654eb0 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 19:22:51 -0500 Subject: [PATCH 168/277] HUSH NSPV --- src/bitcoind.cpp | 2 +- src/cc/CCinclude.h | 2 +- src/cc/CCtokens.cpp | 2 +- src/cc/CCtx.cpp | 12 +++++------ src/cc/CCutils.cpp | 12 +++++------ src/cc/oracles.cpp | 2 +- src/consensus/upgrades.cpp | 16 +++++++-------- src/hush.h | 2 +- src/hush_defs.h | 14 ++++++------- src/hush_globals.h | 2 +- src/hush_utils.h | 2 +- src/init.cpp | 10 +++++----- src/komodo_nSPV.h | 6 +++--- src/komodo_nSPV_fullnode.h | 6 +++--- src/komodo_nSPV_superlite.h | 16 +++++++-------- src/komodo_nSPV_wallet.h | 6 +++--- src/main.cpp | 32 ++++++++++++++--------------- src/net.cpp | 18 ++++++++--------- src/rpc/blockchain.cpp | 4 ++-- src/rpc/misc.cpp | 2 +- src/rpc/rawtransaction.cpp | 4 ++-- src/script/sign.cpp | 22 ++++++++++---------- src/wallet/rpcdump.cpp | 40 ++++++++++++++++++------------------- src/wallet/rpcwallet.cpp | 8 ++++---- 24 files changed, 121 insertions(+), 121 deletions(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 1c28c8893..f318e9080 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -80,7 +80,7 @@ void WaitForShutdown(boost::thread_group* threadGroup) //fprintf(stderr,"call passport iteration\n"); if ( SMART_CHAIN_SYMBOL[0] == 0 ) { - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) hush_passport_iteration(); for (i=0; i<10; i++) { diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index 1fe1a6b4f..74abbbc8e 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -78,7 +78,7 @@ Details. #define CC_BURNPUBKEY "02deaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddead" //!< 'dead' pubkey in hex for burning tokens (if tokens are sent to it, they become 'burned') /// \cond INTERNAL #define CC_MAXVINS 1024 -#define CC_REQUIREMENTS_MSG (KOMODO_NSPV_SUPERLITE?"to use CC contracts you need to nspv_login first\n":"to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n") +#define CC_REQUIREMENTS_MSG (HUSH_NSPV_SUPERLITE?"to use CC contracts you need to nspv_login first\n":"to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n") #define SMALLVAL 0.000000000000001 #define SATOSHIDEN ((uint64_t)100000000L) diff --git a/src/cc/CCtokens.cpp b/src/cc/CCtokens.cpp index 49a189307..835ce6f3b 100644 --- a/src/cc/CCtokens.cpp +++ b/src/cc/CCtokens.cpp @@ -956,7 +956,7 @@ UniValue TokenInfo(uint256 tokenid) result.push_back(Pair("error", "cant find tokenid")); return(result); } - if ( KOMODO_NSPV_FULLNODE && hashBlock.IsNull()) { + if ( HUSH_NSPV_FULLNODE && hashBlock.IsNull()) { result.push_back(Pair("result", "error")); result.push_back(Pair("error", "the transaction is still in mempool")); return(result); diff --git a/src/cc/CCtx.cpp b/src/cc/CCtx.cpp index d06fe4a06..26d338cec 100644 --- a/src/cc/CCtx.cpp +++ b/src/cc/CCtx.cpp @@ -182,7 +182,7 @@ UniValue FinalizeCCTxExt(bool remote, uint64_t CCmask, struct CCcontract_info *c utxovout = mtx.vin[i].prevout.n; if ( vintx.vout[utxovout].scriptPubKey.IsPayToCryptoCondition() == 0 ) { - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) { if (!remote) { @@ -397,7 +397,7 @@ void NSPV_CCtxids(std::vector &txids,char *coinaddr,bool ccflag, uint8_ void SetCCunspents(std::vector > &unspentOutputs,char *coinaddr,bool ccflag) { int32_t type=0,i,n; char *ptr; std::string addrstr; uint160 hashBytes; std::vector > addresses; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { NSPV_CCunspents(unspentOutputs,coinaddr,ccflag); return; @@ -421,7 +421,7 @@ void SetCCunspents(std::vector > &addressIndex,char *coinaddr,bool ccflag) { int32_t type=0,i,n; char *ptr; std::string addrstr; uint160 hashBytes; std::vector > addresses; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { NSPV_CCtxids(addressIndex,coinaddr,ccflag); return; @@ -446,7 +446,7 @@ void SetCCtxids(std::vector &txids,char *coinaddr,bool ccflag, uint8_t { int32_t type=0,i,n; char *ptr; std::string addrstr; uint160 hashBytes; std::vector > addresses; std::vector > addressIndex; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { NSPV_CCtxids(txids,coinaddr,ccflag,evalcode,filtertxid,func); return; @@ -637,7 +637,7 @@ int32_t CC_vinselect(int32_t *aboveip,int64_t *abovep,int32_t *belowip,int64_t * int64_t AddNormalinputsLocal(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int32_t maxinputs) { int32_t abovei,belowi,ind,vout,i,n = 0; int64_t sum,threshold,above,below; int64_t remains,nValue,totalinputs = 0; uint256 txid,hashBlock; std::vector vecOutputs; CTransaction tx; struct CC_utxo *utxos,*up; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) return(NSPV_AddNormalinputs(mtx,mypk,total,maxinputs,&NSPV_U)); // if (mypk != pubkey2pk(Mypubkey())) //remote superlite mypk, do not use wallet since it is not locked for non-equal pks (see rpcs with nspv support)! @@ -746,7 +746,7 @@ int64_t AddNormalinputsRemote(CMutableTransaction &mtx, CPubKey mypk, int64_t to { int32_t abovei,belowi,ind,vout,i,n = 0; int64_t sum,threshold,above,below; int64_t remains,nValue,totalinputs = 0; char coinaddr[64]; uint256 txid,hashBlock; CTransaction tx; struct CC_utxo *utxos,*up; std::vector > unspentOutputs; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) return(NSPV_AddNormalinputs(mtx,mypk,total,maxinputs,&NSPV_U)); utxos = (struct CC_utxo *)calloc(CC_MAXVINS,sizeof(*utxos)); if ( maxinputs > CC_MAXVINS ) diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index 4dfb4a8f3..d599ff425 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -172,7 +172,7 @@ bool CheckTxFee(const CTransaction &tx, uint64_t txfee, uint32_t height, uint64_ uint32_t GetLatestTimestamp(int32_t height) { - if ( KOMODO_NSPV_SUPERLITE ) return ((uint32_t)NSPV_blocktime(height)); + if ( HUSH_NSPV_SUPERLITE ) return ((uint32_t)NSPV_blocktime(height)); return(komodo_heightstamp(height)); } // :P @@ -451,7 +451,7 @@ extern uint32_t NSPV_logintime; bool Myprivkey(uint8_t myprivkey[]) { char coinaddr[64],checkaddr[64]; std::string strAddress; char *dest; int32_t i,n; CBitcoinAddress address; CKeyID keyID; CKey vchSecret; uint8_t buf33[33]; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { if ( NSPV_logintime == 0 || time(NULL) > NSPV_logintime+NSPV_AUTOLOGOUT ) { @@ -591,7 +591,7 @@ int32_t NSPV_coinaddr_inmempool(char const *logcategory,char *coinaddr,uint8_t C int32_t myIs_coinaddr_inmempoolvout(char const *logcategory,char *coinaddr) { int32_t i,n; char destaddr[64]; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) return(NSPV_coinaddr_inmempool(logcategory,coinaddr,1)); BOOST_FOREACH(const CTxMemPoolEntry &e,mempool.mapTx) { @@ -620,7 +620,7 @@ int32_t myGet_mempool_txs(std::vector &txs,uint8_t evalcode,uint8_ { int i=0; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { CTransaction tx; uint256 hashBlock; @@ -668,7 +668,7 @@ uint256 BitcoinGetProofMerkleRoot(const std::vector &proofData, std::ve extern struct NSPV_inforesp NSPV_inforesult; int32_t komodo_get_current_height() { - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { return (NSPV_inforesult.height); } @@ -684,7 +684,7 @@ bool komodo_txnotarizedconfirmed(uint256 txid) CBlockIndex *pindex; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { if ( NSPV_myGetTransaction(txid,tx,hashBlock,txheight,currentheight) == 0 ) { diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index 3ec5a0935..14a1e328f 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -641,7 +641,7 @@ bool OraclesDataValidate(struct CCcontract_info *cp,Eval* eval,const CTransactio /*nt32_t GetLatestTimestamp(int32_t height) { - if ( KOMODO_NSPV_SUPERLITE ) return (NSPV_blocktime(height)); + if ( HUSH_NSPV_SUPERLITE ) return (NSPV_blocktime(height)); return(komodo_heightstamp(height)); } */ diff --git a/src/consensus/upgrades.cpp b/src/consensus/upgrades.cpp index d34c7e07d..93e503b70 100644 --- a/src/consensus/upgrades.cpp +++ b/src/consensus/upgrades.cpp @@ -18,16 +18,16 @@ ******************************************************************************/ #include "consensus/upgrades.h" -extern int32_t KOMODO_NSPV; +extern int32_t HUSH_NSPV; #define NSPV_BRANCHID 0x76b809bb -#ifndef KOMODO_NSPV_FULLNODE -#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0) -#endif // !KOMODO_NSPV_FULLNODE +#ifndef HUSH_NSPV_FULLNODE +#define HUSH_NSPV_FULLNODE (HUSH_NSPV <= 0) +#endif // !HUSH_NSPV_FULLNODE -#ifndef KOMODO_NSPV_SUPERLITE -#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0) -#endif // !KOMODO_NSPV_SUPERLITE +#ifndef HUSH_NSPV_SUPERLITE +#define HUSH_NSPV_SUPERLITE (HUSH_NSPV > 0) +#endif // !HUSH_NSPV_SUPERLITE /** * General information about each network upgrade. @@ -109,7 +109,7 @@ int CurrentEpoch(int nHeight, const Consensus::Params& params) { uint32_t CurrentEpochBranchId(int nHeight, const Consensus::Params& params) { - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) return(NSPV_BRANCHID); return NetworkUpgradeInfo[CurrentEpoch(nHeight, params)].nBranchId; } diff --git a/src/hush.h b/src/hush.h index 076ed2705..8c8bb3f55 100644 --- a/src/hush.h +++ b/src/hush.h @@ -68,7 +68,7 @@ extern struct NSPV_inforesp NSPV_inforesult; int32_t komodo_currentheight() { char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { return (NSPV_inforesult.height); } diff --git a/src/hush_defs.h b/src/hush_defs.h index ffad3fbc0..b2ce71807 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -502,7 +502,7 @@ extern int32_t KOMODO_BLOCK_POSUNITS, KOMODO_CONSECUTIVE_POS_THRESHOLD, KOMODO_N extern uint64_t ASSETCHAINS_TIMELOCKGTE; extern uint32_t ASSETCHAINS_ALGO,ASSETCHAINS_EQUIHASH,HUSH_INITDONE; -extern int32_t HUSH_MININGTHREADS,HUSH_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,KOMODO_NSPV; +extern int32_t HUSH_MININGTHREADS,HUSH_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,HUSH_NSPV; extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET; extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2]; extern const char *ASSETCHAINS_ALGORITHMS[]; @@ -579,11 +579,11 @@ int32_t komodo_blockload(CBlock& block, CBlockIndex *pindex); uint32_t komodo_chainactive_timestamp(); uint32_t GetLatestTimestamp(int32_t height); -#ifndef KOMODO_NSPV_FULLNODE -#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0) -#endif // !KOMODO_NSPV_FULLNODE -#ifndef KOMODO_NSPV_SUPERLITE -#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0) -#endif // !KOMODO_NSPV_SUPERLITE +#ifndef HUSH_NSPV_FULLNODE +#define HUSH_NSPV_FULLNODE (HUSH_NSPV <= 0) +#endif // !HUSH_NSPV_FULLNODE +#ifndef HUSH_NSPV_SUPERLITE +#define HUSH_NSPV_SUPERLITE (HUSH_NSPV > 0) +#endif // !HUSH_NSPV_SUPERLITE #endif diff --git a/src/hush_globals.h b/src/hush_globals.h index 10e56cf2a..5a1b3cbd2 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -47,7 +47,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100; unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 KOMODO_EARLYTXID; -int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,KOMODO_NSPV; +int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,HUSH_NSPV; int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; diff --git a/src/hush_utils.h b/src/hush_utils.h index 622a99c0d..a80e191e5 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1770,7 +1770,7 @@ void hush_args(char *argv0) FILE *fp; uint64_t val; uint16_t port; int32_t i,nonz=0,baseid,len,n,extralen = 0; uint64_t ccenables[256], ccEnablesHeight[512] = {0}; CTransaction earlytx; uint256 hashBlock; IS_HUSH_NOTARY = GetBoolArg("-notary", false); - KOMODO_NSPV = GetArg("-nSPV",0); + HUSH_NSPV = GetArg("-nSPV",0); memset(ccenables,0,sizeof(ccenables)); memset(disablebits,0,sizeof(disablebits)); memset(ccEnablesHeight,0,sizeof(ccEnablesHeight)); diff --git a/src/init.cpp b/src/init.cpp index 8a5f8b5cb..d2f2a8393 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1220,7 +1220,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) RegisterAllCoreRPCCommands(tableRPC); #ifdef ENABLE_WALLET bool fDisableWallet = GetBoolArg("-disablewallet", false); - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { fDisableWallet = true; nLocalServices = 0; @@ -1302,7 +1302,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // Option to startup with mocktime set (used for regression testing): SetMockTime(GetArg("-mocktime", 0)); // SetMockTime(0) is a no-op - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) { if (GetBoolArg("-peerbloomfilters", true)) nLocalServices |= NODE_BLOOM; @@ -1458,7 +1458,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) //fprintf(stderr,"%s tik15\n", __FUNCTION__); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) { // Initialize Zcash circuit parameters ZC_LoadParams(chainparams); @@ -1650,7 +1650,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) } #endif - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { std::vector vImportFiles; threadGroup.create_thread(boost::bind(&ThreadImport, vImportFiles)); @@ -2117,7 +2117,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) PruneAndFlush(); } } - if ( KOMODO_NSPV == 0 ) + if ( HUSH_NSPV == 0 ) { if ( GetBoolArg("-addressindex", DEFAULT_ADDRESSINDEX) != 0 ) nLocalServices |= NODE_ADDRINDEX; diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index bf0ae80ac..03fb09750 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -23,8 +23,8 @@ // make sure no files are updated (this is to allow nSPV=1 and later nSPV=0 without affecting database) // bug: under load, fullnode was returning all 0 nServices -#ifndef KOMODO_NSPV_H -#define KOMODO_NSPV_H +#ifndef HUSH_NSPV_H +#define HUSH_NSPV_H int32_t dragon_rwbuf(int32_t rwflag,uint8_t *serialized,int32_t len,uint8_t *buf) { @@ -599,4 +599,4 @@ int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 * } } else return(-1); } -#endif // KOMODO_NSPV_H +#endif // HUSH_NSPV_H diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index 86d9a2eb6..bfdd391a4 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -14,8 +14,8 @@ * * ******************************************************************************/ -#ifndef KOMODO_NSPVFULLNODE_H -#define KOMODO_NSPVFULLNODE_H +#ifndef HUSH_NSPVFULLNODE_H +#define HUSH_NSPVFULLNODE_H // NSPV_get... functions need to return the exact serialized length, which is the size of the structure minus size of pointers, plus size of allocated data @@ -1227,4 +1227,4 @@ void komodo_nSPVreq(CNode *pfrom,std::vector request) // received a req } } -#endif // KOMODO_NSPVFULLNODE_H +#endif // HUSH_NSPVFULLNODE_H diff --git a/src/komodo_nSPV_superlite.h b/src/komodo_nSPV_superlite.h index da94c7730..aaa0c1724 100644 --- a/src/komodo_nSPV_superlite.h +++ b/src/komodo_nSPV_superlite.h @@ -14,8 +14,8 @@ * * ******************************************************************************/ -#ifndef KOMODO_NSPVSUPERLITE_H -#define KOMODO_NSPVSUPERLITE_H +#ifndef HUSH_NSPVSUPERLITE_H +#define HUSH_NSPVSUPERLITE_H // nSPV client. VERY simplistic "single threaded" networking model. for production GUI best to multithread, etc. // no caching, no optimizations, no reducing the number of ntzsproofs needed by detecting overlaps, etc. @@ -220,7 +220,7 @@ void komodo_nSPVresp(CNode *pfrom,std::vector response) // received a r CNode *NSPV_req(CNode *pnode,uint8_t *msg,int32_t len,uint64_t mask,int32_t ind) { int32_t n,flag = 0; CNode *pnodes[64]; uint32_t timestamp = (uint32_t)time(NULL); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) return(0); if ( pnode == 0 ) { @@ -249,7 +249,7 @@ CNode *NSPV_req(CNode *pnode,uint8_t *msg,int32_t len,uint64_t mask,int32_t ind) std::vector request; request.resize(len); memcpy(&request[0],msg,len); - if ( (0) && KOMODO_NSPV_SUPERLITE ) + if ( (0) && HUSH_NSPV_SUPERLITE ) fprintf(stderr,"pushmessage [%d] len.%d\n",msg[0],len); pnode->PushMessage("getnSPV",request); pnode->prevtimes[ind] = timestamp; @@ -285,7 +285,7 @@ void komodo_nSPV(CNode *pto) // polling loop from SendMessages return; if ( pto->prevtimes[NSPV_INFO>>1] > timestamp ) pto->prevtimes[NSPV_INFO>>1] = 0; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { if ( timestamp > NSPV_lastinfo + ASSETCHAINS_BLOCKTIME/2 && timestamp > pto->prevtimes[NSPV_INFO>>1] + 2*ASSETCHAINS_BLOCKTIME/3 ) { @@ -361,7 +361,7 @@ UniValue NSPV_getinfo_json(struct NSPV_inforesp *ptr) { UniValue result(UniValue::VOBJ); int32_t expiration; uint32_t timestamp = (uint32_t)time(NULL); result.push_back(Pair("result","success")); - result.push_back(Pair("nSPV",KOMODO_NSPV==-1?"disabled":(KOMODO_NSPV_SUPERLITE?"superlite":"fullnode"))); + result.push_back(Pair("nSPV",HUSH_NSPV==-1?"disabled":(HUSH_NSPV_SUPERLITE?"superlite":"fullnode"))); if ( NSPV_address.size() != 0 ) { result.push_back(Pair("address",NSPV_address)); @@ -543,7 +543,7 @@ UniValue NSPV_login(char *wifstr) result.push_back(Pair("address",NSPV_address)); result.push_back(Pair("pubkey",HexStr(pubkey))); strcpy(NSPV_pubkeystr,HexStr(pubkey).c_str()); - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) decode_hex(NOTARY_PUBKEY33,33,NSPV_pubkeystr); result.push_back(Pair("wifprefix",(int64_t)data[0])); result.push_back(Pair("compressed",(int64_t)(data[len-5] == 1))); @@ -978,4 +978,4 @@ UniValue NSPV_ccmoduleutxos(char *coinaddr, int64_t amount, uint8_t evalcode, st return(result); } -#endif // KOMODO_NSPVSUPERLITE_H +#endif // HUSH_NSPVSUPERLITE_H diff --git a/src/komodo_nSPV_wallet.h b/src/komodo_nSPV_wallet.h index 76fc10d59..ced0c22bc 100644 --- a/src/komodo_nSPV_wallet.h +++ b/src/komodo_nSPV_wallet.h @@ -14,8 +14,8 @@ * * ******************************************************************************/ -#ifndef KOMODO_NSPVWALLET_H -#define KOMODO_NSPVWALLET_H +#ifndef HUSH_NSPVWALLET_H +#define HUSH_NSPVWALLET_H // nSPV wallet uses superlite functions (and some komodod built in functions) to implement nSPV_spend extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry); @@ -537,4 +537,4 @@ void NSPV_CCtxids(std::vector &txids,char *coinaddr,bool ccflag, uint8_ for(int i=0;iGetHeight() > KOMODO_STOPAT ) return(false); @@ -3820,7 +3820,7 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode) { void FlushStateToDisk() { CValidationState state; - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) FlushStateToDisk(state, FLUSH_STATE_ALWAYS); } @@ -4065,13 +4065,13 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * mapBlockSource.erase(pindexNew->GetBlockHash()); nTime3 = GetTimeMicros(); nTimeConnectTotal += nTime3 - nTime2; LogPrint("bench", " - Connect total: %.2fms [%.2fs]\n", (nTime3 - nTime2) * 0.001, nTimeConnectTotal * 0.000001); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) assert(view.Flush()); } int64_t nTime4 = GetTimeMicros(); nTimeFlush += nTime4 - nTime3; LogPrint("bench", " - Flush: %.2fms [%.2fs]\n", (nTime4 - nTime3) * 0.001, nTimeFlush * 0.000001); // Write the chain state to disk, if necessary. - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) { if (!FlushStateToDisk(state, FLUSH_STATE_IF_NEEDED)) return false; @@ -4111,9 +4111,9 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * komodo_broadcast(pblock,8); else if ( SMART_CHAIN_SYMBOL[0] != 0 ) komodo_broadcast(pblock,4);*/ - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) { - //fprintf(stderr,"%s: KOMODO_NSPV_FULLNODE\n", __FUNCTION__); + //fprintf(stderr,"%s: HUSH_NSPV_FULLNODE\n", __FUNCTION__); if ( ASSETCHAINS_CBOPRET != 0 ) komodo_pricesupdate(pindexNew->GetHeight(),pblock); if ( ASSETCHAINS_SAPLING <= 0 && pindexNew->nTime > KOMODO_SAPLING_ACTIVATION - 24*3600 ) @@ -6484,7 +6484,7 @@ bool InitBlockIndex() { if (!ActivateBestChain(true, state, &block)) return error("LoadBlockIndex(): genesis block cannot be activated"); // Force a chainstate write so that when we VerifyDB in a moment, it doesn't check stale data - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) return FlushStateToDisk(state, FLUSH_STATE_ALWAYS); else return(true); } catch (const std::runtime_error& e) { @@ -7044,7 +7044,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, { const CChainParams& chainparams = Params(); LogPrint("net", "received: %s (%u bytes) peer=%d\n", SanitizeString(strCommand), vRecv.size(), pfrom->id); - //if ( KOMODO_NSPV_SUPERLITE ) + //if ( HUSH_NSPV_SUPERLITE ) //if ( strCommand != "version" && strCommand != "verack" ) // fprintf(stderr, "recv: %s (%u bytes) peer=%d\n", SanitizeString(strCommand).c_str(), (int32_t)vRecv.size(), (int32_t)pfrom->GetId()); if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0) @@ -7216,7 +7216,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, { pfrom->SetRecvVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { if ( (pfrom->nServices & NODE_NSPV) == 0 ) { @@ -7416,7 +7416,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } else if (strCommand == "getnSPV") { - if ( KOMODO_NSPV == 0 )//&& HUSH_INSYNC != 0 ) + if ( HUSH_NSPV == 0 )//&& HUSH_INSYNC != 0 ) { std::vector payload; vRecv >> payload; @@ -7426,7 +7426,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } else if (strCommand == "nSPV") { - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { std::vector payload; vRecv >> payload; @@ -7434,7 +7434,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } return(true); } - else if ( KOMODO_NSPV_SUPERLITE ) + else if ( HUSH_NSPV_SUPERLITE ) return(true); else if (strCommand == "inv") { @@ -8222,7 +8222,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } state.fShouldBan = false; } - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { komodo_nSPV(pto); return(true); @@ -8412,7 +8412,7 @@ extern "C" const char* getDataDir() CMutableTransaction CreateNewContextualCMutableTransaction(const Consensus::Params& consensusParams, int nHeight) { CMutableTransaction mtx; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { mtx.fOverwintered = true; mtx.nExpiryHeight = 0; diff --git a/src/net.cpp b/src/net.cpp index b5e0bad84..de3ac44fc 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -568,14 +568,14 @@ void CNode::CloseSocketDisconnect() vRecvMsg.clear(); } -extern int32_t KOMODO_NSPV; -#ifndef KOMODO_NSPV_FULLNODE -#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0) -#endif // !KOMODO_NSPV_FULLNODE +extern int32_t HUSH_NSPV; +#ifndef HUSH_NSPV_FULLNODE +#define HUSH_NSPV_FULLNODE (HUSH_NSPV <= 0) +#endif // !HUSH_NSPV_FULLNODE -#ifndef KOMODO_NSPV_SUPERLITE -#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0) -#endif // !KOMODO_NSPV_SUPERLITE +#ifndef HUSH_NSPV_SUPERLITE +#define HUSH_NSPV_SUPERLITE (HUSH_NSPV > 0) +#endif // !HUSH_NSPV_SUPERLITE void CNode::PushVersion() { @@ -591,7 +591,7 @@ void CNode::PushVersion() LogPrint("net", "send version message: version %d, blocks=%d, us=%s, peer=%d\n", PROTOCOL_VERSION, nBestHeight, addrMe.ToString(), id); PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe, nLocalHostNonce, strSubVersion, nBestHeight, true); -//fprintf(stderr,"KOMODO_NSPV.%d PUSH services.%llx\n",KOMODO_NSPV,(long long)nLocalServices); +//fprintf(stderr,"HUSH_NSPV.%d PUSH services.%llx\n",HUSH_NSPV,(long long)nLocalServices); } @@ -2106,7 +2106,7 @@ bool StopNode() for (int i=0; ipost(); - if (KOMODO_NSPV_FULLNODE && fAddressesInitialized) + if (HUSH_NSPV_FULLNODE && fAddressesInitialized) { DumpAddresses(); fAddressesInitialized = false; diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 18cd192f2..aa9b5cd15 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -399,7 +399,7 @@ bool NSPV_inmempool(uint256 txid); bool myIsutxo_spentinmempool(uint256 &spenttxid,int32_t &spentvini,uint256 txid,int32_t vout) { int32_t vini = 0; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) return(NSPV_spentinmempool(spenttxid,spentvini,txid,vout)); BOOST_FOREACH(const CTxMemPoolEntry &e,mempool.mapTx) { @@ -423,7 +423,7 @@ bool myIsutxo_spentinmempool(uint256 &spenttxid,int32_t &spentvini,uint256 txid, bool mytxid_inmempool(uint256 txid) { - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { } diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index b3db69c5c..17decd37c 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -230,7 +230,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) obj.push_back(Pair("prevMoMheight", prevMoMheight)); obj.push_back(Pair("notarizedhash", notarized_hash.ToString())); obj.push_back(Pair("notarizedtxid", notarized_desttxid.ToString())); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) { txid_height = notarizedtxid_height(SMART_CHAIN_SYMBOL[0] != 0 ? (char *)"HUSH" : (char *)"BTC",(char *)notarized_desttxid.ToString().c_str(),&hushnotarized_height); if ( txid_height > 0 ) diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 3bfbd5dcc..28c15c93d 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -316,7 +316,7 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) const CTxOut& txout = tx.vout[i]; UniValue out(UniValue::VOBJ); out.push_back(Pair("value", ValueFromAmount(txout.nValue))); - if ( KOMODO_NSPV_FULLNODE && SMART_CHAIN_SYMBOL[0] == 0 && tx.nLockTime >= 500000000 && (tipindex= chainActive.LastTip()) != 0 ) + if ( HUSH_NSPV_FULLNODE && SMART_CHAIN_SYMBOL[0] == 0 && tx.nLockTime >= 500000000 && (tipindex= chainActive.LastTip()) != 0 ) { int64_t interest; int32_t txheight; uint32_t locktime; interest = komodo_accrued_interest(&txheight,&locktime,tx.GetHash(),i,0,txout.nValue,(int32_t)tipindex->GetHeight()); @@ -1251,7 +1251,7 @@ UniValue sendrawtransaction(const UniValue& params, bool fHelp, const CPubKey& m bool fOverrideFees = false; if (params.size() > 1) fOverrideFees = params[1].get_bool(); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) { CCoinsViewCache &view = *pcoinsTip; const CCoins* existingCoins = view.AccessCoins(hashTx); diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 5e73b8ace..62785f870 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -36,13 +36,13 @@ using namespace std; typedef vector valtype; extern uint8_t ASSETCHAINS_TXPOW; extern char NSPV_wifstr[],NSPV_pubkeystr[]; -extern int32_t KOMODO_NSPV; -#ifndef KOMODO_NSPV_FULLNODE -#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0) -#endif // !KOMODO_NSPV_FULLNODE -#ifndef KOMODO_NSPV_SUPERLITE -#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0) -#endif // !KOMODO_NSPV_SUPERLITE +extern int32_t HUSH_NSPV; +#ifndef HUSH_NSPV_FULLNODE +#define HUSH_NSPV_FULLNODE (HUSH_NSPV <= 0) +#endif // !HUSH_NSPV_FULLNODE +#ifndef HUSH_NSPV_SUPERLITE +#define HUSH_NSPV_SUPERLITE (HUSH_NSPV > 0) +#endif // !HUSH_NSPV_SUPERLITE uint256 SIG_TXHASH; @@ -60,7 +60,7 @@ bool TransactionSignatureCreator::CreateSig(std::vector& vchSig, } } SIG_TXHASH = hash; - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) key = DecodeSecret(NSPV_wifstr); else if (pprivKey) key = *pprivKey; @@ -81,7 +81,7 @@ bool TransactionSignatureCreator::CreateSig(std::vector& vchSig, return false; } vchSig = CCSigVec(cc); - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) memset((uint8_t *)key.begin(),0,32); return true; } @@ -107,7 +107,7 @@ bool TransactionSignatureCreator::CreateSig(std::vector& vchSig, } vchSig.push_back((unsigned char)nHashType); - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) memset((uint8_t *)key.begin(),0,32); return true; } @@ -388,7 +388,7 @@ static bool SignStep(const BaseSignatureCreator& creator, const CScript& scriptP } else { - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) { CPubKey vch; creator.KeyStore().GetPubKey(keyID, vch); diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index 2f2b4e1cc..a3643602c 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -1001,13 +1001,13 @@ UniValue z_exportviewingkey(const UniValue& params, bool fHelp, const CPubKey& m return EncodeViewingKey(ivk); } -extern int32_t KOMODO_NSPV; -#ifndef KOMODO_NSPV_FULLNODE -#define KOMODO_NSPV_FULLNODE (KOMODO_NSPV <= 0) -#endif // !KOMODO_NSPV_FULLNODE -#ifndef KOMODO_NSPV_SUPERLITE -#define KOMODO_NSPV_SUPERLITE (KOMODO_NSPV > 0) -#endif // !KOMODO_NSPV_SUPERLITE +extern int32_t HUSH_NSPV; +#ifndef HUSH_NSPV_FULLNODE +#define HUSH_NSPV_FULLNODE (HUSH_NSPV <= 0) +#endif // !HUSH_NSPV_FULLNODE +#ifndef HUSH_NSPV_SUPERLITE +#define HUSH_NSPV_SUPERLITE (HUSH_NSPV > 0) +#endif // !HUSH_NSPV_SUPERLITE uint256 zeroid; UniValue NSPV_getinfo_req(int32_t reqht); UniValue NSPV_login(char *wifstr); @@ -1031,7 +1031,7 @@ UniValue nspv_getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) int32_t reqht = 0; if ( fHelp || params.size() > 1 ) throw runtime_error("nspv_getinfo [hdrheight]\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); if ( params.size() == 1 ) reqht = atoi((char *)params[0].get_str().c_str()); @@ -1042,7 +1042,7 @@ UniValue nspv_logout(const UniValue& params, bool fHelp, const CPubKey& mypk) { if ( fHelp || params.size() != 0 ) throw runtime_error("nspv_logout\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); return(NSPV_logout()); } @@ -1051,7 +1051,7 @@ UniValue nspv_login(const UniValue& params, bool fHelp, const CPubKey& mypk) { if ( fHelp || params.size() != 1 ) throw runtime_error("nspv_login wif\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); return(NSPV_login((char *)params[0].get_str().c_str())); } @@ -1061,7 +1061,7 @@ UniValue nspv_listunspent(const UniValue& params, bool fHelp, const CPubKey& myp int32_t skipcount = 0,CCflag = 0; if ( fHelp || params.size() > 3 ) throw runtime_error("nspv_listunspent [address [isCC [skipcount]]]\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); if ( params.size() == 0 ) { @@ -1086,7 +1086,7 @@ UniValue nspv_mempool(const UniValue& params, bool fHelp, const CPubKey& mypk) memset(&txid,0,sizeof(txid)); if ( fHelp || params.size() > 5 ) throw runtime_error("nspv_mempool func(0 all, 1 address recv, 2 txid/vout spent, 3 txid inmempool) address isCC [txid vout]]]\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); funcid = atoi((char *)params[0].get_str().c_str()); coinaddr = (char *)params[1].get_str().c_str(); @@ -1106,7 +1106,7 @@ UniValue nspv_listtransactions(const UniValue& params, bool fHelp, const CPubKey int32_t skipcount = 0,CCflag = 0; if ( fHelp || params.size() > 3 ) throw runtime_error("nspv_listtransactions [address [isCC [skipcount]]]\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); if ( params.size() == 0 ) { @@ -1131,7 +1131,7 @@ UniValue nspv_spentinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) uint256 txid; int32_t vout; if ( fHelp || params.size() != 2 ) throw runtime_error("nspv_spentinfo txid vout\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); txid = Parseuint256((char *)params[0].get_str().c_str()); vout = atoi((char *)params[1].get_str().c_str()); @@ -1143,7 +1143,7 @@ UniValue nspv_notarizations(const UniValue& params, bool fHelp, const CPubKey& m int32_t height; if ( fHelp || params.size() != 1 ) throw runtime_error("nspv_notarizations height\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); height = atoi((char *)params[0].get_str().c_str()); return(NSPV_notarizations(height)); @@ -1154,7 +1154,7 @@ UniValue nspv_hdrsproof(const UniValue& params, bool fHelp, const CPubKey& mypk) int32_t prevheight,nextheight; if ( fHelp || params.size() != 2 ) throw runtime_error("nspv_hdrsproof prevheight nextheight\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); prevheight = atoi((char *)params[0].get_str().c_str()); nextheight = atoi((char *)params[1].get_str().c_str()); @@ -1166,7 +1166,7 @@ UniValue nspv_txproof(const UniValue& params, bool fHelp, const CPubKey& mypk) uint256 txid; int32_t height; if ( fHelp || params.size() != 2 ) throw runtime_error("nspv_txproof txid height\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); txid = Parseuint256((char *)params[0].get_str().c_str()); height = atoi((char *)params[1].get_str().c_str()); @@ -1178,7 +1178,7 @@ UniValue nspv_spend(const UniValue& params, bool fHelp, const CPubKey& mypk) uint64_t satoshis; if ( fHelp || params.size() != 2 ) throw runtime_error("nspv_spend address amount\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); if ( NSPV_address.size() == 0 ) throw runtime_error("to nspv_send you need an active nspv_login\n"); @@ -1193,7 +1193,7 @@ UniValue nspv_broadcast(const UniValue& params, bool fHelp, const CPubKey& mypk) { if ( fHelp || params.size() != 1 ) throw runtime_error("nspv_broadcast hex\n"); - if ( KOMODO_NSPV_FULLNODE ) + if ( HUSH_NSPV_FULLNODE ) throw runtime_error("-nSPV=1 must be set to use nspv\n"); return(NSPV_broadcast((char *)params[0].get_str().c_str())); } @@ -1207,7 +1207,7 @@ UniValue nspv_listccmoduleunspent(const UniValue& params, bool fHelp, const CPub "if amount is 0 just returns no utxos and available total.\n" "funcids is a string of funcid symbols. The first symbol is considered as the creation funcid, so the txid param will be compared to the creation tx id.\n" "For the second+ funcids the txid param will be compared to txid in opreturn\n\n" ); - if (KOMODO_NSPV_FULLNODE) + if (HUSH_NSPV_FULLNODE) throw runtime_error("-nSPV=1 must be set to use nspv\n"); std::string address = params[0].get_str().c_str(); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 66d24eeba..8d23370ee 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -177,7 +177,7 @@ void OS_randombytes(unsigned char *x,long xlen); UniValue getnewaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) { - if ( KOMODO_NSPV_FULLNODE && !EnsureWalletIsAvailable(fHelp) ) + if ( HUSH_NSPV_FULLNODE && !EnsureWalletIsAvailable(fHelp) ) return NullUniValue; if (fHelp || params.size() > 1) @@ -193,7 +193,7 @@ UniValue getnewaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) + HelpExampleRpc("getnewaddress", "") ); - if ( KOMODO_NSPV_SUPERLITE ) + if ( HUSH_NSPV_SUPERLITE ) { UniValue result(UniValue::VOBJ); uint8_t priv32[32]; #ifndef __WIN32 @@ -2990,7 +2990,7 @@ UniValue listunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) uint64_t komodo_interestsum() { #ifdef ENABLE_WALLET - if ( SMART_CHAIN_SYMBOL[0] == 0 && GetBoolArg("-disablewallet", false) == 0 && KOMODO_NSPV_FULLNODE ) + if ( SMART_CHAIN_SYMBOL[0] == 0 && GetBoolArg("-disablewallet", false) == 0 && HUSH_NSPV_FULLNODE ) { uint64_t interest,sum = 0; int32_t txheight; uint32_t locktime; vector vecOutputs; @@ -7028,7 +7028,7 @@ UniValue faucetfund(const UniValue& params, bool fHelp, const CPubKey& mypk) if ( fHelp || params.size() != 1 ) throw runtime_error("faucetfund amount\n"); funds = atof(params[0].get_str().c_str()) * COIN + 0.00000000499999; - if ( (0) && KOMODO_NSPV_SUPERLITE ) + if ( (0) && HUSH_NSPV_SUPERLITE ) { char coinaddr[64]; struct CCcontract_info *cp,C; CTxOut v; cp = CCinit(&C,EVAL_FAUCET); From 85423eef857676cd769e3b4a0831ed2944d72447 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 19:26:43 -0500 Subject: [PATCH 169/277] copyright --- src/komodo_curve25519.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/komodo_curve25519.h b/src/komodo_curve25519.h index b2f3ea49f..40d1e0345 100644 --- a/src/komodo_curve25519.h +++ b/src/komodo_curve25519.h @@ -1,3 +1,6 @@ +// Copyright (c) 2019-2020 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. * * * @@ -13,8 +16,8 @@ * * ******************************************************************************/ -#ifndef H_KOMODO25519_H -#define H_KOMODO25519_H +#ifndef H_HUSH25519_H +#define H_HUSH25519_H // derived from curve25519_donna #include From f773d11d21ccf126d240c5300f47a01a54f787a8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 19:28:46 -0500 Subject: [PATCH 170/277] updates --- src/komodo_gateway.h | 7 ++++--- src/komodo_kv.h | 7 +++++-- src/main.cpp | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index e8d651694..f57017718 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1,4 +1,6 @@ -// Copyright 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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. * * * @@ -13,8 +15,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - -// paxdeposit equivalent in reverse makes opreturn and KMD does the same in reverse +// paxdeposit equivalent in reverse makes opreturn and HUSH does the same in reverse #include "hush_defs.h" /*#include "secp256k1/include/secp256k1.h" diff --git a/src/komodo_kv.h b/src/komodo_kv.h index 4790c4fb9..891717855 100644 --- a/src/komodo_kv.h +++ b/src/komodo_kv.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * @@ -13,8 +16,8 @@ * * ******************************************************************************/ -#ifndef H_KOMODOKV_H -#define H_KOMODOKV_H +#ifndef H_HUSHKV_H +#define H_HUSHKV_H #include "hush_defs.h" diff --git a/src/main.cpp b/src/main.cpp index 16c106abc..8d2e803c2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** From e2189bc7a382c2b13c08ff4fa34a96004fbd44ab Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 20:49:07 -0500 Subject: [PATCH 171/277] copyright --- src/komodo_ccdata.h | 7 +++++-- src/komodo_nSPV.h | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/komodo_ccdata.h b/src/komodo_ccdata.h index 9d9302f53..c1755314f 100644 --- a/src/komodo_ccdata.h +++ b/src/komodo_ccdata.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * @@ -13,8 +16,8 @@ * * ******************************************************************************/ -#ifndef H_KOMODOCCDATA_H -#define H_KOMODOCCDATA_H +#ifndef H_HUSHCCDATA_H +#define H_HUSHCCDATA_H struct komodo_ccdata *CC_data; int32_t CC_firstheight; diff --git a/src/komodo_nSPV.h b/src/komodo_nSPV.h index 03fb09750..7a9f61802 100644 --- a/src/komodo_nSPV.h +++ b/src/komodo_nSPV.h @@ -1,4 +1,6 @@ - +// Copyright (c) 2016-2020 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. * * * @@ -13,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - // todo: // spentinfo via CC From 310ed2a4347bee6003a04e196afc2d9ffc079409 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 20:49:23 -0500 Subject: [PATCH 172/277] This Shit Seems To Work --- src/main.cpp | 34 +++++++++++++++++++++++++--------- src/pow.cpp | 2 +- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8d2e803c2..bc169ddf6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5234,16 +5234,32 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta int nHeight = pindexPrev->GetHeight()+1; + bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; // Check Proof-of-Work - if ( (SMART_CHAIN_SYMBOL[0] != 0 || nHeight < 235300 || nHeight > 236000) && block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) { - cout << "Incorrect Proof-of-Work! " << - block.nBits << " block.nBits vs. calc " << - GetNextWorkRequired(pindexPrev, &block, consensusParams) << - " for height " << nHeight << " " << - block.GetHash().ToString() << " with time " << - block.GetBlockTime() << endl; + if(ishush3) { + unsigned int nNextWork = GetNextWorkRequired(pindexPrev, &block, consensusParams); + unsigned int diffbits = nNextWork > block.nBits ? nNextWork-block.nBits : block.nBits-nNextWork; - return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); + // The change of blocktime from 150s to 75s seems to have messed up our difficulty calc + if ((nHeight < 340000 || nHeight > 342500) && block.nBits != nNextWork) { + cout << "Incorrect HUSH Proof-of-Work at height " << nHeight << " " << block.nBits << " block.nBits vs. calc " << + nNextWork << " " << block.GetHash().ToString() << " @ " << block.GetBlockTime() << endl; + + return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d diffbits=%u", __func__, nHeight, diffbits), REJECT_INVALID, "bad-diffbits"); + } else { + fprintf(stderr,"%s: Ignoring weird nBits %u with diffbits %u for height %d\n", __func__, block.nBits, diffbits, nHeight); + } + } else { + // TODO: unify this with the code above + if ( block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) { + cout << "Incorrect Proof-of-Work! " << block.nBits << " block.nBits vs. calc " << + GetNextWorkRequired(pindexPrev, &block, consensusParams) << + " for height " << nHeight << " " << + block.GetHash().ToString() << " with time " << + block.GetBlockTime() << endl; + + return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); + } } // Check timestamp against prev @@ -5409,7 +5425,7 @@ bool AcceptBlockHeader(int32_t *futureblockp,const CBlockHeader& block, CValidat return false; } if(fDebug) { - fprintf(stderr,"%s: ContextualCheckBlockHeader passed\n", hash.ToString()); + fprintf(stderr,"%s: ContextualCheckBlockHeader passed: %s\n", __func__, hash.ToString().c_str()); } if (pindex == NULL) { diff --git a/src/pow.cpp b/src/pow.cpp index 256f61c19..d18d75ca2 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -544,7 +544,7 @@ unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg, LogPrint("pow", "After: %08x %s\n", bnNew.GetCompact(), bnNew.ToString()); if(fDebug) - fprintf(stderr,"%s: nbits=%u\n",__func__,nbits); + fprintf(stderr,"%s: nbits=%u\n",__func__,bnNew.GetCompact()); return bnNew.GetCompact(); } From 30220ac8559dc3d05ccdb0076625b8eac9e82b56 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 21:16:54 -0500 Subject: [PATCH 173/277] less logspam plzzzz --- src/komodo_bitcoind.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 2a789f05e..0e4cff405 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -1,7 +1,6 @@ // Copyright 2019-2020 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. * * * @@ -16,9 +15,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - -// Hush + Komodo functions that interact with bitcoind C++ - +// Hush functions that interact with bitcoind C++ #include #include #include "consensus/params.h" @@ -1261,7 +1258,7 @@ uint64_t hush_commission(int height) // With 150s blocks, we have 210,000 blocks per year // With 75s blocks, we have 420,000 blocks per year INTERVAL = GetArg("-ac_halving2",1680000); // ~4 years worth of 75s blocks - fprintf(stderr,"%s: height=%d increasing interval to %d\n", __func__, height, INTERVAL); + //fprintf(stderr,"%s: height=%d increasing interval to %d\n", __func__, height, INTERVAL); } // Block 128 had a miner subsidy but no FR!!! Discovered by Denio From 4990f051bd55f7a7dc625f67cd5ced04fd29a5a0 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 9 Dec 2020 21:33:50 -0500 Subject: [PATCH 174/277] Partial fix --- src/main.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index bc169ddf6..cb9fe122b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -105,8 +105,7 @@ bool fCoinbaseEnforcedProtectionEnabled = true; size_t nCoinCacheUsage = 5000 * 300; uint64_t nPruneTarget = 0; bool fAlerts = DEFAULT_ALERTS; -/* If the tip is older than this (in seconds), the node is considered to be in initial block download. - */ +// If the tip is older than this (in seconds), the node is considered to be in initial block download. int64_t nMaxTipAge = DEFAULT_MAX_TIP_AGE; bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; int32_t nFirstHalvingHeight = 340000; @@ -5232,25 +5231,25 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta assert(pindexPrev); - int nHeight = pindexPrev->GetHeight()+1; - + int nHeight = pindexPrev->GetHeight()+1; bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; // Check Proof-of-Work if(ishush3) { + // The change of blocktime from 150s to 75s caused Weird Stuff in the difficulty/work calculations + // caused by the fact that Difficulty Adjustment Algorithms do not take into account blocktime + // changing at run-time, which breaks assumptions in the algorithm unsigned int nNextWork = GetNextWorkRequired(pindexPrev, &block, consensusParams); - unsigned int diffbits = nNextWork > block.nBits ? nNextWork-block.nBits : block.nBits-nNextWork; - - // The change of blocktime from 150s to 75s seems to have messed up our difficulty calc if ((nHeight < 340000 || nHeight > 342500) && block.nBits != nNextWork) { cout << "Incorrect HUSH Proof-of-Work at height " << nHeight << " " << block.nBits << " block.nBits vs. calc " << nNextWork << " " << block.GetHash().ToString() << " @ " << block.GetBlockTime() << endl; - return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d diffbits=%u", __func__, nHeight, diffbits), REJECT_INVALID, "bad-diffbits"); + return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); } else { - fprintf(stderr,"%s: Ignoring weird nBits %u with diffbits %u for height %d\n", __func__, block.nBits, diffbits, nHeight); + if( nHeight >= 340000 || nHeight <= 342500) + fprintf(stderr,"%s: Ignoring weird nBits with block.nBits=%u vs GetNextWorkRequired=%u for height %d\n", __func__, block.nBits, nNextWork, nHeight); } } else { - // TODO: unify this with the code above + // Hush Smart Chains if ( block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) { cout << "Incorrect Proof-of-Work! " << block.nBits << " block.nBits vs. calc " << GetNextWorkRequired(pindexPrev, &block, consensusParams) << @@ -8423,7 +8422,6 @@ extern "C" const char* getDataDir() return GetDataDir().string().c_str(); } - // Set default values of new CMutableTransaction based on consensus rules at given height. CMutableTransaction CreateNewContextualCMutableTransaction(const Consensus::Params& consensusParams, int nHeight) { From 6ed55cc5a404e3422803fbda806d764b9935b282 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 05:19:57 -0500 Subject: [PATCH 175/277] Faster feedback, CI Coming Soon --- build.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index 2ae8514c3..1367218b6 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,7 @@ #!/bin/bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 set -eu -o pipefail -./zcutil/build.sh $@ +./zcutil/build.sh --disable-tests $@ From 2b9e993c31b9cadd0bf716a8d67a558e1b61ad37 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 06:51:02 -0500 Subject: [PATCH 176/277] Hush Hush Hush --- src/cc/payments.cpp | 4 ++-- src/hush_defs.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc/payments.cpp b/src/cc/payments.cpp index 0c6edb284..34b1a10ee 100644 --- a/src/cc/payments.cpp +++ b/src/cc/payments.cpp @@ -406,7 +406,7 @@ bool PaymentsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction & else if ( funcid == 'S' || funcid == 'O' ) { // snapshot payment - if ( KOMODO_SNAPSHOT_INTERVAL == 0 ) + if ( HUSH_SNAPSHOT_INTERVAL == 0 ) return(eval->Invalid("snapshots not activated on this chain")); if ( vAddressSnapshot.size() == 0 ) return(eval->Invalid("need first snapshot")); @@ -1220,7 +1220,7 @@ UniValue PaymentsAirdrop(struct CCcontract_info *cp,char *jsonstr) UniValue result(UniValue::VOBJ); uint256 hashBlock; CTransaction tx; CPubKey Paymentspk,mypk; char markeraddr[64]; std::string rawtx; int32_t lockedblocks,minrelease,top,bottom,n,i,minimum=10000; std::vector> excludeScriptPubKeys; int8_t fixedAmount; - if ( KOMODO_SNAPSHOT_INTERVAL == 0 ) + if ( HUSH_SNAPSHOT_INTERVAL == 0 ) { result.push_back(Pair("result","error")); result.push_back(Pair("error","cannot use airdrop wihtout -ac_snapshot set.")); diff --git a/src/hush_defs.h b/src/hush_defs.h index b2ce71807..3924f03cc 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -525,7 +525,7 @@ extern uint8_t ASSETCHAINS_PRIVATE; extern int32_t USE_EXTERNAL_PUBKEY; extern char NOTARYADDRS[64][64]; extern char NOTARY_ADDRESSES[NUM_HUSH_SEASONS][64][64]; -extern int32_t HUSH_TESTNODE, KOMODO_SNAPSHOT_INTERVAL; +extern int32_t HUSH_TESTNODE, HUSH_SNAPSHOT_INTERVAL; extern int32_t ASSETCHAINS_EARLYTXIDCONTRACT; extern int32_t ASSETCHAINS_STAKED_SPLIT_PERCENTAGE; int tx_height( const uint256 &hash ); From 92865cf83ba2afd611688db465d0f3995d310e2a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 06:51:37 -0500 Subject: [PATCH 177/277] update globals --- src/hush_globals.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hush_globals.h b/src/hush_globals.h index 5a1b3cbd2..8c19b9eb4 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -59,7 +59,7 @@ char NOTARY_ADDRESSES[NUM_HUSH_SEASONS][64][64]; char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN],ASSETCHAINS_USERPASS[4096]; uint16_t ASSETCHAINS_P2PPORT,ASSETCHAINS_RPCPORT,ASSETCHAINS_BEAMPORT,ASSETCHAINS_CODAPORT; -uint32_t ASSETCHAIN_INIT,ASSETCHAINS_CC,KOMODO_STOPAT,HUSH_DPOWCONFS = 1,STAKING_MIN_DIFF; +uint32_t ASSETCHAIN_INIT,ASSETCHAINS_CC,HUSH_STOPAT,HUSH_DPOWCONFS = 1,STAKING_MIN_DIFF; uint32_t ASSETCHAINS_MAGIC = 2387029918; int64_t ASSETCHAINS_GENESISTXVAL = 5000000000; @@ -100,7 +100,7 @@ char KMDUSERPASS[8192+512+1],BTCUSERPASS[8192]; uint16_t KMD_PORT = 7771,BITCOIN uint64_t PENDING_KOMODO_TX; extern int32_t HUSH_LOADINGBLOCKS; unsigned int MAX_BLOCK_SIGOPS = 20000; -int32_t HUSH_TESTNODE, KOMODO_SNAPSHOT_INTERVAL; +int32_t HUSH_TESTNODE, HUSH_SNAPSHOT_INTERVAL; CScript KOMODO_EARLYTXID_SCRIPTPUB; int32_t ASSETCHAINS_EARLYTXIDCONTRACT; std::map mapHeightEvalActivate; From 895b624abdc434ac023e24e29319b2b535011543 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 06:53:56 -0500 Subject: [PATCH 178/277] nope --- src/rpc/blockchain.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index aa9b5cd15..455773064 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "amount.h" #include "chain.h" #include "chainparams.h" @@ -38,13 +36,9 @@ #include "script/sign.h" #include "script/standard.h" #include "wallet/wallet.h" - #include - #include - #include - #include "cc/CCinclude.h" #include "cc/CCPrices.h" @@ -960,7 +954,7 @@ UniValue minerids(const UniValue& params, bool fHelp, const CPubKey& mypk) kmdaddress.resize(m); ptr = (char *)kmdaddress.data(); memcpy(ptr,kmdaddr,m); - item.push_back(Pair("KMDaddress", kmdaddress)); + item.push_back(Pair("HUSHaddress", kmdaddress)); item.push_back(Pair("pubkey", hex)); item.push_back(Pair("blocks", tally[i])); @@ -1022,7 +1016,7 @@ UniValue notaries(const UniValue& params, bool fHelp, const CPubKey& mypk) kmdaddress.resize(m); ptr = (char *)kmdaddress.data(); memcpy(ptr,kmdaddr,m); - item.push_back(Pair("KMDaddress", kmdaddress)); + item.push_back(Pair("HUSHaddress", kmdaddress)); a.push_back(item); } } From 6fd41c3e752fc3eec772d197843f94ff97834bd4 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 06:55:37 -0500 Subject: [PATCH 179/277] nope nope --- src/rpc/blockchain.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 455773064..238cedf5e 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -942,7 +942,7 @@ UniValue minerids(const UniValue& params, bool fHelp, const CPubKey& mypk) } for (i=0; i<64; i++) { - UniValue item(UniValue::VOBJ); std::string hex,kmdaddress; char *hexstr,kmdaddr[64],*ptr; int32_t m; + UniValue item(UniValue::VOBJ); std::string hex,hushaddress; char *hexstr,kmdaddr[64],*ptr; int32_t m; hex.resize(66); hexstr = (char *)hex.data(); for (j=0; j<33; j++) @@ -951,10 +951,10 @@ UniValue minerids(const UniValue& params, bool fHelp, const CPubKey& mypk) bitcoin_address(kmdaddr,60,pubkeys[i],33); m = (int32_t)strlen(kmdaddr); - kmdaddress.resize(m); - ptr = (char *)kmdaddress.data(); + hushaddress.resize(m); + ptr = (char *)hushaddress.data(); memcpy(ptr,kmdaddr,m); - item.push_back(Pair("HUSHaddress", kmdaddress)); + item.push_back(Pair("HUSHaddress", hushaddress)); item.push_back(Pair("pubkey", hex)); item.push_back(Pair("blocks", tally[i])); @@ -997,7 +997,7 @@ UniValue notaries(const UniValue& params, bool fHelp, const CPubKey& mypk) for (i=0; i Date: Thu, 10 Dec 2020 06:56:46 -0500 Subject: [PATCH 180/277] fix compiler unhappiness --- src/rpc/misc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 17decd37c..d07dd8d2d 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -1284,7 +1284,7 @@ UniValue getsnapshot(const UniValue& params, bool fHelp, const CPubKey& mypk) top = atoi(params[0].get_str().c_str()); if ( top < 0 ) { - if ( KOMODO_SNAPSHOT_INTERVAL == 0 ) + if ( HUSH_SNAPSHOT_INTERVAL == 0 ) throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, top must be a positive integer"); else top = -1; From fd753569bf6c1961a2047716396ebffa3b495549 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 06:57:15 -0500 Subject: [PATCH 181/277] we cuddle our elses around here --- src/wallet/rpcwallet.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 8d23370ee..113a36557 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5678,14 +5678,10 @@ int32_t ensure_CCrequirements(uint8_t evalcode) { fprintf(stderr,"no -pubkey set\n"); return(-1); - } - else if ( GetBoolArg("-addressindex", DEFAULT_ADDRESSINDEX) == 0 ) - { + } else if ( GetBoolArg("-addressindex", DEFAULT_ADDRESSINDEX) == 0 ) { fprintf(stderr,"no -addressindex\n"); return(-1); - } - else if ( GetBoolArg("-spentindex", DEFAULT_SPENTINDEX) == 0 ) - { + } else if ( GetBoolArg("-spentindex", DEFAULT_SPENTINDEX) == 0 ) { fprintf(stderr,"no -spentindex\n"); return(-1); } From e46ae59f5eb3350c160afd68871ecbfd6facd084 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 06:58:03 -0500 Subject: [PATCH 182/277] init changes --- src/init.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index d2f2a8393..8c30d11c1 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -92,7 +92,7 @@ extern void ThreadSendAlert(); extern bool komodo_dailysnapshot(int32_t height); extern int32_t HUSH_LOADINGBLOCKS; extern char SMART_CHAIN_SYMBOL[]; -extern int32_t KOMODO_SNAPSHOT_INTERVAL; +extern int32_t HUSH_SNAPSHOT_INTERVAL; extern void komodo_init(int32_t height); #ifdef ENABLE_WALLET @@ -1800,7 +1800,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) break; } - if ( ASSETCHAINS_CC != 0 && KOMODO_SNAPSHOT_INTERVAL != 0 && chainActive.Height() >= KOMODO_SNAPSHOT_INTERVAL ) + if ( ASSETCHAINS_CC != 0 && HUSH_SNAPSHOT_INTERVAL != 0 && chainActive.Height() >= HUSH_SNAPSHOT_INTERVAL ) { if ( !komodo_dailysnapshot(chainActive.Height()) ) { From c8513c22815866741606060aab247ba9a56b9488 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 06:58:37 -0500 Subject: [PATCH 183/277] more header file changes --- src/komodo_bitcoind.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index 0e4cff405..acd066f63 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -2024,7 +2024,7 @@ void GetKomodoEarlytxidScriptPub() StartShutdown(); return; } - if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_SNAPSHOT_INTERVAL == 0 ) + if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_SNAPSHOT_INTERVAL == 0 ) { fprintf(stderr, "Prices->paymentsCC contract must have -ac_snapshot enabled to pay out.\n"); StartShutdown(); From 8ccc5f0f3f3c1114296b3576d3bb4ef06898711a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 06:59:43 -0500 Subject: [PATCH 184/277] Hushin' it --- src/main.cpp | 6 +++--- src/miner.cpp | 2 -- src/miner.h | 2 -- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index cb9fe122b..9e993a327 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -668,7 +668,7 @@ bool komodo_dailysnapshot(int32_t height) // Under heavy reorg attack, its possible `hush_notarized_height` can return a height that can't be found on chain sync. // However, the DB can reorg the last notarization. By using 2 deep, we know 100% that the previous notarization cannot be reorged by online nodes, // and as such will always be notarizing the same height. May need to check heights on scan back to make sure they are confirmed in correct order. - if ( (extraoffset= height % KOMODO_SNAPSHOT_INTERVAL) != 0 ) + if ( (extraoffset= height % HUSH_SNAPSHOT_INTERVAL) != 0 ) { // we are on chain init, and need to scan all the way back to the correct height, other wise our node will have a diffrent snapshot to online nodes. // use the notarizationsDB to scan back from the consesnus height to get the offset we need. @@ -3227,7 +3227,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin const CChainParams& chainparams = Params(); if ( HUSH_NSPV_SUPERLITE ) return(true); - if ( KOMODO_STOPAT != 0 && pindex->GetHeight() > KOMODO_STOPAT ) + if ( HUSH_STOPAT != 0 && pindex->GetHeight() > HUSH_STOPAT ) return(false); //fprintf(stderr,"connectblock ht.%d\n",(int32_t)pindex->GetHeight()); AssertLockHeld(cs_main); @@ -4117,7 +4117,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * komodo_pricesupdate(pindexNew->GetHeight(),pblock); if ( ASSETCHAINS_SAPLING <= 0 && pindexNew->nTime > KOMODO_SAPLING_ACTIVATION - 24*3600 ) komodo_activate_sapling(pindexNew); - if ( ASSETCHAINS_CC != 0 && KOMODO_SNAPSHOT_INTERVAL != 0 && (pindexNew->GetHeight() % KOMODO_SNAPSHOT_INTERVAL) == 0 && pindexNew->GetHeight() >= KOMODO_SNAPSHOT_INTERVAL ) + if ( ASSETCHAINS_CC != 0 && HUSH_SNAPSHOT_INTERVAL != 0 && (pindexNew->GetHeight() % HUSH_SNAPSHOT_INTERVAL) == 0 && pindexNew->GetHeight() >= HUSH_SNAPSHOT_INTERVAL ) { uint64_t start = time(NULL); if ( !komodo_dailysnapshot(pindexNew->GetHeight()) ) diff --git a/src/miner.cpp b/src/miner.cpp index e4732b70d..4b7bcb08c 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "pubkey.h" #include "miner.h" #ifdef ENABLE_MINING diff --git a/src/miner.h b/src/miner.h index 876a57f61..b48ff5562 100644 --- a/src/miner.h +++ b/src/miner.h @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -23,7 +22,6 @@ #define HUSH_MINER_H #include "primitives/block.h" - #include #include From 94ef41b7c7108d5198b61fbf35317e326982bcb0 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 07:00:35 -0500 Subject: [PATCH 185/277] We workin' --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index f57017718..7720f50ad 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1474,7 +1474,7 @@ void hush_passport_iteration() { refsp->RTmask &= ~(1LL << baseid); hush_statefname(fname,baseid<32?base:(char *)"",(char *)"hushstate"); - komodo_nameset(symbol,dest,base); + hush_nameset(symbol,dest,base); sp = hush_stateptrget(symbol); n = 0; if ( lastpos[baseid] == 0 && (filedata= OS_fileptr(&datalen,fname)) != 0 ) From 245af3375540dfa89fc8d0b9811caac4ae2b9000 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 07:42:52 -0500 Subject: [PATCH 186/277] wiplulz --- src/hush_utils.h | 240 +++++++++++++++++++---------------------------- 1 file changed, 96 insertions(+), 144 deletions(-) diff --git a/src/hush_utils.h b/src/hush_utils.h index a80e191e5..f81ae46aa 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** @@ -949,9 +949,7 @@ int32_t dragon_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endian case 4: *(uint32_t *)endianedp = (uint32_t)x; break; case 8: *(uint64_t *)endianedp = (uint64_t)x; break; } - } - else - { + } else { x = 0; switch ( len ) { @@ -1464,11 +1462,14 @@ uint16_t komodo_userpass(char *userpass,char *symbol) return(port); } +#define HUSH_MAGIC 0xc0decafe + +// CAN YOU FEEL THE HUSH MAGIC??? uint32_t komodo_assetmagic(char *symbol,uint64_t supply,uint8_t *extraptr,int32_t extralen) { uint8_t buf[512]; uint32_t crc0=0; int32_t len = 0; bits256 hash; - if ( strcmp(symbol,"KMD") == 0 ) - return(0x8de4eef9); + if ( strcmp(symbol,"HUSH3") == 0 ) + return(HUSH_MAGIC); len = dragon_rwnum(1,&buf[len],sizeof(supply),(void *)&supply); strcpy((char *)&buf[len],symbol); len += strlen(symbol); @@ -1485,34 +1486,35 @@ uint32_t komodo_assetmagic(char *symbol,uint64_t supply,uint8_t *extraptr,int32_ uint16_t komodo_assetport(uint32_t magic,int32_t extralen) { - if ( magic == 0x8de4eef9 ) - return(7770); + if(fDebug) + fprintf(stderr,"%s: extralen=%d\n",__func__,extralen); else if ( extralen == 0 ) return(8000 + (magic % 7777)); else return(16000 + (magic % 49500)); } +// DUKE: extralen is sometimes wrong which causes wrong diffbits? +// This function is only called on startup, blocktime changing code does not modify magic +// Hush 3.5.x and Hush 3.6.x have same history and p2p ports, but different magic uint16_t komodo_port(char *symbol,uint64_t supply,uint32_t *magicp,uint8_t *extraptr,int32_t extralen) { - if ( symbol == 0 || symbol[0] == 0 || strcmp("KMD",symbol) == 0 ) + if(fDebug) + fprintf(stderr,"%s: extralen=%d\n",__func__,extralen); + /* + if ( strcmp("HUSH3",symbol) == 0 ) { - *magicp = 0x8de4eef9; - return(7770); + //TODO: magic of hush 3.5.x + *magicp = 0x8de4beef; + return(18030); } + */ *magicp = komodo_assetmagic(symbol,supply,extraptr,extralen); + if(fDebug) + fprintf(stderr,"%s: extralen=%d, magic=%d, supply=%l\n",__func__,extralen, &magic, supply); + return(komodo_assetport(*magicp,extralen)); } -/*void komodo_ports(uint16_t ports[MAX_CURRENCIES]) -{ - int32_t i; uint32_t magic; - for (i=0; i (uint64_t)90*1000*1000000 ) { - fprintf(stderr,"-ac_supply must be less than 90 billion\n"); + fprintf(stderr,"-ac_supply must be less than 90 billion, derpz\n"); StartShutdown(); } - fprintf(stderr,"ASSETCHAINS_SUPPLY %llu\n",(long long)ASSETCHAINS_SUPPLY); + if(fDebug) + fprintf(stderr,"ASSETCHAINS_SUPPLY %llu\n",(long long)ASSETCHAINS_SUPPLY); - ASSETCHAINS_COMMISSION = GetArg("-ac_perc",0); + ASSETCHAINS_COMMISSION = GetArg("-ac_perc",0); ASSETCHAINS_OVERRIDE_PUBKEY = GetArg("-ac_pubkey",""); - ASSETCHAINS_SCRIPTPUB = GetArg("-ac_script",""); - ASSETCHAINS_BEAMPORT = GetArg("-ac_beam",0); - ASSETCHAINS_CODAPORT = GetArg("-ac_coda",0); - ASSETCHAINS_CBOPRET = GetArg("-ac_cbopret",0); - ASSETCHAINS_CBMATURITY = GetArg("-ac_cbmaturity",0); - ASSETCHAINS_ADAPTIVEPOW = GetArg("-ac_adaptivepow",0); - //fprintf(stderr,"ASSETCHAINS_CBOPRET.%llx\n",(long long)ASSETCHAINS_CBOPRET); - if ( ASSETCHAINS_CBOPRET != 0 ) - { + ASSETCHAINS_SCRIPTPUB = GetArg("-ac_script",""); + ASSETCHAINS_BEAMPORT = GetArg("-ac_beam",0); + ASSETCHAINS_CODAPORT = GetArg("-ac_coda",0); + ASSETCHAINS_CBOPRET = GetArg("-ac_cbopret",0); + ASSETCHAINS_CBMATURITY = GetArg("-ac_cbmaturity",0); + ASSETCHAINS_ADAPTIVEPOW = GetArg("-ac_adaptivepow",0); + if(fDebug) + fprintf(stderr,"ASSETCHAINS_CBOPRET.%llx\n",(long long)ASSETCHAINS_CBOPRET); + if ( ASSETCHAINS_CBOPRET != 0 ) { SplitStr(GetArg("-ac_prices",""), ASSETCHAINS_PRICES); if ( ASSETCHAINS_PRICES.size() > 0 ) ASSETCHAINS_CBOPRET |= 4; @@ -2088,14 +2091,12 @@ void hush_args(char *argv0) StartShutdown(); } - + // HUSH will always be The First Pure Sapling Coin, no Sprout JoinSplits in our history! ;) ASSETCHAINS_SAPLING = GetArg("-ac_sapling", -1); if (ASSETCHAINS_SAPLING == -1) { ASSETCHAINS_OVERWINTER = GetArg("-ac_overwinter", -1); - } - else - { + } else { ASSETCHAINS_OVERWINTER = GetArg("-ac_overwinter", ASSETCHAINS_SAPLING); } if ( strlen(ASSETCHAINS_OVERRIDE_PUBKEY.c_str()) == 66 || ASSETCHAINS_SCRIPTPUB.size() > 1 ) @@ -2121,9 +2122,7 @@ void hush_args(char *argv0) { ASSETCHAINS_COMMISSION = 53846154; // maps to 35% printf("ASSETCHAINS_COMMISSION defaulted to 35%% when founders reward active\n"); - } - else - { + } else { printf("ASSETCHAINS_FOUNDERS_REWARD set to %ld\n", ASSETCHAINS_FOUNDERS_REWARD); } /*else if ( ASSETCHAINS_SELFIMPORT.size() == 0 ) @@ -2132,9 +2131,7 @@ void hush_args(char *argv0) printf("-ac_perc must be set with -ac_pubkey\n"); }*/ } - } - else - { + } else { if ( ASSETCHAINS_COMMISSION != 0 ) { ASSETCHAINS_COMMISSION = 0; @@ -2147,23 +2144,26 @@ void hush_args(char *argv0) } } - if ( ASSETCHAINS_ENDSUBSIDY[0] != 0 || ASSETCHAINS_REWARD[0] != 0 || ASSETCHAINS_HALVING[0] != 0 || ASSETCHAINS_DECAY[0] != 0 || ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_PUBLIC != 0 || ASSETCHAINS_PRIVATE != 0 || ASSETCHAINS_TXPOW != 0 || ASSETCHAINS_FOUNDERS != 0 || ASSETCHAINS_SCRIPTPUB.size() > 1 || ASSETCHAINS_SELFIMPORT.size() > 0 || ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 || ASSETCHAINS_TIMELOCKGTE != _ASSETCHAINS_TIMELOCKOFF|| ASSETCHAINS_ALGO != ASSETCHAINS_EQUIHASH || ASSETCHAINS_LWMAPOS != 0 || ASSETCHAINS_LASTERA > 0 || ASSETCHAINS_BEAMPORT != 0 || ASSETCHAINS_CODAPORT != 0 || ASSETCHAINS_MARMARA != 0 || nonz > 0 || ASSETCHAINS_CCLIB.size() > 0 || ASSETCHAINS_FOUNDERS_REWARD != 0 || ASSETCHAINS_NOTARY_PAY[0] != 0 || ASSETCHAINS_BLOCKTIME != 60 || ASSETCHAINS_CBOPRET != 0 || Mineropret.size() != 0 || (ASSETCHAINS_NK[0] != 0 && ASSETCHAINS_NK[1] != 0) || KOMODO_SNAPSHOT_INTERVAL != 0 || ASSETCHAINS_EARLYTXIDCONTRACT != 0 || ASSETCHAINS_CBMATURITY != 0 || ASSETCHAINS_ADAPTIVEPOW != 0 ) + if ( ASSETCHAINS_ENDSUBSIDY[0] != 0 || ASSETCHAINS_REWARD[0] != 0 || ASSETCHAINS_HALVING[0] != 0 || ASSETCHAINS_DECAY[0] != 0 || ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_PUBLIC != 0 || ASSETCHAINS_PRIVATE != 0 || ASSETCHAINS_TXPOW != 0 || ASSETCHAINS_FOUNDERS != 0 || ASSETCHAINS_SCRIPTPUB.size() > 1 || ASSETCHAINS_SELFIMPORT.size() > 0 || ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 || ASSETCHAINS_TIMELOCKGTE != _ASSETCHAINS_TIMELOCKOFF|| ASSETCHAINS_ALGO != ASSETCHAINS_EQUIHASH || ASSETCHAINS_LWMAPOS != 0 || ASSETCHAINS_LASTERA > 0 || ASSETCHAINS_BEAMPORT != 0 || ASSETCHAINS_CODAPORT != 0 || ASSETCHAINS_MARMARA != 0 || nonz > 0 || ASSETCHAINS_CCLIB.size() > 0 || ASSETCHAINS_FOUNDERS_REWARD != 0 || ASSETCHAINS_NOTARY_PAY[0] != 0 || ASSETCHAINS_BLOCKTIME != 60 || ASSETCHAINS_CBOPRET != 0 || Mineropret.size() != 0 || (ASSETCHAINS_NK[0] != 0 && ASSETCHAINS_NK[1] != 0) || HUSH_SNAPSHOT_INTERVAL != 0 || ASSETCHAINS_EARLYTXIDCONTRACT != 0 || ASSETCHAINS_CBMATURITY != 0 || ASSETCHAINS_ADAPTIVEPOW != 0 ) { - fprintf(stderr,"perc %.4f%% ac_pub=[%02x%02x%02x...] acsize.%d\n",dstr(ASSETCHAINS_COMMISSION)*100,ASSETCHAINS_OVERRIDE_PUBKEY33[0],ASSETCHAINS_OVERRIDE_PUBKEY33[1],ASSETCHAINS_OVERRIDE_PUBKEY33[2],(int32_t)ASSETCHAINS_SCRIPTPUB.size()); + if(fDebug) + fprintf(stderr,"perc %.4f%% ac_pub=[%02x%02x%02x...] acsize.%d\n",dstr(ASSETCHAINS_COMMISSION)*100,ASSETCHAINS_OVERRIDE_PUBKEY33[0],ASSETCHAINS_OVERRIDE_PUBKEY33[1],ASSETCHAINS_OVERRIDE_PUBKEY33[2],(int32_t)ASSETCHAINS_SCRIPTPUB.size()); extraptr = extrabuf; memcpy(extraptr,ASSETCHAINS_OVERRIDE_PUBKEY33,33), extralen = 33; // if we have one era, this should create the same data structure as it used to, same if we increase _MAX_ERAS for ( int i = 0; i <= ASSETCHAINS_LASTERA; i++ ) { - printf("ERA%u: end.%llu reward.%llu halving.%llu decay.%llu notarypay.%llu\n", i, + if (fDebug) { + printf("ERA%u: end.%llu reward.%llu halving.%llu decay.%llu notarypay.%llu\n", i, (long long)ASSETCHAINS_ENDSUBSIDY[i], (long long)ASSETCHAINS_REWARD[i], (long long)ASSETCHAINS_HALVING[i], (long long)ASSETCHAINS_DECAY[i], (long long)ASSETCHAINS_NOTARY_PAY[i]); + } - // TODO: Verify that we don't overrun extrabuf here, which is a 256 byte buffer + // TODO: Verify that we don't overrun extrabuf here, which is a 32KB byte buffer extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_ENDSUBSIDY[i]),(void *)&ASSETCHAINS_ENDSUBSIDY[i]); extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_REWARD[i]),(void *)&ASSETCHAINS_REWARD[i]); extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_HALVING[i]),(void *)&ASSETCHAINS_HALVING[i]); @@ -2205,6 +2205,7 @@ void hush_args(char *argv0) extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(tmp),(void *)&tmp); if ( ASSETCHAINS_FOUNDERS > 1 ) extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_FOUNDERS),(void *)&ASSETCHAINS_FOUNDERS); + // NOTE: Hush does not use this, we use -ac_script to implement our FR -- Duke if ( ASSETCHAINS_FOUNDERS_REWARD != 0 ) { fprintf(stderr, "set founders reward.%lld\n",(long long)ASSETCHAINS_FOUNDERS_REWARD); @@ -2232,9 +2233,10 @@ void hush_args(char *argv0) extraptr[extralen++] = 'c'; if ( ASSETCHAINS_MARMARA != 0 ) extraptr[extralen++] = ASSETCHAINS_MARMARA; -fprintf(stderr,"extralen.%d before disable bits\n",extralen); - if ( nonz > 0 ) - { + + fprintf(stderr,"extralen.%d before disable bits\n",extralen); + + if ( nonz > 0 ) { memcpy(&extraptr[extralen],disablebits,sizeof(disablebits)); extralen += sizeof(disablebits); } @@ -2247,8 +2249,12 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); } fprintf(stderr," <- CCLIB name\n"); } - if ( ASSETCHAINS_BLOCKTIME != 60 ) + // is this not being run correctly? + if ( ASSETCHAINS_BLOCKTIME != 60 ) { extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_BLOCKTIME),(void *)&ASSETCHAINS_BLOCKTIME); + fprintf(stderr,"%s: ASSETCHAINS_BLOCKTIME=%d, extralen=%d\n", __func__, ASSETCHAINS_BLOCKTIME, extralen); + } + if ( Mineropret.size() != 0 ) { for (i=0; i= 0 && baseid < 32 ) { //komodo_maxallowed(baseid); - printf("baseid.%d MAX_MONEY.%s %.8f\n",baseid,SMART_CHAIN_SYMBOL,(double)MAX_MONEY/SATOSHIDEN); + if(fDebug) + printf("baseid.%d MAX_MONEY.%s %.8f\n",baseid,SMART_CHAIN_SYMBOL,(double)MAX_MONEY/SATOSHIDEN); } if ( ASSETCHAINS_CC >= HUSH_FIRSTFUNGIBLEID && MAX_MONEY < 1000000LL*SATOSHIDEN ) MAX_MONEY = 1000000LL*SATOSHIDEN; if ( KOMODO_BIT63SET(MAX_MONEY) != 0 ) MAX_MONEY = KOMODO_MAXNVALUE; - fprintf(stderr,"MAX_MONEY %llu %.8f\n",(long long)MAX_MONEY,(double)MAX_MONEY/SATOSHIDEN); + if(fDebug) + fprintf(stderr,"MAX_MONEY %llu %.8f\n",(long long)MAX_MONEY,(double)MAX_MONEY/SATOSHIDEN); //printf("baseid.%d MAX_MONEY.%s %.8f\n",baseid,SMART_CHAIN_SYMBOL,(double)MAX_MONEY/SATOSHIDEN); uint16_t tmpport = komodo_port(SMART_CHAIN_SYMBOL,ASSETCHAINS_SUPPLY,&ASSETCHAINS_MAGIC,extraptr,extralen); if ( GetArg("-port",0) != 0 ) { ASSETCHAINS_P2PPORT = GetArg("-port",0); + if(fDebug) fprintf(stderr,"set p2pport.%u\n",ASSETCHAINS_P2PPORT); } else ASSETCHAINS_P2PPORT = tmpport; @@ -2343,8 +2352,7 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); extern int COINBASE_MATURITY; if ( strcmp(SMART_CHAIN_SYMBOL,"KMD") == 0 ) { - fprintf(stderr,"cant have assetchain named KMD\n"); - StartShutdown(); + fprintf(stderr,"Oh hellz yezzz\n"); } if ( (port= komodo_userpass(ASSETCHAINS_USERPASS,SMART_CHAIN_SYMBOL)) != 0 ) ASSETCHAINS_RPCPORT = port; @@ -2371,6 +2379,7 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); magicstr[8] = 0; #ifndef FROM_CLI sprintf(fname,"%s_7776",SMART_CHAIN_SYMBOL); + // TODO: why are we doing this again? Most users do not need this if ( (fp= fopen(fname,"wb")) != 0 ) { int8_t notarypay = 0; @@ -2394,9 +2403,7 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); fprintf(stderr,"smart utxo CC contract %d will activate at height.%d\n",(int32_t)ccEnablesHeight[0],(int32_t)ccEnablesHeight[1]); } } - } - else - { + } else { char fname[512],username[512],password[4096]; int32_t iter; FILE *fp; ASSETCHAINS_P2PPORT = 7770; ASSETCHAINS_RPCPORT = 7771; @@ -2439,75 +2446,20 @@ fprintf(stderr,"extralen.%d before disable bits\n",extralen); BITCOIND_RPCPORT = GetArg("-rpcport", ASSETCHAINS_RPCPORT); //fprintf(stderr,"(%s) port.%u chain params initialized\n",SMART_CHAIN_SYMBOL,BITCOIND_RPCPORT); - // Set cc enables for all existing ac_cc chains here. - if ( strcmp("AXO",SMART_CHAIN_SYMBOL) == 0 ) - { - // No CCs used on this chain yet. - CCDISABLEALL; - } - if ( strcmp("CCL",SMART_CHAIN_SYMBOL) == 0 ) - { - // No CCs used on this chain yet. - CCDISABLEALL; - CCENABLE(EVAL_TOKENS); - CCENABLE(EVAL_HEIR); - } - if ( strcmp("COQUI",SMART_CHAIN_SYMBOL) == 0 ) - { - CCDISABLEALL; - CCENABLE(EVAL_DICE); - CCENABLE(EVAL_CHANNELS); - CCENABLE(EVAL_ORACLES); - CCENABLE(EVAL_ASSETS); - CCENABLE(EVAL_TOKENS); - } - if ( strcmp("DION",SMART_CHAIN_SYMBOL) == 0 ) - { - // No CCs used on this chain yet. - CCDISABLEALL; - } - - if ( strcmp("EQL",SMART_CHAIN_SYMBOL) == 0 ) - { - // No CCs used on this chain yet. - CCDISABLEALL; - } - if ( strcmp("ILN",SMART_CHAIN_SYMBOL) == 0 ) - { - // No CCs used on this chain yet. - CCDISABLEALL; - } - if ( strcmp("OUR",SMART_CHAIN_SYMBOL) == 0 ) - { - // No CCs used on this chain yet. - CCDISABLEALL; - } - if ( strcmp("ZEXO",SMART_CHAIN_SYMBOL) == 0 ) - { - // No CCs used on this chain yet. - CCDISABLEALL; - } - if ( strcmp("SEC",SMART_CHAIN_SYMBOL) == 0 ) - { - CCDISABLEALL; - CCENABLE(EVAL_ASSETS); - CCENABLE(EVAL_TOKENS); - CCENABLE(EVAL_ORACLES); - } - if ( strcmp("KMDICE",SMART_CHAIN_SYMBOL) == 0 ) - { - CCDISABLEALL; - CCENABLE(EVAL_FAUCET); - CCENABLE(EVAL_DICE); - CCENABLE(EVAL_ORACLES); + // Set custom cc rulse for chains here + if ( strcmp("HUSH3",SMART_CHAIN_SYMBOL) == 0 ) { + // Disable all CC's + if(GetArg("-ac_disable_cc",false)) { + CCDISABLEALL; + } } } else BITCOIND_RPCPORT = GetArg("-rpcport", BaseParams().RPCPort()); HUSH_DPOWCONFS = GetArg("-dpowconfs",dpowconfs); - if ( SMART_CHAIN_SYMBOL[0] == 0 || strcmp(SMART_CHAIN_SYMBOL,"SUPERNET") == 0 || strcmp(SMART_CHAIN_SYMBOL,"DEX") == 0 || strcmp(SMART_CHAIN_SYMBOL,"COQUI") == 0 || strcmp(SMART_CHAIN_SYMBOL,"PIRATE") == 0 || strcmp(SMART_CHAIN_SYMBOL,"KMDICE") == 0 ) + if ( strcmp(SMART_CHAIN_SYMBOL,"CA333LIES") == 0 ) HUSH_EXTRASATOSHI = 1; } -void komodo_nameset(char *symbol,char *dest,char *source) +void hush_nameset(char *symbol,char *dest,char *source) { if ( source[0] == 0 ) { strcpy(symbol,(char *)"HUSH3"); @@ -2521,7 +2473,7 @@ void komodo_nameset(char *symbol,char *dest,char *source) struct hush_state *hush_stateptrget(char *base) { int32_t baseid; - if ( base == 0 || base[0] == 0 || strcmp(base,(char *)"KMD") == 0 ) + if ( base == 0 || base[0] == 0 || strcmp(base,(char *)"KYCSELLOUTS") == 0 ) return(&KOMODO_STATES[33]); else if ( (baseid= komodo_baseid(base)) >= 0 ) return(&KOMODO_STATES[baseid+1]); @@ -2531,7 +2483,7 @@ struct hush_state *hush_stateptrget(char *base) struct hush_state *hush_stateptr(char *symbol,char *dest) { int32_t baseid; - komodo_nameset(symbol,dest,SMART_CHAIN_SYMBOL); + hush_nameset(symbol,dest,SMART_CHAIN_SYMBOL); return(hush_stateptrget(symbol)); } From b58c15b9fbbca4152e588f81f9f7d8092e7c28da Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 10 Dec 2020 07:45:36 -0500 Subject: [PATCH 187/277] update copyrights --- contrib/block_time.pl | 3 +-- contrib/checkpoints.pl | 4 ++-- contrib/devtools/gen-linux-binary-release.sh | 2 +- contrib/devtools/gen-manpages.sh | 2 +- contrib/hush_block_subsidy_per_halving | 2 +- contrib/hush_halvings | 2 +- contrib/hush_scanner | 2 +- contrib/hush_supply | 2 +- contrib/hush_supply_old | 2 +- contrib/verify-commits/gpg.sh | 2 +- contrib/verify-commits/pre-push-hook.sh | 2 +- contrib/verify-commits/verify-commits.sh | 2 +- contrib/zmq/zmq_sub.py | 2 +- migratecoin.sh | 2 +- qa/hush/full-test-suite.sh | 2 +- qa/hush/full_test_suite.py | 2 +- qa/pull-tester/rpc-tests.sh | 2 +- qa/pull-tester/run-bitcoin-cli | 2 +- qa/pull-tester/run-bitcoind-for-test.sh.in | 2 +- qa/pull-tester/tests-config.sh.in | 2 +- qa/rpc-tests/dpowconfs.py | 4 ++-- qa/rpc-tests/feature_walletfile.py | 2 +- qa/rpc-tests/regtest_signrawtransaction.py | 2 +- qa/rpc-tests/reindex.py | 2 +- qa/rpc-tests/test_framework/mininode.py | 6 +++--- qa/rpc-tests/test_framework/test_framework.py | 2 +- qa/rpc-tests/timestampindex.py | 2 +- qa/rpc-tests/wallet_listnotes.py | 2 +- qa/rpc-tests/wallet_sapling.py | 2 +- qa/rpc-tests/wallet_shieldcoinbase_sapling.py | 2 +- src/Makefile.am | 2 +- src/Makefile.gtest.include | 2 +- src/Makefile.test-hush.include | 2 +- src/addressindex.h | 2 +- src/addrman.cpp | 2 +- src/addrman.h | 2 +- src/alert.cpp | 2 +- src/alert.h | 2 +- src/alertkeys.h | 2 +- src/amount.h | 2 +- src/arith_uint256.h | 2 +- src/asyncrpcoperation.cpp | 2 +- src/asyncrpcoperation.h | 2 +- src/asyncrpcqueue.h | 2 +- src/bech32.cpp | 2 +- src/bech32.h | 2 +- src/bitcoin-cli.cpp | 2 +- src/bitcoind.cpp | 2 +- src/bloom.cpp | 2 +- src/cc/CCGateways.h | 2 +- src/cc/CCHeir.h | 2 +- src/cc/CCfaucet.h | 2 +- src/cc/CCinclude.h | 2 +- src/cc/crypto777/OS_portable.h | 2 +- src/cc/dapps/Makefile | 7 +++++-- src/cc/dapps/cJSON.c | 2 +- src/cc/dapps/hushdex.c | 2 +- src/cc/eval.cpp | 2 +- src/cc/eval.h | 2 +- src/cc/faucet.cpp | 2 +- src/cc/heir.cpp | 2 +- src/cc/heir_validate.h | 2 +- src/cc/import.cpp | 2 +- src/cc/makecclib | 2 +- src/chain.cpp | 2 +- src/chain.h | 2 +- src/chainparams.cpp | 2 +- src/chainparams.h | 2 +- src/checkpoints.cpp | 2 +- src/checkpoints.h | 15 +++++---------- src/checkqueue.h | 2 +- src/clientversion.cpp | 2 +- src/clientversion.h | 2 +- src/coincontrol.h | 2 +- src/coins.cpp | 2 +- src/coins.h | 2 +- src/consensus/params.h | 2 +- src/consensus/upgrades.cpp | 2 +- src/core_memusage.h | 2 +- src/crosschain.cpp | 2 +- src/crosschain.h | 2 +- src/crosschain_authority.cpp | 2 +- src/crypto/common.h | 2 +- src/crypto/equihash.h | 2 +- src/cryptoconditions/AUTHORS | 2 +- src/cryptoconditions/src/anon.c | 2 +- src/cryptoconditions/src/cryptoconditions.c | 2 +- src/cryptoconditions/src/ed25519.c | 2 +- src/cryptoconditions/src/eval.c | 2 +- src/cryptoconditions/src/internal.h | 2 +- src/cryptoconditions/src/json_rpc.c | 2 +- src/cryptoconditions/src/prefix.c | 2 +- src/cryptoconditions/src/preimage.c | 2 +- src/cryptoconditions/src/secp256k1.c | 2 +- src/cryptoconditions/src/threshold.c | 2 +- src/cryptoconditions/src/utils.c | 2 +- src/dbwrapper.cpp | 2 +- src/dbwrapper.h | 4 +--- src/deprecation.cpp | 2 +- src/deprecation.h | 2 +- src/fs.h | 2 +- src/gtest/json_test_vectors.cpp | 2 +- src/gtest/json_test_vectors.h | 2 +- src/gtest/main.cpp | 2 +- src/gtest/test_block.cpp | 2 +- src/gtest/test_checkblock.cpp | 2 +- src/gtest/test_checktransaction.cpp | 2 +- src/gtest/test_deprecation.cpp | 2 +- src/gtest/test_equihash.cpp | 2 +- src/gtest/test_httprpc.cpp | 2 +- src/gtest/test_keys.cpp | 2 +- src/gtest/test_keystore.cpp | 2 +- src/gtest/test_libzcash_utils.cpp | 2 +- src/gtest/test_mempool.cpp | 2 +- src/gtest/test_merkletree.cpp | 2 +- src/gtest/test_metrics.cpp | 2 +- src/gtest/test_miner.cpp | 2 +- src/gtest/test_noteencryption.cpp | 2 +- src/gtest/test_pedersen_hash.cpp | 2 +- src/gtest/test_pow.cpp | 2 +- src/gtest/test_random.cpp | 2 +- src/gtest/test_rpc.cpp | 2 +- src/gtest/test_sapling_note.cpp | 2 +- src/gtest/test_tautology.cpp | 2 +- src/gtest/test_transaction_builder.cpp | 2 +- src/gtest/test_txid.cpp | 2 +- src/gtest/test_upgrades.cpp | 2 +- src/gtest/test_validation.cpp | 2 +- src/gtest/test_zip32.cpp | 2 +- src/gtest/utils.cpp | 2 +- src/hash.cpp | 2 +- src/hash.h | 2 +- src/hush-cli | 2 +- src/hush-cli-testnet | 2 +- src/hush-smart-chain | 2 +- src/hush-tx | 2 +- src/hush.h | 2 +- src/hush/tlsenums.h | 2 +- src/hush/tlsmanager.cpp | 2 +- src/hush/tlsmanager.h | 2 +- src/hush/utiltls.cpp | 2 +- src/hush/utiltls.h | 2 +- src/hush_defs.h | 2 ++ src/hush_globals.h | 2 +- src/hush_notary.h | 4 +++- src/hush_structs.h | 2 +- src/hushd | 2 +- src/hushd-testnet | 2 +- src/importcoin.h | 3 +++ src/init.cpp | 2 +- src/init.h | 2 +- src/key.h | 2 +- src/key_io.cpp | 2 +- src/key_io.h | 2 +- src/keystore.cpp | 2 +- src/keystore.h | 2 +- src/komodo-tx.cpp | 15 ++++----------- src/komodo_bitcoind.h | 2 +- src/komodo_curve25519.h | 2 +- src/komodo_events.h | 2 +- src/komodo_interest.h | 2 +- src/komodo_port.c | 2 +- src/main.h | 2 +- src/metrics.cpp | 2 +- src/metrics.h | 2 +- src/miner.cpp | 2 +- src/miner.h | 2 +- src/net.cpp | 2 +- src/net.h | 4 +--- src/notarizationdb.cpp | 2 +- src/notarizationdb.h | 2 +- src/pow.cpp | 2 +- src/prevector.h | 5 +++-- src/primitives/block.cpp | 2 +- src/primitives/block.h | 2 +- src/primitives/transaction.cpp | 2 +- src/primitives/transaction.h | 2 +- src/protocol.cpp | 2 +- src/pubkey.cpp | 2 +- src/pubkey.h | 2 +- src/purge | 2 +- src/random.cpp | 2 +- src/rest.cpp | 6 +----- src/rpc/blockchain.cpp | 2 +- src/rpc/client.cpp | 2 +- src/rpc/crosschain.cpp | 2 +- src/rpc/mining.cpp | 2 +- src/rpc/misc.cpp | 2 +- src/rpc/net.cpp | 2 +- src/rpc/rawtransaction.cpp | 2 +- src/rpc/server.cpp | 2 +- src/rpc/server.h | 2 +- src/script/standard.cpp | 2 +- src/script/standard.h | 2 +- src/sendalert.cpp | 4 ++-- src/sietch.h | 2 +- src/support/allocators/secure.h | 2 +- src/support/allocators/zeroafterfree.h | 2 +- src/sync.cpp | 2 +- src/test-hush/main.cpp | 2 +- src/test-hush/test_addrman.cpp | 2 +- src/test-hush/test_coinimport.cpp | 2 +- src/test-hush/test_cryptoconditions.cpp | 2 +- src/test-hush/test_eval_bet.cpp | 2 +- src/test-hush/test_eval_notarization.cpp | 2 +- src/test-hush/test_netbase_tests.cpp | 2 +- src/test-hush/test_parse_notarization.cpp | 2 +- src/test-hush/testutils.cpp | 2 +- src/test-hush/testutils.h | 2 +- src/test/Checkpoints_tests.cpp | 2 +- src/test/DoS_tests.cpp | 2 +- src/test/accounting_tests.cpp | 2 +- src/test/addrman_tests.cpp | 2 +- src/test/alert_tests.cpp | 2 +- src/test/allocator_tests.cpp | 2 +- src/test/arith_uint256_tests.cpp | 2 +- src/test/base32_tests.cpp | 2 +- src/test/base58_tests.cpp | 2 +- src/test/base64_tests.cpp | 2 +- src/test/bctest.py | 2 +- src/test/bech32_tests.cpp | 2 +- src/test/bip32_tests.cpp | 2 +- src/test/bitcoin-util-test.py | 2 +- src/test/bloom_tests.cpp | 2 +- src/test/checkblock_tests.cpp | 2 +- src/test/coins_tests.cpp | 2 +- src/test/compress_tests.cpp | 2 +- src/test/convertbits_tests.cpp | 2 +- src/test/crypto_tests.cpp | 2 +- src/test/dbwrapper_tests.cpp | 2 +- src/test/equihash_tests.cpp | 2 +- src/test/getarg_tests.cpp | 2 +- src/test/hash_tests.cpp | 2 +- src/test/key_tests.cpp | 2 +- src/test/main_tests.cpp | 2 +- src/test/mempool_tests.cpp | 2 +- src/test/miner_tests.cpp | 2 +- src/test/mruset_tests.cpp | 2 +- src/test/multisig_tests.cpp | 2 +- src/test/netbase_tests.cpp | 2 +- src/test/pmt_tests.cpp | 2 +- src/test/policyestimator_tests.cpp | 2 +- src/test/pow_tests.cpp | 2 +- src/test/prevector_tests.cpp | 2 +- src/test/raii_event_tests.cpp | 2 +- src/test/reverselock_tests.cpp | 2 +- src/test/rpc_tests.cpp | 2 +- src/test/rpc_wallet_tests.cpp | 2 +- src/test/sanity_tests.cpp | 2 +- src/test/scheduler_tests.cpp | 2 +- src/test/script_P2PKH_tests.cpp | 2 +- src/test/script_P2SH_tests.cpp | 2 +- src/test/script_tests.cpp | 2 +- src/test/scriptnum_tests.cpp | 2 +- src/test/serialize_tests.cpp | 2 +- src/test/sha256compress_tests.cpp | 2 +- src/test/sighash_tests.cpp | 2 +- src/test/sigopcount_tests.cpp | 2 +- src/test/skiplist_tests.cpp | 2 +- src/test/test_bitcoin.cpp | 2 +- src/test/timedata_tests.cpp | 2 +- src/test/torcontrol_tests.cpp | 2 +- src/test/transaction_tests.cpp | 2 +- src/test/uint256_tests.cpp | 2 +- src/test/univalue_tests.cpp | 2 +- src/test/util_tests.cpp | 2 +- src/test/wallet-utility.py | 2 +- src/timedata.cpp | 2 +- src/timedata.h | 2 +- src/torcontrol.cpp | 2 +- src/torcontrol.h | 2 +- src/transaction_builder.cpp | 2 +- src/transaction_builder.h | 2 +- src/txdb.cpp | 2 +- src/txdb.h | 2 +- src/txmempool.cpp | 2 +- src/txmempool.h | 2 +- src/util.cpp | 2 +- src/util.h | 11 ++--------- src/validationinterface.cpp | 2 +- src/version.h | 2 +- src/wallet-utility.cpp | 2 +- src/wallet/asyncrpcoperation_mergetoaddress.cpp | 2 +- src/wallet/asyncrpcoperation_mergetoaddress.h | 2 +- .../asyncrpcoperation_saplingconsolidation.cpp | 2 +- src/wallet/asyncrpcoperation_sendmany.cpp | 2 +- src/wallet/asyncrpcoperation_sendmany.h | 2 +- src/wallet/asyncrpcoperation_shieldcoinbase.cpp | 2 +- src/wallet/asyncrpcoperation_shieldcoinbase.h | 2 +- src/wallet/crypter.cpp | 2 +- src/wallet/crypter.h | 2 +- src/wallet/gtest/test_transaction.cpp | 2 +- src/wallet/gtest/test_wallet.cpp | 2 +- src/wallet/gtest/test_wallet_zkeys.cpp | 2 +- src/wallet/rpcdump.cpp | 2 +- src/wallet/rpchushwallet.cpp | 2 +- src/wallet/rpcwallet.cpp | 2 +- src/wallet/test/wallet_tests.cpp | 2 +- src/wallet/wallet.cpp | 2 +- src/wallet/wallet.h | 2 +- src/wallet/walletdb.cpp | 6 +----- src/zcash/Address.cpp | 2 +- src/zcash/Address.hpp | 2 +- src/zcash/IncrementalMerkleTree.cpp | 2 +- src/zcash/IncrementalMerkleTree.hpp | 2 +- src/zcash/JoinSplit.cpp | 2 +- src/zcash/JoinSplit.hpp | 2 +- src/zcash/Note.cpp | 2 +- src/zcash/Note.hpp | 2 +- src/zcash/NoteEncryption.cpp | 2 +- src/zcash/NoteEncryption.hpp | 2 +- src/zcash/Proof.cpp | 2 +- src/zcash/Proof.hpp | 2 +- src/zcash/Zcash.h | 2 +- src/zcash/prf.cpp | 2 +- src/zcash/prf.h | 2 +- src/zcash/util.cpp | 2 +- src/zcash/util.h | 2 +- src/zcash/zip32.cpp | 2 +- src/zcash/zip32.h | 2 +- src/zcbenchmarks.cpp | 2 +- src/zcbenchmarks.h | 2 +- src/zush | 2 +- toolchain-info.sh | 2 +- zcutil/afl/afl-build.sh | 2 +- zcutil/afl/afl-get.sh | 2 +- zcutil/afl/afl-getbuildrun.sh | 2 +- zcutil/afl/afl-run.sh | 2 +- zcutil/build-arm.sh | 2 +- zcutil/build-debian-package.sh | 2 +- zcutil/build-mac.sh | 5 +++-- zcutil/build-win.sh | 2 +- zcutil/build.sh | 2 +- zcutil/docker-entrypoint.sh | 2 +- 334 files changed, 360 insertions(+), 380 deletions(-) diff --git a/contrib/block_time.pl b/contrib/block_time.pl index 4d28b8c80..a97a742aa 100755 --- a/contrib/block_time.pl +++ b/contrib/block_time.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl -# Copyright 2019-2020 The Hush developers -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 use warnings; diff --git a/contrib/checkpoints.pl b/contrib/checkpoints.pl index 08bcf4e20..4e07f4b27 100755 --- a/contrib/checkpoints.pl +++ b/contrib/checkpoints.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -# Copyright 2019-2020 The Hush developers -# Copyright (c) 2019-2020 The Hush developers +# Copyright 2016-2020 The Hush developers +# Copyright (c) 2016-2020 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 use warnings; diff --git a/contrib/devtools/gen-linux-binary-release.sh b/contrib/devtools/gen-linux-binary-release.sh index 21d4d70b9..267dd7192 100755 --- a/contrib/devtools/gen-linux-binary-release.sh +++ b/contrib/devtools/gen-linux-binary-release.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 The Hush developers # Released under the GPLv3 diff --git a/contrib/devtools/gen-manpages.sh b/contrib/devtools/gen-manpages.sh index f5f0f6e70..737d3b96d 100755 --- a/contrib/devtools/gen-manpages.sh +++ b/contrib/devtools/gen-manpages.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 The Hush developers # Released under the GPLv3 TOPDIR=${TOPDIR:-$(git rev-parse --show-toplevel)} diff --git a/contrib/hush_block_subsidy_per_halving b/contrib/hush_block_subsidy_per_halving index 7e7b05b4b..9e58c5e2a 100755 --- a/contrib/hush_block_subsidy_per_halving +++ b/contrib/hush_block_subsidy_per_halving @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# Copyright 2019-2020 The Hush developers +# Copyright 2016-2020 The Hush developers # Released under the GPLv3 use strict; diff --git a/contrib/hush_halvings b/contrib/hush_halvings index 67246bb13..4352cf875 100755 --- a/contrib/hush_halvings +++ b/contrib/hush_halvings @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# Copyright 2019-2020 The Hush developers +# Copyright 2016-2020 The Hush developers # Released under the GPLv3 use strict; diff --git a/contrib/hush_scanner b/contrib/hush_scanner index fb6901891..7905cce97 100755 --- a/contrib/hush_scanner +++ b/contrib/hush_scanner @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 use strict; diff --git a/contrib/hush_supply b/contrib/hush_supply index fcf4460dc..89bb91f87 100755 --- a/contrib/hush_supply +++ b/contrib/hush_supply @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# Copyright 2019-2020 The Hush developers +# Copyright 2016-2020 The Hush developers # Released under the GPLv3 use warnings; use strict; diff --git a/contrib/hush_supply_old b/contrib/hush_supply_old index 674424073..408b53dca 100755 --- a/contrib/hush_supply_old +++ b/contrib/hush_supply_old @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# Copyright 2019-2020 The Hush developers +# Copyright 2016-2020 The Hush developers # Released under the GPLv3 use warnings; use strict; diff --git a/contrib/verify-commits/gpg.sh b/contrib/verify-commits/gpg.sh index 4710049de..947dca43c 100755 --- a/contrib/verify-commits/gpg.sh +++ b/contrib/verify-commits/gpg.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 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 INPUT=$( class CBlockIndex; struct CCheckpointData; -/** - * Block-chain checkpoints are compiled-in sanity checks. - * They are updated every release or three. - */ +// Blockchain checkpoints are compiled-in cyber warfare defenses +// They also change how blocks are validated and have the side effect +// of making block validation faster for blocks that are "protected" +// by a checkpoint block -- Duke Leto namespace Checkpoints { - typedef std::map MapCheckpoints; struct CCheckpointData { @@ -45,7 +41,6 @@ struct CCheckpointData { double fTransactionsPerDay; }; bool CheckBlock(const CChainParams::CCheckpointData& data, int nHeight, const uint256& hash); - //! Return conservative estimate of total number of blocks, 0 if unknown int GetTotalBlocksEstimate(const CChainParams::CCheckpointData& data); diff --git a/src/checkqueue.h b/src/checkqueue.h index deff2e63a..ad4bb067b 100644 --- a/src/checkqueue.h +++ b/src/checkqueue.h @@ -1,5 +1,5 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/clientversion.cpp b/src/clientversion.cpp index a5748ec66..f2ba82ab2 100644 --- a/src/clientversion.cpp +++ b/src/clientversion.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/clientversion.h b/src/clientversion.h index e277e0fd2..b8be6ad9d 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2014 The Bitcoin Core developers // Copyright (c) 2016-2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/coincontrol.h b/src/coincontrol.h index 952ea2de2..dcc954510 100644 --- a/src/coincontrol.h +++ b/src/coincontrol.h @@ -1,5 +1,5 @@ // Copyright (c) 2011-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/coins.cpp b/src/coins.cpp index 9ffd10e33..30286f904 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/coins.h b/src/coins.h index d5503d4ba..5e48449af 100644 --- a/src/coins.h +++ b/src/coins.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/consensus/params.h b/src/consensus/params.h index 1ff7a6f54..cfe59056b 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/consensus/upgrades.cpp b/src/consensus/upgrades.cpp index 93e503b70..2d1a29835 100644 --- a/src/consensus/upgrades.cpp +++ b/src/consensus/upgrades.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2018 The Zcash developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/core_memusage.h b/src/core_memusage.h index 9e70533e5..38d8de876 100644 --- a/src/core_memusage.h +++ b/src/core_memusage.h @@ -1,5 +1,5 @@ // Copyright (c) 2015 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/crosschain.cpp b/src/crosschain.cpp index 5b1fd7009..ab3093769 100644 --- a/src/crosschain.cpp +++ b/src/crosschain.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/crosschain.h b/src/crosschain.h index 7aa8d40dc..bb15b3305 100644 --- a/src/crosschain.h +++ b/src/crosschain.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/crosschain_authority.cpp b/src/crosschain_authority.cpp index f8c335be6..477191731 100644 --- a/src/crosschain_authority.cpp +++ b/src/crosschain_authority.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "cc/eval.h" diff --git a/src/crypto/common.h b/src/crypto/common.h index aa23d3feb..6ebb351b1 100644 --- a/src/crypto/common.h +++ b/src/crypto/common.h @@ -1,5 +1,5 @@ // Copyright (c) 2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Released under the GPLv3 // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/crypto/equihash.h b/src/crypto/equihash.h index 602b0df31..8c1a228d8 100644 --- a/src/crypto/equihash.h +++ b/src/crypto/equihash.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2016 Jack Grigg // Copyright (c) 2016 The Zcash developers // Distributed under the GPLv3 software license, see the accompanying diff --git a/src/cryptoconditions/AUTHORS b/src/cryptoconditions/AUTHORS index 06ada955e..08114b0f4 100644 --- a/src/cryptoconditions/AUTHORS +++ b/src/cryptoconditions/AUTHORS @@ -4,6 +4,6 @@ Copyright 2017 Scott Sadler # Current Authors -Copyright 2017-2020 The Hush Developers +Copyright 2016-2020 The Hush Developers Relicensed to GPLv3 on Nov 21st 2020. diff --git a/src/cryptoconditions/src/anon.c b/src/cryptoconditions/src/anon.c index a1bd6b4a3..6e21cabf4 100644 --- a/src/cryptoconditions/src/anon.c +++ b/src/cryptoconditions/src/anon.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/cryptoconditions.c b/src/cryptoconditions/src/cryptoconditions.c index 6642b0345..601a54009 100644 --- a/src/cryptoconditions/src/cryptoconditions.c +++ b/src/cryptoconditions/src/cryptoconditions.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/ed25519.c b/src/cryptoconditions/src/ed25519.c index 33b332071..e1e4bda95 100644 --- a/src/cryptoconditions/src/ed25519.c +++ b/src/cryptoconditions/src/ed25519.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/eval.c b/src/cryptoconditions/src/eval.c index a017d181d..fca557c6a 100644 --- a/src/cryptoconditions/src/eval.c +++ b/src/cryptoconditions/src/eval.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/internal.h b/src/cryptoconditions/src/internal.h index 3d24214ce..a57e06c66 100644 --- a/src/cryptoconditions/src/internal.h +++ b/src/cryptoconditions/src/internal.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/json_rpc.c b/src/cryptoconditions/src/json_rpc.c index c4fde8080..0af0ba4f8 100644 --- a/src/cryptoconditions/src/json_rpc.c +++ b/src/cryptoconditions/src/json_rpc.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/prefix.c b/src/cryptoconditions/src/prefix.c index ea339df35..c5ff5d7ba 100644 --- a/src/cryptoconditions/src/prefix.c +++ b/src/cryptoconditions/src/prefix.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/preimage.c b/src/cryptoconditions/src/preimage.c index 2fee86b88..10262e049 100644 --- a/src/cryptoconditions/src/preimage.c +++ b/src/cryptoconditions/src/preimage.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/secp256k1.c b/src/cryptoconditions/src/secp256k1.c index d5319d32b..0185b4459 100644 --- a/src/cryptoconditions/src/secp256k1.c +++ b/src/cryptoconditions/src/secp256k1.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/threshold.c b/src/cryptoconditions/src/threshold.c index e8e12435e..de13565e1 100644 --- a/src/cryptoconditions/src/threshold.c +++ b/src/cryptoconditions/src/threshold.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/cryptoconditions/src/utils.c b/src/cryptoconditions/src/utils.c index ac2256f18..6d302d74d 100644 --- a/src/cryptoconditions/src/utils.c +++ b/src/cryptoconditions/src/utils.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * diff --git a/src/dbwrapper.cpp b/src/dbwrapper.cpp index 8109307fb..302e1136c 100644 --- a/src/dbwrapper.cpp +++ b/src/dbwrapper.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/dbwrapper.h b/src/dbwrapper.h index fb5514340..f16397003 100644 --- a/src/dbwrapper.h +++ b/src/dbwrapper.h @@ -1,5 +1,5 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Copyright (c) 2019 The Hush developers +// Copyright (c) 2016-2020 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 @@ -11,9 +11,7 @@ #include "streams.h" #include "util.h" #include "version.h" - #include - #include #include diff --git a/src/deprecation.cpp b/src/deprecation.cpp index 366660704..4223c93b4 100644 --- a/src/deprecation.cpp +++ b/src/deprecation.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/deprecation.h b/src/deprecation.h index d98c1bf78..6e6bf4586 100644 --- a/src/deprecation.h +++ b/src/deprecation.h @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/fs.h b/src/fs.h index 74c3c5a0b..dcfc8ae9f 100644 --- a/src/fs.h +++ b/src/fs.h @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/gtest/json_test_vectors.cpp b/src/gtest/json_test_vectors.cpp index 685300e1a..0ac243b9c 100644 --- a/src/gtest/json_test_vectors.cpp +++ b/src/gtest/json_test_vectors.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "json_test_vectors.h" diff --git a/src/gtest/json_test_vectors.h b/src/gtest/json_test_vectors.h index a178a84e6..d92d5d47a 100644 --- a/src/gtest/json_test_vectors.h +++ b/src/gtest/json_test_vectors.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/main.cpp b/src/gtest/main.cpp index d80d0e3e5..9e4ecc81a 100644 --- a/src/gtest/main.cpp +++ b/src/gtest/main.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "gmock/gmock.h" diff --git a/src/gtest/test_block.cpp b/src/gtest/test_block.cpp index 03a98375c..109c1cdf6 100644 --- a/src/gtest/test_block.cpp +++ b/src/gtest/test_block.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_checkblock.cpp b/src/gtest/test_checkblock.cpp index cba4f5d87..63ac7b5ca 100644 --- a/src/gtest/test_checkblock.cpp +++ b/src/gtest/test_checkblock.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_checktransaction.cpp b/src/gtest/test_checktransaction.cpp index 19c86d0e3..d4ddd6026 100644 --- a/src/gtest/test_checktransaction.cpp +++ b/src/gtest/test_checktransaction.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_deprecation.cpp b/src/gtest/test_deprecation.cpp index fda5447ed..e3eb8536a 100644 --- a/src/gtest/test_deprecation.cpp +++ b/src/gtest/test_deprecation.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Distributed under the GPLv3 software license, see the accompanying // Released under the GPLv3 diff --git a/src/gtest/test_equihash.cpp b/src/gtest/test_equihash.cpp index 20dd296a5..3b3f2cc61 100644 --- a/src/gtest/test_equihash.cpp +++ b/src/gtest/test_equihash.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #if defined(HAVE_CONFIG_H) diff --git a/src/gtest/test_httprpc.cpp b/src/gtest/test_httprpc.cpp index 0a6e90748..7c0daeacd 100644 --- a/src/gtest/test_httprpc.cpp +++ b/src/gtest/test_httprpc.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_keys.cpp b/src/gtest/test_keys.cpp index 13f49ed02..02389522a 100644 --- a/src/gtest/test_keys.cpp +++ b/src/gtest/test_keys.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_keystore.cpp b/src/gtest/test_keystore.cpp index 060945500..28da20305 100644 --- a/src/gtest/test_keystore.cpp +++ b/src/gtest/test_keystore.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_libzcash_utils.cpp b/src/gtest/test_libzcash_utils.cpp index 216c7f547..02344875b 100644 --- a/src/gtest/test_libzcash_utils.cpp +++ b/src/gtest/test_libzcash_utils.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_mempool.cpp b/src/gtest/test_mempool.cpp index f3b72ad88..a237e5609 100644 --- a/src/gtest/test_mempool.cpp +++ b/src/gtest/test_mempool.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_merkletree.cpp b/src/gtest/test_merkletree.cpp index 858a875a6..394231974 100644 --- a/src/gtest/test_merkletree.cpp +++ b/src/gtest/test_merkletree.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_metrics.cpp b/src/gtest/test_metrics.cpp index e8b7dd83f..ba428bc82 100644 --- a/src/gtest/test_metrics.cpp +++ b/src/gtest/test_metrics.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_miner.cpp b/src/gtest/test_miner.cpp index 5635ae6ee..02ff4740a 100644 --- a/src/gtest/test_miner.cpp +++ b/src/gtest/test_miner.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_noteencryption.cpp b/src/gtest/test_noteencryption.cpp index 0a13c8ace..a760e8007 100644 --- a/src/gtest/test_noteencryption.cpp +++ b/src/gtest/test_noteencryption.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_pedersen_hash.cpp b/src/gtest/test_pedersen_hash.cpp index 5b6ddabee..389f23c04 100644 --- a/src/gtest/test_pedersen_hash.cpp +++ b/src/gtest/test_pedersen_hash.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_pow.cpp b/src/gtest/test_pow.cpp index 52538b53a..193e3ecde 100644 --- a/src/gtest/test_pow.cpp +++ b/src/gtest/test_pow.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_random.cpp b/src/gtest/test_random.cpp index 1613183c8..75463ff35 100644 --- a/src/gtest/test_random.cpp +++ b/src/gtest/test_random.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_rpc.cpp b/src/gtest/test_rpc.cpp index 8faa093ef..2c99e8ab3 100644 --- a/src/gtest/test_rpc.cpp +++ b/src/gtest/test_rpc.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_sapling_note.cpp b/src/gtest/test_sapling_note.cpp index 4444e9dc8..04261149d 100644 --- a/src/gtest/test_sapling_note.cpp +++ b/src/gtest/test_sapling_note.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_tautology.cpp b/src/gtest/test_tautology.cpp index 36a76a7ca..b470b0579 100644 --- a/src/gtest/test_tautology.cpp +++ b/src/gtest/test_tautology.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_transaction_builder.cpp b/src/gtest/test_transaction_builder.cpp index 7a31acd5d..a7cdea3d4 100644 --- a/src/gtest/test_transaction_builder.cpp +++ b/src/gtest/test_transaction_builder.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "chainparams.h" diff --git a/src/gtest/test_txid.cpp b/src/gtest/test_txid.cpp index e0620cca4..35d9c1fc9 100644 --- a/src/gtest/test_txid.cpp +++ b/src/gtest/test_txid.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_upgrades.cpp b/src/gtest/test_upgrades.cpp index f86884fc9..433b97c31 100644 --- a/src/gtest/test_upgrades.cpp +++ b/src/gtest/test_upgrades.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_validation.cpp b/src/gtest/test_validation.cpp index 44cc1d52c..c77499819 100644 --- a/src/gtest/test_validation.cpp +++ b/src/gtest/test_validation.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/test_zip32.cpp b/src/gtest/test_zip32.cpp index 673cfe9ab..fb04af576 100644 --- a/src/gtest/test_zip32.cpp +++ b/src/gtest/test_zip32.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/gtest/utils.cpp b/src/gtest/utils.cpp index 28bbca32d..c28db1435 100644 --- a/src/gtest/utils.cpp +++ b/src/gtest/utils.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 int GenZero(int n) diff --git a/src/hash.cpp b/src/hash.cpp index f2620b250..0991536a8 100644 --- a/src/hash.cpp +++ b/src/hash.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2013-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/hash.h b/src/hash.h index 675429512..db7f84f27 100644 --- a/src/hash.h +++ b/src/hash.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/hush-cli b/src/hush-cli index 6721b64ec..785583a2b 100755 --- a/src/hush-cli +++ b/src/hush-cli @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 The Hush developers # Released under the GPLv3 # set working directory to the location of this script diff --git a/src/hush-cli-testnet b/src/hush-cli-testnet index 3635876ae..aab54cfa3 100755 --- a/src/hush-cli-testnet +++ b/src/hush-cli-testnet @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 The Hush developers # set working directory to the location of this script DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" diff --git a/src/hush-smart-chain b/src/hush-smart-chain index d35b86983..f98a8309d 100755 --- a/src/hush-smart-chain +++ b/src/hush-smart-chain @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 The Hush developers # set working directory to the location of this script # readlink -f does not always exist DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" diff --git a/src/hush-tx b/src/hush-tx index 17f8bc6b8..a4af3a726 100755 --- a/src/hush-tx +++ b/src/hush-tx @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 The Hush developers # Released under the GPLv3 # set working directory to the location of this script diff --git a/src/hush.h b/src/hush.h index 8c8bb3f55..448856549 100644 --- a/src/hush.h +++ b/src/hush.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/hush/tlsenums.h b/src/hush/tlsenums.h index 6a2bee9d7..414127c5a 100644 --- a/src/hush/tlsenums.h +++ b/src/hush/tlsenums.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/hush/tlsmanager.cpp b/src/hush/tlsmanager.cpp index d978bb7e7..92e9b6703 100644 --- a/src/hush/tlsmanager.cpp +++ b/src/hush/tlsmanager.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/hush/tlsmanager.h b/src/hush/tlsmanager.h index 01edbe98a..517ed09a9 100644 --- a/src/hush/tlsmanager.h +++ b/src/hush/tlsmanager.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/hush/utiltls.cpp b/src/hush/utiltls.cpp index 1f0ea6564..68c7a277a 100644 --- a/src/hush/utiltls.cpp +++ b/src/hush/utiltls.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Zen Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/hush/utiltls.h b/src/hush/utiltls.h index 495c112cb..bb241ca11 100644 --- a/src/hush/utiltls.h +++ b/src/hush/utiltls.h @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Zen Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/hush_defs.h b/src/hush_defs.h index 3924f03cc..3fbe054ce 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -1,4 +1,6 @@ // Copyright (c) 2019-2020 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. * * * diff --git a/src/hush_globals.h b/src/hush_globals.h index 8c19b9eb4..deb06d382 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -1,4 +1,4 @@ -// Copyright 2019-2020 The Hush Developers +// Copyright 2016-2020 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 /****************************************************************************** diff --git a/src/hush_notary.h b/src/hush_notary.h index a87a0de9b..98f34227c 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -1,4 +1,6 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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. * * * diff --git a/src/hush_structs.h b/src/hush_structs.h index 54502477b..fc7f1b2b8 100644 --- a/src/hush_structs.h +++ b/src/hush_structs.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/hushd b/src/hushd index 7ba7c160b..46e8a8ca2 100755 --- a/src/hushd +++ b/src/hushd @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 The Hush developers # set working directory to the location of this script # readlink -f does not always exist diff --git a/src/hushd-testnet b/src/hushd-testnet index 03427317b..99b348a04 100755 --- a/src/hushd-testnet +++ b/src/hushd-testnet @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 The Hush developers # set working directory to the location of this script DIR="$( cd "$( dirname "$( readlink -f "${BASH_SOURCE[0]}" )" )" && pwd )" diff --git a/src/importcoin.h b/src/importcoin.h index 955ead825..e82dc400c 100644 --- a/src/importcoin.h +++ b/src/importcoin.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/init.cpp b/src/init.cpp index 8c30d11c1..d0e7e0e73 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/init.h b/src/init.h index 333b8cafa..4bdcc52a4 100644 --- a/src/init.h +++ b/src/init.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/key.h b/src/key.h index fe242f8f5..57b5d7aa4 100644 --- a/src/key.h +++ b/src/key.h @@ -1,7 +1,7 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/key_io.cpp b/src/key_io.cpp index 9c1dfdedf..23168435b 100644 --- a/src/key_io.cpp +++ b/src/key_io.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2014-2016 The Bitcoin Core developers // Copyright (c) 2016-2018 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/key_io.h b/src/key_io.h index 4ca7aa3de..3955de511 100644 --- a/src/key_io.h +++ b/src/key_io.h @@ -1,7 +1,7 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2015 The Bitcoin Core developers // Copyright (c) 2016-2018 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/keystore.cpp b/src/keystore.cpp index 4c7916fd9..8b11a6d66 100644 --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/keystore.h b/src/keystore.h index a1971b9c8..c5409cfbf 100644 --- a/src/keystore.h +++ b/src/keystore.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/komodo-tx.cpp b/src/komodo-tx.cpp index 7d029c511..cb1476c5e 100644 --- a/src/komodo-tx.cpp +++ b/src/komodo-tx.cpp @@ -1,8 +1,7 @@ // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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. * * * @@ -17,7 +16,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "clientversion.h" #include "coins.h" #include "consensus/consensus.h" @@ -32,9 +30,7 @@ #include "util.h" #include "utilmoneystr.h" #include "utilstrencodings.h" - #include - #include #include @@ -45,7 +41,6 @@ using namespace std; #include "hush_structs.h" #include "hush_globals.h" #include "hush_defs.h" - #include "komodo_interest.h" CKey NSPV_key; @@ -59,10 +54,8 @@ static bool fCreateBlank; static std::map registers; static const int CONTINUE_EXECUTION=-1; -// // This function returns either one of EXIT_ codes when it's expected to stop the process or // CONTINUE_EXECUTION when it's expected to continue further. -// static int AppInitRawTx(int argc, char* argv[]) { // @@ -81,10 +74,10 @@ static int AppInitRawTx(int argc, char* argv[]) if (argc<2 || mapArgs.count("-?") || mapArgs.count("-h") || mapArgs.count("-help")) { // First part of help message is specific to this utility - std::string strUsage = _("Hush komodo-tx utility version") + " " + FormatFullVersion() + "\n\n" + + std::string strUsage = _("hush-tx utility version") + " " + FormatFullVersion() + "\n\n" + _("Usage:") + "\n" + - " komodo-tx [options] [commands] " + _("Update hex-encoded zcash transaction") + "\n" + - " komodo-tx [options] -create [commands] " + _("Create hex-encoded zcash transaction") + "\n" + + " hush-tx [options] [commands] " + _("Update hex-encoded Hush transaction") + "\n" + + " hush-tx [options] -create [commands] " + _("Create hex-encoded Hush transaction") + "\n" + "\n"; fprintf(stdout, "%s", strUsage.c_str()); diff --git a/src/komodo_bitcoind.h b/src/komodo_bitcoind.h index acd066f63..5f0c6c6b2 100644 --- a/src/komodo_bitcoind.h +++ b/src/komodo_bitcoind.h @@ -1,4 +1,4 @@ -// Copyright 2019-2020 The Hush Developers +// Copyright 2016-2020 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 /****************************************************************************** diff --git a/src/komodo_curve25519.h b/src/komodo_curve25519.h index 40d1e0345..0cc66f43d 100644 --- a/src/komodo_curve25519.h +++ b/src/komodo_curve25519.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/komodo_events.h b/src/komodo_events.h index 4e11de718..6d41ab227 100644 --- a/src/komodo_events.h +++ b/src/komodo_events.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/komodo_interest.h b/src/komodo_interest.h index 6bc5f806e..615b8ec0c 100644 --- a/src/komodo_interest.h +++ b/src/komodo_interest.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/komodo_port.c b/src/komodo_port.c index f0af9e20c..7747a2bef 100644 --- a/src/komodo_port.c +++ b/src/komodo_port.c @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/main.h b/src/main.h index eb14eeb3b..f3fe057ee 100644 --- a/src/main.h +++ b/src/main.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/metrics.cpp b/src/metrics.cpp index 73aa7f721..771300b7d 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2016 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/metrics.h b/src/metrics.h index b38b800ba..534e68f70 100644 --- a/src/metrics.h +++ b/src/metrics.h @@ -1,5 +1,5 @@ // Copyright (c) 2016 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/miner.cpp b/src/miner.cpp index 4b7bcb08c..b1e46f5df 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/miner.h b/src/miner.h index b48ff5562..6e7b587b7 100644 --- a/src/miner.h +++ b/src/miner.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/net.cpp b/src/net.cpp index de3ac44fc..2e53c9491 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/net.h b/src/net.h index fc42c9de2..54d438e42 100644 --- a/src/net.h +++ b/src/net.h @@ -1,8 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers +// Copyright (c) 2016-2020 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. * * * @@ -17,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_NET_H #define HUSH_NET_H @@ -34,7 +33,6 @@ #include "uint256.h" #include "utilstrencodings.h" #include "util.h" - #include #include diff --git a/src/notarizationdb.cpp b/src/notarizationdb.cpp index 4ce29a86c..80009f950 100644 --- a/src/notarizationdb.cpp +++ b/src/notarizationdb.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "dbwrapper.h" diff --git a/src/notarizationdb.h b/src/notarizationdb.h index 176889e03..9c34cf112 100644 --- a/src/notarizationdb.h +++ b/src/notarizationdb.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #ifndef HUSH_NOTARISATIONDB_H diff --git a/src/pow.cpp b/src/pow.cpp index d18d75ca2..c0372d549 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/prevector.h b/src/prevector.h index 36066eca2..0e9fa232a 100644 --- a/src/prevector.h +++ b/src/prevector.h @@ -1,13 +1,14 @@ +// Copyright (c) 2016-2020 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 #ifndef _HUSH_PREVECTOR_H_ #define _HUSH_PREVECTOR_H_ #include - #include #include #include #include - #include #pragma pack(push, 1) diff --git a/src/primitives/block.cpp b/src/primitives/block.cpp index 84cc22184..ed633326c 100644 --- a/src/primitives/block.cpp +++ b/src/primitives/block.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/primitives/block.h b/src/primitives/block.h index 8e825f8a6..25d036840 100644 --- a/src/primitives/block.h +++ b/src/primitives/block.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp index 5dc7e5d47..aa02f867f 100644 --- a/src/primitives/transaction.cpp +++ b/src/primitives/transaction.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 85478a8d0..9beaeda4a 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/protocol.cpp b/src/protocol.cpp index 674c23ac0..2dcb1d7d6 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/pubkey.cpp b/src/pubkey.cpp index 4595fd79e..a9197acf8 100644 --- a/src/pubkey.cpp +++ b/src/pubkey.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2014 The Bitcoin Core developers // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/pubkey.h b/src/pubkey.h index 9df381f02..88a76ccd7 100644 --- a/src/pubkey.h +++ b/src/pubkey.h @@ -1,7 +1,7 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/purge b/src/purge index 7983c2327..bf7807004 100755 --- a/src/purge +++ b/src/purge @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 The Hush developers # Released under the GPLv3 echo "Purging $1" diff --git a/src/random.cpp b/src/random.cpp index 58d48d03f..00bde4f94 100644 --- a/src/random.cpp +++ b/src/random.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/rest.cpp b/src/rest.cpp index 9a59d17cb..75705aff4 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -1,9 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019 The Hush developers +// Copyright (c) 2016-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "primitives/block.h" #include "primitives/transaction.h" #include "main.h" @@ -29,10 +27,8 @@ #include "txmempool.h" #include "utilstrencodings.h" #include "version.h" - #include #include - #include using namespace std; diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 238cedf5e..5466b9914 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/rpc/client.cpp b/src/rpc/client.cpp index 070e339f5..0cc93d2d2 100644 --- a/src/rpc/client.cpp +++ b/src/rpc/client.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index c6d6b0cc0..f61534b2c 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 8eff961e8..01774211f 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index d07dd8d2d..2b3b6b3af 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 8b21ba029..b98508796 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 28c15c93d..b928980ca 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2015 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index f648919c2..e5b972d08 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/rpc/server.h b/src/rpc/server.h index 847798cdd..bad0d3ce6 100644 --- a/src/rpc/server.h +++ b/src/rpc/server.h @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush Developers +// Copyright (c) 2016-2020 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 diff --git a/src/script/standard.cpp b/src/script/standard.cpp index 5621fed31..1213814e5 100644 --- a/src/script/standard.cpp +++ b/src/script/standard.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/script/standard.h b/src/script/standard.h index 971230f27..2dc6a3d91 100644 --- a/src/script/standard.h +++ b/src/script/standard.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/sendalert.cpp b/src/sendalert.cpp index 1513f40e0..0078d6858 100644 --- a/src/sendalert.cpp +++ b/src/sendalert.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2016 The Zcash developers // Original code from: https://gist.github.com/laanwj/0e689cfa37b52bcbbb44 // Distributed under the GPLv3 software license, see the accompanying @@ -56,7 +56,7 @@ the bad alert. */ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "main.h" diff --git a/src/sietch.h b/src/sietch.h index e1ec354a7..689bb312a 100644 --- a/src/sietch.h +++ b/src/sietch.h @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2019-2020 The Hush developers * + * Copyright © 2016-2020 The Hush developers * * * * See the AUTHORS and LICENSE files at * * the top-level directory of this distribution for the individual copyright * diff --git a/src/support/allocators/secure.h b/src/support/allocators/secure.h index b0fba425e..771eecaf3 100644 --- a/src/support/allocators/secure.h +++ b/src/support/allocators/secure.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/support/allocators/zeroafterfree.h b/src/support/allocators/zeroafterfree.h index 1e18eba38..2c4796570 100644 --- a/src/support/allocators/zeroafterfree.h +++ b/src/support/allocators/zeroafterfree.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/sync.cpp b/src/sync.cpp index b921210f8..691aed52f 100644 --- a/src/sync.cpp +++ b/src/sync.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2011-2012 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html /****************************************************************************** diff --git a/src/test-hush/main.cpp b/src/test-hush/main.cpp index d4924a4e6..db0cff3de 100644 --- a/src/test-hush/main.cpp +++ b/src/test-hush/main.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "key.h" diff --git a/src/test-hush/test_addrman.cpp b/src/test-hush/test_addrman.cpp index 73e257853..b38fca4ed 100644 --- a/src/test-hush/test_addrman.cpp +++ b/src/test-hush/test_addrman.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/test-hush/test_coinimport.cpp b/src/test-hush/test_coinimport.cpp index c286084df..90f10fe1c 100644 --- a/src/test-hush/test_coinimport.cpp +++ b/src/test-hush/test_coinimport.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test-hush/test_cryptoconditions.cpp b/src/test-hush/test_cryptoconditions.cpp index f9944d9b3..66e7c7a51 100644 --- a/src/test-hush/test_cryptoconditions.cpp +++ b/src/test-hush/test_cryptoconditions.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/test-hush/test_eval_bet.cpp b/src/test-hush/test_eval_bet.cpp index e3a1a3bd1..9b87ad72c 100644 --- a/src/test-hush/test_eval_bet.cpp +++ b/src/test-hush/test_eval_bet.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/test-hush/test_eval_notarization.cpp b/src/test-hush/test_eval_notarization.cpp index 866f40aa0..1edb5e408 100644 --- a/src/test-hush/test_eval_notarization.cpp +++ b/src/test-hush/test_eval_notarization.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/test-hush/test_netbase_tests.cpp b/src/test-hush/test_netbase_tests.cpp index 3e4d9d5bb..b1b5871fa 100644 --- a/src/test-hush/test_netbase_tests.cpp +++ b/src/test-hush/test_netbase_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/test-hush/test_parse_notarization.cpp b/src/test-hush/test_parse_notarization.cpp index c950d77d4..c303eab61 100644 --- a/src/test-hush/test_parse_notarization.cpp +++ b/src/test-hush/test_parse_notarization.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/test-hush/testutils.cpp b/src/test-hush/testutils.cpp index 3f147eb41..6f04130f5 100644 --- a/src/test-hush/testutils.cpp +++ b/src/test-hush/testutils.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/test-hush/testutils.h b/src/test-hush/testutils.h index 2155f742e..a56ea7a45 100644 --- a/src/test-hush/testutils.h +++ b/src/test-hush/testutils.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #ifndef HUSH_TESTUTILS_H diff --git a/src/test/Checkpoints_tests.cpp b/src/test/Checkpoints_tests.cpp index 32215941a..af75ce0ed 100644 --- a/src/test/Checkpoints_tests.cpp +++ b/src/test/Checkpoints_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2011-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp index 71b9be050..787f09529 100644 --- a/src/test/DoS_tests.cpp +++ b/src/test/DoS_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/accounting_tests.cpp b/src/test/accounting_tests.cpp index 7e900dd75..4432f5c15 100644 --- a/src/test/accounting_tests.cpp +++ b/src/test/accounting_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/addrman_tests.cpp b/src/test/addrman_tests.cpp index 308537268..e50842afe 100644 --- a/src/test/addrman_tests.cpp +++ b/src/test/addrman_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "addrman.h" diff --git a/src/test/alert_tests.cpp b/src/test/alert_tests.cpp index 73062da2c..a4750b1e6 100644 --- a/src/test/alert_tests.cpp +++ b/src/test/alert_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/allocator_tests.cpp b/src/test/allocator_tests.cpp index deb00075c..c183613f8 100644 --- a/src/test/allocator_tests.cpp +++ b/src/test/allocator_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/arith_uint256_tests.cpp b/src/test/arith_uint256_tests.cpp index fc39b6ebf..510b7421a 100644 --- a/src/test/arith_uint256_tests.cpp +++ b/src/test/arith_uint256_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2011-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/base32_tests.cpp b/src/test/base32_tests.cpp index 6da58c657..dd2f9df91 100644 --- a/src/test/base32_tests.cpp +++ b/src/test/base32_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/base58_tests.cpp b/src/test/base58_tests.cpp index a5bfc983b..550ed6a95 100644 --- a/src/test/base58_tests.cpp +++ b/src/test/base58_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2011-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/base64_tests.cpp b/src/test/base64_tests.cpp index 315dbf8fc..7654eb9b2 100644 --- a/src/test/base64_tests.cpp +++ b/src/test/base64_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2011-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/bctest.py b/src/test/bctest.py index 5d5d0a4fc..0370e580f 100644 --- a/src/test/bctest.py +++ b/src/test/bctest.py @@ -1,5 +1,5 @@ # Copyright 2014 BitPay, Inc. -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 diff --git a/src/test/bech32_tests.cpp b/src/test/bech32_tests.cpp index 3b2fd742f..b190027e8 100644 --- a/src/test/bech32_tests.cpp +++ b/src/test/bech32_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2017 Pieter Wuille -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/bip32_tests.cpp b/src/test/bip32_tests.cpp index 4a63155b9..a27800322 100644 --- a/src/test/bip32_tests.cpp +++ b/src/test/bip32_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/bitcoin-util-test.py b/src/test/bitcoin-util-test.py index e843a0524..3727e8c0a 100755 --- a/src/test/bitcoin-util-test.py +++ b/src/test/bitcoin-util-test.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 The Hush developers # Copyright 2014 BitPay, Inc. # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/bloom_tests.cpp b/src/test/bloom_tests.cpp index 7dbd3ec5e..a261b7dbb 100644 --- a/src/test/bloom_tests.cpp +++ b/src/test/bloom_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/checkblock_tests.cpp b/src/test/checkblock_tests.cpp index 0741e327e..3cb8ad09a 100644 --- a/src/test/checkblock_tests.cpp +++ b/src/test/checkblock_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2013-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/coins_tests.cpp b/src/test/coins_tests.cpp index d0e74029b..bb7d84c54 100644 --- a/src/test/coins_tests.cpp +++ b/src/test/coins_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/compress_tests.cpp b/src/test/compress_tests.cpp index e275d6421..3889f846c 100644 --- a/src/test/compress_tests.cpp +++ b/src/test/compress_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/convertbits_tests.cpp b/src/test/convertbits_tests.cpp index 446521bd0..656f8054c 100644 --- a/src/test/convertbits_tests.cpp +++ b/src/test/convertbits_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2018 The Zcash developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/crypto_tests.cpp b/src/test/crypto_tests.cpp index e25c7bd80..f43f904a6 100644 --- a/src/test/crypto_tests.cpp +++ b/src/test/crypto_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/dbwrapper_tests.cpp b/src/test/dbwrapper_tests.cpp index 812d44a9c..758cab9c5 100644 --- a/src/test/dbwrapper_tests.cpp +++ b/src/test/dbwrapper_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2018 The Zcash developers // Copyright (c) 2012-2017 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying diff --git a/src/test/equihash_tests.cpp b/src/test/equihash_tests.cpp index 50e8cbdc8..23f9f2406 100644 --- a/src/test/equihash_tests.cpp +++ b/src/test/equihash_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2016 Jack Grigg // Copyright (c) 2016 The Zcash developers // Distributed under the GPLv3 software license, see the accompanying diff --git a/src/test/getarg_tests.cpp b/src/test/getarg_tests.cpp index e523c818f..5f23995ae 100644 --- a/src/test/getarg_tests.cpp +++ b/src/test/getarg_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/hash_tests.cpp b/src/test/hash_tests.cpp index eff81e212..945f34694 100644 --- a/src/test/hash_tests.cpp +++ b/src/test/hash_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/key_tests.cpp b/src/test/key_tests.cpp index 7f8cf9099..3d553fafa 100644 --- a/src/test/key_tests.cpp +++ b/src/test/key_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/main_tests.cpp b/src/test/main_tests.cpp index 96b71c6cc..cf2d818d8 100644 --- a/src/test/main_tests.cpp +++ b/src/test/main_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/mempool_tests.cpp b/src/test/mempool_tests.cpp index a72dee26a..4a4f2ca8a 100644 --- a/src/test/mempool_tests.cpp +++ b/src/test/mempool_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 6f94f7b2a..58f2e53e5 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/mruset_tests.cpp b/src/test/mruset_tests.cpp index 9515d12ed..0b6cd9dc1 100644 --- a/src/test/mruset_tests.cpp +++ b/src/test/mruset_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/multisig_tests.cpp b/src/test/multisig_tests.cpp index 3d01d2af2..a21f06223 100644 --- a/src/test/multisig_tests.cpp +++ b/src/test/multisig_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/netbase_tests.cpp b/src/test/netbase_tests.cpp index 5f4c5c3d6..c9ce4550f 100644 --- a/src/test/netbase_tests.cpp +++ b/src/test/netbase_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/pmt_tests.cpp b/src/test/pmt_tests.cpp index 2604f77a8..3b6fce9b0 100644 --- a/src/test/pmt_tests.cpp +++ b/src/test/pmt_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/policyestimator_tests.cpp b/src/test/policyestimator_tests.cpp index be9b2ca10..b44d022eb 100644 --- a/src/test/policyestimator_tests.cpp +++ b/src/test/policyestimator_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2015 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index 6b4947fb5..54181b989 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2015 The Bitcoin Core developers // Distributed under the GPLv3/X11 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/prevector_tests.cpp b/src/test/prevector_tests.cpp index 66f5b3cbb..d5ccafd33 100644 --- a/src/test/prevector_tests.cpp +++ b/src/test/prevector_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2015 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/raii_event_tests.cpp b/src/test/raii_event_tests.cpp index 668fed405..23ea02307 100644 --- a/src/test/raii_event_tests.cpp +++ b/src/test/raii_event_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2016 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/reverselock_tests.cpp b/src/test/reverselock_tests.cpp index cf504dd10..c5484ce96 100644 --- a/src/test/reverselock_tests.cpp +++ b/src/test/reverselock_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2015 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp index 354ed4f13..0f9f4b1d3 100644 --- a/src/test/rpc_tests.cpp +++ b/src/test/rpc_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/rpc_wallet_tests.cpp b/src/test/rpc_wallet_tests.cpp index 3ee8a12d6..f30e4b2fc 100644 --- a/src/test/rpc_wallet_tests.cpp +++ b/src/test/rpc_wallet_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2013-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/test/sanity_tests.cpp b/src/test/sanity_tests.cpp index 409e2d65a..9b6e5a905 100644 --- a/src/test/sanity_tests.cpp +++ b/src/test/sanity_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/scheduler_tests.cpp b/src/test/scheduler_tests.cpp index 4700bb2b8..b547045f4 100644 --- a/src/test/scheduler_tests.cpp +++ b/src/test/scheduler_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/script_P2PKH_tests.cpp b/src/test/script_P2PKH_tests.cpp index f32be1f43..5c99dd32e 100644 --- a/src/test/script_P2PKH_tests.cpp +++ b/src/test/script_P2PKH_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2015 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/script_P2SH_tests.cpp b/src/test/script_P2SH_tests.cpp index 7ac38d242..a48fe5343 100644 --- a/src/test/script_P2SH_tests.cpp +++ b/src/test/script_P2SH_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index bf6a6e8e9..173e7ff2c 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/scriptnum_tests.cpp b/src/test/scriptnum_tests.cpp index cc8ef9fba..41210eb7c 100644 --- a/src/test/scriptnum_tests.cpp +++ b/src/test/scriptnum_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/serialize_tests.cpp b/src/test/serialize_tests.cpp index b4d89f921..6688f3988 100644 --- a/src/test/serialize_tests.cpp +++ b/src/test/serialize_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/sha256compress_tests.cpp b/src/test/sha256compress_tests.cpp index 34c385b06..49646049a 100644 --- a/src/test/sha256compress_tests.cpp +++ b/src/test/sha256compress_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "test/test_bitcoin.h" diff --git a/src/test/sighash_tests.cpp b/src/test/sighash_tests.cpp index 999718d27..578c0cc21 100644 --- a/src/test/sighash_tests.cpp +++ b/src/test/sighash_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/sigopcount_tests.cpp b/src/test/sigopcount_tests.cpp index 9ed6369ca..b62262894 100644 --- a/src/test/sigopcount_tests.cpp +++ b/src/test/sigopcount_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2012-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/skiplist_tests.cpp b/src/test/skiplist_tests.cpp index 94fee9044..9efee8147 100644 --- a/src/test/skiplist_tests.cpp +++ b/src/test/skiplist_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp index d0801aa81..79adfee2a 100644 --- a/src/test/test_bitcoin.cpp +++ b/src/test/test_bitcoin.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/timedata_tests.cpp b/src/test/timedata_tests.cpp index d5234a9de..a7de77c44 100644 --- a/src/test/timedata_tests.cpp +++ b/src/test/timedata_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/torcontrol_tests.cpp b/src/test/torcontrol_tests.cpp index c0d882bac..a14639c8d 100644 --- a/src/test/torcontrol_tests.cpp +++ b/src/test/torcontrol_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2017 The Zcash developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index 56fc7642c..51dae9853 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/uint256_tests.cpp b/src/test/uint256_tests.cpp index c90fa37e4..7cd956186 100644 --- a/src/test/uint256_tests.cpp +++ b/src/test/uint256_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2013 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/univalue_tests.cpp b/src/test/univalue_tests.cpp index aada6ab30..3bfaf92bb 100644 --- a/src/test/univalue_tests.cpp +++ b/src/test/univalue_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright 2014 BitPay, Inc. // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index 66467c34b..15a0f3d8f 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2011-2014 The Bitcoin Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/test/wallet-utility.py b/src/test/wallet-utility.py index 9abe1e9ae..549112162 100644 --- a/src/test/wallet-utility.py +++ b/src/test/wallet-utility.py @@ -1,6 +1,6 @@ #!/usr/bin/python # Copyright 2014 BitPay, Inc. -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 diff --git a/src/timedata.cpp b/src/timedata.cpp index 0b4e3c05d..bfa7af3b7 100644 --- a/src/timedata.cpp +++ b/src/timedata.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2020 The Zcash developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/timedata.h b/src/timedata.h index 0c2ed5e72..9f7d324b1 100644 --- a/src/timedata.h +++ b/src/timedata.h @@ -1,5 +1,5 @@ // Copyright (c) 2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2020 The Zcash developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/torcontrol.cpp b/src/torcontrol.cpp index 218fb903b..6e50bd974 100644 --- a/src/torcontrol.cpp +++ b/src/torcontrol.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2015-2017 The Bitcoin Core developers // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/torcontrol.h b/src/torcontrol.h index 9d47b8d62..e1061afd9 100644 --- a/src/torcontrol.h +++ b/src/torcontrol.h @@ -1,5 +1,5 @@ // Copyright (c) 2015 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/transaction_builder.cpp b/src/transaction_builder.cpp index 14fc6c2a2..8da3012c9 100644 --- a/src/transaction_builder.cpp +++ b/src/transaction_builder.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2018 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/transaction_builder.h b/src/transaction_builder.h index 36d59a995..adee59765 100644 --- a/src/transaction_builder.h +++ b/src/transaction_builder.h @@ -1,5 +1,5 @@ // Copyright (c) 2018 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/txdb.cpp b/src/txdb.cpp index fdae60306..e3fbe01e5 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/txdb.h b/src/txdb.h index b36f20151..5a38a0eb6 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/txmempool.cpp b/src/txmempool.cpp index f025b6744..66ed1452e 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/txmempool.h b/src/txmempool.h index f98680dcb..b30ea14ed 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/util.cpp b/src/util.cpp index 2668a2cd7..d90c788a6 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/util.h b/src/util.h index d1e8eaa40..69410bb4b 100644 --- a/src/util.h +++ b/src/util.h @@ -1,9 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - /** * Server/client environment: argument handling, config file parsing, * logging, thread wrappers @@ -33,14 +31,12 @@ #include "compat.h" #include "tinyformat.h" #include "utiltime.h" - #include #include #include #include #include #include - #include #include #include @@ -261,9 +257,7 @@ int GetNumCores(); void SetThreadPriority(int nPriority); void RenameThread(const char* name); -/** - * .. and a wrapper that just calls func once - */ +// a wrapper that just calls func once template void TraceThread(const char* name, Callable func) { std::string s = strprintf("hush-%s", name); @@ -294,5 +288,4 @@ void SplitStr(const std::string& strVal, std::vector &outVals); #define HUSH_SMART_CHAIN_MAXLEN 65 - #endif // HUSH_UTIL_H diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp index d1846e558..16f760de0 100644 --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 . diff --git a/src/version.h b/src/version.h index 165839b39..7f954364a 100644 --- a/src/version.h +++ b/src/version.h @@ -1,5 +1,5 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/wallet-utility.cpp b/src/wallet-utility.cpp index c46bcebbc..79017e645 100644 --- a/src/wallet-utility.cpp +++ b/src/wallet-utility.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/wallet/asyncrpcoperation_mergetoaddress.cpp b/src/wallet/asyncrpcoperation_mergetoaddress.cpp index 7714cf90a..67a502ee0 100644 --- a/src/wallet/asyncrpcoperation_mergetoaddress.cpp +++ b/src/wallet/asyncrpcoperation_mergetoaddress.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 . diff --git a/src/wallet/asyncrpcoperation_mergetoaddress.h b/src/wallet/asyncrpcoperation_mergetoaddress.h index f8024fd47..aa8831fd3 100644 --- a/src/wallet/asyncrpcoperation_mergetoaddress.h +++ b/src/wallet/asyncrpcoperation_mergetoaddress.h @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/asyncrpcoperation_saplingconsolidation.cpp b/src/wallet/asyncrpcoperation_saplingconsolidation.cpp index b50f45059..3200a31f6 100644 --- a/src/wallet/asyncrpcoperation_saplingconsolidation.cpp +++ b/src/wallet/asyncrpcoperation_saplingconsolidation.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2019 CryptoForge // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index 58685eee6..63fcc676e 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2016 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/asyncrpcoperation_sendmany.h b/src/wallet/asyncrpcoperation_sendmany.h index 0fa205814..a789749bd 100644 --- a/src/wallet/asyncrpcoperation_sendmany.h +++ b/src/wallet/asyncrpcoperation_sendmany.h @@ -1,5 +1,5 @@ // Copyright (c) 2016 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/asyncrpcoperation_shieldcoinbase.cpp b/src/wallet/asyncrpcoperation_shieldcoinbase.cpp index e9480a1e3..9a56db96e 100644 --- a/src/wallet/asyncrpcoperation_shieldcoinbase.cpp +++ b/src/wallet/asyncrpcoperation_shieldcoinbase.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/asyncrpcoperation_shieldcoinbase.h b/src/wallet/asyncrpcoperation_shieldcoinbase.h index cb214786d..3e91b73b7 100644 --- a/src/wallet/asyncrpcoperation_shieldcoinbase.h +++ b/src/wallet/asyncrpcoperation_shieldcoinbase.h @@ -1,5 +1,5 @@ // Copyright (c) 2017 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/crypter.cpp b/src/wallet/crypter.cpp index 2635dff29..7a6b4aba4 100644 --- a/src/wallet/crypter.cpp +++ b/src/wallet/crypter.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2013 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/crypter.h b/src/wallet/crypter.h index a493ceecc..fb58cd4b3 100644 --- a/src/wallet/crypter.h +++ b/src/wallet/crypter.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/gtest/test_transaction.cpp b/src/wallet/gtest/test_transaction.cpp index df25f2ccf..6c3fed533 100644 --- a/src/wallet/gtest/test_transaction.cpp +++ b/src/wallet/gtest/test_transaction.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/wallet/gtest/test_wallet.cpp b/src/wallet/gtest/test_wallet.cpp index a1329cb14..fcdada5a2 100644 --- a/src/wallet/gtest/test_wallet.cpp +++ b/src/wallet/gtest/test_wallet.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/wallet/gtest/test_wallet_zkeys.cpp b/src/wallet/gtest/test_wallet_zkeys.cpp index fb56ac31b..f321dec3d 100644 --- a/src/wallet/gtest/test_wallet_zkeys.cpp +++ b/src/wallet/gtest/test_wallet_zkeys.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include diff --git a/src/wallet/rpcdump.cpp b/src/wallet/rpcdump.cpp index a3643602c..ee567b1fd 100644 --- a/src/wallet/rpcdump.cpp +++ b/src/wallet/rpcdump.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/rpchushwallet.cpp b/src/wallet/rpchushwallet.cpp index 064a28cb7..d19662167 100644 --- a/src/wallet/rpchushwallet.cpp +++ b/src/wallet/rpchushwallet.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers // Copyright (c) 2019 Cryptoforge // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 113a36557..20bbc44ab 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 /****************************************************************************** diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp index 47addd306..1f4648b3f 100644 --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index e4619611b..16ee73c6a 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 0c12a3f99..d7cb97731 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp index 0824aedea..290902116 100644 --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -1,9 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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. * * * @@ -18,9 +17,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "wallet/walletdb.h" - #include "consensus/validation.h" #include "key_io.h" #include "main.h" @@ -32,7 +29,6 @@ #include "wallet/wallet.h" #include "zcash/Proof.hpp" #include "hush_defs.h" - #include #include #include diff --git a/src/zcash/Address.cpp b/src/zcash/Address.cpp index 070458fa2..06699d8e7 100644 --- a/src/zcash/Address.cpp +++ b/src/zcash/Address.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/Address.hpp b/src/zcash/Address.hpp index 8f9e45d89..6de95eb2b 100644 --- a/src/zcash/Address.hpp +++ b/src/zcash/Address.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/IncrementalMerkleTree.cpp b/src/zcash/IncrementalMerkleTree.cpp index 902e6319d..7e7c81cc4 100644 --- a/src/zcash/IncrementalMerkleTree.cpp +++ b/src/zcash/IncrementalMerkleTree.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/IncrementalMerkleTree.hpp b/src/zcash/IncrementalMerkleTree.hpp index 8b407c2b4..df68388ab 100644 --- a/src/zcash/IncrementalMerkleTree.hpp +++ b/src/zcash/IncrementalMerkleTree.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/JoinSplit.cpp b/src/zcash/JoinSplit.cpp index 8a53a5ade..6d715fd2e 100644 --- a/src/zcash/JoinSplit.cpp +++ b/src/zcash/JoinSplit.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #include "JoinSplit.hpp" diff --git a/src/zcash/JoinSplit.hpp b/src/zcash/JoinSplit.hpp index 3d5d43e79..6dc1c58f7 100644 --- a/src/zcash/JoinSplit.hpp +++ b/src/zcash/JoinSplit.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/Note.cpp b/src/zcash/Note.cpp index f73cae1de..dc8169b81 100644 --- a/src/zcash/Note.cpp +++ b/src/zcash/Note.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/Note.hpp b/src/zcash/Note.hpp index d0c4ed63b..5110c7715 100644 --- a/src/zcash/Note.hpp +++ b/src/zcash/Note.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/NoteEncryption.cpp b/src/zcash/NoteEncryption.cpp index 60ca988cf..f0c34d456 100644 --- a/src/zcash/NoteEncryption.cpp +++ b/src/zcash/NoteEncryption.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/NoteEncryption.hpp b/src/zcash/NoteEncryption.hpp index ff121470c..951f9da27 100644 --- a/src/zcash/NoteEncryption.hpp +++ b/src/zcash/NoteEncryption.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/Proof.cpp b/src/zcash/Proof.cpp index a4dffc1b0..cf6ea275d 100644 --- a/src/zcash/Proof.cpp +++ b/src/zcash/Proof.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/Proof.hpp b/src/zcash/Proof.hpp index cb8b856d2..df2d82c08 100644 --- a/src/zcash/Proof.hpp +++ b/src/zcash/Proof.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/Zcash.h b/src/zcash/Zcash.h index a8bb78f26..a713e45a7 100644 --- a/src/zcash/Zcash.h +++ b/src/zcash/Zcash.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #ifndef ZC_ZCASH_H_ diff --git a/src/zcash/prf.cpp b/src/zcash/prf.cpp index ee513387c..42e047197 100644 --- a/src/zcash/prf.cpp +++ b/src/zcash/prf.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/prf.h b/src/zcash/prf.h index 135648e69..e17b5c28a 100644 --- a/src/zcash/prf.h +++ b/src/zcash/prf.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 // Zcash uses SHA256Compress as a PRF for various components diff --git a/src/zcash/util.cpp b/src/zcash/util.cpp index e19b24468..1155effd2 100644 --- a/src/zcash/util.cpp +++ b/src/zcash/util.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/util.h b/src/zcash/util.h index ae6be3b19..fcda1db9c 100644 --- a/src/zcash/util.h +++ b/src/zcash/util.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 #ifndef ZC_UTIL_H_ diff --git a/src/zcash/zip32.cpp b/src/zcash/zip32.cpp index 19a92d088..0a32eea5f 100644 --- a/src/zcash/zip32.cpp +++ b/src/zcash/zip32.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2018 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcash/zip32.h b/src/zcash/zip32.h index 90e414181..305a4193d 100644 --- a/src/zcash/zip32.h +++ b/src/zcash/zip32.h @@ -1,5 +1,5 @@ // Copyright (c) 2018 The Zcash developers -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcbenchmarks.cpp b/src/zcbenchmarks.cpp index 525eb64cb..1a630abf6 100644 --- a/src/zcbenchmarks.cpp +++ b/src/zcbenchmarks.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 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 diff --git a/src/zcbenchmarks.h b/src/zcbenchmarks.h index 49cf4b749..267051877 100644 --- a/src/zcbenchmarks.h +++ b/src/zcbenchmarks.h @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016-2020 The Hush developers #ifndef BENCHMARKS_H #define BENCHMARKS_H diff --git a/src/zush b/src/zush index 0611ce0d9..829f57bc3 100755 --- a/src/zush +++ b/src/zush @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 Hush developers +# Copyright (c) 2016-2020 The Hush developers # set working directory to the location of this script # readlink -f does not always exist diff --git a/toolchain-info.sh b/toolchain-info.sh index 1221bbfe2..67a741fbe 100755 --- a/toolchain-info.sh +++ b/toolchain-info.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 diff --git a/zcutil/afl/afl-build.sh b/zcutil/afl/afl-build.sh index 3a187e3c2..4d65e74a7 100755 --- a/zcutil/afl/afl-build.sh +++ b/zcutil/afl/afl-build.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 # A wrapper around ./zcutil/build.sh for instrumenting the build with AFL: diff --git a/zcutil/afl/afl-get.sh b/zcutil/afl/afl-get.sh index fe9084902..914e4d795 100755 --- a/zcutil/afl/afl-get.sh +++ b/zcutil/afl/afl-get.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 # Obtains and builds a copy of AFL from source. diff --git a/zcutil/afl/afl-getbuildrun.sh b/zcutil/afl/afl-getbuildrun.sh index 07e3f8354..434140f24 100755 --- a/zcutil/afl/afl-getbuildrun.sh +++ b/zcutil/afl/afl-getbuildrun.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 # Builds AFL and an instrumented hushd, then begins fuzzing. diff --git a/zcutil/afl/afl-run.sh b/zcutil/afl/afl-run.sh index b89b3ad5b..7dc2e9af8 100755 --- a/zcutil/afl/afl-run.sh +++ b/zcutil/afl/afl-run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 diff --git a/zcutil/build-arm.sh b/zcutil/build-arm.sh index fa62b08bc..d0aae5d10 100755 --- a/zcutil/build-arm.sh +++ b/zcutil/build-arm.sh @@ -1,6 +1,6 @@ #!/bin/bash # Copyright (c) 2019-2020 radix42 -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 The Hush developers # Original aarch64 port by radix42. Thank you! # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/zcutil/build-debian-package.sh b/zcutil/build-debian-package.sh index a5c7a3f07..629a053d4 100755 --- a/zcutil/build-debian-package.sh +++ b/zcutil/build-debian-package.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 ## Usage: ./zcutil/build-debian-package.sh diff --git a/zcutil/build-mac.sh b/zcutil/build-mac.sh index 12e426e71..6a58ba9d6 100755 --- a/zcutil/build-mac.sh +++ b/zcutil/build-mac.sh @@ -1,6 +1,7 @@ #!/bin/bash -# Copyright (c) 2019 The Hush developers -# Released under the GPLv3 +# Copyright (c) 2016-2020 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 export CC=gcc-8 export CXX=g++-8 diff --git a/zcutil/build-win.sh b/zcutil/build-win.sh index a954b0467..0f1acbf2c 100755 --- a/zcutil/build-win.sh +++ b/zcutil/build-win.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 export HOST=x86_64-w64-mingw32 diff --git a/zcutil/build.sh b/zcutil/build.sh index 4f0c03c32..c11159de7 100755 --- a/zcutil/build.sh +++ b/zcutil/build.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 diff --git a/zcutil/docker-entrypoint.sh b/zcutil/docker-entrypoint.sh index 1ffc95b08..e5f116e6d 100755 --- a/zcutil/docker-entrypoint.sh +++ b/zcutil/docker-entrypoint.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2019-2020 The Hush developers +# Copyright (c) 2016-2020 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 From 5b07e01437b52671e6ba359d3851d3289aad09d2 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 11 Dec 2020 00:33:56 -0500 Subject: [PATCH 188/277] Various things --- src/chainparams.cpp | 108 ++++++++++++------------------------ src/consensus/consensus.h | 2 - src/consensus/params.h | 37 ++---------- src/hush.h | 2 +- src/hush_globals.h | 2 +- src/hush_notary.h | 4 +- src/hush_utils.h | 53 ++++++++---------- src/komodo_bitcoind.h | 4 +- src/komodo_port.c | 8 +-- src/main.cpp | 19 ++++--- src/metrics.cpp | 11 +--- src/miner.cpp | 9 ++- src/pow.cpp | 57 +++++++++++++------ src/pow.h | 6 +- src/pow/tromp/equi.h | 5 +- src/pow/tromp/equi_miner.h | 5 +- src/pow/tromp/osx_barrier.h | 3 + src/rpc/misc.cpp | 4 +- src/test/main_tests.cpp | 4 +- 19 files changed, 148 insertions(+), 195 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 15fba01cc..3b848453b 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -100,32 +100,32 @@ public: strNetworkID = "main"; strCurrencyUnits = "HUSH"; bip44CoinType = 141; // As registered in https://github.com/satoshilabs/slips/blob/master/slip-0044.md - consensus.fCoinbaseMustBeProtected = false; - consensus.nSubsidySlowStartInterval = 20000; - consensus.nSubsidyHalvingInterval = 840000; + + consensus.fCoinbaseMustBeProtected = false; consensus.nMajorityEnforceBlockUpgrade = 750; consensus.nMajorityRejectBlockOutdated = 950; - consensus.nMajorityWindow = 4000; - consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); - consensus.powAlternate = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); - consensus.nPowAveragingWindow = 17; - consensus.nMaxFutureBlockTime = 7 * 60; // 7 mins + consensus.nMajorityWindow = 4000; + consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); + consensus.powAlternate = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); + consensus.nPowAveragingWindow = 17; + consensus.nMaxFutureBlockTime = 7 * 60; // 7 mins assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); consensus.nPowMaxAdjustDown = 32; // 32% adjustment down - consensus.nPowMaxAdjustUp = 16; // 16% adjustment up - consensus.nPowTargetSpacing = 1 * 60; + consensus.nPowMaxAdjustUp = 16; // 16% adjustment up + // we are emulating old node behavior at startup, they used 150s + consensus.nPowTargetSpacing = 150; // 75; // HUSH is 75 seconds, Hush Smart Chains are 60 seconds by default consensus.nPowAllowMinDifficultyBlocksAfterHeight = boost::none; - consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; - consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = - Consensus::NetworkUpgrade::ALWAYS_ACTIVE; - consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nProtocolVersion = 170002; - consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; - consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nProtocolVersion = 170005; + // HUSH never had Sprout in our blockchain history, but some internals require *knowing* about Sprout + // or it breaks backward compatibility. We do what we can. + consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; + consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = Consensus::NetworkUpgrade::ALWAYS_ACTIVE; + consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nProtocolVersion = 170002; + consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nProtocolVersion = 170005; consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; - consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nProtocolVersion = 170007; - consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nProtocolVersion = 170007; + consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000000000281b32ff3198a1"); @@ -140,7 +140,7 @@ public: pchMessageStart[2] = 0xe4; pchMessageStart[3] = 0x8d; vAlertPubKey = ParseHex("038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac"); - nDefaultPort = 7770; + nDefaultPort = 5420; nMinerThreads = 0; nMaxTipAge = 24 * 60 * 60; nPruneAfterHeight = 100000; @@ -188,6 +188,8 @@ public: base58Prefixes[SECRET_KEY] = std::vector(1,188); base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container >(); base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container >(); + + // Unused Sprout stuff, for historical completeness // guarantees the first two characters, when base58 encoded, are "zc" base58Prefixes[ZCPAYMENT_ADDRRESS] = {22,154}; // guarantees the first 4 characters, when base58 encoded, are "ZiVK" @@ -203,10 +205,10 @@ public: vFixedSeeds = std::vector(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main)); - fMiningRequiresPeers = true; - fDefaultConsistencyChecks = false; - fRequireStandard = true; - fMineBlocksOnDemand = false; + fMiningRequiresPeers = true; + fDefaultConsistencyChecks = false; + fRequireStandard = true; + fMineBlocksOnDemand = false; fTestnetToBeDeprecatedFieldRPC = false; } }; @@ -246,8 +248,6 @@ public: nDefaultPort = 15550; nMinerThreads = 0; consensus.fCoinbaseMustBeProtected = true; - consensus.nSubsidySlowStartInterval = 20000; - consensus.nSubsidyHalvingInterval = 840000; consensus.nMajorityEnforceBlockUpgrade = 51; consensus.nMajorityRejectBlockOutdated = 75; consensus.nMajorityWindow = 400; @@ -344,20 +344,18 @@ public: strNetworkID = "regtest"; strCurrencyUnits = "REG"; bip44CoinType = 1; - consensus.fCoinbaseMustBeProtected = false; - consensus.nSubsidySlowStartInterval = 0; - consensus.nSubsidyHalvingInterval = 150; + consensus.fCoinbaseMustBeProtected = false; consensus.nMajorityEnforceBlockUpgrade = 750; consensus.nMajorityRejectBlockOutdated = 950; - consensus.nMajorityWindow = 1000; - consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); - consensus.powAlternate = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); - consensus.nPowAveragingWindow = 17; - consensus.nMaxFutureBlockTime = 7 * 60; // 7 mins + consensus.nMajorityWindow = 1000; + consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); + consensus.powAlternate = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"); + consensus.nPowAveragingWindow = 17; + consensus.nMaxFutureBlockTime = 7 * 60; // 7 mins assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); - consensus.nPowMaxAdjustDown = 0; // Turn off adjustment down - consensus.nPowMaxAdjustUp = 0; // Turn off adjustment up - consensus.nPowTargetSpacing = 2.5 * 60; + consensus.nPowMaxAdjustDown = 0; // Turn off adjustment down + consensus.nPowMaxAdjustUp = 0; // Turn off adjustment up + consensus.nPowTargetSpacing = 2.5 * 60; consensus.nPowAllowMinDifficultyBlocksAfterHeight = 0; consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = @@ -436,9 +434,6 @@ public: bech32HRPs[SAPLING_INCOMING_VIEWING_KEY] = "zivkregtestsapling"; bech32HRPs[SAPLING_EXTENDED_SPEND_KEY] = "secret-extended-key-regtest"; - // Founders reward script expects a vector of 2-of-3 multisig addresses - vFoundersRewardAddress = { "t2FwcEhFdNXuFMv1tcYwaBJtYVtMj8b1uTg" }; - assert(vFoundersRewardAddress.size() <= consensus.GetLastFoundersRewardBlockHeight()); } void UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex idx, int nActivationHeight) @@ -491,37 +486,6 @@ bool SelectParamsFromCommandLine() return true; } - -// Block height must be >0 and <=last founders reward block height -// Index variable i ranges from 0 - (vFoundersRewardAddress.size()-1) -std::string CChainParams::GetFoundersRewardAddressAtHeight(int nHeight) const { - int maxHeight = consensus.GetLastFoundersRewardBlockHeight(); - assert(nHeight > 0 && nHeight <= maxHeight); - - size_t addressChangeInterval = (maxHeight + vFoundersRewardAddress.size()) / vFoundersRewardAddress.size(); - size_t i = nHeight / addressChangeInterval; - return vFoundersRewardAddress[i]; -} - -// TODO: this is ZEC code, HUSH does not use it, and it can be deleted -// Block height must be >0 and <=last founders reward block height -// The founders reward address is expected to be a multisig (P2SH) address -CScript CChainParams::GetFoundersRewardScriptAtHeight(int nHeight) const { - assert(nHeight > 0 && nHeight <= consensus.GetLastFoundersRewardBlockHeight()); - - CTxDestination address = DecodeDestination(GetFoundersRewardAddressAtHeight(nHeight).c_str()); - assert(IsValidDestination(address)); - assert(boost::get(&address) != nullptr); - CScriptID scriptID = boost::get(address); // address is a boost variant - CScript script = CScript() << OP_HASH160 << ToByteVector(scriptID) << OP_EQUAL; - return script; -} - -std::string CChainParams::GetFoundersRewardAddressAtIndex(int i) const { - assert(i >= 0 && i < vFoundersRewardAddress.size()); - return vFoundersRewardAddress[i]; -} - void UpdateNetworkUpgradeParameters(Consensus::UpgradeIndex idx, int nActivationHeight) { regTestParams.UpdateNetworkUpgradeParameters(idx, nActivationHeight); @@ -542,7 +506,7 @@ int32_t MAX_BLOCK_SIZE(int32_t height) void hush_changeblocktime() { pCurrentParams->consensus.nMaxFutureBlockTime = 7 * ASSETCHAINS_BLOCKTIME; - pCurrentParams->consensus.nPowTargetSpacing = ASSETCHAINS_BLOCKTIME; + pCurrentParams->consensus.nPowTargetSpacing = ASSETCHAINS_BLOCKTIME; fprintf(stderr,"HUSH blocktime changing to %d seconds\n",ASSETCHAINS_BLOCKTIME); } diff --git a/src/consensus/consensus.h b/src/consensus/consensus.h index 987cb229c..9a998af9d 100644 --- a/src/consensus/consensus.h +++ b/src/consensus/consensus.h @@ -2,7 +2,6 @@ // Copyright (c) 2009-2014 The Bitcoin Core 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. * * * @@ -17,7 +16,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_CONSENSUS_CONSENSUS_H #define HUSH_CONSENSUS_CONSENSUS_H diff --git a/src/consensus/params.h b/src/consensus/params.h index 1ff7a6f54..bd48c9db3 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -3,7 +3,6 @@ // Copyright (c) 2019-2020 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. * * * @@ -18,12 +17,10 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_CONSENSUS_PARAMS_H #define HUSH_CONSENSUS_PARAMS_H #include "uint256.h" - #include int32_t MAX_BLOCK_SIZE(int32_t height); @@ -39,7 +36,7 @@ namespace Consensus { * several functions depend on the enum being sorted. */ enum UpgradeIndex { - // Sprout must be first + // Sprout must be first, puke BASE_SPROUT, UPGRADE_TESTDUMMY, UPGRADE_OVERWINTER, @@ -77,32 +74,11 @@ struct NetworkUpgrade { static constexpr int NO_ACTIVATION_HEIGHT = -1; }; -/** - * Parameters that influence chain consensus. - */ +// Parameters that influence chain consensus. struct Params { uint256 hashGenesisBlock; - bool fCoinbaseMustBeProtected; - /** Needs to evenly divide MAX_SUBSIDY to avoid rounding errors. */ - int nSubsidySlowStartInterval; - /** - * Shift based on a linear ramp for slow start: - * - * MAX_SUBSIDY*(t_s/2 + t_r) = MAX_SUBSIDY*t_h Coin balance - * t_s + t_r = t_h + t_c Block balance - * - * t_s = nSubsidySlowStartInterval - * t_r = number of blocks between end of slow start and first halving - * t_h = nSubsidyHalvingInterval - * t_c = SubsidySlowStartShift() - */ - int SubsidySlowStartShift() const { return nSubsidySlowStartInterval / 2; } - int nSubsidyHalvingInterval; - int GetLastFoundersRewardBlockHeight() const { - return nSubsidyHalvingInterval + SubsidySlowStartShift() - 1; - } /** Used to check majorities for block version upgrade */ int nMajorityEnforceBlockUpgrade; int nMajorityRejectBlockOutdated; @@ -119,18 +95,15 @@ struct Params { int64_t nPowTargetSpacing; int64_t nLwmaAjustedWeight; - /* Proof of stake parameters */ - uint256 posLimit; - int64_t nPOSAveragingWindow; // can be completely different than POW and initially trying a relatively large number, like 100 - int64_t nPOSTargetSpacing; // spacing is 1000 units per block to get better resolution, (100 % = 1000, 50% = 2000, 10% = 10000) - int64_t nLwmaPOSAjustedWeight; - /* applied to all block times */ int64_t nMaxFutureBlockTime; + // NOTE: These 3 functions should not have const return values because our blocktime halved at block 340k + // but the entire codebase assumes Consensus::Params are const, route around the damange int64_t AveragingWindowTimespan() const { return nPowAveragingWindow * nPowTargetSpacing; } int64_t MinActualTimespan() const { return (AveragingWindowTimespan() * (100 - nPowMaxAdjustUp )) / 100; } int64_t MaxActualTimespan() const { return (AveragingWindowTimespan() * (100 + nPowMaxAdjustDown)) / 100; } + void SetSaplingHeight(int32_t height) { vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = height; } void SetOverwinterHeight(int32_t height) { vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = height; } uint256 nMinimumChainWork; diff --git a/src/hush.h b/src/hush.h index 8c8bb3f55..ee273e94d 100644 --- a/src/hush.h +++ b/src/hush.h @@ -562,7 +562,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar *specialtxp = 1; //printf(">>>>>>>> "); } - else if ( komodo_chosennotary(&nid,height,scriptbuf + 1,timestamp) >= 0 ) + else if ( hush_chosennotary(&nid,height,scriptbuf + 1,timestamp) >= 0 ) { //printf("found notary.k%d\n",k); if ( notaryid < 64 ) diff --git a/src/hush_globals.h b/src/hush_globals.h index 8c19b9eb4..ca3817f78 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -25,7 +25,7 @@ int32_t komodo_MoMdata(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,in int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *notarized_desttxidp); char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port); void komodo_init(int32_t height); -int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); +int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); int32_t komodo_isrealtime(int32_t *kmdheightp); uint64_t komodo_paxtotal(); int32_t hush_longestchain(); diff --git a/src/hush_notary.h b/src/hush_notary.h index a87a0de9b..4bc7c89e3 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -194,14 +194,14 @@ void komodo_notarysinit(int32_t origheight,uint8_t pubkeys[64][33],int32_t num) hwmheight = origheight; } -int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp) +int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp) { // -1 if not notary, 0 if notary, 1 if special notary struct knotary_entry *kp; int32_t numnotaries=0,htind,modval = -1; *notaryidp = -1; if ( height < 0 )//|| height >= KOMODO_MAXBLOCKS ) { - printf("komodo_chosennotary ht.%d illegal\n",height); + printf("hush_chosennotary ht.%d illegal\n",height); return(-1); } if ( height >= KOMODO_NOTARIES_HARDCODED || SMART_CHAIN_SYMBOL[0] != 0 ) diff --git a/src/hush_utils.h b/src/hush_utils.h index f81ae46aa..665338716 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1441,12 +1441,12 @@ uint16_t komodo_userpass(char *userpass,char *symbol) { FILE *fp; uint16_t port = 0; char fname[512],username[512],password[512],confname[HUSH_SMART_CHAIN_MAXLEN]; userpass[0] = 0; - if ( strcmp("KMD",symbol) == 0 ) + if ( strcmp("SPECIAL",symbol) == 0 ) { #ifdef __APPLE__ - sprintf(confname,"Komodo.conf"); + sprintf(confname,"Something.conf"); #else - sprintf(confname,"komodo.conf"); + sprintf(confname,"Something.conf"); #endif } else sprintf(confname,"%s.conf",symbol); @@ -1462,14 +1462,11 @@ uint16_t komodo_userpass(char *userpass,char *symbol) return(port); } -#define HUSH_MAGIC 0xc0decafe +#define HUSH_MAGIC 0xd394d36e -// CAN YOU FEEL THE HUSH MAGIC??? -uint32_t komodo_assetmagic(char *symbol,uint64_t supply,uint8_t *extraptr,int32_t extralen) +uint32_t hush_smartmagic(char *symbol,uint64_t supply,uint8_t *extraptr,int32_t extralen) { uint8_t buf[512]; uint32_t crc0=0; int32_t len = 0; bits256 hash; - if ( strcmp(symbol,"HUSH3") == 0 ) - return(HUSH_MAGIC); len = dragon_rwnum(1,&buf[len],sizeof(supply),(void *)&supply); strcpy((char *)&buf[len],symbol); len += strlen(symbol); @@ -1477,56 +1474,50 @@ uint32_t komodo_assetmagic(char *symbol,uint64_t supply,uint8_t *extraptr,int32_ { vcalc_sha256(0,hash.bytes,extraptr,extralen); crc0 = hash.uints[0]; + fprintf(stderr,"HUSH raw magic="); int32_t i; for (i=0; i= 82000 ) { if ( notaryid >= 0 ) @@ -1042,7 +1042,7 @@ int32_t komodo_is_special(uint8_t pubkeys[66][33],int32_t mids[66],uint32_t bloc else limit = 66; for (i=1; i 342500) && block.nBits != nNextWork) { - cout << "Incorrect HUSH Proof-of-Work at height " << nHeight << " " << block.nBits << " block.nBits vs. calc " << - nNextWork << " " << block.GetHash().ToString() << " @ " << block.GetBlockTime() << endl; - - return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); - } else { - if( nHeight >= 340000 || nHeight <= 342500) - fprintf(stderr,"%s: Ignoring weird nBits with block.nBits=%u vs GetNextWorkRequired=%u for height %d\n", __func__, block.nBits, nNextWork, nHeight); + //if ((nHeight < 340000 || nHeight > 342500) && block.nBits != nNextWork) { + if (block.nBits != nNextWork) { + cout << "Incorrect HUSH Proof-of-Work at height " << nHeight << + " " << block.nBits << " block.nBits vs. calc " << nNextWork << + " " << block.GetHash().ToString() << " @ " << block.GetBlockTime() << endl; + // Don't use this CLI option unless you know what you are doing -- Duke + if(!GetArg("-dev-ignore-bad-nbits",false)) { + return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); + } else { + cout << "Ignoring bad nBits!!!" << endl; + } } } else { // Hush Smart Chains diff --git a/src/metrics.cpp b/src/metrics.cpp index 73aa7f721..fe1792651 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -1,8 +1,7 @@ -// Copyright (c) 2016 The Zcash developers // Copyright (c) 2019-2020 The Hush developers +// Copyright (c) 2016 The Zcash 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. * * * @@ -17,9 +16,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "metrics.h" - #include "chainparams.h" #include "checkpoints.h" #include "main.h" @@ -28,7 +25,6 @@ #include "utiltime.h" #include "utilmoneystr.h" #include "utilstrencodings.h" - #include #include #include @@ -39,7 +35,6 @@ #include #endif #include - #include "hush_defs.h" int64_t komodo_block_unlocktime(uint32_t nHeight); @@ -362,10 +357,8 @@ int printMetrics(size_t cols, bool mining) if (mapBlockIndex.count(hash) > 0 && chainActive.Contains(mapBlockIndex[hash])) { int height = mapBlockIndex[hash]->GetHeight(); + //TODO: this likely has bugz CAmount subsidy = GetBlockSubsidy(height, consensusParams); - if ((height > 0) && (height <= consensusParams.GetLastFoundersRewardBlockHeight())) { - subsidy -= subsidy/5; - } if ((std::max(0, COINBASE_MATURITY - (tipHeight - height)) > 0) || (tipHeight < komodo_block_unlocktime(height) && subsidy >= ASSETCHAINS_TIMELOCKGTE)) { diff --git a/src/miner.cpp b/src/miner.cpp index 4b7bcb08c..7baed673e 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -139,7 +139,7 @@ void vcalc_sha256(char deprecated[(256 >> 3) * 2 + 1],uint8_t hash[256 >> 3],uin uint32_t Mining_start,Mining_height; int32_t My_notaryid = -1; -int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); +int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); int32_t komodo_pax_opreturn(int32_t height,uint8_t *opret,int32_t maxsize); int32_t komodo_baseid(char *origbase); int32_t hush_longestchain(); @@ -604,8 +604,6 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 //pblock->nTime = blocktime + 1; pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, Params().GetConsensus()); - int32_t stakeHeight = chainActive.Height() + 1; - LogPrintf("CreateNewBlock(): total size %u blocktime.%u nBits.%08x stake.%i\n", nBlockSize,blocktime,pblock->nBits,isStake); // Create coinbase tx @@ -1115,7 +1113,7 @@ void static BitcoinMiner() break; } if ( SMART_CHAIN_SYMBOL[0] == 0 ) - komodo_chosennotary(¬aryid,chainActive.LastTip()->GetHeight(),NOTARY_PUBKEY33,(uint32_t)chainActive.LastTip()->GetBlockTime()); + hush_chosennotary(¬aryid,chainActive.LastTip()->GetHeight(),NOTARY_PUBKEY33,(uint32_t)chainActive.LastTip()->GetBlockTime()); if ( notaryid != My_notaryid ) My_notaryid = notaryid; std::string solver; @@ -1581,7 +1579,8 @@ void static BitcoinMiner() minerThreads = NULL; } - fprintf(stderr,"%s: nThreads.%d fGenerate.%d\n",__FUNCTION__, (int32_t)nThreads,fGenerate); + if(fDebug) + fprintf(stderr,"%s: nThreads.%d fGenerate.%d\n",__FUNCTION__, (int32_t)nThreads,fGenerate); if (nThreads == 0) return; diff --git a/src/pow.cpp b/src/pow.cpp index d18d75ca2..10688a047 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -389,7 +389,8 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead return nProofOfWorkLimit; bool fNegative,fOverflow; int32_t zawyflag = 0; arith_uint256 easy,origtarget,bnAvg {bnTot / params.nPowAveragingWindow}; - nbits = CalculateNextWorkRequired(bnAvg, pindexLast->GetMedianTimePast(), pindexFirst->GetMedianTimePast(), params); + nbits = CalculateNextWorkRequired(bnAvg, pindexLast->GetMedianTimePast(), pindexFirst->GetMedianTimePast(), params, height); + if ( ASSETCHAINS_ADAPTIVEPOW > 0 ) { bnTarget = arith_uint256().SetCompact(nbits); @@ -504,23 +505,42 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead return(nbits); } +// Changing this requires changing many other things and +// changes consensus. Have fun -- Duke +int64_t AveragingWindowTimespan(int32_t height) { + int64_t AWT = 2550; + if (height >= 340000) { + //trying to emulate 3.5.0 behavior + //AWT = 1275; + } + // TODO: + //if (height >= XXX){ + // AWT = 1275; + //} + return AWT; +} + unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg, int64_t nLastBlockTime, int64_t nFirstBlockTime, - const Consensus::Params& params) + const Consensus::Params& params, + int32_t height) { - // Limit adjustment step - // Use medians to prevent time-warp attacks + // Limit adjustment step and use medians to prevent time-warp attacks int64_t nActualTimespan = nLastBlockTime - nFirstBlockTime; LogPrint("pow", " nActualTimespan = %d before dampening\n", nActualTimespan); - nActualTimespan = params.AveragingWindowTimespan() + (nActualTimespan - params.AveragingWindowTimespan())/4; + int64_t AWT = AveragingWindowTimespan(height) ; + nActualTimespan = AWT + (nActualTimespan - AWT)/4; LogPrint("pow", " nActualTimespan = %d before bounds\n", nActualTimespan); - if ( ASSETCHAINS_ADAPTIVEPOW <= 0 ) - { - if (nActualTimespan < params.MinActualTimespan()) + if ( ASSETCHAINS_ADAPTIVEPOW <= 0 ) { + if (nActualTimespan < params.MinActualTimespan()) { + fprintf(stderr,"%s: Adjusting nActualTimespan up to min value %li\n", __func__, params.MinActualTimespan() ); nActualTimespan = params.MinActualTimespan(); - if (nActualTimespan > params.MaxActualTimespan()) + } + if (nActualTimespan > params.MaxActualTimespan()) { + fprintf(stderr,"%s: Adjusting nActualTimespan down to max value %li\n", __func__, params.MaxActualTimespan() ); nActualTimespan = params.MaxActualTimespan(); + } } // Retarget arith_uint256 bnLimit; @@ -531,7 +551,7 @@ unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg, const arith_uint256 bnPowLimit = bnLimit; //UintToArith256(params.powLimit); arith_uint256 bnNew {bnAvg}; - bnNew /= params.AveragingWindowTimespan(); + bnNew /= AWT; bnNew *= nActualTimespan; if (bnNew > bnPowLimit) @@ -539,15 +559,19 @@ unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg, /// debug print LogPrint("pow", "GetNextWorkRequired RETARGET\n"); - LogPrint("pow", "params.AveragingWindowTimespan() = %d nActualTimespan = %d\n", params.AveragingWindowTimespan(), nActualTimespan); + LogPrint("pow", "AveragingWindowTimespan = %d nActualTimespan = %d\n", AWT, nActualTimespan); LogPrint("pow", "Current average: %08x %s\n", bnAvg.GetCompact(), bnAvg.ToString()); LogPrint("pow", "After: %08x %s\n", bnNew.GetCompact(), bnNew.ToString()); - - if(fDebug) - fprintf(stderr,"%s: nbits=%u\n",__func__,bnNew.GetCompact()); + //if(fDebug) { + fprintf(stderr, "%s: nbits Current average: %08x %s\n", __func__, bnAvg.GetCompact(), bnAvg.ToString().c_str()); + fprintf(stderr, "%s: bits After: %08x %s\n", __func__, bnNew.GetCompact(), bnNew.ToString().c_str()); + fprintf(stderr,"%s: AWT=%lu ActualTimeSpan=%li MinActual=%li MaxActual=%li\n",__func__, AWT, nActualTimespan, params.MinActualTimespan(), params.MaxActualTimespan()); + //} return bnNew.GetCompact(); } +// HUSH does not use these functions but Hush Smart Chains can opt-in to using more bleeding edge DAA's +// ASIC chains do not need these protections as much -- Duke Leto unsigned int lwmaGetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params) { return lwmaCalculateNextWorkRequired(pindexLast, params); @@ -564,7 +588,6 @@ unsigned int lwmaCalculateNextWorkRequired(const CBlockIndex* pindexLast, const unsigned int nProofOfWorkLimit = bnLimit.GetCompact(); //printf("PoWLimit: %u\n", nProofOfWorkLimit); - // Find the first block in the averaging interval as we total the linearly weighted average const CBlockIndex* pindexFirst = pindexLast; const CBlockIndex* pindexNext; @@ -652,7 +675,7 @@ bool CheckEquihashSolution(const CBlockHeader *pblock, const CChainParams& param return true; } -int32_t komodo_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); +int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); int32_t komodo_is_special(uint8_t pubkeys[66][33],int32_t mids[66],uint32_t blocktimes[66],int32_t height,uint8_t pubkey33[33],uint32_t blocktime); int32_t komodo_currentheight(); void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height); @@ -687,7 +710,7 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t } if ( height > 34000 && SMART_CHAIN_SYMBOL[0] == 0 ) // 0 -> non-special notary { - special = komodo_chosennotary(¬aryid,height,pubkey33,tiptime); + special = hush_chosennotary(¬aryid,height,pubkey33,tiptime); for (i=0; i<33; i++) { if ( pubkey33[i] != 0 ) diff --git a/src/pow.h b/src/pow.h index 82e763ee5..6c692b432 100644 --- a/src/pow.h +++ b/src/pow.h @@ -1,8 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers +// Copyright (c) 2016-2020 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. * * * @@ -17,13 +17,11 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_POW_H #define HUSH_POW_H #include "chain.h" #include "consensus/params.h" - #include class CBlockHeader; @@ -35,7 +33,7 @@ class arith_uint256; unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params&); unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg, int64_t nLastBlockTime, int64_t nFirstBlockTime, - const Consensus::Params&); + const Consensus::Params&, int32_t height); /** Check whether the Equihash solution in a block header is valid */ bool CheckEquihashSolution(const CBlockHeader *pblock, const CChainParams&); diff --git a/src/pow/tromp/equi.h b/src/pow/tromp/equi.h index b474194fc..fd89da587 100644 --- a/src/pow/tromp/equi.h +++ b/src/pow/tromp/equi.h @@ -1,5 +1,8 @@ -// Equihash solver +// Copyright (c) 2019-2020 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 (c) 2016-2016 John Tromp, The Zcash developers +// Equihash solver #include "sodium.h" #ifdef __APPLE__ diff --git a/src/pow/tromp/equi_miner.h b/src/pow/tromp/equi_miner.h index d53d0d8aa..0a2d6b132 100644 --- a/src/pow/tromp/equi_miner.h +++ b/src/pow/tromp/equi_miner.h @@ -1,5 +1,8 @@ -// Equihash solver +// Copyright (c) 2016-2020 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 (c) 2016 John Tromp, The Zcash developers +// Equihash solver // Fix N, K, such that n = N/(k+1) is integer // Fix M = 2^{n+1} hashes each of length N bits, diff --git a/src/pow/tromp/osx_barrier.h b/src/pow/tromp/osx_barrier.h index da05b3552..900fb2a49 100644 --- a/src/pow/tromp/osx_barrier.h +++ b/src/pow/tromp/osx_barrier.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #ifdef __APPLE__ #ifndef PTHREAD_BARRIER_H_ diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index d07dd8d2d..184f14113 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -59,7 +59,7 @@ int32_t hush_longestchain(); int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); bool komodo_txnotarizedconfirmed(uint256 txid); uint32_t komodo_chainactive_timestamp(); -int32_t komodo_whoami(char *pubkeystr,int32_t height,uint32_t timestamp); +int32_t hush_whoami(char *pubkeystr,int32_t height,uint32_t timestamp); extern uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE; extern int32_t KOMODO_LASTMINED,JUMBLR_PAUSE,HUSH_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; @@ -284,7 +284,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) obj.push_back(Pair("errors", GetWarnings("statusbar"))); if ( NOTARY_PUBKEY33[0] != 0 ) { char pubkeystr[65]; int32_t notaryid; std::string notaryname; - if( (notaryid= komodo_whoami(pubkeystr,(int32_t)chainActive.LastTip()->GetHeight(),komodo_chainactive_timestamp())) >= 0 ) { + if( (notaryid= hush_whoami(pubkeystr,(int32_t)chainActive.LastTip()->GetHeight(),komodo_chainactive_timestamp())) >= 0 ) { obj.push_back(Pair("notaryid", notaryid)); if ( KOMODO_LASTMINED != 0 ) obj.push_back(Pair("lastmined", KOMODO_LASTMINED)); diff --git a/src/test/main_tests.cpp b/src/test/main_tests.cpp index 96b71c6cc..8effee429 100644 --- a/src/test/main_tests.cpp +++ b/src/test/main_tests.cpp @@ -5,14 +5,13 @@ #include "chainparams.h" #include "main.h" - #include "test/test_bitcoin.h" - #include #include BOOST_FIXTURE_TEST_SUITE(main_tests, TestingSetup) +/* static void TestBlockSubsidyHalvings(const Consensus::Params& consensusParams) { int maxHalvings = 64; @@ -101,5 +100,6 @@ BOOST_AUTO_TEST_CASE(test_combiner_all) Test.disconnect(&ReturnTrue); BOOST_CHECK(Test()); } +*/ BOOST_AUTO_TEST_SUITE_END() From baac9390afc7a12967e81549ace9b1022fc92a7f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 15 Dec 2020 08:10:11 -0500 Subject: [PATCH 189/277] todo --- toolchain-info.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolchain-info.sh b/toolchain-info.sh index 67a741fbe..af28dc0cf 100755 --- a/toolchain-info.sh +++ b/toolchain-info.sh @@ -2,7 +2,7 @@ # Copyright (c) 2016-2020 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 - +#TODO: detect other versions of gcc/clang tools=("gcc-8" "g++-8" "otool" "nm") echo "Platform: `uname -a`" From 4377d2868c0e89496d5a6e47334a570e499f479a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 15 Dec 2020 08:29:42 -0500 Subject: [PATCH 190/277] testnet stuff, mostly unused --- src/chainparams.cpp | 55 +++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 31ee16b3e..258ea3826 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -3,6 +3,9 @@ // Copyright (c) 2016-2020 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 +///////////////////////////////////////////////////////////////////////////////// +// We believe in Extreme Privacy and reject surveillance. -- The Hush Developers +///////////////////////////////////////////////////////////////////////////////// /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -334,6 +337,7 @@ public: } }; static CTestNetParams testNetParams; +#define NUNU Consensus::NetworkUpgrade /** * Regression test @@ -341,9 +345,10 @@ static CTestNetParams testNetParams; class CRegTestParams : public CChainParams { public: CRegTestParams() { - strNetworkID = "regtest"; - strCurrencyUnits = "REG"; - bip44CoinType = 1; + auto ups = consensus.vUpgrades; + strNetworkID = "regtest"; + strCurrencyUnits = "REG"; + bip44CoinType = 1; consensus.fCoinbaseMustBeProtected = false; consensus.nMajorityEnforceBlockUpgrade = 750; consensus.nMajorityRejectBlockOutdated = 950; @@ -353,22 +358,18 @@ public: consensus.nPowAveragingWindow = 17; consensus.nMaxFutureBlockTime = 7 * 60; // 7 mins assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow); - consensus.nPowMaxAdjustDown = 0; // Turn off adjustment down - consensus.nPowMaxAdjustUp = 0; // Turn off adjustment up - consensus.nPowTargetSpacing = 2.5 * 60; - consensus.nPowAllowMinDifficultyBlocksAfterHeight = 0; - consensus.vUpgrades[Consensus::BASE_SPROUT].nProtocolVersion = 170002; - consensus.vUpgrades[Consensus::BASE_SPROUT].nActivationHeight = - Consensus::NetworkUpgrade::ALWAYS_ACTIVE; - consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nProtocolVersion = 170002; - consensus.vUpgrades[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; - consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nProtocolVersion = 170003; - consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; - consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nProtocolVersion = 170006; - consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = - Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + consensus.nPowMaxAdjustDown = 0; // Turn off adjustment down + consensus.nPowMaxAdjustUp = 0; // Turn off adjustment up + consensus.nPowTargetSpacing = 60; // HSC's default to 60 seconds so a theoretical testnet should as well + consensus.nPowAllowMinDifficultyBlocksAfterHeight = 0; + ups[Consensus::BASE_SPROUT].nProtocolVersion = 170002; + ups[Consensus::BASE_SPROUT].nActivationHeight = NUNU::ALWAYS_ACTIVE; + ups[Consensus::UPGRADE_TESTDUMMY].nProtocolVersion = 170002; + ups[Consensus::UPGRADE_TESTDUMMY].nActivationHeight = NUNU::NO_ACTIVATION_HEIGHT; + ups[Consensus::UPGRADE_OVERWINTER].nProtocolVersion = 170003; + ups[Consensus::UPGRADE_OVERWINTER].nActivationHeight = NUNU::NO_ACTIVATION_HEIGHT; + ups[Consensus::UPGRADE_SAPLING].nProtocolVersion = 170006; + ups[Consensus::UPGRADE_SAPLING].nActivationHeight = NUNU::NO_ACTIVATION_HEIGHT; // The best chain should have at least this much work. consensus.nMinimumChainWork = uint256S("0x00"); @@ -377,9 +378,9 @@ public: pchMessageStart[1] = 0x8e; pchMessageStart[2] = 0xf3; pchMessageStart[3] = 0xf5; - nMinerThreads = 1; - nMaxTipAge = 24 * 60 * 60; - nPruneAfterHeight = 1000; + nMinerThreads = 1; + nMaxTipAge = 24 * 60 * 60; + nPruneAfterHeight = 1000; const size_t N = 48, K = 5; BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K)); nEquihashN = N; @@ -396,16 +397,16 @@ public: assert(consensus.hashGenesisBlock == uint256S("0x029f11d80ef9765602235e1bc9727e3eb6ba20839319f761fee920d63401e327")); assert(genesis.hashMerkleRoot == uint256S("0xc4eaa58879081de3c24a7b117ed2b28300e7ec4c4c1dff1d3f1268b7857a4ddb")); - nDefaultPort = 17779; + nDefaultPort = 15420; nPruneAfterHeight = 1000; vFixedSeeds.clear(); //! Regtest mode doesn't have any fixed seeds. vSeeds.clear(); //! Regtest mode doesn't have any DNS seeds. - fMiningRequiresPeers = false; - fDefaultConsistencyChecks = true; - fRequireStandard = false; - fMineBlocksOnDemand = true; + fMiningRequiresPeers = false; + fDefaultConsistencyChecks = true; + fRequireStandard = false; + fMineBlocksOnDemand = true; fTestnetToBeDeprecatedFieldRPC = false; checkpointData = (CCheckpointData){ From b950a68cdaa4677acdd5912aad4dacf53bacc484 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 15 Dec 2020 08:29:49 -0500 Subject: [PATCH 191/277] remove dead code --- src/pow.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pow.cpp b/src/pow.cpp index ec35a1148..a8b449246 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -753,8 +753,7 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t arith_uint256 bnMaxPoSdiff; bnTarget.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); } - //else if ( ASSETCHAINS_ADAPTIVEPOW > 0 && ASSETCHAINS_STAKED == 0 ) - // bnTarget = komodo_adaptivepow_target(height,bnTarget,blkHeader.nTime); + // Check proof of work matches claimed amount if ( UintToArith256(hash = blkHeader.GetHash()) > bnTarget ) { From c62f80cef3d484a7a641cd97e5e08adea1f15049 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 15 Dec 2020 08:35:40 -0500 Subject: [PATCH 192/277] KMD is infected by KYC --- src/komodo_bitcoind.h => hush_bitcoind.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/komodo_bitcoind.h => hush_bitcoind.h (100%) diff --git a/src/komodo_bitcoind.h b/hush_bitcoind.h similarity index 100% rename from src/komodo_bitcoind.h rename to hush_bitcoind.h From 59dcecaf201b88a630c1828c5740569d38da2a7f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 15 Dec 2020 08:36:14 -0500 Subject: [PATCH 193/277] need to delete this jl777 shite --- src/cc/prices.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cc/prices.cpp b/src/cc/prices.cpp index 837d62dfc..5464d8298 100644 --- a/src/cc/prices.cpp +++ b/src/cc/prices.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * @@ -12,7 +15,7 @@ * Removal or modification of this copyright notice is prohibited. * * * *****************************************************************************/ - +//TODO: delete all this jl777 garbage /* CBOPRET creates trustless oracles, which can be used for making a synthetic cash settlement system based on real world prices; @@ -66,7 +69,6 @@ if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB. This will fetch the op_return, calculate the scriptPubKey and save it to the global. On daemon restart as soon as validation for BETTX happens the global will be filled, after this the transaction never needs to be looked up again. -GetKomodoEarlytxidScriptPub is on line #2080 of komodo_bitcoind.h */ #include "CCassets.h" From 87370e1da8345ddfb14d81f1ca27cdc8a26ad93e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 15 Dec 2020 08:36:29 -0500 Subject: [PATCH 194/277] remove some nasty-ass jl777 KMD interest code --- src/hush.h | 2 +- src/komodo_interest.h | 176 +----------------------------------------- 2 files changed, 4 insertions(+), 174 deletions(-) diff --git a/src/hush.h b/src/hush.h index a27bb59f2..451c3d0ee 100644 --- a/src/hush.h +++ b/src/hush.h @@ -46,7 +46,7 @@ bool check_pprevnotarizedht(); #include "hush_utils.h" #include "komodo_curve25519.h" #include "komodo_cJSON.c" -#include "komodo_bitcoind.h" +#include "hush_bitcoind.h" #include "komodo_interest.h" #include "komodo_pax.h" #include "hush_notary.h" diff --git a/src/komodo_interest.h b/src/komodo_interest.h index 615b8ec0c..60e3dfd4f 100644 --- a/src/komodo_interest.h +++ b/src/komodo_interest.h @@ -17,189 +17,19 @@ ******************************************************************************/ #include "hush_defs.h" -#define SATOSHIDEN ((uint64_t)100000000L) -#define dstr(x) ((double)(x) / SATOSHIDEN) -#define KOMODO_ENDOFERA 7777777 -#define KOMODO_INTEREST ((uint64_t)5000000) //((uint64_t)(0.05 * COIN)) // 5% -extern int64_t MAX_MONEY; -extern uint8_t NOTARY_PUBKEY33[]; - -#ifdef notanymore -uint64_t komodo_earned_interest(int32_t height,int64_t paidinterest) -{ - static uint64_t *interests; static int32_t maxheight; - uint64_t total; int32_t ind,incr = 10000; - // need to make interests persistent before 2030, or just hardfork interest/mining rewards disable after MAX_MONEY is exceeded - return(0); - if ( height >= maxheight ) - { - if ( interests == 0 ) - { - maxheight = height + incr; - interests = (uint64_t *)calloc(maxheight,sizeof(*interests) * 2); - } - else - { - interests = (uint64_t *)realloc(interests,(maxheight + incr) * sizeof(*interests) * 2); - memset(&interests[maxheight << 1],0,incr * sizeof(*interests) * 2); - maxheight += incr; - } - } - ind = (height << 1); - if ( paidinterest < 0 ) // request - { - return(interests[ind]); - } - else - { - if ( interests[ind + 1] != paidinterest ) // need to handle skips like at 80000 - { - //fprintf(stderr,"interests.%d %.8f %.8f vs paidinterest %.8f\n",height,dstr(interests[ind]),dstr(interests[ind+1]),dstr(paidinterest)); - interests[ind + 1] = paidinterest; - if ( height <= 1 ) - interests[ind] = 0; - else interests[ind] = interests[ind - 2] + interests[ind - 1]; - total = interests[ind] + paidinterest; - //fprintf(stderr,"reset interests[height.%d to maxheight.%d] <- %.8f\n",height,maxheight,dstr(total)); - for (++height; height= LOCKTIME_THRESHOLD && tiptime > nLockTime && (minutes= (tiptime - nLockTime) / 60) >= (KOMODO_MAXMEMPOOLTIME/60) ) - { - if ( minutes > 365 * 24 * 60 ) - minutes = 365 * 24 * 60; - if ( txheight >= 1000000 && minutes > 31 * 24 * 60 ) - minutes = 31 * 24 * 60; - minutes -= ((KOMODO_MAXMEMPOOLTIME/60) - 1); - interest = ((nValue / 10512000) * minutes); - } - return(interest); + return 0; } uint64_t komodo_interestnew(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) { - uint64_t interest = 0; - if ( txheight < KOMODO_ENDOFERA && nLockTime >= LOCKTIME_THRESHOLD && tiptime != 0 && nLockTime < tiptime && nValue >= 10*COIN ) //komodo_moneysupply(txheight) < MAX_MONEY && - interest = _komodo_interestnew(txheight,nValue,nLockTime,tiptime); - return(interest); + return 0; } uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) { - int32_t minutes,exception; uint64_t interestnew,numerator,denominator,interest = 0; uint32_t activation; - activation = 1491350400; // 1491350400 5th April - if ( SMART_CHAIN_SYMBOL[0] != 0 ) - return(0); - if ( txheight >= KOMODO_ENDOFERA ) - return(0); - if ( nLockTime >= LOCKTIME_THRESHOLD && tiptime != 0 && nLockTime < tiptime && nValue >= 10*COIN ) //komodo_moneysupply(txheight) < MAX_MONEY && - { - if ( (minutes= (tiptime - nLockTime) / 60) >= 60 ) - { - if ( minutes > 365 * 24 * 60 ) - minutes = 365 * 24 * 60; - if ( txheight >= 250000 ) - minutes -= 59; - denominator = (((uint64_t)365 * 24 * 60) / minutes); - if ( denominator == 0 ) - denominator = 1; // max KOMODO_INTEREST per transfer, do it at least annually! - if ( nValue > 25000LL*COIN ) - { - exception = 0; - if ( txheight <= 155949 ) - { - if ( (txheight == 116607 && nValue == 2502721100000LL) || - (txheight == 126891 && nValue == 2879650000000LL) || - (txheight == 129510 && nValue == 3000000000000LL) || - (txheight == 141549 && nValue == 3500000000000LL) || - (txheight == 154473 && nValue == 3983399350000LL) || - (txheight == 154736 && nValue == 3983406748175LL) || - (txheight == 155013 && nValue == 3983414006565LL) || - (txheight == 155492 && nValue == 3983427592291LL) || - (txheight == 155613 && nValue == 9997409999999797LL) || - (txheight == 157927 && nValue == 9997410667451072LL) || - (txheight == 155613 && nValue == 2590000000000LL) || - (txheight == 155949 && nValue == 4000000000000LL) ) - exception = 1; - if ( exception == 0 || nValue == 4000000000000LL ) - printf(">>>>>>>>>>>> exception.%d txheight.%d %.8f locktime %u vs tiptime %u <<<<<<<<<\n",exception,txheight,(double)nValue/COIN,nLockTime,tiptime); - } - //if ( nValue == 4000000000000LL ) - // printf(">>>>>>>>>>>> exception.%d txheight.%d %.8f locktime %u vs tiptime %u <<<<<<<<<\n",exception,txheight,(double)nValue/COIN,nLockTime,tiptime); - if ( exception == 0 ) - { - numerator = (nValue / 20); // assumes 5%! - if ( txheight < 250000 ) - interest = (numerator / denominator); - else if ( txheight < 1000000 ) - { - interest = (numerator * minutes) / ((uint64_t)365 * 24 * 60); - interestnew = _komodo_interestnew(txheight,nValue,nLockTime,tiptime); - if ( interest < interestnew ) - printf("pathA current interest %.8f vs new %.8f for ht.%d %.8f locktime.%u tiptime.%u\n",dstr(interest),dstr(interestnew),txheight,dstr(nValue),nLockTime,tiptime); - } - else interest = _komodo_interestnew(txheight,nValue,nLockTime,tiptime); - } - else if ( txheight < 1000000 ) - { - numerator = (nValue * KOMODO_INTEREST); - interest = (numerator / denominator) / COIN; - interestnew = _komodo_interestnew(txheight,nValue,nLockTime,tiptime); - if ( interest < interestnew ) - printf("pathB current interest %.8f vs new %.8f for ht.%d %.8f locktime.%u tiptime.%u\n",dstr(interest),dstr(interestnew),txheight,dstr(nValue),nLockTime,tiptime); - } - else interest = _komodo_interestnew(txheight,nValue,nLockTime,tiptime); - } - else - { - /* 250000 algo - numerator = (nValue * KOMODO_INTEREST); - if ( txheight < 250000 || numerator * minutes < 365 * 24 * 60 ) - interest = (numerator / denominator) / COIN; - else interest = ((numerator * minutes) / ((uint64_t)365 * 24 * 60)) / COIN; - */ - numerator = (nValue * KOMODO_INTEREST); - if ( txheight < 250000 || tiptime < activation ) - { - if ( txheight < 250000 || numerator * minutes < 365 * 24 * 60 ) - interest = (numerator / denominator) / COIN; - else interest = ((numerator * minutes) / ((uint64_t)365 * 24 * 60)) / COIN; - } - else if ( txheight < 1000000 ) - { - numerator = (nValue / 20); // assumes 5%! - interest = ((numerator * minutes) / ((uint64_t)365 * 24 * 60)); - //fprintf(stderr,"interest %llu %.8f <- numerator.%llu minutes.%d\n",(long long)interest,(double)interest/COIN,(long long)numerator,(int32_t)minutes); - interestnew = _komodo_interestnew(txheight,nValue,nLockTime,tiptime); - if ( interest < interestnew ) - fprintf(stderr,"pathC current interest %.8f vs new %.8f for ht.%d %.8f locktime.%u tiptime.%u\n",dstr(interest),dstr(interestnew),txheight,dstr(nValue),nLockTime,tiptime); - } - else interest = _komodo_interestnew(txheight,nValue,nLockTime,tiptime); - } - if ( 0 && numerator == (nValue * KOMODO_INTEREST) ) - fprintf(stderr,"komodo_interest.%d %lld %.8f nLockTime.%u tiptime.%u minutes.%d interest %lld %.8f (%llu / %llu) prod.%llu\n",txheight,(long long)nValue,(double)nValue/COIN,nLockTime,tiptime,minutes,(long long)interest,(double)interest/COIN,(long long)numerator,(long long)denominator,(long long)(numerator * minutes)); - } - } - return(interest); + return 0; } From c2eec1f7a7256666762b2c9478b76e901ff42efe Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 15 Dec 2020 13:14:54 -0500 Subject: [PATCH 195/277] Remove Komodo interest code and various other improvements --- hush_bitcoind.h | 2421 ------------------------------------ src/bitcoind.cpp | 4 - src/cc/CCImportGateway.h | 5 +- src/cc/CCMarmara.h | 3 + src/cc/CCOracles.h | 3 + src/cc/CCPayments.h | 3 + src/cc/CCPegs.h | 3 + src/cc/CCPrices.h | 3 + src/cc/CCassets.h | 3 + src/cc/CCassetsCore.cpp | 3 + src/cc/CCassetstx.cpp | 3 + src/cc/CCauction.h | 3 + src/cc/CCchannels.h | 3 + src/cc/CCcustom.cpp | 3 + src/cc/CCdice.h | 3 + src/cc/CCfsm.h | 3 + src/cc/CClotto.h | 3 + src/cc/CCrewards.h | 3 + src/cc/CCtokens.cpp | 3 + src/cc/CCtokens.h | 3 + src/cc/CCtokenutils.cpp | 3 + src/cc/CCtx.cpp | 5 +- src/cc/CCutilbits.cpp | 3 + src/cc/COptCCParams.cpp | 3 + src/cc/assets.cpp | 3 + src/cc/auction.cpp | 3 + src/cc/betprotocol.cpp | 3 + src/cc/betprotocol.h | 3 + src/cc/channels.cpp | 3 + src/cc/customcc.cpp | 3 + src/cc/customcc.h | 3 + src/cc/dapps/dappinc.h | 113 +- src/cc/dapps/dappstd.c | 3 + src/cc/dapps/hushdex.c | 2 + src/cc/dapps/zmigrate.c | 3 + src/cc/dice.cpp | 3 + src/cc/dilithium.c | 6 +- src/cc/dilithium.h | 155 +-- src/cc/disputepayout.cpp | 3 + src/cc/fsm.cpp | 3 + src/cc/games/prices.c | 5 +- src/cc/games/prices.h | 3 + src/cc/games/tetris.c | 3 + src/cc/games/tetris.h | 3 + src/cc/gamescc.cpp | 3 + src/cc/gamescc.h | 3 + src/cc/gateways.cpp | 3 + src/cc/importgateway.cpp | 3 + src/cc/importpayout.cpp | 3 + src/cc/lotto.cpp | 3 + src/cc/musig.cpp | 3 + src/cc/oracles.cpp | 3 + src/cc/payments.cpp | 3 + src/cc/pegs.cpp | 3 + src/cc/rewards.cpp | 3 + src/cc/rogue_rpc.cpp | 3 + src/cc/sudoku.cpp | 11 +- src/cc/utils.cpp | 0 src/cc/utils.h | 8 +- src/coins.cpp | 19 - src/coins.h | 7 - src/ctest | 1 - src/hush.h | 3 +- src/hush_defs.h | 1 - src/hushd | 9 +- src/hushd-testnet | 39 +- src/komodo-tx.cpp | 5 - src/komodo_gateway.h | 5 - src/komodo_interest.h | 35 - src/komodo_nSPV_fullnode.h | 10 +- src/komodo_nSPV_wallet.h | 15 +- src/main.cpp | 35 +- src/miner.cpp | 9 - src/rpc/blockchain.cpp | 3 - src/rpc/mining.cpp | 8 +- src/rpc/misc.cpp | 3 +- src/rpc/rawtransaction.cpp | 18 +- src/rpc/server.cpp | 8 +- src/txmempool.cpp | 11 +- src/wallet/rpcwallet.cpp | 95 +- src/wallet/wallet.cpp | 18 +- 81 files changed, 322 insertions(+), 2911 deletions(-) delete mode 100644 hush_bitcoind.h delete mode 100644 src/cc/utils.cpp delete mode 100755 src/ctest delete mode 100644 src/komodo_interest.h diff --git a/hush_bitcoind.h b/hush_bitcoind.h deleted file mode 100644 index febeef177..000000000 --- a/hush_bitcoind.h +++ /dev/null @@ -1,2421 +0,0 @@ -// Copyright 2016-2020 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. * - * * - ******************************************************************************/ -// Hush functions that interact with bitcoind C++ -#include -#include -#include "consensus/params.h" -#include "hush_defs.h" -#include "script/standard.h" -#include "cc/CCinclude.h" -#include "sietch.h" - -int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); -int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t height,uint32_t timestamp); -int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value,int32_t notarized,uint64_t signedmask,uint32_t timestamp); -bool EnsureWalletIsAvailable(bool avoidException); -extern bool fRequestShutdown; -extern CScript KOMODO_EARLYTXID_SCRIPTPUB; - -uint8_t DecodeMaramaraCoinbaseOpRet(const CScript scriptPubKey,CPubKey &pk,int32_t &height,int32_t &unlockht); -uint32_t komodo_heightstamp(int32_t height); - -//#define issue_curl(cmdstr) bitcoind_RPC(0,(char *)"curl",(char *)"http://127.0.0.1:7776",0,0,(char *)(cmdstr)) - -struct MemoryStruct { char *memory; size_t size; }; -struct return_string { char *ptr; size_t len; }; - -// return data from the server -#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) -#define CURL_GLOBAL_SSL (1<<0) -#define CURL_GLOBAL_WIN32 (1<<1) - - -/************************************************************************ - * - * Initialize the string handler so that it is thread safe - * - ************************************************************************/ - -void init_string(struct return_string *s) -{ - s->len = 0; - s->ptr = (char *)calloc(1,s->len+1); - if ( s->ptr == NULL ) - { - fprintf(stderr,"init_string malloc() failed\n"); - StartShutdown(); - } - s->ptr[0] = '\0'; -} - -int tx_height( const uint256 &hash ){ - int nHeight = 0; - CTransaction tx; - uint256 hashBlock; - if (!GetTransaction(hash, tx, hashBlock, true)) { - fprintf(stderr,"tx hash %s does not exist!\n", hash.ToString().c_str() ); - return nHeight; - } - - BlockMap::const_iterator it = mapBlockIndex.find(hashBlock); - if (it != mapBlockIndex.end()) { - nHeight = it->second->GetHeight(); - //fprintf(stderr,"blockHash %s height %d\n",hashBlock.ToString().c_str(), nHeight); - } else { - // Unconfirmed xtns - fprintf(stderr,"tx %s is unconfirmed\n", hash.ToString().c_str() ); - //fprintf(stderr,"block hash %s does not exist!\n", hashBlock.ToString().c_str() ); - } - return nHeight; -} - - -/************************************************************************ - * - * Use the "writer" to accumulate text until done - * - ************************************************************************/ - -size_t accumulatebytes(void *ptr,size_t size,size_t nmemb,struct return_string *s) -{ - size_t new_len = s->len + size*nmemb; - s->ptr = (char *)realloc(s->ptr,new_len+1); - if ( s->ptr == NULL ) - { - fprintf(stderr, "accumulate realloc() failed\n"); - StartShutdown(); - } - memcpy(s->ptr+s->len,ptr,size*nmemb); - s->ptr[new_len] = '\0'; - s->len = new_len; - return(size * nmemb); -} - -/************************************************************************ - * - * return the current system time in milliseconds - * - ************************************************************************/ - -#define EXTRACT_BITCOIND_RESULT // if defined, ensures error is null and returns the "result" field -#ifdef EXTRACT_BITCOIND_RESULT - -/************************************************************************ - * - * perform post processing of the results - * - ************************************************************************/ - -char *post_process_bitcoind_RPC(char *debugstr,char *command,char *rpcstr,char *params) -{ - long i,j,len; char *retstr = 0; cJSON *json,*result,*error; - //printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s.[%s]\n",debugstr,command,rpcstr); - if ( command == 0 || rpcstr == 0 || rpcstr[0] == 0 ) - { - if ( strcmp(command,"signrawtransaction") != 0 ) - printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s.[%s]\n",debugstr,command,rpcstr); - return(rpcstr); - } - json = cJSON_Parse(rpcstr); - if ( json == 0 ) - { - printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s can't parse.(%s) params.(%s)\n",debugstr,command,rpcstr,params); - free(rpcstr); - return(0); - } - result = cJSON_GetObjectItem(json,"result"); - error = cJSON_GetObjectItem(json,"error"); - if ( error != 0 && result != 0 ) - { - if ( (error->type&0xff) == cJSON_NULL && (result->type&0xff) != cJSON_NULL ) - { - retstr = cJSON_Print(result); - len = strlen(retstr); - if ( retstr[0] == '"' && retstr[len-1] == '"' ) - { - for (i=1,j=0; itype&0xff) != cJSON_NULL || (result->type&0xff) != cJSON_NULL ) - { - if ( strcmp(command,"signrawtransaction") != 0 ) - printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC (%s) error.%s\n",debugstr,command,rpcstr); - } - free(rpcstr); - } else retstr = rpcstr; - free_json(json); - //fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC: postprocess returns.(%s)\n",retstr); - return(retstr); -} -#endif - -/************************************************************************ - * - * perform the query - * - ************************************************************************/ - -char *bitcoind_RPC(char **retstrp,char *debugstr,char *url,char *userpass,char *command,char *params) -{ - static int didinit,count,count2; static double elapsedsum,elapsedsum2; - struct curl_slist *headers = NULL; struct return_string s; CURLcode res; CURL *curl_handle; - char *bracket0,*bracket1,*databuf = 0; long len; int32_t specialcase,numretries; double starttime; - if ( didinit == 0 ) - { - didinit = 1; - curl_global_init(CURL_GLOBAL_ALL); //init the curl session - } - numretries = 0; - if ( debugstr != 0 && strcmp(debugstr,"BTCD") == 0 && command != 0 && strcmp(command,"SuperNET") == 0 ) - specialcase = 1; - else specialcase = 0; - if ( url[0] == 0 ) - strcpy(url,"http://127.0.0.1:7876/nxt"); - if ( specialcase != 0 && 0 ) - printf("<<<<<<<<<<< bitcoind_RPC: debug.(%s) url.(%s) command.(%s) params.(%s)\n",debugstr,url,command,params); -try_again: - if ( retstrp != 0 ) - *retstrp = 0; - starttime = OS_milliseconds(); - curl_handle = curl_easy_init(); - init_string(&s); - headers = curl_slist_append(0,"Expect:"); - - curl_easy_setopt(curl_handle,CURLOPT_USERAGENT,"mozilla/4.0");//"Mozilla/4.0 (compatible; )"); - curl_easy_setopt(curl_handle,CURLOPT_HTTPHEADER, headers); - curl_easy_setopt(curl_handle,CURLOPT_URL, url); - curl_easy_setopt(curl_handle,CURLOPT_WRITEFUNCTION, (void *)accumulatebytes); // send all data to this function - curl_easy_setopt(curl_handle,CURLOPT_WRITEDATA, &s); // we pass our 's' struct to the callback - curl_easy_setopt(curl_handle,CURLOPT_NOSIGNAL, 1L); // supposed to fix "Alarm clock" and long jump crash - curl_easy_setopt(curl_handle,CURLOPT_NOPROGRESS, 1L); // no progress callback - //curl_easy_setopt(curl_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); - //curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, 2); - - if ( strncmp(url,"https",5) == 0 ) - { - - /* printf("[ Decker ] SSL: %s\n", curl_version()); */ - curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0L); - curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0L); - //curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L); // this is useful for debug, but seems crash on libcurl/7.64.1 OpenSSL/1.1.1b zlib/1.2.8 librtmp/2.3 - } - if ( userpass != 0 ) - curl_easy_setopt(curl_handle,CURLOPT_USERPWD, userpass); - databuf = 0; - if ( params != 0 ) - { - if ( command != 0 && specialcase == 0 ) - { - len = strlen(params); - if ( len > 0 && params[0] == '[' && params[len-1] == ']' ) { - bracket0 = bracket1 = (char *)""; - } - else - { - bracket0 = (char *)"["; - bracket1 = (char *)"]"; - } - - databuf = (char *)malloc(256 + strlen(command) + strlen(params)); - sprintf(databuf,"{\"id\":\"jl777\",\"method\":\"%s\",\"params\":%s%s%s}",command,bracket0,params,bracket1); - //printf("url.(%s) userpass.(%s) databuf.(%s)\n",url,userpass,databuf); - // - } //else if ( specialcase != 0 ) fprintf(stderr,"databuf.(%s)\n",params); - curl_easy_setopt(curl_handle,CURLOPT_POST,1L); - if ( databuf != 0 ) - curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,databuf); - else curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,params); - } - //laststart = milliseconds(); - res = curl_easy_perform(curl_handle); - curl_slist_free_all(headers); - curl_easy_cleanup(curl_handle); - if ( databuf != 0 ) // clean up temporary buffer - { - free(databuf); - databuf = 0; - } - if ( res != CURLE_OK ) - { - numretries++; - if ( specialcase != 0 ) - { - fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC.(%s): BTCD.%s timeout params.(%s) s.ptr.(%s) err.%d\n",url,command,params,s.ptr,res); - free(s.ptr); - return(0); - } - else if ( numretries >= 1 ) - { - fprintf(stderr,"%s: Maximum number of retries exceeded!\n", __FUNCTION__); - free(s.ptr); - return(0); - } - if ( (rand() % 1000) == 0 ) - printf( "curl_easy_perform() failed: %s %s.(%s %s), retries: %d\n",curl_easy_strerror(res),debugstr,url,command,numretries); - free(s.ptr); - sleep((1< (%s)\n",params,s.ptr); - count2++; - elapsedsum2 += (OS_milliseconds() - starttime); - if ( (count2 % 10000) == 0) - printf("%d: ave %9.6f | elapsed %.3f millis | NXT calls.(%s) cmd.(%s)\n",count2,elapsedsum2/count2,(double)(OS_milliseconds() - starttime),url,command); - return(s.ptr); - } - } - printf("bitcoind_RPC: impossible case\n"); - free(s.ptr); - return(0); -} - -static size_t WriteMemoryCallback(void *ptr,size_t size,size_t nmemb,void *data) -{ - size_t realsize = (size * nmemb); - struct MemoryStruct *mem = (struct MemoryStruct *)data; - mem->memory = (char *)((ptr != 0) ? realloc(mem->memory,mem->size + realsize + 1) : malloc(mem->size + realsize + 1)); - if ( mem->memory != 0 ) - { - if ( ptr != 0 ) - memcpy(&(mem->memory[mem->size]),ptr,realsize); - mem->size += realsize; - mem->memory[mem->size] = 0; - } - //printf("got %d bytes\n",(int32_t)(size*nmemb)); - return(realsize); -} - -char *curl_post(CURL **cHandlep,char *url,char *userpass,char *postfields,char *hdr0,char *hdr1,char *hdr2,char *hdr3) -{ - struct MemoryStruct chunk; CURL *cHandle; long code; struct curl_slist *headers = 0; - if ( (cHandle= *cHandlep) == NULL ) - *cHandlep = cHandle = curl_easy_init(); - else curl_easy_reset(cHandle); - //#ifdef DEBUG - //curl_easy_setopt(cHandle,CURLOPT_VERBOSE, 1); - //#endif - curl_easy_setopt(cHandle,CURLOPT_USERAGENT,"mozilla/4.0");//"Mozilla/4.0 (compatible; )"); - curl_easy_setopt(cHandle,CURLOPT_SSL_VERIFYPEER,0); - //curl_easy_setopt(cHandle,CURLOPT_SSLVERSION,1); - curl_easy_setopt(cHandle,CURLOPT_URL,url); - curl_easy_setopt(cHandle,CURLOPT_CONNECTTIMEOUT,10); - if ( userpass != 0 && userpass[0] != 0 ) - curl_easy_setopt(cHandle,CURLOPT_USERPWD,userpass); - if ( postfields != 0 && postfields[0] != 0 ) - { - curl_easy_setopt(cHandle,CURLOPT_POST,1); - curl_easy_setopt(cHandle,CURLOPT_POSTFIELDS,postfields); - } - if ( hdr0 != NULL && hdr0[0] != 0 ) - { - //printf("HDR0.(%s) HDR1.(%s) HDR2.(%s) HDR3.(%s)\n",hdr0!=0?hdr0:"",hdr1!=0?hdr1:"",hdr2!=0?hdr2:"",hdr3!=0?hdr3:""); - headers = curl_slist_append(headers,hdr0); - if ( hdr1 != 0 && hdr1[0] != 0 ) - headers = curl_slist_append(headers,hdr1); - if ( hdr2 != 0 && hdr2[0] != 0 ) - headers = curl_slist_append(headers,hdr2); - if ( hdr3 != 0 && hdr3[0] != 0 ) - headers = curl_slist_append(headers,hdr3); - } //headers = curl_slist_append(0,"Expect:"); - if ( headers != 0 ) - curl_easy_setopt(cHandle,CURLOPT_HTTPHEADER,headers); - //res = curl_easy_perform(cHandle); - memset(&chunk,0,sizeof(chunk)); - curl_easy_setopt(cHandle,CURLOPT_WRITEFUNCTION,WriteMemoryCallback); - curl_easy_setopt(cHandle,CURLOPT_WRITEDATA,(void *)&chunk); - curl_easy_perform(cHandle); - curl_easy_getinfo(cHandle,CURLINFO_RESPONSE_CODE,&code); - if ( headers != 0 ) - curl_slist_free_all(headers); - if ( code != 200 ) - printf("(%s) server responded with code %ld (%s)\n",url,code,chunk.memory); - return(chunk.memory); -} - -char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port) -{ - //static void *cHandle; - char url[512],*retstr=0,*retstr2=0,postdata[8192]; - if ( params == 0 || params[0] == 0 ) - params = (char *)"[]"; - if ( strlen(params) < sizeof(postdata)-128 ) - { - sprintf(url,(char *)"http://127.0.0.1:%u",port); - sprintf(postdata,"{\"method\":\"%s\",\"params\":%s}",method,params); - //printf("[%s] (%s) postdata.(%s) params.(%s) USERPASS.(%s)\n",SMART_CHAIN_SYMBOL,url,postdata,params,KMDUSERPASS); - retstr2 = bitcoind_RPC(&retstr,(char *)"debug",url,userpass,method,params); - //retstr = curl_post(&cHandle,url,USERPASS,postdata,0,0,0,0); - } - return(retstr2); -} - -int32_t notarizedtxid_height(char *dest,char *txidstr,int32_t *kmdnotarized_heightp) -{ - char *jsonstr,params[256],*userpass; uint16_t port; cJSON *json,*item; int32_t height = 0,txid_height = 0,txid_confirmations = 0; - params[0] = 0; - *kmdnotarized_heightp = 0; - if ( strcmp(dest,"KMD") == 0 ) - { - port = KMD_PORT; - userpass = KMDUSERPASS; - } - else if ( strcmp(dest,"BTC") == 0 ) - { - port = 8332; - userpass = BTCUSERPASS; - } - else return(0); - if ( userpass[0] != 0 ) - { - if ( (jsonstr= komodo_issuemethod(userpass,(char *)"getinfo",params,port)) != 0 ) - { - //printf("(%s)\n",jsonstr); - if ( (json= cJSON_Parse(jsonstr)) != 0 ) - { - if ( (item= jobj(json,(char *)"result")) != 0 ) - { - height = jint(item,(char *)"blocks"); - *kmdnotarized_heightp = strcmp(dest,"KMD") == 0 ? jint(item,(char *)"notarized") : height; - } - free_json(json); - } - free(jsonstr); - } - sprintf(params,"[\"%s\", 1]",txidstr); - if ( (jsonstr= komodo_issuemethod(userpass,(char *)"getrawtransaction",params,port)) != 0 ) - { - //printf("(%s)\n",jsonstr); - if ( (json= cJSON_Parse(jsonstr)) != 0 ) - { - if ( (item= jobj(json,(char *)"result")) != 0 ) - { - txid_confirmations = jint(item,(char *)"rawconfirmations"); - if ( txid_confirmations > 0 && height > txid_confirmations ) - txid_height = height - txid_confirmations; - else txid_height = height; - //printf("height.%d tconfs.%d txid_height.%d\n",height,txid_confirmations,txid_height); - } - free_json(json); - } - free(jsonstr); - } - } - return(txid_height); -} - -int32_t komodo_verifynotarizedscript(int32_t height,uint8_t *script,int32_t len,uint256 NOTARIZED_HASH) -{ - int32_t i; uint256 hash; char params[256]; - for (i=0; i<32; i++) - ((uint8_t *)&hash)[i] = script[2+i]; - if ( hash == NOTARIZED_HASH ) - return(1); - for (i=0; i<32; i++) - printf("%02x",((uint8_t *)&NOTARIZED_HASH)[i]); - printf(" notarized, "); - for (i=0; i<32; i++) - printf("%02x",((uint8_t *)&hash)[i]); - printf(" opreturn from [%s] ht.%d MISMATCHED\n",SMART_CHAIN_SYMBOL,height); - return(-1); -} - -void komodo_reconsiderblock(uint256 blockhash) -{ - char params[256],*jsonstr,*hexstr; - sprintf(params,"[\"%s\"]",blockhash.ToString().c_str()); - if ( (jsonstr= komodo_issuemethod(ASSETCHAINS_USERPASS,(char *)"reconsiderblock",params,ASSETCHAINS_RPCPORT)) != 0 ) - { - //fprintf(stderr,"komodo_reconsiderblock.(%s) (%s %u) -> (%s)\n",params,ASSETCHAINS_USERPASS,ASSETCHAINS_RPCPORT,jsonstr); - free(jsonstr); - } - //fprintf(stderr,"komodo_reconsiderblock.(%s) (%s %u) -> NULL\n",params,ASSETCHAINS_USERPASS,ASSETCHAINS_RPCPORT); -} - -int32_t komodo_verifynotarization(char *symbol,char *dest,int32_t height,int32_t NOTARIZED_HEIGHT,uint256 NOTARIZED_HASH,uint256 NOTARIZED_DESTTXID) -{ - char params[256],*jsonstr,*hexstr; uint8_t *script,_script[8192]; int32_t n,len,retval = -1; cJSON *json,*txjson,*vouts,*vout,*skey; - script = _script; - /*params[0] = '['; - params[1] = '"'; - for (i=0; i<32; i++) - sprintf(¶ms[i*2 + 2],"%02x",((uint8_t *)&NOTARIZED_DESTTXID)[31-i]); - strcat(params,"\", 1]");*/ - sprintf(params,"[\"%s\", 1]",NOTARIZED_DESTTXID.ToString().c_str()); - if ( strcmp(symbol,SMART_CHAIN_SYMBOL[0]==0?(char *)"KMD":SMART_CHAIN_SYMBOL) != 0 ) - return(0); - if ( 0 && SMART_CHAIN_SYMBOL[0] != 0 ) - printf("[%s] src.%s dest.%s params.[%s] ht.%d notarized.%d\n",SMART_CHAIN_SYMBOL,symbol,dest,params,height,NOTARIZED_HEIGHT); - if ( strcmp(dest,"KMD") == 0 ) - { - if ( KMDUSERPASS[0] != 0 ) - { - if ( SMART_CHAIN_SYMBOL[0] != 0 ) - { - jsonstr = komodo_issuemethod(KMDUSERPASS,(char *)"getrawtransaction",params,KMD_PORT); - //printf("userpass.(%s) got (%s)\n",KMDUSERPASS,jsonstr); - } - }//else jsonstr = _dex_getrawtransaction(); - else return(0); // need universal way to issue DEX* API, since notaries mine most blocks, this ok - } - else if ( strcmp(dest,"BTC") == 0 ) - { - if ( BTCUSERPASS[0] != 0 ) - { - //printf("BTCUSERPASS.(%s)\n",BTCUSERPASS); - jsonstr = komodo_issuemethod(BTCUSERPASS,(char *)"getrawtransaction",params,8332); - } - //else jsonstr = _dex_getrawtransaction(); - else return(0); - } - else - { - printf("[%s] verifynotarization error unexpected dest.(%s)\n",SMART_CHAIN_SYMBOL,dest); - return(-1); - } - if ( jsonstr != 0 ) - { - if ( (json= cJSON_Parse(jsonstr)) != 0 ) - { - if ( (txjson= jobj(json,(char *)"result")) != 0 && (vouts= jarray(&n,txjson,(char *)"vout")) > 0 ) - { - vout = jitem(vouts,n-1); - if ( 0 && SMART_CHAIN_SYMBOL[0] != 0 ) - printf("vout.(%s)\n",jprint(vout,0)); - if ( (skey= jobj(vout,(char *)"scriptPubKey")) != 0 ) - { - if ( (hexstr= jstr(skey,(char *)"hex")) != 0 ) - { - //printf("HEX.(%s) vs hash.%s\n",hexstr,NOTARIZED_HASH.ToString().c_str()); - len = strlen(hexstr) >> 1; - decode_hex(script,len,hexstr); - if ( script[1] == 0x4c ) - { - script++; - len--; - } - else if ( script[1] == 0x4d ) - { - script += 2; - len -= 2; - } - retval = komodo_verifynotarizedscript(height,script,len,NOTARIZED_HASH); - } - } - } - free_json(txjson); - } - free(jsonstr); - } - return(retval); -} - -CScript komodo_makeopret(CBlock *pblock, bool fNew) -{ - std::vector vLeaves; - vLeaves.push_back(pblock->hashPrevBlock); - for (int32_t i = 0; i < pblock->vtx.size()-(fNew ? 0 : 1); i++) - vLeaves.push_back(pblock->vtx[i].GetHash()); - uint256 merkleroot = GetMerkleRoot(vLeaves); - CScript opret; - opret << OP_RETURN << E_MARSHAL(ss << merkleroot); - return(opret); -} - -/*uint256 komodo_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= komodo_issuemethod(KMDUSERPASS,(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("KMD hash.%d (%s) %x\n",height,jsonstr,*(uint32_t *)&hash); - free(jsonstr); - } - return(hash); - } - - uint256 _komodo_getblockhash(int32_t height);*/ - -uint64_t komodo_seed(int32_t height) -{ - uint64_t seed = 0; - /*if ( 0 ) // problem during init time, seeds are needed for loading blockindex, so null seeds... - { - uint256 hash,zero; CBlockIndex *pindex; - memset(&hash,0,sizeof(hash)); - memset(&zero,0,sizeof(zero)); - if ( height > 10 ) - height -= 10; - if ( SMART_CHAIN_SYMBOL[0] == 0 ) - hash = _komodo_getblockhash(height); - if ( memcmp(&hash,&zero,sizeof(hash)) == 0 ) - hash = komodo_getblockhash(height); - int32_t i; - for (i=0; i<32; i++) - printf("%02x",((uint8_t *)&hash)[i]); - printf(" seed.%d\n",height); - seed = arith_uint256(hash.GetHex()).GetLow64(); - } - else*/ - { - seed = (height << 13) ^ (height << 2); - seed <<= 21; - seed |= (height & 0xffffffff); - seed ^= (seed << 17) ^ (seed << 1); - } - return(seed); -} - -uint32_t komodo_txtime(CScript &opret,uint64_t *valuep,uint256 hash, int32_t n, char *destaddr) -{ - CTxDestination address; CTransaction tx; uint256 hashBlock; int32_t numvouts; - *valuep = 0; - if (!GetTransaction(hash, tx, -#ifndef HUSH_ZCASH - Params().GetConsensus(), -#endif - hashBlock, true)) - { - //fprintf(stderr,"ERROR: %s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); - return(0); - } - numvouts = tx.vout.size(); - //fprintf(stderr,"%s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); - if ( n < numvouts ) - { - *valuep = tx.vout[n].nValue; - opret = tx.vout[numvouts-1].scriptPubKey; - if (ExtractDestination(tx.vout[n].scriptPubKey, address)) - strcpy(destaddr,CBitcoinAddress(address).ToString().c_str()); - } - return(tx.nLockTime); -} - -CBlockIndex *komodo_getblockindex(uint256 hash) -{ - BlockMap::const_iterator it = mapBlockIndex.find(hash); - return((it != mapBlockIndex.end()) ? it->second : NULL); -} - -uint32_t komodo_txtime2(uint64_t *valuep,uint256 hash,int32_t n,char *destaddr) -{ - CTxDestination address; CBlockIndex *pindex; CTransaction tx; uint256 hashBlock; uint32_t txtime = 0; - *valuep = 0; - if (!GetTransaction(hash, tx, -#ifndef HUSH_ZCASH - Params().GetConsensus(), -#endif - hashBlock, true)) - { - //fprintf(stderr,"ERROR: %s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); - return(0); - } - if ( (pindex= komodo_getblockindex(hashBlock)) != 0 ) - txtime = pindex->nTime; - else txtime = tx.nLockTime; - //fprintf(stderr,"%s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); - if ( n < tx.vout.size() ) - { - *valuep = tx.vout[n].nValue; - if (ExtractDestination(tx.vout[n].scriptPubKey, address)) - strcpy(destaddr,CBitcoinAddress(address).ToString().c_str()); - } - return(txtime); -} - -int32_t komodo_WhoStaked(CBlock *pblock, CTxDestination &addressout) -{ - int32_t n,vout; uint32_t txtime; uint64_t value; char voutaddr[64],destaddr[64]; CTxDestination voutaddress; uint256 txid; CScript opret; - if ( (n= pblock->vtx.size()) > 1 && pblock->vtx[n-1].vin.size() == 1 && pblock->vtx[n-1].vout.size() == 1 ) - { - txid = pblock->vtx[n-1].vin[0].prevout.hash; - vout = pblock->vtx[n-1].vin[0].prevout.n; - txtime = komodo_txtime(opret,&value,txid,vout,destaddr); - if ( ExtractDestination(pblock->vtx[n-1].vout[0].scriptPubKey,voutaddress) ) - { - strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); - if ( strcmp(destaddr,voutaddr) == 0 && pblock->vtx[n-1].vout[0].nValue == value ) - { - //fprintf(stderr,"is PoS block!\n"); - addressout = voutaddress; - return(1); - } - } - } - return(0); -} - -bool komodo_checkopret(CBlock *pblock, CScript &merkleroot) -{ - merkleroot = pblock->vtx.back().vout.back().scriptPubKey; - return(merkleroot.IsOpReturn() && merkleroot == komodo_makeopret(pblock, false)); -} - - -extern const uint32_t nHushHardforkHeight; - -bool hush_hardfork_active(uint32_t time) -{ - //This allows simulating a different height via CLI option, with hardcoded height as default - uint32_t nHardForkHeight = GetArg("-hardfork-height", nHushHardforkHeight); - bool isactive = chainActive.Height() > nHardForkHeight; - if(fDebug) { - //fprintf(stderr, "%s: active=%d at height=%d and forkheight=%d\n", __FUNCTION__, (int)isactive, chainActive.Height(), nHardForkHeight); - } - return isactive; -} - -int32_t komodo_isPoS(CBlock *pblock,int32_t height,bool fJustCheck) -{ - return(0); -} - -void komodo_disconnect(CBlockIndex *pindex,CBlock& block) -{ - char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; - //fprintf(stderr,"disconnect ht.%d\n",pindex->GetHeight()); - komodo_init(pindex->GetHeight()); - if ( (sp= hush_stateptr(symbol,dest)) != 0 ) - { - //sp->rewinding = pindex->GetHeight(); - //fprintf(stderr,"-%d ",pindex->GetHeight()); - } else printf("komodo_disconnect: ht.%d cant get hush_state.(%s)\n",pindex->GetHeight(),SMART_CHAIN_SYMBOL); -} - -int32_t komodo_is_notarytx(const CTransaction& tx) -{ - uint8_t *ptr; static uint8_t crypto555[33]; - if ( tx.vout.size() > 0 ) - { - ptr = (uint8_t *)&tx.vout[0].scriptPubKey[0]; - if ( ptr != 0 ) - { - if ( crypto555[0] == 0 ) - decode_hex(crypto555,33,(char *)CRYPTO555_PUBSECPSTR); - if ( memcmp(ptr+1,crypto555,33) == 0 ) - { - //printf("found notarytx\n"); - return(1); - } - } - } - return(0); -} - -int32_t hush_block2height(CBlock *block) -{ - static uint32_t match,mismatch; - int32_t i,n,height2=-1,height = 0; uint8_t *ptr; CBlockIndex *pindex = NULL; - BlockMap::const_iterator it = mapBlockIndex.find(block->GetHash()); - if ( it != mapBlockIndex.end() && (pindex = it->second) != 0 ) - { - height2 = (int32_t)pindex->GetHeight(); - if ( height2 >= 0 ) - return(height2); - } - if ( pindex && block != 0 && block->vtx[0].vin.size() > 0 ) - { - ptr = (uint8_t *)&block->vtx[0].vin[0].scriptSig[0]; - if ( ptr != 0 && block->vtx[0].vin[0].scriptSig.size() > 5 ) - { - //for (i=0; i<6; i++) - // printf("%02x",ptr[i]); - n = ptr[0]; - for (i=0; ivtx[0].vin[0].scriptSig.size(),height); - } - //komodo_init(height); - } - if ( height != height2 ) - { - //fprintf(stderr,"block2height height.%d vs height2.%d, match.%d mismatch.%d\n",height,height2,match,mismatch); - mismatch++; - if ( height2 >= 0 ) - height = height2; - } else match++; - return(height); -} - -int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block) -{ - int32_t n; - if ( HUSH_LOADINGBLOCKS == 0 ) - memset(pubkey33,0xff,33); - else memset(pubkey33,0,33); - if ( block->vtx[0].vout.size() > 0 ) - { - txnouttype whichType; - vector> vch = vector>(); - if (Solver(block->vtx[0].vout[0].scriptPubKey, whichType, vch) && whichType == TX_PUBKEY) - { - CPubKey pubKey(vch[0]); - if (pubKey.IsValid()) - { - memcpy(pubkey33,vch[0].data(),33); - return true; - } - else memset(pubkey33,0,33); - } - else memset(pubkey33,0,33); - } - return(0); -} - -int32_t komodo_blockload(CBlock& block,CBlockIndex *pindex) -{ - block.SetNull(); - // Open history file to read - CAutoFile filein(OpenBlockFile(pindex->GetBlockPos(),true),SER_DISK,CLIENT_VERSION); - if (filein.IsNull()) - return(-1); - // Read block - try { filein >> block; } - catch (const std::exception& e) - { - fprintf(stderr,"readblockfromdisk err B\n"); - return(-1); - } - return(0); -} - -uint32_t komodo_chainactive_timestamp() -{ - if ( chainActive.LastTip() != 0 ) - return((uint32_t)chainActive.LastTip()->GetBlockTime()); - else return(0); -} - -CBlockIndex *komodo_chainactive(int32_t height) -{ - if ( chainActive.LastTip() != 0 ) - { - if ( height <= chainActive.LastTip()->GetHeight() ) - return(chainActive[height]); - // else fprintf(stderr,"komodo_chainactive height %d > active.%d\n",height,chainActive.LastTip()->GetHeight()); - } - //fprintf(stderr,"komodo_chainactive null chainActive.LastTip() height %d\n",height); - return(0); -} - -uint32_t komodo_heightstamp(int32_t height) -{ - CBlockIndex *ptr; - if ( height > 0 && (ptr= komodo_chainactive(height)) != 0 ) - return(ptr->nTime); - //else fprintf(stderr,"komodo_heightstamp null ptr for block.%d\n",height); - return(0); -} - -/*void komodo_pindex_init(CBlockIndex *pindex,int32_t height) gets data corrupted -{ - int32_t i,num; uint8_t pubkeys[64][33]; CBlock block; - if ( pindex->didinit != 0 ) - return; - //printf("pindex.%d komodo_pindex_init notary.%d from height.%d\n",pindex->GetHeight(),pindex->notaryid,height); - if ( pindex->didinit == 0 ) - { - pindex->notaryid = -1; - if ( HUSH_LOADINGBLOCKS == 0 ) - memset(pindex->pubkey33,0xff,33); - else memset(pindex->pubkey33,0,33); - if ( komodo_blockload(block,pindex) == 0 ) - { - komodo_block2pubkey33(pindex->pubkey33,&block); - //for (i=0; i<33; i++) - // fprintf(stderr,"%02x",pindex->pubkey33[i]); - //fprintf(stderr," set pubkey at height %d/%d\n",pindex->GetHeight(),height); - //if ( pindex->pubkey33[0] == 2 || pindex->pubkey33[0] == 3 ) - // pindex->didinit = (HUSH_LOADINGBLOCKS == 0); - } // else fprintf(stderr,"error loading block at %d/%d",pindex->GetHeight(),height); - } - if ( pindex->didinit != 0 && pindex->GetHeight() >= 0 && (num= hush_notaries(pubkeys,(int32_t)pindex->GetHeight(),(uint32_t)pindex->nTime)) > 0 ) - { - for (i=0; ipubkey33,33) == 0 ) - { - pindex->notaryid = i; - break; - } - } - if ( 0 && i == num ) - { - for (i=0; i<33; i++) - fprintf(stderr,"%02x",pindex->pubkey33[i]); - fprintf(stderr," unmatched pubkey at height %d/%d\n",pindex->GetHeight(),height); - } - } -}*/ - -void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) -{ - int32_t num,i; CBlock block; - memset(pubkey33,0,33); - if ( pindex != 0 ) - { - if ( komodo_blockload(block,pindex) == 0 ) - komodo_block2pubkey33(pubkey33,&block); - } -} - -/*int8_t komodo_minerid(int32_t height,uint8_t *destpubkey33) -{ - int32_t num,i,numnotaries; CBlockIndex *pindex; uint32_t timestamp=0; uint8_t pubkey33[33],pubkeys[64][33]; - if ( (pindex= chainActive[height]) != 0 ) - { - if ( pindex->didinit != 0 ) - { - if ( destpubkey33 != 0 ) - memcpy(destpubkey33,pindex->pubkey33,33); - return(pindex->notaryid); - } - komodo_index2pubkey33(pubkey33,pindex,height); - if ( destpubkey33 != 0 ) - memcpy(destpubkey33,pindex->pubkey33,33); - if ( pindex->didinit != 0 ) - return(pindex->notaryid); - timestamp = pindex->GetBlockTime(); - if ( (num= hush_notaries(pubkeys,height,timestamp)) > 0 ) - { - for (i=0; inTime; - if ( komodo_blockload(block,pindex) == 0 ) - { - komodo_block2pubkey33(pubkeys[i],&block); - for (j=0; j= 0 && i > 0 && mids[i] == mids[0] ) - duplicate++; - } - } - if ( i == 66 && duplicate == 0 && (height > 186233 || *nonzpkeysp > 0) ) - return(1); - else return(0); -} - -int32_t komodo_minerids(uint8_t *minerids,int32_t height,int32_t width) -{ - int32_t i,j,nonz,numnotaries; CBlock block; CBlockIndex *pindex; uint8_t notarypubs33[64][33],pubkey33[33]; - numnotaries = hush_notaries(notarypubs33,height,0); - for (i=nonz=0; i= 82000 ) - { - if ( notaryid >= 0 ) - { - for (i=1; i<66; i++) - { - if ( mids[i] == notaryid ) - { - if ( height > 792000 ) - { - for (j=0; j<66; j++) - fprintf(stderr,"%d ",mids[j]); - fprintf(stderr,"ht.%d repeat notaryid.%d in mids[%d]\n",height,notaryid,i); - return(-1); - } else break; - } - } - if ( blocktime != 0 && blocktimes[1] != 0 && blocktime < blocktimes[1]+57 ) - { - if ( height > 807000 ) - return(-2); - } - return(1); - } else return(0); - } - else - { - if ( height >= 34000 && notaryid >= 0 ) - { - if ( height < 79693 ) - limit = 64; - else if ( height < 82000 ) - limit = 8; - else limit = 66; - for (i=1; i 225000 ) - return(-1); - } - } - //fprintf(stderr,"special notaryid.%d ht.%d limit.%d\n",notaryid,height,limit); - return(1); - } - } - return(0); -} - -int32_t komodo_MoM(int32_t *notarized_heightp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip) -{ - int32_t depth,notarized_ht; uint256 MoM,kmdtxid; - depth = komodo_MoMdata(¬arized_ht,&MoM,&kmdtxid,nHeight,MoMoMp,MoMoMoffsetp,MoMoMdepthp,kmdstartip,kmdendip); - memset(MoMp,0,sizeof(*MoMp)); - memset(kmdtxidp,0,sizeof(*kmdtxidp)); - *notarized_heightp = 0; - if ( depth != 0 && notarized_ht > 0 && nHeight > notarized_ht-depth && nHeight <= notarized_ht ) - { - *MoMp = MoM; - *notarized_heightp = notarized_ht; - *kmdtxidp = kmdtxid; - } - return(depth); -} - -CBlockIndex *komodo_blockindex(uint256 hash) -{ - BlockMap::const_iterator it; CBlockIndex *pindex = 0; - if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) - pindex = it->second; - return(pindex); -} - -int32_t komodo_blockheight(uint256 hash) -{ - BlockMap::const_iterator it; CBlockIndex *pindex = 0; - if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) - { - if ( (pindex= it->second) != 0 ) - return(pindex->GetHeight()); - } - return(0); -} - -uint32_t komodo_blocktime(uint256 hash) -{ - BlockMap::const_iterator it; CBlockIndex *pindex = 0; - if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) - { - if ( (pindex= it->second) != 0 ) - return(pindex->nTime); - } - return(0); -} - -int32_t komodo_checkpoint(int32_t *notarized_heightp,int32_t nHeight,uint256 hash) -{ - int32_t notarized_height,MoMdepth; uint256 MoM,notarized_hash,notarized_desttxid; CBlockIndex *notary,*pindex; - if ( (pindex= chainActive.LastTip()) == 0 ) - return(-1); - notarized_height = komodo_notarizeddata(pindex->GetHeight(),¬arized_hash,¬arized_desttxid); - *notarized_heightp = notarized_height; - BlockMap::const_iterator it; - if ( notarized_height >= 0 && notarized_height <= pindex->GetHeight() && (it = mapBlockIndex.find(notarized_hash)) != mapBlockIndex.end() && (notary = it->second) != NULL ) - { - //printf("nHeight.%d -> (%d %s)\n",pindex->Tip()->GetHeight(),notarized_height,notarized_hash.ToString().c_str()); - if ( notary->GetHeight() == notarized_height ) // if notarized_hash not in chain, reorg - { - if ( nHeight < notarized_height ) - { - //fprintf(stderr,"[%s] nHeight.%d < NOTARIZED_HEIGHT.%d\n",SMART_CHAIN_SYMBOL,nHeight,notarized_height); - return(-1); - } - else if ( nHeight == notarized_height && memcmp(&hash,¬arized_hash,sizeof(hash)) != 0 ) - { - fprintf(stderr,"[%s] nHeight.%d == NOTARIZED_HEIGHT.%d, diff hash\n",SMART_CHAIN_SYMBOL,nHeight,notarized_height); - return(-1); - } - } //else fprintf(stderr,"[%s] unexpected error notary_hash %s ht.%d at ht.%d\n",SMART_CHAIN_SYMBOL,notarized_hash.ToString().c_str(),notarized_height,notary->GetHeight()); - } - //else if ( notarized_height > 0 && notarized_height != 73880 && notarized_height >= 170000 ) - // fprintf(stderr,"[%s] couldnt find notarized.(%s %d) ht.%d\n",SMART_CHAIN_SYMBOL,notarized_hash.ToString().c_str(),notarized_height,pindex->GetHeight()); - return(0); -} - -uint32_t komodo_interest_args(uint32_t *txheighttimep,int32_t *txheightp,uint32_t *tiptimep,uint64_t *valuep,uint256 hash,int32_t n) -{ - LOCK(cs_main); - CTransaction tx; uint256 hashBlock; CBlockIndex *pindex,*tipindex; - *txheighttimep = *txheightp = *tiptimep = 0; - *valuep = 0; - if ( !GetTransaction(hash,tx,hashBlock,true) ) - return(0); - uint32_t locktime = 0; - if ( n < tx.vout.size() ) - { - if ( (pindex= komodo_getblockindex(hashBlock)) != 0 ) - { - *valuep = tx.vout[n].nValue; - *txheightp = pindex->GetHeight(); - *txheighttimep = pindex->nTime; - if ( *tiptimep == 0 && (tipindex= chainActive.LastTip()) != 0 ) - *tiptimep = (uint32_t)tipindex->nTime; - locktime = tx.nLockTime; - //fprintf(stderr,"tx locktime.%u %.8f height.%d | tiptime.%u\n",locktime,(double)*valuep/COIN,*txheightp,*tiptimep); - } - } - return(locktime); -} - -uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime); - -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight) -{ - uint64_t value; uint32_t tiptime=0,txheighttimep; CBlockIndex *pindex; - if ( (pindex= chainActive[tipheight]) != 0 ) - tiptime = (uint32_t)pindex->nTime; - else fprintf(stderr,"cant find height[%d]\n",tipheight); - if ( (*locktimep= komodo_interest_args(&txheighttimep,txheightp,&tiptime,&value,hash,n)) != 0 ) - { - if ( (checkvalue == 0 || value == checkvalue) && (checkheight == 0 || *txheightp == checkheight) ) - return(komodo_interest(*txheightp,value,*locktimep,tiptime)); - //fprintf(stderr,"nValue %llu lock.%u:%u nTime.%u -> %llu\n",(long long)coins.vout[n].nValue,coins.nLockTime,timestamp,pindex->nTime,(long long)interest); - else fprintf(stderr,"komodo_accrued_interest value mismatch %llu vs %llu or height mismatch %d vs %d\n",(long long)value,(long long)checkvalue,*txheightp,checkheight); - } - return(0); -} - -int32_t komodo_nextheight() -{ - CBlockIndex *pindex; int32_t ht; - if ( (pindex= chainActive.LastTip()) != 0 && (ht= pindex->GetHeight()) > 0 ) - return(ht+1); - else return(hush_longestchain() + 1); -} - -int32_t komodo_isrealtime(int32_t *kmdheightp) -{ - struct hush_state *sp; CBlockIndex *pindex; - if ( (sp= hush_stateptrget((char *)"KMD")) != 0 ) - *kmdheightp = sp->CURRENT_HEIGHT; - else *kmdheightp = 0; - if ( (pindex= chainActive.LastTip()) != 0 && pindex->GetHeight() >= (int32_t)hush_longestchain() ) - return(1); - else return(0); -} - -int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t cmptime,int32_t dispflag) -{ - dispflag = 1; - if ( HUSH_REWIND == 0 && SMART_CHAIN_SYMBOL[0] == 0 && (int64_t)tx.nLockTime >= LOCKTIME_THRESHOLD ) //1473793441 ) - { - if ( txheight > 246748 ) - { - if ( txheight < 247205 ) - cmptime -= 16000; - if ( (int64_t)tx.nLockTime < cmptime-KOMODO_MAXMEMPOOLTIME ) - { - if ( tx.nLockTime != 1477258935 && dispflag != 0 ) - { - fprintf(stderr,"komodo_validate_interest.%d reject.%d [%d] locktime %u cmp2.%u\n",dispflag,txheight,(int32_t)(tx.nLockTime - (cmptime-KOMODO_MAXMEMPOOLTIME)),(uint32_t)tx.nLockTime,cmptime); - } - return(-1); - } - if ( 0 && dispflag != 0 ) - fprintf(stderr,"validateinterest.%d accept.%d [%d] locktime %u cmp2.%u\n",dispflag,(int32_t)txheight,(int32_t)(tx.nLockTime - (cmptime-KOMODO_MAXMEMPOOLTIME)),(int32_t)tx.nLockTime,cmptime); - } - } - return(0); -} - -/* - komodo_checkPOW (fast) is called early in the process and should only refer to data immediately available. it is a filter to prevent bad blocks from going into the local DB. The more blocks we can filter out at this stage, the less junk in the local DB that will just get purged later on. - - komodo_checkPOW (slow) is called right before connecting blocks so all prior blocks can be assumed to be there and all checks must pass - - commission must be in coinbase.vout[1] and must be >= 10000 sats - PoS stake must be without txfee and in the last tx in the block at vout[0] - */ - -CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams); - -// This function defines the Hush Founders Reward (AKA Dev Tax) -// 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. -// 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 -// This must be kept in sync with hush_block_subsidy() in hush_utils.h! -// Changing these functions are consensus changes! -// Here Be Dragons! -- Duke Leto -uint64_t hush_commission(int height) -{ - int32_t starting_commission = 125000000, HALVING1 = GetArg("-z2zheight",340000), - INTERVAL = GetArg("-ac_halving1",840000), TRANSITION = 129; - uint64_t commission = 0; - - //TODO: Likely a bug hiding here or at the next halving :) - //if( height >= HALVING1) { - if( height > HALVING1) { - // Block time going from 150s to 75s (half) means the interval between halvings - // must be twice as often, i.e. 840000*2=1680000 - // 840000 is ~4 years worth of 150s blocks - // With 150s blocks, we have 210,000 blocks per year - // With 75s blocks, we have 420,000 blocks per year - INTERVAL = GetArg("-ac_halving2",1680000); // ~4 years worth of 75s blocks - //fprintf(stderr,"%s: height=%d increasing interval to %d\n", __func__, height, INTERVAL); - } - - // Block 128 had a miner subsidy but no FR!!! Discovered by Denio - if (height < TRANSITION) { - commission = 0; - } else { - // Just like BTC, BRs in the far future will be slightly less than - // they should be because exact values are not integers, causing - // slightly less coins to be actually mined and small deviations - // to the ideal FR/devtax - if (height < HALVING1) { // before 1st Halving @ Block 340000 (Nov 2020) - commission = starting_commission; - } else if (height < 2020000 ) { - commission = 31250000; - } else if (height < 3700000 ) { - commission = 15625000; - } else if (height < 5380000 ) { - commission = 7812500; - } else if (height < 7060000 ) { - commission = 3906250; - } else if (height < 8740000 ) { - commission = 1953125; - } else if (height < 10420000) { - commission = 976562; // 0.5 puposhi deviation, all further BRs have deviation from ideal - } else if (height < 12100000) { - commission = 488281; - } else if (height < 15460000) { - commission = 244140; - } else if (height < 17140000) { - commission = 122070; - } else if (height < 18820000) { - commission = 61035; - } else if (height < 23860000) { - commission = 30517; - } else if (height < 23860000) { - commission = 15258; - } else if (height < 25540000) { - commission = 7629; - } else if (height < 27220000) { - commission = 3814; - } else if (height < 27220000) { - commission = 1907; - } else if (height < 28900000) { - commission = 953; - } else if (height < 30580000) { - commission = 476; - } else if (height < 32260000) { - commission = 238; - } else if (height < 33940000) { - commission = 119; - } else if (height < 35620000) { - commission = 59; - } else if (height < 37300000) { - commission = 29; - } else if (height < 38980000) { - commission = 14; - } else if (height < 40660000) { - commission = 7; - } else if (height < 42340000) { - commission = 3; - } else if (height < 44020000) { - commission = 1; - } else if (height < 45700000) { - // FR goes to zero at Halving 26 - commission = 0; - } else if (height < 47380000) { - // FR still zero at Halving 27 - commission = 0; - } else if (height < 49060000) { - // FR still zero at Halving 28 - commission = 0; - } else if (height < 50740000) { - // FR still zero at Halving 29 - commission = 0; - } else { - // enforce FR=0 for all other heights - // This over-rides the -ac_end param via HUSH3 cli args - commission = 0; - } - } - - if(fDebug) - fprintf(stderr,"%s: commission=%lu,interval=%d at height %d\n", __func__, commission, INTERVAL, height); - return commission; -} - -uint64_t the_commission(const CBlock *pblock,int32_t height) -{ - //fprintf(stderr,"%s at height=%d\n",__func__,height); - static bool didinit = false, ishush3 = false; - - if (!didinit) { - ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; - didinit = true; - fprintf(stderr,"%s: didinit ishush3=%d\n", __func__, ishush3); - } - - int32_t i,j,n=0,txn_count; int64_t nSubsidy; uint64_t commission,total = 0; - if ( ASSETCHAINS_FOUNDERS != 0 ) - { - nSubsidy = GetBlockSubsidy(height,Params().GetConsensus()); - if(fDebug) - fprintf(stderr,"ht.%d nSubsidy %.8f prod %llu\n",height,(double)nSubsidy/COIN,(long long)(nSubsidy * ASSETCHAINS_COMMISSION)); - commission = ((nSubsidy * ASSETCHAINS_COMMISSION) / COIN); - - if (ishush3) { - commission = hush_commission(height); - } - - if ( ASSETCHAINS_FOUNDERS > 1 ) - { - if ( (height % ASSETCHAINS_FOUNDERS) == 0 ) - { - if ( ASSETCHAINS_FOUNDERS_REWARD == 0 ) { - commission = commission * ASSETCHAINS_FOUNDERS; - } else { - commission = ASSETCHAINS_FOUNDERS_REWARD; - } - if(fDebug) - fprintf(stderr,"%s: set commission=%lu at height %d with\n",__func__,commission, height); - } else { - commission = 0; - } - } - } else if ( pblock != 0 ) { - txn_count = pblock->vtx.size(); - for (i=0; ivtx[i].vout.size(); - for (j=0; j 225000 && ASSETCHAINS_STAKED != 0 && txn_count > 1 && i == txn_count-1 && j == n-1 ) - break; - //fprintf(stderr,"(%d %.8f).%d ",i,dstr(pblock->vtx[i].vout[j].nValue),j); - if ( i != 0 || j != 1 ) - total += pblock->vtx[i].vout[j].nValue; - if ( total > 1000000 * COIN ) - { - total = 1000000 * COIN; - break; - } - } - } - commission = ((total / 10000) * ASSETCHAINS_COMMISSION) / 10000; - //commission = ((total * ASSETCHAINS_COMMISSION) / COIN); - } - if ( commission < 10000 ) - commission = 0; - if(fDebug) - fprintf(stderr,"%s: commission=%.8f at height=%d\n",__func__, (double)commission/COIN, height); - return(commission); -} - -uint32_t komodo_segid32(char *coinaddr) -{ - bits256 addrhash; - vcalc_sha256(0,(uint8_t *)&addrhash,(uint8_t *)coinaddr,(int32_t)strlen(coinaddr)); - return(addrhash.uints[0]); -} - -int8_t komodo_segid(int32_t nocache,int32_t height) -{ - CTxDestination voutaddress; CBlock block; CBlockIndex *pindex; uint64_t value; uint32_t txtime; char voutaddr[64],destaddr[64]; int32_t txn_count,vout; uint256 txid; CScript opret; int8_t segid = -1; - if ( height > 0 && (pindex= komodo_chainactive(height)) != 0 ) - { - if ( nocache == 0 && pindex->segid >= -1 ) - return(pindex->segid); - if ( komodo_blockload(block,pindex) == 0 ) - { - txn_count = block.vtx.size(); - if ( txn_count > 1 && block.vtx[txn_count-1].vin.size() == 1 && block.vtx[txn_count-1].vout.size() == 1 ) - { - txid = block.vtx[txn_count-1].vin[0].prevout.hash; - vout = block.vtx[txn_count-1].vin[0].prevout.n; - txtime = komodo_txtime(opret,&value,txid,vout,destaddr); - if ( ExtractDestination(block.vtx[txn_count-1].vout[0].scriptPubKey,voutaddress) ) - { - strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); - if ( strcmp(destaddr,voutaddr) == 0 && block.vtx[txn_count-1].vout[0].nValue == value ) - { - segid = komodo_segid32(voutaddr) & 0x3f; - pindex->segid = segid; - //fprintf(stderr,"komodo_segid.(%d) -> %d\n",height,pindex->segid); - } - } else fprintf(stderr,"komodo_segid ht.%d couldnt extract voutaddress\n",height); - } - } - } - return(segid); -} - -void komodo_segids(uint8_t *hashbuf,int32_t height,int32_t n) -{ - static uint8_t prevhashbuf[100]; static int32_t prevheight; - int32_t i; - if ( height == prevheight && n == 100 ) - memcpy(hashbuf,prevhashbuf,100); - else - { - memset(hashbuf,0xff,n); - for (i=0; i 10 && (tipindex= komodo_chainactive(height - 1)) != 0 ) // disable offchain diffchange - { - diff = (nTime - tipindex->GetMedianTimePast()); - tipdiff = (nTime - tipindex->nTime); - if ( tipdiff > 13*ASSETCHAINS_BLOCKTIME ) - diff = tipdiff; - if ( diff >= 13 * ASSETCHAINS_BLOCKTIME && (height < 30 || tipdiff > 2*ASSETCHAINS_BLOCKTIME) ) - { - mult = diff - 12 * ASSETCHAINS_BLOCKTIME; - mult = (mult / ASSETCHAINS_BLOCKTIME) * ASSETCHAINS_BLOCKTIME + ASSETCHAINS_BLOCKTIME / 2; - origtarget = bnTarget; - bnTarget = bnTarget * arith_uint256(mult * mult); - easy.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); - if ( bnTarget < origtarget || bnTarget > easy ) // deal with overflow - { - bnTarget = easy; - fprintf(stderr,"tipdiff.%d diff.%d height.%d miner overflowed mult.%lld, set to mindiff\n",tipdiff,diff,height,(long long)mult); - } else fprintf(stderr,"tipdiff.%d diff.%d height.%d miner elapsed %d, adjust by factor of %lld\n",tipdiff,diff,height,diff,(long long)mult); - } //else fprintf(stderr,"height.%d tipdiff.%d diff %d, vs %d\n",height,tipdiff,diff,13*ASSETCHAINS_BLOCKTIME); - } else fprintf(stderr,"adaptive cant find height.%d\n",height); - return(bnTarget); -} - -arith_uint256 komodo_PoWtarget(int32_t *percPoSp,arith_uint256 target,int32_t height,int32_t goalperc) -{ - int32_t oldflag = 0,dispflag = 0; - CBlockIndex *pindex; arith_uint256 easydiff,bnTarget,hashval,sum,ave; bool fNegative,fOverflow; int32_t i,n,m,ht,percPoS,diff,val; - *percPoSp = percPoS = 0; - - if ( height <= 10 || (ASSETCHAINS_STAKED == 100 && height <= 100) ) - return(target); - - sum = arith_uint256(0); - ave = sum; - easydiff.SetCompact(STAKING_MIN_DIFF,&fNegative,&fOverflow); - for (i=n=m=0; i<100; i++) - { - ht = height - 100 + i; - if ( ht <= 1 ) - continue; - if ( (pindex= komodo_chainactive(ht)) != 0 ) - { - if ( komodo_segid(0,ht) >= 0 ) - { - n++; - percPoS++; - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) - fprintf(stderr,"0"); - } - else - { - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) - fprintf(stderr,"1"); - sum += UintToArith256(pindex->GetBlockHash()); - m++; - } - } //else fprintf(stderr, "pindex returned null ht.%i\n",ht); - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 && (i % 10) == 9 ) - fprintf(stderr," %d, ",percPoS); - } - if ( m+n < 100 ) - { - percPoS = ((percPoS * n) + (goalperc * (100-n))) / 100; - } - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) - fprintf(stderr," -> %d%% percPoS vs goalperc.%d ht.%d\n",percPoS,goalperc,height); - *percPoSp = percPoS; - if ( m > 0 ) - { - ave = (sum / arith_uint256(m)); - if ( ave > target ) - ave = target; - } else ave = target; //easydiff; //else return(target); - if ( percPoS == 0 ) - percPoS = 1; - if ( percPoS < goalperc ) // increase PoW diff -> lower bnTarget - { - if ( oldflag != 0 ) - bnTarget = (ave / arith_uint256(goalperc * goalperc * goalperc)) * arith_uint256(percPoS * percPoS); - else bnTarget = (ave / arith_uint256(goalperc * goalperc * goalperc * goalperc)) * arith_uint256(percPoS * percPoS); - if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) - { - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&ave)[i]); - fprintf(stderr," increase diff -> "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," floor diff "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&target)[i]); - fprintf(stderr," ht.%d percPoS.%d vs goal.%d -> diff %d\n",height,percPoS,goalperc,goalperc - percPoS); - } - } - else if ( percPoS > goalperc ) // decrease PoW diff -> raise bnTarget - { - if ( oldflag != 0 ) - { - bnTarget = ((ave * arith_uint256(goalperc)) + (easydiff * arith_uint256(percPoS))) / arith_uint256(percPoS + goalperc); - bnTarget = (bnTarget / arith_uint256(goalperc * goalperc)) * arith_uint256(percPoS * percPoS * percPoS); - } - else bnTarget = (ave / arith_uint256(goalperc * goalperc)) * arith_uint256(percPoS * percPoS * percPoS); - if ( bnTarget > easydiff ) - bnTarget = easydiff; - else if ( bnTarget < ave ) // overflow - { - bnTarget = ((ave * arith_uint256(goalperc)) + (easydiff * arith_uint256(percPoS))) / arith_uint256(percPoS + goalperc); - if ( bnTarget < ave ) - bnTarget = ave; - } - if ( dispflag != 0 ) - { - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&ave)[i]); - fprintf(stderr," decrease diff -> "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," floor diff "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&target)[i]); - fprintf(stderr," ht.%d percPoS.%d vs goal.%d -> diff %d\n",height,percPoS,goalperc,goalperc - percPoS); - } - } - else - bnTarget = ave; // recent ave is perfect - return(bnTarget); -} - -uint32_t komodo_stake(int32_t validateflag,arith_uint256 bnTarget,int32_t nHeight,uint256 txid,int32_t vout,uint32_t blocktime,uint32_t prevtime,char *destaddr,int32_t PoSperc) -{ - bool fNegative,fOverflow; uint8_t hashbuf[256]; char address[64]; bits256 addrhash; arith_uint256 hashval,mindiff,ratio,coinage256; uint256 hash,pasthash; int32_t segid,minage,i,iter=0; int64_t diff=0; uint32_t txtime,segid32,winner = 0 ; uint64_t value,coinage; - txtime = komodo_txtime2(&value,txid,vout,address); - if ( validateflag == 0 ) - { - //fprintf(stderr,"blocktime.%u -> ",blocktime); - if ( blocktime < prevtime+3 ) - blocktime = prevtime+3; - if ( blocktime < GetTime()-60 ) - blocktime = GetTime()+30; - //fprintf(stderr,"blocktime.%u txtime.%u\n",blocktime,txtime); - } - if ( value == 0 || txtime == 0 || blocktime == 0 || prevtime == 0 ) - { - //fprintf(stderr,"komodo_stake null %.8f %u %u %u\n",dstr(value),txtime,blocktime,prevtime); - return(0); - } - if ( value < SATOSHIDEN ) - return(0); - value /= SATOSHIDEN; - mindiff.SetCompact(STAKING_MIN_DIFF,&fNegative,&fOverflow); - ratio = (mindiff / bnTarget); - if ( (minage= nHeight*3) > 6000 ) // about 100 blocks - minage = 6000; - komodo_segids(hashbuf,nHeight-101,100); - segid32 = komodo_stakehash(&hash,address,hashbuf,txid,vout); - segid = ((nHeight + segid32) & 0x3f); - for (iter=0; iter<600; iter++) - { - if ( blocktime+iter+segid*2 < txtime+minage ) - continue; - diff = (iter + blocktime - txtime - minage); - if ( diff < 0 ) - diff = 60; - else if ( diff > 3600*24*30 ) - { - //printf("diff.%d (iter.%d blocktime.%u txtime.%u minage.%d)\n",(int32_t)diff,iter,blocktime,txtime,(int32_t)minage); - diff = 3600*24*30; - } - if ( iter > 0 ) - diff += segid*2; - coinage = (value * diff); - if ( blocktime+iter+segid*2 > prevtime+480 ) - coinage *= ((blocktime+iter+segid*2) - (prevtime+400)); - coinage256 = arith_uint256(coinage+1); - hashval = ratio * (UintToArith256(hash) / coinage256); - if ( hashval <= bnTarget ) - { - winner = 1; - if ( validateflag == 0 ) - { - //fprintf(stderr,"winner blocktime.%u iter.%d segid.%d\n",blocktime,iter,segid); - blocktime += iter; - blocktime += segid * 2; - } - break; - } - if ( validateflag != 0 ) - { - /*for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&hashval)[i]); - fprintf(stderr," vs "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," segid.%d iter.%d winner.%d coinage.%llu %d ht.%d t.%u v%d diff.%d\n",segid,iter,winner,(long long)coinage,(int32_t)(blocktime - txtime),nHeight,blocktime,(int32_t)value,(int32_t)diff); */ - break; - } - } - //fprintf(stderr,"iterated until i.%d winner.%d\n",i,winner); - if ( 0 && validateflag != 0 ) - { - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&hashval)[i]); - fprintf(stderr," vs "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," segid.%d iter.%d winner.%d coinage.%llu %d ht.%d t.%u v%d diff.%d ht.%d\n",segid,iter,winner,(long long)coinage,(int32_t)(blocktime - txtime),nHeight,blocktime,(int32_t)value,(int32_t)diff,nHeight); - } - if ( nHeight < 10 ) - return(blocktime); - return(blocktime * winner); -} - -int32_t komodo_is_PoSblock(int32_t slowflag,int32_t height,CBlock *pblock,arith_uint256 bnTarget,arith_uint256 bhash) -{ - CBlockIndex *previndex,*pindex; char voutaddr[64],destaddr[64]; uint256 txid; uint32_t txtime,prevtime=0; int32_t ret,vout,PoSperc,txn_count,eligible=0,isPoS = 0,segid; uint64_t value; CTxDestination voutaddress; arith_uint256 POWTarget; - if ( ASSETCHAINS_STAKED == 100 && height <= 10 ) - return(1); - BlockMap::const_iterator it = mapBlockIndex.find(pblock->GetHash()); - pindex = it != mapBlockIndex.end() ? it->second : NULL; - if ( pindex != 0 && pindex->segid >= -1 ) - { - //fprintf(stderr,"isPoSblock segid.%d\n",pindex->segid); - if ( pindex->segid == -1 ) - return(0); - else return(1); - } - // Get PoSperc and POW Target. slowflag only here, calling it when blocks out of order causes problems. - if ( slowflag != 0 ) - POWTarget = komodo_PoWtarget(&PoSperc,bnTarget,height,ASSETCHAINS_STAKED); - txn_count = pblock->vtx.size(); - //fprintf(stderr,"checkblock n.%d vins.%d vouts.%d %.8f %.8f\n",txn_count,(int32_t)pblock->vtx[txn_count-1].vin.size(),(int32_t)pblock->vtx[txn_count-1].vout.size(),(double)pblock->vtx[txn_count-1].vout[0].nValue/COIN,(double)pblock->vtx[txn_count-1].vout[1].nValue/COIN); - if ( txn_count > 1 && pblock->vtx[txn_count-1].vin.size() == 1 && pblock->vtx[txn_count-1].vout.size() == 1 + (ASSETCHAINS_MARMARA!=0) ) - { - it = mapBlockIndex.find(pblock->hashPrevBlock); - if ( it != mapBlockIndex.end() && (previndex = it->second) != NULL ) - prevtime = (uint32_t)previndex->nTime; - - txid = pblock->vtx[txn_count-1].vin[0].prevout.hash; - vout = pblock->vtx[txn_count-1].vin[0].prevout.n; - if ( slowflag != 0 && prevtime != 0 ) - { - if ( komodo_isPoS(pblock,height,false) != 0 ) - { - eligible = komodo_stake(1,bnTarget,height,txid,vout,pblock->nTime,prevtime+27,(char *)"",PoSperc); - } - if ( eligible == 0 || eligible > pblock->nTime ) - { - if ( 0 && ASSETCHAINS_STAKED < 100 ) - fprintf(stderr,"komodo_is_PoSblock PoS failure ht.%d eligible.%u vs blocktime.%u, lag.%d -> check to see if it is PoW block\n",height,eligible,(uint32_t)pblock->nTime,(int32_t)(eligible - pblock->nTime)); - if ( pindex != 0 ) - { - pindex->segid = -1; - //fprintf(stderr,"PoW block detected set segid.%d <- %d\n",height,pindex->segid); - } - } - else - { - isPoS = 2; // 2 means staking utxo validated - CTxDestination voutaddress; char voutaddr[64]; - if ( ExtractDestination(pblock->vtx[txn_count-1].vout[0].scriptPubKey,voutaddress) ) - { - strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); - segid = komodo_segid32(voutaddr) & 0x3f; - } - if ( pindex != 0 && segid >= 0 ) - { - pindex->segid = segid; - //fprintf(stderr,"PoS block set segid.%d <- %d\n",height,pindex->segid); - } //else fprintf(stderr,"unexpected null pindex for slowflag set ht.%d segid.%d:%d\n",height,pindex!=0?pindex->segid:-3,segid); - } - } - else if ( slowflag == 0 ) // previous blocks are not seen yet, do the best approx - { - if ( komodo_isPoS(pblock,height,false) != 0 ) - isPoS = 1; - } - if ( slowflag != 0 && isPoS != 0 ) - { - if ( isPoS != 2 ) - { - fprintf(stderr,"ht.%d isPoS.%d utxo not validated -> must be PoW fake\n",height,isPoS); - isPoS = 0; - } - else if ( ASSETCHAINS_STAKED != 100 ) - { - if ( bhash < POWTarget ) - { - //fprintf(stderr,"ht.%d isPoS but meets PoW diff!\n",height); - isPoS = 0; - } - } - } - //else return(-1); - } - //fprintf(stderr,"slow.%d ht.%d isPoS.%d\n",slowflag,height,isPoS); - return(isPoS != 0); -} - -bool GetStakeParams(const CTransaction &stakeTx, CStakeParams &stakeParams); -bool ValidateMatchingStake(const CTransaction &ccTx, uint32_t voutNum, const CTransaction &stakeTx, bool &cheating); - - -uint64_t komodo_notarypayamount(int32_t nHeight, int64_t notarycount) -{ - int8_t curEra = 0; int64_t ret = 0; - // if we have an end block in the first era, find our current era - if ( ASSETCHAINS_ENDSUBSIDY[0] > 1 ) - { - for ( curEra = 0; curEra <= ASSETCHAINS_LASTERA; curEra++ ) - { - if ( ASSETCHAINS_ENDSUBSIDY[curEra] > nHeight || ASSETCHAINS_ENDSUBSIDY[curEra] == 0 ) - break; - } - } - if ( curEra > ASSETCHAINS_LASTERA ) - return(0); - - if ( notarycount == 0 ) - { - fprintf(stderr, "komodo_notarypayamount failed num notaries is 0!\n"); - return(0); - } - // Because of reorgs we cannot use the notarized height value. - // We need to basically guess here and just pay some static amount. - // Has the unwanted effect of varying coin emission, but cannot be helped. - //fprintf(stderr, "era.%i paying total of %lu\n",curEra, ASSETCHAINS_NOTARY_PAY[curEra]); - ret = ASSETCHAINS_NOTARY_PAY[curEra] / notarycount; - return(ret); -} - -int32_t komodo_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *script, int32_t len) -{ - // Check the notarisation is valid, and extract notarised height. - uint64_t voutmask; - uint8_t scriptbuf[10001]; - int32_t isratification,specialtx,notarizedheight; - - if ( len >= sizeof(uint32_t) && len <= sizeof(scriptbuf) ) - { - memcpy(scriptbuf,script,len); - if ( komodo_voutupdate(true,&isratification,0,scriptbuf,len,height,uint256(),1,1,&voutmask,&specialtx,¬arizedheight,0,1,0,timestamp) != -2 ) - { - fprintf(stderr, "<<<<< &NotarizationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len) -{ - // fetch notary pubkey array. - uint64_t total = 0, AmountToPay = 0; - int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; - numSN = hush_notaries(notarypubkeys, height, timestamp); - - // No point going further, no notaries can be paid. - if ( notarypubkeys[0][0] == 0 ) - return(0); - - // Check the notarisation is valid. - int32_t notarizedheight = komodo_getnotarizedheight(timestamp, height, script, len); - if ( notarizedheight == 0 ) - return(0); - - // resize coinbase vouts to number of notary nodes +1 for coinbase itself. - txNew.vout.resize(NotarizationNotaries.size()+1); - - // Calcualte the amount to pay according to the current era. - AmountToPay = komodo_notarypayamount(height,NotarizationNotaries.size()); - if ( AmountToPay == 0 ) - return(0); - - // loop over notarisation vins and add transaction to coinbase. - // Commented prints here can be used to verify manually the pubkeys match. - for (int8_t n = 0; n < NotarizationNotaries.size(); n++) - { - uint8_t *ptr; - txNew.vout[n+1].scriptPubKey.resize(35); - ptr = (uint8_t *)&txNew.vout[n+1].scriptPubKey[0]; - ptr[0] = 33; - for (int8_t i=0; i<33; i++) - { - ptr[i+1] = notarypubkeys[NotarizationNotaries[n]][i]; - //fprintf(stderr,"%02x",ptr[i+1]); - } - ptr[34] = OP_CHECKSIG; - //fprintf(stderr," set notary %i PUBKEY33 into vout[%i] amount.%lu\n",NotarizationNotaries[n],n+1,AmountToPay); - txNew.vout[n+1].nValue = AmountToPay; - total += txNew.vout[n+1].nValue; - } - return(total); -} - -bool GetNotarizationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const std::vector &vin, std::vector &NotarizationNotaries) -{ - uint8_t *script; int32_t scriptlen; - if ( notarypubkeys[0][0] == 0 ) - return false; - BOOST_FOREACH(const CTxIn& txin, vin) - { - uint256 hash; CTransaction tx1; - if ( GetTransaction(txin.prevout.hash,tx1,hash,false) ) - { - for (int8_t i = 0; i < numNN; i++) - { - script = (uint8_t *)&tx1.vout[txin.prevout.n].scriptPubKey[0]; - scriptlen = (int32_t)tx1.vout[txin.prevout.n].scriptPubKey.size(); - if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[i],33) == 0 ) - NotarizationNotaries.push_back(i); - } - } else return false; - } - return true; -} - -uint64_t komodo_checknotarypay(CBlock *pblock,int32_t height) -{ - std::vector NotarizationNotaries; uint8_t *script; int32_t scriptlen; - uint64_t timestamp = pblock->nTime; - int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; - numSN = hush_notaries(notarypubkeys, height, timestamp); - if ( !GetNotarizationNotaries(notarypubkeys, numSN, pblock->vtx[1].vin, NotarizationNotaries) ) - return(0); - - // check a notary didnt sign twice (this would be an invalid notarisation later on and cause problems) - std::set checkdupes( NotarizationNotaries.begin(), NotarizationNotaries.end() ); - if ( checkdupes.size() != NotarizationNotaries.size() ) { - fprintf(stderr, "Possible notarisation is signed multiple times by same notary. It is invalid.\n"); - return(0); - } - const CChainParams& chainparams = Params(); - const Consensus::Params &consensusParams = chainparams.GetConsensus(); - uint64_t totalsats = 0; - CMutableTransaction txNew = CreateNewContextualCMutableTransaction(consensusParams, height); - if ( pblock->vtx[1].vout.size() == 2 && pblock->vtx[1].vout[1].nValue == 0 ) - { - // Get the OP_RETURN for the notarisation - uint8_t *script = (uint8_t *)&pblock->vtx[1].vout[1].scriptPubKey[0]; - int32_t scriptlen = (int32_t)pblock->vtx[1].vout[1].scriptPubKey.size(); - if ( script[0] == OP_RETURN ) - { - // Create the coinbase tx again, using the extracted data, this is the same function the miner uses, with the same data. - // This allows us to know exactly that the coinbase is correct. - totalsats = komodo_notarypay(txNew, NotarizationNotaries, pblock->nTime, height, script, scriptlen); - } - else - { - fprintf(stderr, "vout 2 of notarisation is not OP_RETURN scriptlen.%i\n", scriptlen); - return(0); - } - } else return(0); - - // if notarypay fails, because the notarisation is not valid, exit now as txNew was not created. - // This should never happen, as the notarisation is checked before this function is called. - if ( totalsats == 0 ) - { - fprintf(stderr, "notary pay returned 0!\n"); - return(0); - } - - int8_t n = 0, i = 0, matches = 0; - uint64_t total = 0, AmountToPay = 0; - - // get the pay amount from the created tx. - AmountToPay = txNew.vout[1].nValue; - - // Check the created coinbase pays the correct notaries. - BOOST_FOREACH(const CTxOut& txout, pblock->vtx[0].vout) - { - // skip the coinbase paid to the miner. - if ( n == 0 ) - { - n++; - continue; - } - // Check the pubkeys match the pubkeys in the notarisation. - script = (uint8_t *)&txout.scriptPubKey[0]; - scriptlen = (int32_t)txout.scriptPubKey.size(); - if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[NotarizationNotaries[n-1]],33) == 0 ) - { - // check the value is correct - if ( pblock->vtx[0].vout[n].nValue == AmountToPay ) - { - matches++; - total += txout.nValue; - //fprintf(stderr, "MATCHED AmountPaid.%lu notaryid.%i\n",AmountToPay,NotarizationNotaries[n-1]); - } - else fprintf(stderr, "NOT MATCHED AmountPaid.%llu AmountToPay.%llu notaryid.%i\n", (long long)pblock->vtx[0].vout[n].nValue, (long long)AmountToPay, NotarizationNotaries[n-1]); - } - n++; - } - if ( matches != 0 && matches == NotarizationNotaries.size() && totalsats == total ) - { - //fprintf(stderr, "Validated coinbase matches notarisation in tx position 1.\n" ); - return(totalsats); - } - return(0); -} - -bool komodo_appendACscriptpub() -{ - static bool didinit = false; - if ( didinit ) - return didinit; - if ( ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()] == 49 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()-1] == 51 ) - { - CTransaction tx; uint256 blockhash; - // get transaction and check that it occured before height 100. - if ( myGetTransaction(KOMODO_EARLYTXID,tx,blockhash) && mapBlockIndex[blockhash]->GetHeight() < KOMODO_EARLYTXID_HEIGHT ) - { - for (int i = 0; i < tx.vout.size(); i++) - { - if ( tx.vout[i].scriptPubKey[0] == OP_RETURN ) - { - ASSETCHAINS_SCRIPTPUB.pop_back(); ASSETCHAINS_SCRIPTPUB.pop_back(); // remove last 2 chars. - // get OP_RETURN from txid and append the HexStr of it to scriptpub - ASSETCHAINS_SCRIPTPUB.append(HexStr(tx.vout[i].scriptPubKey.begin()+3, tx.vout[i].scriptPubKey.end())); - //fprintf(stderr, "ac_script.%s\n",ASSETCHAINS_SCRIPTPUB.c_str()); - didinit = true; - return true; - } - } - } - fprintf(stderr, "could not get KOMODO_EARLYTXID.%s OP_RETURN data. Restart with correct txid!\n", KOMODO_EARLYTXID.GetHex().c_str()); - StartShutdown(); - } - return false; -} - -void GetKomodoEarlytxidScriptPub() -{ - if ( KOMODO_EARLYTXID == zeroid ) - { - fprintf(stderr, "Restart deamon with -earlytxid.\n"); - StartShutdown(); - return; - } - if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_SNAPSHOT_INTERVAL == 0 ) - { - fprintf(stderr, "Prices->paymentsCC contract must have -ac_snapshot enabled to pay out.\n"); - StartShutdown(); - return; - } - if ( chainActive.Height() < KOMODO_EARLYTXID_HEIGHT ) - { - fprintf(stderr, "Cannot fetch -earlytxid before block %d.\n",KOMODO_EARLYTXID_HEIGHT); - StartShutdown(); - return; - } - CTransaction tx; uint256 blockhash; int32_t i; - // get transaction and check that it occured before height 100. - if ( myGetTransaction(KOMODO_EARLYTXID,tx,blockhash) && mapBlockIndex[blockhash]->GetHeight() < KOMODO_EARLYTXID_HEIGHT ) - { - for (i = 0; i < tx.vout.size(); i++) - if ( tx.vout[i].scriptPubKey[0] == OP_RETURN ) - break; - if ( i < tx.vout.size() ) - { - KOMODO_EARLYTXID_SCRIPTPUB = CScript(tx.vout[i].scriptPubKey.begin()+3, tx.vout[i].scriptPubKey.end()); - fprintf(stderr, "KOMODO_EARLYTXID_SCRIPTPUB.%s\n", HexStr(KOMODO_EARLYTXID_SCRIPTPUB.begin(),KOMODO_EARLYTXID_SCRIPTPUB.end()).c_str()); - return; - } - } - fprintf(stderr, "INVALID -earlytxid, restart daemon with correct txid.\n"); - StartShutdown(); -} - -int64_t komodo_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; - if ( ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD != 0 ) - { - checktoshis = the_commission(pblock,height); - if ( checktoshis >= 10000 && pblock->vtx[0].vout.size() < 2 ) - { - fprintf(stderr,"ERROR: komodo_checkcommission vsize.%d height.%d commission %.8f has checktoshis=%lu <10000 or less than 2 vouts (vouts=%lu)\n",(int32_t)pblock->vtx[0].vout.size(),height,(double)checktoshis/COIN, checktoshis, pblock->vtx[0].vout.size() ); - return(-1); - } - else if ( checktoshis != 0 ) - { - script = (uint8_t *)&pblock->vtx[0].vout[1].scriptPubKey[0]; - scriptlen = (int32_t)pblock->vtx[0].vout[1].scriptPubKey.size(); - if ( fDebug ) - { - int32_t i; - for (i=0; ivtx[0].vout[1].nValue/COIN); - } - if ( ASSETCHAINS_SCRIPTPUB.size() > 1 ) - { - static bool didinit = false; - if ( !didinit && height > KOMODO_EARLYTXID_HEIGHT && KOMODO_EARLYTXID != zeroid && komodo_appendACscriptpub() ) - { - 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) ) - { - decode_hex(scripthex,scriptlen,(char *)ASSETCHAINS_SCRIPTPUB.c_str()); - if ( memcmp(scripthex,script,scriptlen) == 0 ) - matched = scriptlen; - } - } - else if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,ASSETCHAINS_OVERRIDE_PUBKEY33,33) == 0 ) - matched = 35; - else if ( scriptlen == 25 && script[0] == OP_DUP && script[1] == OP_HASH160 && script[2] == 20 && script[23] == OP_EQUALVERIFY && script[24] == OP_CHECKSIG && memcmp(script+3,ASSETCHAINS_OVERRIDE_PUBKEYHASH,20) == 0 ) - matched = 25; - if ( matched == 0 ) - { - if ( 0 && ASSETCHAINS_SCRIPTPUB.size() > 1 ) - { - int32_t i; - for (i=0; ivtx[0].vout[1].nValue != checktoshis ) - { - fprintf(stderr,"ERROR: ht.%d checktoshis %.8f vs actual vout[1] %.8f !!!\n",height,dstr(checktoshis),dstr(pblock->vtx[0].vout[1].nValue)); - return(-1); - } - } - } - if(fDebug) - fprintf(stderr,"%s checktoshis=%li at height=%d\n",__func__,checktoshis, height); - return(checktoshis); -} - -bool KOMODO_TEST_ASSETCHAIN_SKIP_POW = 0; - -int32_t komodo_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; - if ( KOMODO_TEST_ASSETCHAIN_SKIP_POW == 0 && Params().NetworkIDString() == "regtest" ) - KOMODO_TEST_ASSETCHAIN_SKIP_POW = 1; - if ( !CheckEquihashSolution(pblock, Params()) ) - { - fprintf(stderr,"komodo_checkPOW slowflag.%d ht.%d CheckEquihashSolution failed\n",slowflag,height); - return(-1); - } - hash = pblock->GetHash(); - bnTarget.SetCompact(pblock->nBits,&fNegative,&fOverflow); - bhash = UintToArith256(hash); - possible = komodo_block2pubkey33(pubkey33,pblock); - if ( height == 0 ) - { - if ( slowflag != 0 ) - { - fprintf(stderr,"height.%d slowflag.%d possible.%d cmp.%d\n",height,slowflag,possible,bhash > bnTarget); - return(0); - } - BlockMap::const_iterator it = mapBlockIndex.find(pblock->hashPrevBlock); - if ( it != mapBlockIndex.end() && (pprev= it->second) != 0 ) - height = pprev->GetHeight() + 1; - if ( height == 0 ) - return(0); - } - //if ( ASSETCHAINS_ADAPTIVEPOW > 0 ) - // bnTarget = komodo_adaptivepow_target(height,bnTarget,pblock->nTime); - if ( ASSETCHAINS_LWMAPOS != 0 && bhash > bnTarget ) - { - } - if ( (SMART_CHAIN_SYMBOL[0] != 0 || height > 792000) && 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= 2 ) // must PoS or have at least 16x better PoW - { - if ( (is_PoSblock= komodo_is_PoSblock(slowflag,height,pblock,bnTarget,bhash)) == 0 ) - { - if ( slowflag == 0 ) // need all past 100 blocks to calculate PoW target - return(0); - if ( ASSETCHAINS_STAKED == 100 && height > 100 ) // only PoS allowed! POSTEST64 - return(-1); - else - { - bnTarget = komodo_PoWtarget(&PoSperc,bnTarget,height,ASSETCHAINS_STAKED); - if ( bhash > bnTarget && height > 100 ) - { - for (i=31; i>=16; i--) - fprintf(stderr,"%02x",((uint8_t *)&bhash)[i]); - fprintf(stderr," > "); - for (i=31; i>=16; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," ht.%d PoW diff violation PoSperc.%d vs goalperc.%d\n",height,PoSperc,(int32_t)ASSETCHAINS_STAKED); - return(-1); - } - else - { - failed = 0; - CBlockIndex *pindex; - BlockMap::const_iterator it = mapBlockIndex.find(pblock->GetHash()); - pindex = it != mapBlockIndex.end() ? it->second : NULL; - if ( pindex != 0 && pindex->segid == -2 ) { - pindex->segid = -1; - //fprintf(stderr,"PoW block detected set segid.%d <- %d\n",height,pindex->segid); - } - } - } - } - else if ( is_PoSblock < 0 ) - { - fprintf(stderr,"unexpected negative is_PoSblock.%d\n",is_PoSblock); - return(-1); - } - else if ( ASSETCHAINS_STAKED != 0 ) - failed = 0; - } - if ( failed == 0 && ASSETCHAINS_COMMISSION != 0 ) - { - if ( height == 1 ) - { - 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 ( memcmp(scripthex,script,scriptlen) != 0 ) - return(-1); - } else return(-1); - } - else if ( ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 ) - { - script = (uint8_t *)&pblock->vtx[0].vout[0].scriptPubKey[0]; - scriptlen = (int32_t)pblock->vtx[0].vout[0].scriptPubKey.size(); - if ( scriptlen != 35 || script[0] != 33 || script[34] != OP_CHECKSIG || memcmp(script+1,ASSETCHAINS_OVERRIDE_PUBKEY33,33) != 0 ) - return(-1); - } - } - else - { - if ( komodo_checkcommission(pblock,height) < 0 ) - return(-1); - } - } - // Consensus rule to force miners to mine the notary coinbase payment happens in ConnectBlock - // the default daemon miner, checks the actual vins so the only way this will fail, is if someone changes the miner, - // and then creates txs to the crypto address meeting min sigs and puts it in tx position 1. - // If they go through this effort, the block will still fail at connect block, and will be auto purged by the temp file fix. - if ( failed == 0 && ASSETCHAINS_NOTARY_PAY[0] != 0 && pblock->vtx.size() > 1 ) - { - // We check the full validation in ConnectBlock directly to get the amount for coinbase. So just approx here. - if ( slowflag == 0 && pblock->vtx[0].vout.size() > 1 ) - { - // Check the notarisation tx is to the crypto address. - if ( !komodo_is_notarytx(pblock->vtx[1]) == 1 ) - { - fprintf(stderr, "notarisation is not to crypto address ht.%i\n",height); - return(-1); - } - // Check min sigs. - int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; - numSN = hush_notaries(notarypubkeys, height, pblock->nTime); - if ( pblock->vtx[1].vin.size() < numSN/5 ) - { - fprintf(stderr, "ht.%i does not meet minsigs.%i sigs.%lld\n",height,numSN/5,(long long)pblock->vtx[1].vin.size()); - return(-1); - } - } - } - -//fprintf(stderr,"komodo_checkPOW possible.%d slowflag.%d ht.%d notaryid.%d failed.%d\n",possible,slowflag,height,notaryid,failed); - if ( failed != 0 && possible == 0 && notaryid < 0 ) - return(-1); - else return(0); -} - -int32_t komodo_acpublic(uint32_t tiptime) -{ - int32_t acpublic = ASSETCHAINS_PUBLIC; CBlockIndex *pindex; - if ( acpublic == 0 ) - { - if ( tiptime == 0 ) - { - if ( (pindex= chainActive.LastTip()) != 0 ) - tiptime = pindex->nTime; - } - if ( (SMART_CHAIN_SYMBOL[0] == 0 || strcmp(SMART_CHAIN_SYMBOL,"ZEX") == 0) && tiptime >= KOMODO_SAPLING_DEADLINE ) - acpublic = 1; - } - return(acpublic); -} - -int64_t komodo_newcoins(int64_t *zfundsp,int64_t *sproutfundsp,int32_t nHeight,CBlock *pblock) -{ - CTxDestination address; int32_t i,j,m,n,vout; uint8_t *script; uint256 txid,hashBlock; int64_t zfunds=0,vinsum=0,voutsum=0,sproutfunds=0; - n = pblock->vtx.size(); - for (i=0; ivtx[i]; - if ( (m= tx.vin.size()) > 0 ) - { - for (j=0; j= vintx.vout.size() ) - { - fprintf(stderr,"ERROR: %s/v%d cant find\n",txid.ToString().c_str(),vout); - return(0); - } - vinsum += vintx.vout[vout].nValue; - } - } - if ( (m= tx.vout.size()) > 0 ) - { - for (j=0; j %s\n",dstr(tx.vout[j].nValue),CBitcoinAddress(address).ToString().c_str()); - } - script = (uint8_t *)&tx.vout[j].scriptPubKey[0]; - if ( script == 0 || script[0] != 0x6a ) - { - if ( ExtractDestination(tx.vout[j].scriptPubKey,address) != 0 && strcmp("RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPVMY",CBitcoinAddress(address).ToString().c_str()) != 0 ) - voutsum += tx.vout[j].nValue; - } - } - BOOST_FOREACH(const JSDescription& joinsplit, tx.vjoinsplit) - { - zfunds -= joinsplit.vpub_new; - zfunds += joinsplit.vpub_old; - sproutfunds -= joinsplit.vpub_new; - sproutfunds += joinsplit.vpub_old; - } - zfunds -= tx.valueBalance; - } - *zfundsp = zfunds; - *sproutfundsp = sproutfunds; - if ( SMART_CHAIN_SYMBOL[0] == 0 && (voutsum-vinsum) == 100003*SATOSHIDEN ) // 15 times - return(3 * SATOSHIDEN); - //if ( voutsum-vinsum+zfunds > 100000*SATOSHIDEN || voutsum-vinsum+zfunds < 0 ) - //. fprintf(stderr,"ht.%d vins %.8f, vouts %.8f -> %.8f zfunds %.8f\n",nHeight,dstr(vinsum),dstr(voutsum),dstr(voutsum)-dstr(vinsum),dstr(zfunds)); - return(voutsum - vinsum); -} - -int64_t komodo_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height) -{ - CBlockIndex *pindex; CBlock block; int64_t zfunds=0,sproutfunds=0,supply = 0; - //fprintf(stderr,"coinsupply %d\n",height); - *zfundsp = *sproutfundsp = 0; - if ( (pindex= komodo_chainactive(height)) != 0 ) - { - while ( pindex != 0 && pindex->GetHeight() > 0 ) - { - if ( pindex->newcoins == 0 && pindex->zfunds == 0 ) - { - if ( komodo_blockload(block,pindex) == 0 ) - pindex->newcoins = komodo_newcoins(&pindex->zfunds,&pindex->sproutfunds,pindex->GetHeight(),&block); - else - { - fprintf(stderr,"error loading block.%d\n",pindex->GetHeight()); - return(0); - } - } - supply += pindex->newcoins; - zfunds += pindex->zfunds; - sproutfunds += pindex->sproutfunds; - //printf("start ht.%d new %.8f -> supply %.8f zfunds %.8f -> %.8f\n",pindex->GetHeight(),dstr(pindex->newcoins),dstr(supply),dstr(pindex->zfunds),dstr(zfunds)); - pindex = pindex->pprev; - } - } - *zfundsp = zfunds; - *sproutfundsp = sproutfunds; - return(supply); -} -struct komodo_staking -{ - char address[64]; - uint256 txid; - arith_uint256 hashval; - uint64_t nValue; - uint32_t segid32,txtime; - int32_t vout; - CScript scriptPubKey; -}; - -struct komodo_staking *komodo_addutxo(struct komodo_staking *array,int32_t *numkp,int32_t *maxkp,uint32_t txtime,uint64_t nValue,uint256 txid,int32_t vout,char *address,uint8_t *hashbuf,CScript pk) -{ - uint256 hash; uint32_t segid32; struct komodo_staking *kp; - segid32 = komodo_stakehash(&hash,address,hashbuf,txid,vout); - if ( *numkp >= *maxkp ) - { - *maxkp += 1000; - array = (struct komodo_staking *)realloc(array,sizeof(*array) * (*maxkp)); - //fprintf(stderr,"realloc max.%d array.%p\n",*maxkp,array); - } - kp = &array[(*numkp)++]; - //fprintf(stderr,"kp.%p num.%d\n",kp,*numkp); - memset(kp,0,sizeof(*kp)); - strcpy(kp->address,address); - kp->txid = txid; - kp->vout = vout; - kp->hashval = UintToArith256(hash); - kp->txtime = txtime; - kp->segid32 = segid32; - kp->nValue = nValue; - kp->scriptPubKey = pk; - return(array); -} diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 5815974a7..85bb80c9f 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "clientversion.h" #include "rpc/server.h" #include "init.h" @@ -61,7 +59,6 @@ extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; extern int32_t ASSETCHAINS_BLOCKTIME; extern uint64_t ASSETCHAINS_CBOPRET; void hush_passport_iteration(); -uint64_t komodo_interestsum(); int32_t hush_longestchain(); void komodo_cbopretupdate(int32_t forceflag); CBlockIndex *komodo_chainactive(int32_t height); @@ -90,7 +87,6 @@ void WaitForShutdown(boost::thread_group* threadGroup) MilliSleep(1000); } } else { - //komodo_interestsum(); //hush_longestchain(); if ( ASSETCHAINS_CBOPRET != 0 ) komodo_cbopretupdate(0); diff --git a/src/cc/CCImportGateway.h b/src/cc/CCImportGateway.h index 9be54f23a..26585342a 100644 --- a/src/cc/CCImportGateway.h +++ b/src/cc/CCImportGateway.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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-2018 The SuperNET Developers. * * * @@ -34,4 +37,4 @@ UniValue ImportGatewayExternalAddress(uint256 bindtxid,CPubKey pubkey); UniValue ImportGatewayDumpPrivKey(uint256 bindtxid,CKey key); UniValue ImportGatewayList(); UniValue ImportGatewayInfo(uint256 bindtxid); -#endif \ No newline at end of file +#endif diff --git a/src/cc/CCMarmara.h b/src/cc/CCMarmara.h index 85f9175d1..5fe03b992 100644 --- a/src/cc/CCMarmara.h +++ b/src/cc/CCMarmara.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCOracles.h b/src/cc/CCOracles.h index 10dbfae97..25a1f9abf 100644 --- a/src/cc/CCOracles.h +++ b/src/cc/CCOracles.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCPayments.h b/src/cc/CCPayments.h index ac5f22c47..47b840979 100644 --- a/src/cc/CCPayments.h +++ b/src/cc/CCPayments.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCPegs.h b/src/cc/CCPegs.h index 78f1accac..929921659 100644 --- a/src/cc/CCPegs.h +++ b/src/cc/CCPegs.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCPrices.h b/src/cc/CCPrices.h index c850ebf85..f82f7d550 100644 --- a/src/cc/CCPrices.h +++ b/src/cc/CCPrices.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCassets.h b/src/cc/CCassets.h index 7b31c094d..66729419a 100644 --- a/src/cc/CCassets.h +++ b/src/cc/CCassets.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCassetsCore.cpp b/src/cc/CCassetsCore.cpp index 06d843b40..1dc41484f 100644 --- a/src/cc/CCassetsCore.cpp +++ b/src/cc/CCassetsCore.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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-2018 The SuperNET Developers. * * * diff --git a/src/cc/CCassetstx.cpp b/src/cc/CCassetstx.cpp index 654f01a38..17f0f54b2 100644 --- a/src/cc/CCassetstx.cpp +++ b/src/cc/CCassetstx.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCauction.h b/src/cc/CCauction.h index cfcd615cc..73b19a176 100644 --- a/src/cc/CCauction.h +++ b/src/cc/CCauction.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCchannels.h b/src/cc/CCchannels.h index ecca145d3..8ce065518 100644 --- a/src/cc/CCchannels.h +++ b/src/cc/CCchannels.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCcustom.cpp b/src/cc/CCcustom.cpp index 18ee98a7b..5a262f75d 100644 --- a/src/cc/CCcustom.cpp +++ b/src/cc/CCcustom.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCdice.h b/src/cc/CCdice.h index 363aad735..6b9528ec5 100644 --- a/src/cc/CCdice.h +++ b/src/cc/CCdice.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCfsm.h b/src/cc/CCfsm.h index 2bce35597..7abab91ec 100644 --- a/src/cc/CCfsm.h +++ b/src/cc/CCfsm.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CClotto.h b/src/cc/CClotto.h index 2f0595371..daff4a1db 100644 --- a/src/cc/CClotto.h +++ b/src/cc/CClotto.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCrewards.h b/src/cc/CCrewards.h index d9f9edf6e..2d1d65ea0 100644 --- a/src/cc/CCrewards.h +++ b/src/cc/CCrewards.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCtokens.cpp b/src/cc/CCtokens.cpp index 835ce6f3b..105d6d4c2 100644 --- a/src/cc/CCtokens.cpp +++ b/src/cc/CCtokens.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCtokens.h b/src/cc/CCtokens.h index 3705a8f6d..5f5f763ea 100644 --- a/src/cc/CCtokens.h +++ b/src/cc/CCtokens.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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-2018 The SuperNET Developers. * * * diff --git a/src/cc/CCtokenutils.cpp b/src/cc/CCtokenutils.cpp index 73209bcb5..04ee831d2 100644 --- a/src/cc/CCtokenutils.cpp +++ b/src/cc/CCtokenutils.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/CCtx.cpp b/src/cc/CCtx.cpp index 26d338cec..8cb543771 100644 --- a/src/cc/CCtx.cpp +++ b/src/cc/CCtx.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * @@ -850,4 +853,4 @@ void AddSigData2UniValue(UniValue &sigdata, int32_t vini, UniValue& ccjson, std: elem.push_back(Pair("scriptPubKey", sscriptpubkey)); elem.push_back(Pair("amount", amount)); sigdata.push_back(elem); -} \ No newline at end of file +} diff --git a/src/cc/CCutilbits.cpp b/src/cc/CCutilbits.cpp index c43944144..243bf5124 100644 --- a/src/cc/CCutilbits.cpp +++ b/src/cc/CCutilbits.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/COptCCParams.cpp b/src/cc/COptCCParams.cpp index 41c9ba874..09d77761e 100644 --- a/src/cc/COptCCParams.cpp +++ b/src/cc/COptCCParams.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /*Descriptson and examples of COptCCParams class found in: script/standard.h/cpp class COptCCParams diff --git a/src/cc/assets.cpp b/src/cc/assets.cpp index d46664c59..1be919a91 100644 --- a/src/cc/assets.cpp +++ b/src/cc/assets.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/auction.cpp b/src/cc/auction.cpp index 88d5134af..0f05e10f4 100644 --- a/src/cc/auction.cpp +++ b/src/cc/auction.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/betprotocol.cpp b/src/cc/betprotocol.cpp index b117ad104..694469ec5 100644 --- a/src/cc/betprotocol.cpp +++ b/src/cc/betprotocol.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/betprotocol.h b/src/cc/betprotocol.h index 688db370f..a72b7a6c5 100644 --- a/src/cc/betprotocol.h +++ b/src/cc/betprotocol.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/channels.cpp b/src/cc/channels.cpp index 4d6299f4f..5302eb355 100644 --- a/src/cc/channels.cpp +++ b/src/cc/channels.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/customcc.cpp b/src/cc/customcc.cpp index 669da14ae..723783be0 100644 --- a/src/cc/customcc.cpp +++ b/src/cc/customcc.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* simple stub custom cc diff --git a/src/cc/customcc.h b/src/cc/customcc.h index 436937391..e15655953 100644 --- a/src/cc/customcc.h +++ b/src/cc/customcc.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* to create a custom libcc.so: diff --git a/src/cc/dapps/dappinc.h b/src/cc/dapps/dappinc.h index 6a95adb29..3160d4d74 100644 --- a/src/cc/dapps/dappinc.h +++ b/src/cc/dapps/dappinc.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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-2020 The SuperNET Developers. * * * @@ -12,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include #include #include @@ -330,20 +332,17 @@ int md_unlink(char *file) char *REFCOIN_CLI,DPOW_pubkeystr[67],DPOW_secpkeystr[67],DPOW_handle[67],DPOW_recvaddr[64],DPOW_recvZaddr[128]; -cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char *arg0,char *arg1,char *arg2,char *arg3,char *arg4,char *arg5,char *arg6) +cJSON *get_hushcli(char *refcoin,char **retstrp,char *acname,char *method,char *arg0,char *arg1,char *arg2,char *arg3,char *arg4,char *arg5,char *arg6) { long fsize; cJSON *retjson = 0; char cmdstr[32768],*jsonstr,fname[32768]; sprintf(fname,"/tmp/notarizer_%s_%d",method,(rand() >> 17) % 10000); - //if ( (acname == 0 || acname[0] == 0) && strcmp(refcoin,"KMD") != 0 ) - // acname = refcoin; - if ( acname[0] != 0 ) - { - if ( refcoin[0] != 0 && strcmp(refcoin,"KMD") != 0 && strcmp(refcoin,acname) != 0 ) + if ( acname[0] != 0 ) { + if ( refcoin[0] != 0 && strcmp(refcoin,"HUSH3") != 0 && strcmp(refcoin,acname) != 0 ) printf("unexpected: refcoin.(%s) acname.(%s)\n",refcoin,acname); - sprintf(cmdstr,"komodo-cli -ac_name=%s %s %s %s %s %s %s %s %s > %s\n",acname,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); + sprintf(cmdstr,"hush-smart-chain -ac_name=%s %s %s %s %s %s %s %s %s > %s\n",acname,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); } - else if ( strcmp(refcoin,"KMD") == 0 ) - sprintf(cmdstr,"komodo-cli %s %s %s %s %s %s %s %s > %s\n",method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); + else if ( strcmp(refcoin,"HUSH3") == 0 ) + sprintf(cmdstr,"hush-cli %s %s %s %s %s %s %s %s > %s\n",method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); else if ( REFCOIN_CLI != 0 && REFCOIN_CLI[0] != 0 ) { sprintf(cmdstr,"%s %s %s %s %s %s %s %s %s > %s\n",REFCOIN_CLI,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname); @@ -391,7 +390,7 @@ bits256 komodobroadcast(char *refcoin,char *acname,cJSON *hexjson) memset(txid.bytes,0,sizeof(txid)); if ( (hexstr= jstr(hexjson,"hex")) != 0 ) { - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"sendrawtransaction",hexstr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"sendrawtransaction",hexstr,"","","","","","")) != 0 ) { //fprintf(stderr,"broadcast.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -415,7 +414,7 @@ bits256 sendtoaddress(char *refcoin,char *acname,char *destaddr,int64_t satoshis char numstr[32],*retstr,str[65]; cJSON *retjson; bits256 txid; memset(txid.bytes,0,sizeof(txid)); sprintf(numstr,"%.8f",(double)satoshis/SATOSHIDEN); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"sendtoaddress",destaddr,numstr,"false","","",oprethexstr,"")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"sendtoaddress",destaddr,numstr,"false","","",oprethexstr,"")) != 0 ) { fprintf(stderr,"unexpected sendrawtransaction json.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -438,7 +437,7 @@ bits256 tokentransfer(char *refcoin,char *acname,char *tokenid,char *destpub,int char numstr[32],*retstr,str[65]; cJSON *retjson; bits256 txid; memset(txid.bytes,0,sizeof(txid)); sprintf(numstr,"%llu",(long long)units); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"tokentransfer",tokenid,destpub,numstr,"","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"tokentransfer",tokenid,destpub,numstr,"","","","")) != 0 ) { txid = komodobroadcast(refcoin,acname,retjson); fprintf(stderr,"tokentransfer returned (%s)\n",jprint(retjson,0)); @@ -456,7 +455,7 @@ char *get_tokenaddress(char *refcoin,char *acname,char *tokenaddr) { char *retstr,*str; cJSON *retjson; tokenaddr[0] = 0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"tokenaddress","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"tokenaddress","","","","","","","")) != 0 ) { if ( (str= jstr(retjson,"myCCAddress(Tokens)")) != 0 ) { @@ -478,7 +477,7 @@ char *get_tokenaddress(char *refcoin,char *acname,char *tokenaddr) int64_t get_tokenbalance(char *refcoin,char *acname,char *tokenid) { cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"tokenbalance",tokenid,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"tokenbalance",tokenid,"","","","","","")) != 0 ) { amount = j64bits(retjson,"balance"); fprintf(stderr,"tokenbalance %llu\n",(long long)amount); @@ -495,7 +494,7 @@ int64_t get_tokenbalance(char *refcoin,char *acname,char *tokenid) cJSON *get_decodescript(char *refcoin,char *acname,char *script) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"decodescript",script,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"decodescript",script,"","","","","","")) != 0 ) { return(retjson); } @@ -514,7 +513,7 @@ char *get_createmultisig2(char *refcoin,char *acname,char *msigaddr,char *redeem msigaddr[0] = 0; redeemscript[0] = 0; sprintf(params,"'[\"%s\", \"%s\"]'",pubkeyA,pubkeyB); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"createmultisig","2",params,"","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"createmultisig","2",params,"","","","","")) != 0 ) { if ( (str= jstr(retjson,"address")) != 0 ) strcpy(msigaddr,str); @@ -536,7 +535,7 @@ char *get_createmultisig2(char *refcoin,char *acname,char *msigaddr,char *redeem int32_t get_coinheight(char *refcoin,char *acname,bits256 *blockhashp) { cJSON *retjson; char *retstr; int32_t height=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockchaininfo","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getblockchaininfo","","","","","","","")) != 0 ) { height = jint(retjson,"blocks"); *blockhashp = jbits256(retjson,"bestblockhash"); @@ -555,7 +554,7 @@ bits256 get_coinblockhash(char *refcoin,char *acname,int32_t height) cJSON *retjson; char *retstr,heightstr[32]; bits256 hash; memset(hash.bytes,0,sizeof(hash)); sprintf(heightstr,"%d",height); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockhash",heightstr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getblockhash",heightstr,"","","","","","")) != 0 ) { fprintf(stderr,"unexpected blockhash json.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -577,7 +576,7 @@ bits256 get_coinmerkleroot(char *refcoin,char *acname,bits256 blockhash,uint32_t cJSON *retjson; char *retstr,str[65]; bits256 merkleroot; memset(merkleroot.bytes,0,sizeof(merkleroot)); *blocktimep = 0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockheader",bits256_str(str,blockhash),"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getblockheader",bits256_str(str,blockhash),"","","","","","")) != 0 ) { merkleroot = jbits256(retjson,"merkleroot"); *blocktimep = juint(retjson,"time"); @@ -624,7 +623,7 @@ int32_t get_coinheader(char *refcoin,char *acname,bits256 *blockhashp,bits256 *m cJSON *get_rawmempool(char *refcoin,char *acname) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getrawmempool","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getrawmempool","","","","","","","")) != 0 ) { //printf("mempool.(%s)\n",jprint(retjson,0)); return(retjson); @@ -643,7 +642,7 @@ cJSON *get_addressutxos(char *refcoin,char *acname,char *coinaddr) if ( refcoin[0] != 0 && strcmp(refcoin,"KMD") != 0 ) printf("warning: assumes %s has addressindex enabled\n",refcoin); sprintf(jsonbuf,"{\\\"addresses\\\":[\\\"%s\\\"]}",coinaddr); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getaddressutxos",jsonbuf,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getaddressutxos",jsonbuf,"","","","","","")) != 0 ) { //printf("addressutxos.(%s)\n",jprint(retjson,0)); return(retjson); @@ -659,7 +658,7 @@ cJSON *get_addressutxos(char *refcoin,char *acname,char *coinaddr) cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getrawtransaction",bits256_str(str,txid),"1","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getrawtransaction",bits256_str(str,txid),"1","","","","","")) != 0 ) { return(retjson); } @@ -674,7 +673,7 @@ cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) cJSON *get_z_viewtransaction(char *refcoin,char *acname,bits256 txid) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_viewtransaction",bits256_str(str,txid),"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_viewtransaction",bits256_str(str,txid),"","","","","","")) != 0 ) { return(retjson); } @@ -689,7 +688,7 @@ cJSON *get_z_viewtransaction(char *refcoin,char *acname,bits256 txid) cJSON *get_listunspent(char *refcoin,char *acname) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"listunspent","","","","","","","")) != 0 ) { return(retjson); } @@ -704,7 +703,7 @@ cJSON *get_listunspent(char *refcoin,char *acname) cJSON *get_getinfo(char *refcoin,char *acname) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getinfo","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getinfo","","","","","","","")) != 0 ) { return(retjson); } @@ -719,7 +718,7 @@ cJSON *get_getinfo(char *refcoin,char *acname) cJSON *z_listunspent(char *refcoin,char *acname) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_listunspent","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_listunspent","","","","","","","")) != 0 ) { return(retjson); } @@ -734,7 +733,7 @@ cJSON *z_listunspent(char *refcoin,char *acname) cJSON *z_listoperationids(char *refcoin,char *acname) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_listoperationids","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_listoperationids","","","","","","","")) != 0 ) { return(retjson); } @@ -750,7 +749,7 @@ cJSON *z_getoperationstatus(char *refcoin,char *acname,char *opid) { cJSON *retjson; char *retstr,str[65],params[512]; sprintf(params,"'[\"%s\"]'",opid); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_getoperationstatus",params,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_getoperationstatus",params,"","","","","","")) != 0 ) { //printf("got status (%s)\n",jprint(retjson,0)); return(retjson); @@ -767,7 +766,7 @@ cJSON *z_getoperationresult(char *refcoin,char *acname,char *opid) { cJSON *retjson; char *retstr,str[65],params[512]; sprintf(params,"'[\"%s\"]'",opid); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_getoperationresult",params,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_getoperationresult",params,"","","","","","")) != 0 ) { return(retjson); } @@ -782,7 +781,7 @@ cJSON *z_getoperationresult(char *refcoin,char *acname,char *opid) int32_t validateaddress(char *refcoin,char *acname,char *depositaddr, char* compare) { cJSON *retjson; char *retstr; int32_t res=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"validateaddress",depositaddr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"validateaddress",depositaddr,"","","","","","")) != 0 ) { if (is_cJSON_True(jobj(retjson,compare)) != 0 ) res=1; free_json(retjson); @@ -798,7 +797,7 @@ int32_t validateaddress(char *refcoin,char *acname,char *depositaddr, char* comp int32_t z_validateaddress(char *refcoin,char *acname,char *depositaddr, char *compare) { cJSON *retjson; char *retstr; int32_t res=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_validateaddress",depositaddr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_validateaddress",depositaddr,"","","","","","")) != 0 ) { if (is_cJSON_True(jobj(retjson,compare)) != 0 ) res=1; @@ -815,7 +814,7 @@ int32_t z_validateaddress(char *refcoin,char *acname,char *depositaddr, char *co int64_t get_getbalance(char *refcoin,char *acname) { cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getbalance","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getbalance","","","","","","","")) != 0 ) { fprintf(stderr,"get_getbalance.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -835,7 +834,7 @@ int64_t get_getbalance(char *refcoin,char *acname) int64_t z_getbalance(char *refcoin,char *acname,char *coinaddr) { cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_getbalance",coinaddr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_getbalance",coinaddr,"","","","","","")) != 0 ) { fprintf(stderr,"z_getbalance.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -856,7 +855,7 @@ int32_t z_exportkey(char *privkey,char *refcoin,char *acname,char *zaddr) { cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0; privkey[0] = 0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_exportkey",zaddr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_exportkey",zaddr,"","","","","","")) != 0 ) { fprintf(stderr,"z_exportkey.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -875,7 +874,7 @@ int32_t z_exportkey(char *privkey,char *refcoin,char *acname,char *zaddr) int32_t getnewaddress(char *coinaddr,char *refcoin,char *acname) { cJSON *retjson; char *retstr; int64_t amount=0; int32_t retval = -1; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getnewaddress","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"getnewaddress","","","","","","","")) != 0 ) { fprintf(stderr,"getnewaddress.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -892,7 +891,7 @@ int32_t getnewaddress(char *coinaddr,char *refcoin,char *acname) int32_t z_getnewaddress(char *coinaddr,char *refcoin,char *acname,char *typestr) { cJSON *retjson; char *retstr; int64_t amount=0; int32_t retval = -1; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"z_getnewaddress",typestr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"z_getnewaddress",typestr,"","","","","","")) != 0 ) { fprintf(stderr,"z_getnewaddress.(%s) %s returned json!\n",refcoin,acname); free_json(retjson); @@ -964,7 +963,7 @@ int64_t find_sprout_amount(char *coinstr,char *zcaddr) void importaddress(char *refcoin,char *acname,char *depositaddr) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"importaddress",depositaddr,"","true","","","","")) != 0 ) + if ( (retjson= get_hushcli(refcoin,&retstr,acname,"importaddress",depositaddr,"","true","","","","")) != 0 ) { printf("importaddress.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -982,7 +981,7 @@ int32_t z_sendmany(char *opidstr,char *coinstr,char *acname,char *srcaddr,char * sprintf(params,"'[{\"address\":\"%s\",\"amount\":%.8f,\"memo\":\"%s\"}]'",destaddr,dstr(amount),memostr); sprintf(addr,"\"%s\"",srcaddr); printf("z_sendmany.(%s %s) from.(%s) -> %s\n",coinstr,acname,srcaddr,params); - if ( (retjson= get_komodocli(coinstr,&retstr,acname,"z_sendmany",addr,params,"","","","","")) != 0 ) + if ( (retjson= get_hushcli(coinstr,&retstr,acname,"z_sendmany",addr,params,"","","","","")) != 0 ) { printf("unexpected json z_sendmany.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -1001,7 +1000,7 @@ int32_t z_mergetoaddress(char *opidstr,char *coinstr,char *acname,char *destaddr { cJSON *retjson; char *retstr,addr[128],*opstr; int32_t retval = -1; sprintf(addr,"[\\\"ANY_SPROUT\\\"]"); - if ( (retjson= get_komodocli(coinstr,&retstr,acname,"z_mergetoaddress",addr,destaddr,"","","","","")) != 0 ) + if ( (retjson= get_hushcli(coinstr,&retstr,acname,"z_mergetoaddress",addr,destaddr,"","","","","")) != 0 ) { if ( (opstr= jstr(retjson,"opid")) != 0 ) strcpy(opidstr,opstr); @@ -1207,7 +1206,7 @@ int32_t txid_in_vins(char *refcoin,bits256 txid,bits256 cmptxid) int32_t dpow_pubkey() { char *pstr,*retstr,*str; cJSON *retjson; int32_t retval = -1; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_stats","","","","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_stats","","","","","","","")) != 0 ) { if ( (pstr= jstr(retjson,"publishable_pubkey")) != 0 && strlen(pstr) == 66 ) { @@ -1235,7 +1234,7 @@ cJSON *dpow_get(uint32_t shorthash) { cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",shorthash); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_get",numstr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_get",numstr,"","","","","","")) != 0 ) { //printf("DEX_get.(%s)\n",jprint(retjson,0)); if ( juint(retjson,"cancelled") != 0 ) @@ -1257,7 +1256,7 @@ cJSON *dpow_cancel(uint32_t shorthash) { cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",shorthash); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_cancel",numstr,"","","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_cancel",numstr,"","","","","","")) != 0 ) { //printf("DEX_cancel.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1274,7 +1273,7 @@ cJSON *dpow_notarize(char *coin,int32_t height) { cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",height); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_notarize",coin,numstr,"","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_notarize",coin,numstr,"","","","","")) != 0 ) { //printf("DEX_notarize.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1292,7 +1291,7 @@ cJSON *dpow_broadcast(int32_t priority,char *hexstr,char *tagA,char *tagB,char * cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",priority); //fprintf(stderr,"broadcast (%s) (%s) (%s) (%s) (%s) [%s %s]\n",hexstr,numstr,tagA,tagB,pubkey,volA,volB); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_broadcast",hexstr,numstr,tagA,tagB,pubkey,volA,volB)) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_broadcast",hexstr,numstr,tagA,tagB,pubkey,volA,volB)) != 0 ) { //fprintf(stderr,"DEX_broadcast.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1310,7 +1309,7 @@ cJSON *dpow_publish(int32_t priority,char *filename) cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",priority); //fprintf(stderr,"broadcast (%s) (%s) (%s) (%s) (%s) [%s %s]\n",hexstr,numstr,tagA,tagB,pubkey,volA,volB); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_publish",filename,numstr,"0","","","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_publish",filename,numstr,"0","","","","")) != 0 ) { //fprintf(stderr,"DEX_broadcast.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1328,7 +1327,7 @@ cJSON *dpow_subscribe(int32_t priority,char *filename,char *publisher) cJSON *retjson; char *retstr,numstr[32]; sprintf(numstr,"%u",priority); //fprintf(stderr,"broadcast (%s) (%s) (%s) (%s) (%s) [%s %s]\n",hexstr,numstr,tagA,tagB,pubkey,volA,volB); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_subscribe",filename,numstr,"0",publisher,"","","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_subscribe",filename,numstr,"0",publisher,"","","")) != 0 ) { //fprintf(stderr,"DEX_broadcast.(%s)\n",jprint(retjson,0)); return(retjson); @@ -1355,7 +1354,7 @@ bits256 dpow_ntzhash(char *coin,int32_t *prevntzheightp,uint32_t *prevntztimep) memset(&ntzhash,0,sizeof(ntzhash)); *prevntzheightp = 0; *prevntztimep = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",coin,"notarizations",DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",coin,"notarizations",DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1378,7 +1377,7 @@ bits256 dpow_ntzhash(char *coin,int32_t *prevntzheightp,uint32_t *prevntztimep) int32_t dpow_getmessage(char *payload,int32_t maxsize,char *tagA,char *tagB,char *pubkeystr) { cJSON *retjson,*item,*array; char *retstr,*pstr; int32_t i,n,retval = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,tagB,pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,tagB,pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1402,7 +1401,7 @@ int32_t dpow_getmessage(char *payload,int32_t maxsize,char *tagA,char *tagB,char int32_t dpow_hasmessage(char *payload,char *tagA,char *tagB,char *pubkeystr) { cJSON *retjson,*item,*array; char *retstr,*pstr; int32_t i,n,retval = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,tagB,pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,tagB,pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1425,7 +1424,7 @@ int32_t dpow_hasmessage(char *payload,char *tagA,char *tagB,char *pubkeystr) int32_t dpow_pubkeyregister(int32_t priority) { cJSON *retjson,*array,*item; char *retstr,*pstr=0; int32_t i,n=0,len; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",(char *)"handles",DPOW_handle,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",(char *)"handles",DPOW_handle,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1449,7 +1448,7 @@ int32_t dpow_tokenregister(char *existing,int32_t priority,char *token_name,char { cJSON *retjson,*array,*item; char *retstr,*pstr=0; int32_t i,n=0,len; existing[0] = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",(char *)"tokens",token_name,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",(char *)"tokens",token_name,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1475,7 +1474,7 @@ int32_t dpow_tokenregister(char *existing,int32_t priority,char *token_name,char return(0); } -/*bits256 komodo_DEX_filehash(FILE *fp,uint64_t offset0,uint64_t rlen,char *fname) +/*bits256 hush_DEX_filehash(FILE *fp,uint64_t offset0,uint64_t rlen,char *fname) { bits256 filehash; uint8_t *data = (uint8_t *)calloc(1,rlen); fseek(fp,offset0,SEEK_SET); @@ -1501,7 +1500,7 @@ int32_t dpow_fileregister(char *existing,int32_t priority,char *fname,char *coin fclose(fp); } else return(-1); sprintf(tagA,"'#%s'",fname); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,coin,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",tagA,coin,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1536,7 +1535,7 @@ bits256 dpow_blockhash(char *coin,int32_t height) cJSON *retjson,*array,*item; char *retstr,*pstr=0,numstr[32]; int32_t i,n=0,len; bits256 hash; memset(hash.bytes,0,sizeof(hash)); sprintf(numstr,"%d",height); - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",coin,numstr,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list","0","0",coin,numstr,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 ) { @@ -1564,7 +1563,7 @@ struct inboxinfo **dpow_inboxcheck(int32_t *nump,uint32_t *stopatp,char *tagB) cJSON *retjson,*array,*item; struct inboxinfo **ptrs=0; char *senderpub,*retstr,*ptr,*pstr=0,stopstr[32]; int32_t i,j,n,m=0,len; sprintf(stopstr,"%u",*stopatp); *nump = 0; - if ( (retjson= get_komodocli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list",stopstr,"0",(char *)"inbox",tagB,DPOW_pubkeystr,"","")) != 0 ) + if ( (retjson= get_hushcli((char *)"",&retstr,DEXP2P_CHAIN,"DEX_list",stopstr,"0",(char *)"inbox",tagB,DPOW_pubkeystr,"","")) != 0 ) { if ( (array= jarray(&n,retjson,"matches")) != 0 && n > 0 ) { @@ -1596,5 +1595,3 @@ struct inboxinfo **dpow_inboxcheck(int32_t *nump,uint32_t *stopatp,char *tagB) } return(ptrs); } - - diff --git a/src/cc/dapps/dappstd.c b/src/cc/dapps/dappstd.c index 7bb52b982..b202b3373 100644 --- a/src/cc/dapps/dappstd.c +++ b/src/cc/dapps/dappstd.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/dapps/hushdex.c b/src/cc/dapps/hushdex.c index 1f75e6abf..cd13c6fbc 100644 --- a/src/cc/dapps/hushdex.c +++ b/src/cc/dapps/hushdex.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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-2020 The SuperNET Developers. * * * diff --git a/src/cc/dapps/zmigrate.c b/src/cc/dapps/zmigrate.c index f7d9e3feb..ac4789683 100644 --- a/src/cc/dapps/zmigrate.c +++ b/src/cc/dapps/zmigrate.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index d30abc269..d1d822c7f 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/dilithium.c b/src/cc/dilithium.c index afeef33d9..82c791c04 100644 --- a/src/cc/dilithium.c +++ b/src/cc/dilithium.c @@ -1,3 +1,7 @@ +// Copyright (c) 2016-2020 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 + /* Based on the public domain implementation in * crypto_hash/keccakc512/simple/ from http://bench.cr.yp.to/supercop.html * by Ronny Van Keer @@ -11,8 +15,6 @@ #define DBENCH_STOP(arg) #include "dilithium.h" - - #define NROUNDS 24 #define ROL(a, offset) ((a << offset) ^ (a >> (64-offset))) diff --git a/src/cc/dilithium.h b/src/cc/dilithium.h index e16010a45..605082d99 100644 --- a/src/cc/dilithium.h +++ b/src/cc/dilithium.h @@ -1,143 +1,20 @@ +// Copyright (c) 2016-2020 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 #include -/* -#ifndef CPUCYCLES_H -#define CPUCYCLES_H - -#ifdef DBENCH -#define DBENCH_START() uint64_t time = cpucycles_start() -#define DBENCH_STOP(t) t += cpucycles_stop() - time - timing_overhead -#else -#define DBENCH_START() -#define DBENCH_STOP(t) -#endif - -#ifdef USE_RDPMC // Needs echo 2 > /sys/devices/cpu/rdpmc -#ifdef SERIALIZE_RDC - -static inline uint64_t cpucycles_start(void) { - const uint32_t ecx = (1U << 30) + 1; - uint64_t result; - - asm volatile("cpuid; movl %1,%%ecx; rdpmc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=&a" (result) : "r" (ecx) : "rbx", "rcx", "rdx"); - - return result; -} - -static inline uint64_t cpucycles_stop(void) { - const uint32_t ecx = (1U << 30) + 1; - uint64_t result, dummy; - - asm volatile("rdpmc; shlq $32,%%rdx; orq %%rdx,%%rax; movq %%rax,%0; cpuid" - : "=&r" (result), "=c" (dummy) : "c" (ecx) : "rax", "rbx", "rdx"); - - return result; -} - -#else - -static inline uint64_t cpucycles_start(void) { - const uint32_t ecx = (1U << 30) + 1; - uint64_t result; - - asm volatile("rdpmc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : "c" (ecx) : "rdx"); - - return result; -} - -static inline uint64_t cpucycles_stop(void) { - const uint32_t ecx = (1U << 30) + 1; - uint64_t result; - - asm volatile("rdpmc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : "c" (ecx) : "rdx"); - - return result; -} - -#endif -#else -#ifdef SERIALIZE_RDC - -static inline uint64_t cpucycles_start(void) { - uint64_t result; - - asm volatile("cpuid; rdtsc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : : "%rbx", "%rcx", "%rdx"); - - return result; -} - -static inline uint64_t cpucycles_stop(void) { - uint64_t result; - - asm volatile("rdtscp; shlq $32,%%rdx; orq %%rdx,%%rax; mov %%rax,%0; cpuid" - : "=r" (result) : : "%rax", "%rbx", "%rcx", "%rdx"); - - return result; -} - -#else - -static inline uint64_t cpucycles_start(void) { - uint64_t result; - - asm volatile("rdtsc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : : "%rdx"); - - return result; -} - -static inline uint64_t cpucycles_stop(void) { - uint64_t result; - - asm volatile("rdtsc; shlq $32,%%rdx; orq %%rdx,%%rax" - : "=a" (result) : : "%rdx"); - - return result; -} - -#endif -#endif - -int64_t cpucycles_overhead(void); - -#endif*/ - -#ifndef FIPS202_H -#define FIPS202_H - +#ifndef HUSH_DILITHIUM_H +#define HUSH_DILITHIUM_H #define SHAKE128_RATE 168 #define SHAKE256_RATE 136 -void shake128_absorb(uint64_t *s, - const uint8_t *input, - int32_t inlen); - -void shake128_squeezeblocks(uint8_t *output, - int32_t nblocks, - uint64_t *s); - -void shake256_absorb(uint64_t *s, - const uint8_t *input, - int32_t inlen); - -void shake256_squeezeblocks(uint8_t *output, - int32_t nblocks, - uint64_t *s); - -void shake128(uint8_t *output, - int32_t outlen, - const uint8_t *input, - int32_t inlen); - -void shake256(uint8_t *output, - int32_t outlen, - const uint8_t *input, - int32_t inlen); +void shake128_absorb(uint64_t *s, const uint8_t *input, int32_t inlen); +void shake128_squeezeblocks(uint8_t *output, int32_t nblocks, uint64_t *s); +void shake256_absorb(uint64_t *s, const uint8_t *input, int32_t inlen); +void shake256_squeezeblocks(uint8_t *output, int32_t nblocks, uint64_t *s); +void shake128(uint8_t *output, int32_t outlen, const uint8_t *input, int32_t inlen); +void shake256(uint8_t *output, int32_t outlen, const uint8_t *input, int32_t inlen); #endif @@ -463,13 +340,7 @@ CRYPTO_BYTES size error #define CRYPTO_ALGNAME "Dilithium" int crypto_sign_keypair(uint8_t *pk, uint8_t *sk); - -int crypto_sign(uint8_t *sm, int32_t *smlen, - const uint8_t *msg, int32_t len, - const uint8_t *sk); - -int crypto_sign_open(uint8_t *m, int32_t *mlen, - const uint8_t *sm, int32_t smlen, - const uint8_t *pk); +int crypto_sign(uint8_t *sm, int32_t *smlen, const uint8_t *msg, int32_t len, const uint8_t *sk); +int crypto_sign_open(uint8_t *m, int32_t *mlen, const uint8_t *sm, int32_t smlen, const uint8_t *pk); #endif diff --git a/src/cc/disputepayout.cpp b/src/cc/disputepayout.cpp index 60924b00b..9e2015d2b 100644 --- a/src/cc/disputepayout.cpp +++ b/src/cc/disputepayout.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/fsm.cpp b/src/cc/fsm.cpp index 58b2120cf..650ba094b 100644 --- a/src/cc/fsm.cpp +++ b/src/cc/fsm.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/games/prices.c b/src/cc/games/prices.c index 1bc62533e..152768e67 100644 --- a/src/cc/games/prices.c +++ b/src/cc/games/prices.c @@ -1,4 +1,7 @@ - +// Copyright (c) 2016-2020 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 + #include "prices.h" #include #include diff --git a/src/cc/games/prices.h b/src/cc/games/prices.h index ae1c46821..deb0948d7 100644 --- a/src/cc/games/prices.h +++ b/src/cc/games/prices.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #ifndef H_PRICES_H #define H_PRICES_H diff --git a/src/cc/games/tetris.c b/src/cc/games/tetris.c index 8e7642837..73bd649d9 100644 --- a/src/cc/games/tetris.c +++ b/src/cc/games/tetris.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #include "tetris.h" diff --git a/src/cc/games/tetris.h b/src/cc/games/tetris.h index c4cfb3b31..27117822a 100644 --- a/src/cc/games/tetris.h +++ b/src/cc/games/tetris.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #ifndef H_TETRIS_H #define H_TETRIS_H diff --git a/src/cc/gamescc.cpp b/src/cc/gamescc.cpp index 43f2f4fd1..13f77147b 100644 --- a/src/cc/gamescc.cpp +++ b/src/cc/gamescc.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/gamescc.h b/src/cc/gamescc.h index b804216d7..3633e0feb 100644 --- a/src/cc/gamescc.h +++ b/src/cc/gamescc.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #ifndef H_GAMESCC_H #define H_GAMESCC_H diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 515c0b3cb..6dfa82cf5 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/importgateway.cpp b/src/cc/importgateway.cpp index 16b54d2b6..eb1cd0cb4 100644 --- a/src/cc/importgateway.cpp +++ b/src/cc/importgateway.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/importpayout.cpp b/src/cc/importpayout.cpp index 6df9a6b6a..bc7e19a4e 100644 --- a/src/cc/importpayout.cpp +++ b/src/cc/importpayout.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/lotto.cpp b/src/cc/lotto.cpp index db4414445..d612d9e0a 100644 --- a/src/cc/lotto.cpp +++ b/src/cc/lotto.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/musig.cpp b/src/cc/musig.cpp index e98937d71..3aff37b51 100644 --- a/src/cc/musig.cpp +++ b/src/cc/musig.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index 14a1e328f..b4089d35b 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/payments.cpp b/src/cc/payments.cpp index 34b1a10ee..4943e5ee2 100644 --- a/src/cc/payments.cpp +++ b/src/cc/payments.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/pegs.cpp b/src/cc/pegs.cpp index 6ef33a884..876d4a595 100644 --- a/src/cc/pegs.cpp +++ b/src/cc/pegs.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/rewards.cpp b/src/cc/rewards.cpp index 9ff886212..3f72157df 100644 --- a/src/cc/rewards.cpp +++ b/src/cc/rewards.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index 7a39a724e..eebe14eaa 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * diff --git a/src/cc/sudoku.cpp b/src/cc/sudoku.cpp index de1915c8b..d7ed51abe 100644 --- a/src/cc/sudoku.cpp +++ b/src/cc/sudoku.cpp @@ -1,4 +1,7 @@ -// start https://github.com/attractivechaos/plb/blob/master/sudoku/incoming/sudoku_solver.c +// Copyright (c) 2016-2020 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 +// From https://github.com/attractivechaos/plb/blob/master/sudoku/incoming/sudoku_solver.c /************************************************************************************/ /* */ /* Author: Bill DuPree */ @@ -192,10 +195,10 @@ /* */ /* CHANGE LOG: */ /* */ -/* Rev. Date Init. Description */ +/* Rev. Date Init. Description */ /* -------------------------------------------------------------------------------- */ -/* 1.00 2006-02-25 WD Initial version. */ -/* 1.01 2006-03-13 WD Fixed return code calc. Added signon message. */ +/* 1.00 2006-02-25 WD Initial version. */ +/* 1.01 2006-03-13 WD Fixed return code calc. Added signon message. */ /* 1.10 2006-03-20 WD Added explain option, add'l speed optimizations */ /* 1.11 2006-03-23 WD More simple speed optimizations, cleanup, bug fixes */ /* */ diff --git a/src/cc/utils.cpp b/src/cc/utils.cpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/cc/utils.h b/src/cc/utils.h index 39bce0e95..bbb771936 100644 --- a/src/cc/utils.h +++ b/src/cc/utils.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * @@ -19,10 +22,7 @@ #include "streams.h" #include "version.h" - -/* - * Serialisation boilerplate - */ +// Serialization boilerplate template std::vector SerializeF(const T f) diff --git a/src/coins.cpp b/src/coins.cpp index 2fd175759..cf963208d 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -2,7 +2,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -17,7 +16,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "coins.h" #include "memusage.h" #include "random.h" @@ -26,7 +24,6 @@ #include "hush_defs.h" #include "importcoin.h" #include - /** * calculate number of bytes for the bitmask, and its number of non-zero bytes * each bit in the bitmask represents the availability of one output, but the @@ -536,8 +533,6 @@ const CTxOut &CCoinsViewCache::GetOutputFor(const CTxIn& input) const return coins->vout[input.prevout.n]; } -//uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime); -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; const CScript &CCoinsViewCache::GetSpendFor(const CCoins *coins, const CTxIn& input) @@ -570,20 +565,6 @@ CAmount CCoinsViewCache::GetValueIn(int32_t nHeight,int64_t *interestp,const CTr } value = GetOutputFor(tx.vin[i]).nValue; nResult += value; -#ifdef KOMODO_ENABLE_INTEREST - if ( SMART_CHAIN_SYMBOL[0] == 0 && nHeight >= 60000 ) - { - if ( value >= 10*COIN ) - { - int64_t interest; int32_t txheight; uint32_t locktime; - interest = komodo_accrued_interest(&txheight,&locktime,tx.vin[i].prevout.hash,tx.vin[i].prevout.n,0,value,(int32_t)nHeight); - //printf("nResult %.8f += val %.8f interest %.8f ht.%d lock.%u tip.%u\n",(double)nResult/COIN,(double)value/COIN,(double)interest/COIN,txheight,locktime,tiptime); - //fprintf(stderr,"nResult %.8f += val %.8f interest %.8f ht.%d lock.%u tip.%u\n",(double)nResult/COIN,(double)value/COIN,(double)interest/COIN,txheight,locktime,tiptime); - nResult += interest; - (*interestp) += interest; - } - } -#endif } nResult += tx.GetShieldedValueIn(); diff --git a/src/coins.h b/src/coins.h index b5023dbda..6e999d5a1 100644 --- a/src/coins.h +++ b/src/coins.h @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -18,12 +17,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_COINS_H #define HUSH_COINS_H - -#define KOMODO_ENABLE_INTEREST //enabling this is a hardfork, activate with new RR method - #include "compressor.h" #include "core_memusage.h" #include "memusage.h" @@ -31,12 +26,10 @@ #include "uint256.h" #include "base58.h" #include "pubkey.h" - #include #include #include #include - #include #include #include "zcash/IncrementalMerkleTree.hpp" diff --git a/src/ctest b/src/ctest deleted file mode 100755 index 1bb1a92a8..000000000 --- a/src/ctest +++ /dev/null @@ -1 +0,0 @@ -./komodod -ac_name=CTEST -ac_supply=1000000 -ac_perc=100000 -ac_pubkey=02ebc786cb83de8dc3922ab83c21f3f8a2f3216940c3bf9da43ce39e2a3a882c92 -ac_reward=300000000 -addnode=136.243.58.134 & diff --git a/src/hush.h b/src/hush.h index 451c3d0ee..3f25c47de 100644 --- a/src/hush.h +++ b/src/hush.h @@ -47,7 +47,6 @@ bool check_pprevnotarizedht(); #include "komodo_curve25519.h" #include "komodo_cJSON.c" #include "hush_bitcoind.h" -#include "komodo_interest.h" #include "komodo_pax.h" #include "hush_notary.h" @@ -805,7 +804,7 @@ int32_t komodo_notarycmp(uint8_t *scriptPubKey,int32_t scriptlen,uint8_t pubkeys return(-1); } -// Connect a Hush Block +// Connect a Hush Block, foshizzle int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) { static int32_t hwmheight; diff --git a/src/hush_defs.h b/src/hush_defs.h index 3fbe054ce..ddb651717 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -563,7 +563,6 @@ int32_t komodo_nextheight(); uint32_t komodo_heightstamp(int32_t height); int64_t komodo_pricemult(int32_t ind); int32_t komodo_priceget(int64_t *buf64,int32_t ind,int32_t height,int32_t numblocks); -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); int32_t komodo_currentheight(); int32_t komodo_notarized_bracket(struct notarized_checkpoint *nps[2],int32_t height); arith_uint256 komodo_adaptivepow_target(int32_t height,arith_uint256 bnTarget,uint32_t nTime); diff --git a/src/hushd b/src/hushd index 46e8a8ca2..d08407080 100755 --- a/src/hushd +++ b/src/hushd @@ -1,5 +1,7 @@ #!/bin/bash # Copyright (c) 2016-2020 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 # set working directory to the location of this script # readlink -f does not always exist @@ -14,7 +16,8 @@ NAME=HUSH3 # this corresponds to FR address RHushEyeDm7XwtaTWtyCbjGQumYyV8vMjn SCRIPT=76a9145eb10cf64f2bab1b457f1f25e658526155928fac88ac -# First Pure Sapling Zcash Protocol chain! +# Hush was and will always be: +# The First Pure Sapling Zcash Protocol chain! SAPLING=1 # We use 3 "eras" of different supply curves @@ -68,8 +71,8 @@ else fi fi -# jl777 disgraced his village and so Duke The Elder journeys on -# with the True Cypherpunks +# jl777 dishonored his village and so Duke The Elder journeys on +# with the True Extreme Privacy Cypherpunks $KMD -ac_name=$NAME \ -ac_sapling=$SAPLING \ -ac_reward=$REWARD \ diff --git a/src/hushd-testnet b/src/hushd-testnet index 99b348a04..4612e7563 100755 --- a/src/hushd-testnet +++ b/src/hushd-testnet @@ -1,15 +1,23 @@ #!/bin/bash # Copyright (c) 2016-2020 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 # set working directory to the location of this script DIR="$( cd "$( dirname "$( readlink -f "${BASH_SOURCE[0]}" )" )" && pwd )" cd $DIR +DIR="$( cd "$( dirname "$( readlink "${BASH_SOURCE[0]}" )" )" && pwd )" +cd $DIR # TESTING VALUES, DO NOT USE EXCEPT FOR DEVELOPMENT NAME=HUSH3T # this corresponds to FR address RHushEyeDm7XwtaTWtyCbjGQumYyV8vMjn SCRIPT=76a9145eb10cf64f2bab1b457f1f25e658526155928fac88ac +# Hush was and will always be: +# The First Pure Sapling Zcash Protocol chain! +SAPLING=1 + # Chain parameters ERAS=3 BLOCKTIME=150 @@ -32,20 +40,21 @@ ORACLE=236 GATEWAY=241 CCENABLE=$FAUCET,$HEIR,$CHANNEL,$ORACLE,$GATEWAY -#NOTE: This is not compatible with upstream KMD komodod, -# but you can reuse one hush3 komodod binary in various -# directories/repos on one server, to save disk space +# jl777 dishonored his village and so Duke The Elder journeys on +# with the True Extreme Privacy Cypherpunks KMD=${KOMODOD:-./komodod} -$KMD -ac_name=$NAME -ac_sapling=1 \ - -ac_reward=$REWARD \ - -ac_halving=$HALVING \ - -ac_end=$END \ - -ac_eras=$ERAS \ - -ac_blocktime=$BLOCKTIME \ - -ac_cc=2 -ac_ccenable=$CCENABLE \ - -ac_founders=$FOUNDERS -ac_supply=$SUPPLY \ - -ac_perc=$PERC \ - -clientname=$CLIENTNAME \ - -addnode=$SEEDNODE \ - -ac_cclib=$CCLIB \ +$KMD -ac_name=$NAME \ + -ac_sapling=$SAPLING \ + -ac_reward=$REWARD \ + -ac_halving=$HALVING \ + -ac_end=$END \ + -ac_eras=$ERAS \ + -ac_blocktime=$BLOCKTIME \ + -ac_cc=2 \ + -ac_ccenable=$CCENABLE \ + -ac_founders=$FOUNDERS \ + -ac_supply=$SUPPLY \ + -ac_perc=$PERC \ + -clientname=$CLIENTNAME \ + -ac_cclib=$CCLIB \ -ac_script=$SCRIPT "$@" diff --git a/src/komodo-tx.cpp b/src/komodo-tx.cpp index cb1476c5e..49831fc9d 100644 --- a/src/komodo-tx.cpp +++ b/src/komodo-tx.cpp @@ -41,14 +41,9 @@ using namespace std; #include "hush_structs.h" #include "hush_globals.h" #include "hush_defs.h" -#include "komodo_interest.h" CKey NSPV_key; char NSPV_pubkeystr[67],NSPV_wifstr[64]; -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight) -{ - return(0); -} static bool fCreateBlank; static std::map registers; diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 7720f50ad..870921d4b 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1422,8 +1422,6 @@ int32_t hush_faststateinit(struct hush_state *sp,char *fname,char *symbol,char * return(-1); } -uint64_t komodo_interestsum(); - void hush_passport_iteration() { static long lastpos[34]; static char userpass[33][1024]; static uint32_t lasttime,callcounter,lastinterest; @@ -1437,9 +1435,6 @@ void hush_passport_iteration() } if ( komodo_chainactive_timestamp() > lastinterest ) { - if ( SMART_CHAIN_SYMBOL[0] == 0 ) - komodo_interestsum(); - //hush_longestchain(); lastinterest = komodo_chainactive_timestamp(); } refsp = hush_stateptr(symbol,dest); diff --git a/src/komodo_interest.h b/src/komodo_interest.h deleted file mode 100644 index 60e3dfd4f..000000000 --- a/src/komodo_interest.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2016-2020 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 "hush_defs.h" - -uint64_t _komodo_interestnew(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) -{ - return 0; -} - -uint64_t komodo_interestnew(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) -{ - return 0; -} - -uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) -{ - return 0; -} - diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index bfdd391a4..cb7cc5acf 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -1,4 +1,6 @@ - +// Copyright (c) 2016-2020 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. * * * @@ -13,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_NSPVFULLNODE_H #define HUSH_NSPVFULLNODE_H @@ -185,11 +186,6 @@ int32_t NSPV_getaddressutxos(struct NSPV_utxosresp *ptr,char *coinaddr,bool isCC ptr->utxos[ind].vout = (int32_t)it->first.index; ptr->utxos[ind].satoshis = it->second.satoshis; ptr->utxos[ind].height = it->second.blockHeight; - if ( SMART_CHAIN_SYMBOL[0] == 0 && it->second.satoshis >= 10*COIN ) - { - ptr->utxos[n].extradata = komodo_accrued_interest(&txheight,&locktime,ptr->utxos[ind].txid,ptr->utxos[ind].vout,ptr->utxos[ind].height,ptr->utxos[ind].satoshis,tipheight); - interest += ptr->utxos[ind].extradata; - } ind++; total += it->second.satoshis; } diff --git a/src/komodo_nSPV_wallet.h b/src/komodo_nSPV_wallet.h index ced0c22bc..8a5f7fe2b 100644 --- a/src/komodo_nSPV_wallet.h +++ b/src/komodo_nSPV_wallet.h @@ -1,4 +1,6 @@ - +// Copyright (c) 2016-2020 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. * * * @@ -13,11 +15,10 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_NSPVWALLET_H #define HUSH_NSPVWALLET_H -// nSPV wallet uses superlite functions (and some komodod built in functions) to implement nSPV_spend +// nSPV wallet uses superlite functions (and some hushd built in functions) to implement nSPV_spend extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry); int32_t NSPV_validatehdrs(struct NSPV_ntzsproofresp *ptr) @@ -83,13 +84,7 @@ int32_t NSPV_gettransaction(int32_t skipvalidation,int32_t vout,uint256 txid,int retval = -2001; else if ( skipvalidation == 0 && ptr->unspentvalue <= 0 ) retval = -2002; - else if ( SMART_CHAIN_SYMBOL[0] == 0 && tiptime != 0 ) - { - rewards = komodo_interestnew(height,tx.vout[vout].nValue,tx.nLockTime,tiptime); - if ( rewards != extradata ) - fprintf(stderr,"extradata %.8f vs rewards %.8f\n",dstr(extradata),dstr(rewards)); - rewardsum += rewards; - } + //char coinaddr[64]; //Getscriptaddress(coinaddr,tx.vout[0].scriptPubKey); causes crash?? //fprintf(stderr,"%s txid.%s vs hash.%s\n",coinaddr,txid.GetHex().c_str(),tx.GetHash().GetHex().c_str()); diff --git a/src/main.cpp b/src/main.cpp index f3df763ca..ffd503ee0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2671,20 +2671,6 @@ namespace Consensus { // Check for negative or overflow input values nValueIn += coins->vout[prevout.n].nValue; -#ifdef KOMODO_ENABLE_INTEREST - if ( SMART_CHAIN_SYMBOL[0] == 0 && nSpendHeight > 60000 )//chainActive.LastTip() != 0 && chainActive.LastTip()->GetHeight() >= 60000 ) - { - if ( coins->vout[prevout.n].nValue >= 10*COIN ) - { - int64_t interest; int32_t txheight; uint32_t locktime; - if ( (interest= komodo_accrued_interest(&txheight,&locktime,prevout.hash,prevout.n,0,coins->vout[prevout.n].nValue,(int32_t)nSpendHeight-1)) != 0 ) - { - //fprintf(stderr,"checkResult %.8f += val %.8f interest %.8f ht.%d lock.%u tip.%u\n",(double)nValueIn/COIN,(double)coins->vout[prevout.n].nValue/COIN,(double)interest/COIN,txheight,locktime,chainActive.LastTip()->nTime); - nValueIn += interest; - } - } - } -#endif if (!MoneyRange(coins->vout[prevout.n].nValue) || !MoneyRange(nValueIn)) return state.DoS(100, error("CheckInputs(): txin values out of range"), REJECT_INVALID, "bad-txns-inputvalues-outofrange"); @@ -5096,18 +5082,15 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C // Size limits //fprintf(stderr,"%s checkblock %d -> %d vs blocksize.%d\n",SMART_CHAIN_SYMBOL,height,MAX_BLOCK_SIZE(height),(int32_t)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION)); if (block.vtx.empty() || block.vtx.size() > MAX_BLOCK_SIZE(height) || ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE(height)) - return state.DoS(100, error("CheckBlock: size limits failed"), - REJECT_INVALID, "bad-blk-length"); + return state.DoS(100, error("CheckBlock: size limits failed"), REJECT_INVALID, "bad-blk-length"); // First transaction must be coinbase, the rest must not be if (block.vtx.empty() || !block.vtx[0].IsCoinBase()) - return state.DoS(100, error("CheckBlock: first tx is not coinbase"), - REJECT_INVALID, "bad-cb-missing"); + return state.DoS(100, error("CheckBlock: first tx is not coinbase"), REJECT_INVALID, "bad-cb-missing"); for (unsigned int i = 1; i < block.vtx.size(); i++) if (block.vtx[i].IsCoinBase()) - return state.DoS(100, error("CheckBlock: more than one coinbase"), - REJECT_INVALID, "bad-cb-multiple"); + return state.DoS(100, error("CheckBlock: more than one coinbase"), REJECT_INVALID, "bad-cb-multiple"); // Check transactions CTransaction sTx; @@ -5115,7 +5098,9 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C if ( ASSETCHAINS_CC != 0 && !fCheckPOW ) return true; - if ( ASSETCHAINS_CC != 0 ) // CC contracts might refer to transactions in the current block, from a CC spend within the same block and out of order + /* + bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; + if (ASSETCHAINS_CC != 0 ) // CC contracts might refer to transactions in the current block, from a CC spend within the same block and out of order { int32_t i,j,rejects=0,lastrejects=0; //fprintf(stderr,"put block's tx into mempool\n"); @@ -5174,15 +5159,11 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C } //fprintf(stderr,"done putting block's tx into mempool\n"); } + */ for (uint32_t i = 0; i < block.vtx.size(); i++) { const CTransaction& tx = block.vtx[i]; - if ( komodo_validate_interest(tx,height == 0 ? hush_block2height((CBlock *)&block) : height,block.nTime,0) < 0 ) - { - fprintf(stderr, "validate intrest failed for txnum.%i tx.%s\n", i, tx.ToString().c_str()); - return error("CheckBlock: komodo_validate_interest failed"); - } if (!CheckTransaction(tiptime,tx, state, verifier, i, (int32_t)block.vtx.size())) return error("CheckBlock: CheckTransaction failed"); } @@ -5195,6 +5176,7 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C if (nSigOps > MAX_BLOCK_SIGOPS) return state.DoS(100, error("CheckBlock: out-of-bounds SigOpCount"), REJECT_INVALID, "bad-blk-sigops", true); + /* if ( fCheckPOW && komodo_check_deposit(height,block,(pindex==0||pindex->pprev==0)?0:pindex->pprev->nTime) < 0 ) { //static uint32_t counter; @@ -5218,6 +5200,7 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C // empty the temp mempool for next time. tmpmempool.clear(); } + */ return true; } diff --git a/src/miner.cpp b/src/miner.cpp index 0db996bbc..0d6e16023 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -143,7 +143,6 @@ int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,ui int32_t komodo_pax_opreturn(int32_t height,uint8_t *opret,int32_t maxsize); int32_t komodo_baseid(char *origbase); int32_t hush_longestchain(); -int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t nTime,int32_t dispflag); int64_t komodo_block_unlocktime(uint32_t nHeight); uint64_t the_commission(const CBlock *block,int32_t height); int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *ptr); @@ -292,14 +291,6 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 txvalue = tx.GetValueOut(); if ( KOMODO_VALUETOOBIG(txvalue) != 0 ) continue; - //if ( KOMODO_VALUETOOBIG(txvalue + voutsum) != 0 ) // has been commented from main.cpp ? - // continue; - //voutsum += txvalue; - if ( SMART_CHAIN_SYMBOL[0] == 0 && komodo_validate_interest(tx,nHeight,(uint32_t)pblock->nTime,0) < 0 ) - { - //fprintf(stderr,"CreateNewBlock: komodo_validate_interest failure nHeight.%d nTime.%u vs locktime.%u\n",nHeight,(uint32_t)pblock->nTime,(uint32_t)tx.nLockTime); - continue; - } COrphan* porphan = NULL; double dPriority = 0; diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 5466b9914..fa2683b9f 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1487,9 +1487,6 @@ UniValue gettxout(const UniValue& params, bool fHelp, const CPubKey& mypk) ret.push_back(Pair("rawconfirmations", pindex->GetHeight() - coins.nHeight + 1)); } ret.push_back(Pair("value", ValueFromAmount(coins.vout[n].nValue))); - uint64_t interest; int32_t txheight; uint32_t locktime; - if ( (interest= komodo_accrued_interest(&txheight,&locktime,hash,n,coins.nHeight,coins.vout[n].nValue,(int32_t)pindex->GetHeight())) != 0 ) - ret.push_back(Pair("interest", ValueFromAmount(interest))); UniValue o(UniValue::VOBJ); ScriptPubKeyToJSON(coins.vout[n].scriptPubKey, o, true); ret.push_back(Pair("scriptPubKey", o)); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 01774211f..e5b560d58 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "amount.h" #include "chainparams.h" #include "consensus/consensus.h" @@ -214,7 +212,7 @@ UniValue generate(const UniValue& params, bool fHelp, const CPubKey& mypk) throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Wallet disabled and -mineraddress not set"); } #else - throw JSONRPCError(RPC_METHOD_NOT_FOUND, "komodod compiled without wallet and -mineraddress not set"); + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "hushd compiled without wallet and -mineraddress not set"); #endif } if (!Params().MineBlocksOnDemand()) @@ -345,7 +343,7 @@ UniValue setgenerate(const UniValue& params, bool fHelp, const CPubKey& mypk) throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Wallet disabled and -mineraddress not set"); } #else - throw JSONRPCError(RPC_METHOD_NOT_FOUND, "komodod compiled without wallet and -mineraddress not set"); + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "hushd compiled without wallet and -mineraddress not set"); #endif } if (Params().MineBlocksOnDemand()) @@ -605,7 +603,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp, const CPubKey& myp throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Wallet disabled and -mineraddress not set"); } #else - throw JSONRPCError(RPC_METHOD_NOT_FOUND, "komodod compiled without wallet and -mineraddress not set"); + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "hushd compiled without wallet and -mineraddress not set"); #endif } diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 6590ed9b7..40e3e6dcd 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -37,6 +37,7 @@ #include #include #include "zcash/Address.hpp" +#include "build.h" using namespace std; @@ -54,7 +55,6 @@ using namespace std; * Or alternatively, create a specific query method for the information. **/ -uint64_t komodo_interestsum(); int32_t hush_longestchain(); int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); bool komodo_txnotarizedconfirmed(uint256 txid); @@ -275,6 +275,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) #endif obj.push_back(Pair("sapling", ASSETCHAINS_SAPLING)); } + obj.push_back(Pair("build_date", BUILD_DATE)); obj.push_back(Pair("timeoffset", 0)); obj.push_back(Pair("connections", (int)vNodes.size())); obj.push_back(Pair("tls_connections", (int)std::count_if(vNodes.begin(), vNodes.end(), [](CNode* n) {return n->ssl != NULL;}))); diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index b928980ca..948ad2eae 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "consensus/upgrades.h" #include "consensus/validation.h" #include "core_io.h" @@ -85,8 +83,6 @@ void ScriptPubKeyToJSON(const CScript& scriptPubKey, UniValue& out, bool fInclud out.push_back(Pair("addresses", a)); } -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); - UniValue TxShieldedSpendsToJSON(const CTransaction& tx) { UniValue vdesc(UniValue::VARR); for (const SpendDescription& spendDesc : tx.vShieldedSpend) { @@ -217,13 +213,7 @@ void TxToJSONExpanded(const CTransaction& tx, const uint256 hashBlock, UniValue& const CTxOut& txout = tx.vout[i]; UniValue out(UniValue::VOBJ); out.push_back(Pair("value", ValueFromAmount(txout.nValue))); - if ( SMART_CHAIN_SYMBOL[0] == 0 && pindex != 0 && tx.nLockTime >= 500000000 && (tipindex= chainActive.LastTip()) != 0 ) - { - int64_t interest; int32_t txheight; uint32_t locktime; - interest = komodo_accrued_interest(&txheight,&locktime,tx.GetHash(),i,0,txout.nValue,(int32_t)tipindex->GetHeight()); - out.push_back(Pair("interest", ValueFromAmount(interest))); - } - out.push_back(Pair("valueSat", txout.nValue)); // [+] Decker + out.push_back(Pair("valueSat", txout.nValue)); out.push_back(Pair("n", (int64_t)i)); UniValue o(UniValue::VOBJ); ScriptPubKeyToJSON(txout.scriptPubKey, o, true); @@ -316,12 +306,6 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry) const CTxOut& txout = tx.vout[i]; UniValue out(UniValue::VOBJ); out.push_back(Pair("value", ValueFromAmount(txout.nValue))); - if ( HUSH_NSPV_FULLNODE && SMART_CHAIN_SYMBOL[0] == 0 && tx.nLockTime >= 500000000 && (tipindex= chainActive.LastTip()) != 0 ) - { - int64_t interest; int32_t txheight; uint32_t locktime; - interest = komodo_accrued_interest(&txheight,&locktime,tx.GetHash(),i,0,txout.nValue,(int32_t)tipindex->GetHeight()); - out.push_back(Pair("interest", ValueFromAmount(interest))); - } out.push_back(Pair("valueZat", txout.nValue)); out.push_back(Pair("n", (int64_t)i)); UniValue o(UniValue::VOBJ); diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index e5b972d08..1de69fdd4 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -18,9 +17,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "rpc/server.h" - #include "init.h" #include "key_io.h" #include "random.h" @@ -29,11 +26,8 @@ #include "util.h" #include "utilstrencodings.h" #include "asyncrpcqueue.h" - #include - #include - #include #include #include @@ -889,7 +883,7 @@ std::string HelpExampleRpc(const std::string& methodname, const std::string& arg string experimentalDisabledHelpMsg(const string& rpc, const string& enableArg) { - string daemon = SMART_CHAIN_SYMBOL[0] == 0 ? "komodod" : "hushd"; + string daemon = "hushd"; string ticker = SMART_CHAIN_SYMBOL[0] == 0 ? "komodo" : SMART_CHAIN_SYMBOL; return "\nWARNING: " + rpc + " is disabled.\n" diff --git a/src/txmempool.cpp b/src/txmempool.cpp index 66ed1452e..e3c68dd42 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -1,10 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2014 The Bitcoin Core developers // Copyright (c) 2016-2020 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. * * * @@ -19,9 +17,7 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "txmempool.h" - #include "clientversion.h" #include "consensus/consensus.h" #include "consensus/validation.h" @@ -510,7 +506,6 @@ void CTxMemPool::removeConflicts(const CTransaction &tx, std::list } } -int32_t komodo_validate_interest(const CTransaction &tx,int32_t txheight,uint32_t nTime,int32_t dispflag); extern char SMART_CHAIN_SYMBOL[]; std::vector CTxMemPool::removeExpired(unsigned int nBlockHeight) @@ -524,6 +519,7 @@ std::vector CTxMemPool::removeExpired(unsigned int nBlockHeight) const CTransaction& tx = it->GetTx(); tipindex = chainActive.LastTip(); + /* bool fInterestNotValidated = SMART_CHAIN_SYMBOL[0] == 0 && tipindex != 0 && komodo_validate_interest(tx,tipindex->GetHeight()+1,tipindex->GetMedianTimePast() + 777,0) < 0; if (IsExpiredTx(tx, nBlockHeight) || fInterestNotValidated) { @@ -531,6 +527,7 @@ std::vector CTxMemPool::removeExpired(unsigned int nBlockHeight) LogPrintf("Removing interest violate txid.%s nHeight.%d nTime.%u vs locktime.%u\n",tx.GetHash().ToString(),tipindex->GetHeight()+1,tipindex->GetMedianTimePast() + 777,tx.nLockTime); transactionsToRemove.push_back(tx); } + */ } std::vector ids; for (const CTransaction& tx : transactionsToRemove) { @@ -542,9 +539,7 @@ std::vector CTxMemPool::removeExpired(unsigned int nBlockHeight) return ids; } -/** - * Called when a block is connected. Removes from mempool and updates the miner fee estimator. - */ +// Called when a block is connected. Removes from mempool and updates the miner fee estimator. void CTxMemPool::removeForBlock(const std::vector& vtx, unsigned int nBlockHeight, std::list& conflicts, bool fCurrentEstimate) { diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 20bbc44ab..e3e6ad3c2 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -130,11 +130,8 @@ void Unlock2NSPV(const CPubKey &pk) } } -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); - void WalletTxToJSON(const CWalletTx& wtx, UniValue& entry) { - //int32_t i,n,txheight; uint32_t locktime; uint64_t interest = 0; int confirms = wtx.GetDepthInMainChain(); entry.push_back(Pair("rawconfirmations", confirms)); if (wtx.IsCoinBase()) @@ -976,11 +973,11 @@ UniValue getreceivedbyaddress(const UniValue& params, bool fHelp, const CPubKey& int nHeight = tx_height(wtx.GetHash()); int dpowconfs = hush_dpowconfs(nHeight, nDepth); if (dpowconfs >= nMinDepth) { - nAmount += txout.nValue; // komodo_interest? + nAmount += txout.nValue; } } else { if (nDepth >= nMinDepth) { - nAmount += txout.nValue; // komodo_interest? + nAmount += txout.nValue; } } } @@ -1039,7 +1036,7 @@ UniValue getreceivedbyaccount(const UniValue& params, bool fHelp, const CPubKey& CTxDestination address; if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*pwalletMain, address) && setAddress.count(address)) if (wtx.GetDepthInMainChain() >= nMinDepth) - nAmount += txout.nValue; // komodo_interest? + nAmount += txout.nValue; } } @@ -1660,7 +1657,7 @@ UniValue ListReceived(const UniValue& params, bool fByAccounts) continue; tallyitem& item = mapTally[address]; - item.nAmount += txout.nValue; // komodo_interest? + item.nAmount += txout.nValue; item.nConf = min(item.nConf, nDepth); item.nHeight = komodo_blockheight(wtx.hashBlock); item.txids.push_back(wtx.GetHash()); @@ -2967,13 +2964,7 @@ UniValue listunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) { BlockMap::iterator it = mapBlockIndex.find(pcoinsTip->GetBestBlock()); CBlockIndex *tipindex,*pindex = it->second; - uint64_t interest; uint32_t locktime; - if ( pindex != 0 && (tipindex= chainActive.LastTip()) != 0 ) - { - interest = komodo_accrued_interest(&txheight,&locktime,out.tx->GetHash(),out.i,0,nValue,(int32_t)tipindex->GetHeight()); - //interest = komodo_interest(txheight,nValue,out.tx->nLockTime,tipindex->nTime); - entry.push_back(Pair("interest",ValueFromAmount(interest))); - } + uint32_t locktime; //fprintf(stderr,"nValue %.8f pindex.%p tipindex.%p locktime.%u txheight.%d pindexht.%d\n",(double)nValue/COIN,pindex,chainActive.LastTip(),locktime,txheight,pindex->GetHeight()); } else if ( chainActive.LastTip() != 0 ) @@ -2987,42 +2978,7 @@ UniValue listunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) return results; } -uint64_t komodo_interestsum() -{ -#ifdef ENABLE_WALLET - if ( SMART_CHAIN_SYMBOL[0] == 0 && GetBoolArg("-disablewallet", false) == 0 && HUSH_NSPV_FULLNODE ) - { - uint64_t interest,sum = 0; int32_t txheight; uint32_t locktime; - vector vecOutputs; - assert(pwalletMain != NULL); - LOCK2(cs_main, pwalletMain->cs_wallet); - pwalletMain->AvailableCoins(vecOutputs, false, NULL, true); - BOOST_FOREACH(const COutput& out,vecOutputs) - { - CAmount nValue = out.tx->vout[out.i].nValue; - if ( out.tx->nLockTime != 0 && out.fSpendable != 0 ) - { - BlockMap::iterator it = mapBlockIndex.find(pcoinsTip->GetBestBlock()); - CBlockIndex *tipindex,*pindex = it->second; - if ( pindex != 0 && (tipindex= chainActive.LastTip()) != 0 ) - { - interest = komodo_accrued_interest(&txheight,&locktime,out.tx->GetHash(),out.i,0,nValue,(int32_t)tipindex->GetHeight()); - //interest = komodo_interest(pindex->GetHeight(),nValue,out.tx->nLockTime,tipindex->nTime); - sum += interest; - } - } - } - KOMODO_INTERESTSUM = sum; - KOMODO_WALLETBALANCE = pwalletMain->GetBalance(); - return(sum); - } -#endif - return(0); -} - -/** - *Return current blockchain status, wallet balance, address balance and the last 200 transactions -**/ +// Return current blockchain status, wallet balance, address balance and the last 200 transactions UniValue getalldata(const UniValue& params, bool fHelp,const CPubKey&) { if (fHelp || params.size() > 3) @@ -3059,23 +3015,20 @@ UniValue getalldata(const UniValue& params, bool fHelp,const CPubKey&) LOCK2(cs_main, pwalletMain->cs_wallet); int nMinDepth = 1; - - CAmount confirmed = 0; - CAmount unconfirmed = 0; - CAmount locked = 0; - CAmount immature = 0; - - CAmount privateConfirmed = 0; - CAmount privateUnconfirmed = 0; - CAmount privateLocked = 0; - CAmount privateImmature = 0; - balancestruct txAmounts; - txAmounts.confirmed = 0; - txAmounts.unconfirmed = 0; - txAmounts.locked = 0; - txAmounts.immature = 0; + CAmount confirmed = 0; + CAmount unconfirmed = 0; + CAmount locked = 0; + CAmount immature = 0; + CAmount privateConfirmed = 0; + CAmount privateUnconfirmed = 0; + CAmount privateLocked = 0; + CAmount privateImmature = 0; + txAmounts.confirmed = 0; + txAmounts.unconfirmed = 0; + txAmounts.locked = 0; + txAmounts.immature = 0; //Create map of addresses //Add all Transaparent addresses to list @@ -3087,7 +3040,7 @@ UniValue getalldata(const UniValue& params, bool fHelp,const CPubKey&) addressBalances.insert(make_pair(addressString,txAmounts)); } - //Add all Sapling addresses to map + // Add all zaddrs std::set zs_addresses; pwalletMain->GetSaplingPaymentAddresses(zs_addresses); for (auto addr : zs_addresses) { @@ -4038,7 +3991,7 @@ CAmount getBalanceTaddr(std::string transparentAddress, int minDepth=1, bool ign } } - CAmount nValue = out.tx->vout[out.i].nValue; // komodo_interest + CAmount nValue = out.tx->vout[out.i].nValue; balance += nValue; } return balance; @@ -4299,14 +4252,12 @@ UniValue z_gettotalbalance(const UniValue& params, bool fHelp, const CPubKey& my // getbalance and "getbalance * 1 true" should return the same number // but they don't because wtx.GetAmounts() does not handle tx where there are no outputs // pwalletMain->GetBalance() does not accept min depth parameter - // so we use our own method to get balance of utxos. - CAmount nBalance = getBalanceTaddr("", nMinDepth, !fIncludeWatchonly); + // so we use our own method to get balance of utxos, lulzwtfbbq + CAmount nBalance = getBalanceTaddr("", nMinDepth, !fIncludeWatchonly); CAmount nPrivateBalance = getBalanceZaddr("", nMinDepth, !fIncludeWatchonly); - uint64_t interest = komodo_interestsum(); - CAmount nTotalBalance = nBalance + nPrivateBalance; + CAmount nTotalBalance = nBalance + nPrivateBalance; UniValue result(UniValue::VOBJ); result.push_back(Pair("transparent", FormatMoney(nBalance))); - result.push_back(Pair("interest", FormatMoney(interest))); result.push_back(Pair("private", FormatMoney(nPrivateBalance))); result.push_back(Pair("total", FormatMoney(nTotalBalance))); return result; diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 16ee73c6a..9257b7e01 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -18,10 +18,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "wallet/wallet.h" #include "asyncrpcqueue.h" - #include "checkpoints.h" #include "coincontrol.h" #include "consensus/upgrades.h" @@ -42,9 +40,7 @@ #include "wallet/asyncrpcoperation_saplingconsolidation.h" #include "zcash/zip32.h" #include "cc/CCinclude.h" - #include - #include #include #include @@ -1814,7 +1810,7 @@ CAmount CWallet::GetDebit(const CTxIn &txin, const isminefilter& filter) const const CWalletTx& prev = (*mi).second; if (txin.prevout.n < prev.vout.size()) if (::IsMine(*this, prev.vout[txin.prevout.n].scriptPubKey) & filter) - return prev.vout[txin.prevout.n].nValue; // komodo_interest? + return prev.vout[txin.prevout.n].nValue; } } return 0; @@ -3206,8 +3202,6 @@ CAmount CWallet::GetImmatureWatchOnlyBalance() const /** * populate vCoins with vector of available COutputs. */ -uint64_t komodo_interestnew(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uint32_t tiptime); -uint64_t komodo_accrued_interest(int32_t *txheightp,uint32_t *locktimep,uint256 hash,int32_t n,int32_t checkheight,uint64_t checkvalue,int32_t tipheight); void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const CCoinControl *coinControl, bool fIncludeZeroValue, bool fIncludeCoinBase) const { @@ -3252,10 +3246,8 @@ void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const { if ( (tipindex= chainActive.LastTip()) != 0 ) { - komodo_accrued_interest(&txheight,&locktime,wtxid,i,0,pcoin->vout[i].nValue,(int32_t)tipindex->GetHeight()); - interest = komodo_interestnew(txheight,pcoin->vout[i].nValue,locktime,tipindex->nTime); + interest = 0; } else interest = 0; - //interest = komodo_interestnew(chainActive.LastTip()->GetHeight()+1,pcoin->vout[i].nValue,pcoin->nLockTime,chainActive.LastTip()->nTime); if ( interest != 0 ) { ptr = (uint64_t *)&pcoin->vout[i].interest; @@ -3434,11 +3426,6 @@ bool CWallet::SelectCoins(const CAmount& nTargetValue, set vCoinsNoCoinbase, vCoinsWithCoinbase; AvailableCoins(vCoinsNoCoinbase, true, coinControl, false, false); AvailableCoins(vCoinsWithCoinbase, true, coinControl, false, true); @@ -3724,6 +3711,7 @@ bool CWallet::CreateTransaction(const vector& vecSend, CWalletTx& wt age += 1; dPriority += (double)nCredit * age; } + //TODO: delete this if ( SMART_CHAIN_SYMBOL[0] == 0 && DONATION_PUBKEY.size() == 66 && interest2 > 5000 ) { CScript scriptDonation = CScript() << ParseHex(DONATION_PUBKEY) << OP_CHECKSIG; From fdeba56ac53819fbf634af22bb6b4761a00c07d5 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 04:51:01 -0500 Subject: [PATCH 196/277] By the power of zawy, Devil Be Gone --- src/main.cpp | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ffd503ee0..42106c2c3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5216,49 +5216,41 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta int nHeight = pindexPrev->GetHeight()+1; bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; - // Check Proof-of-Work - if(ishush3) { + // Check Proof-of-Work difficulty + if (ishush3) { // The change of blocktime from 150s to 75s caused Weird Stuff in the difficulty/work calculations // caused by the fact that Difficulty Adjustment Algorithms do not take into account blocktime // changing at run-time, which breaks assumptions in the algorithm unsigned int nNextWork = GetNextWorkRequired(pindexPrev, &block, consensusParams); //if ((nHeight < 340000 || nHeight > 342500) && block.nBits != nNextWork) { if (block.nBits != nNextWork) { - cout << "Incorrect HUSH Proof-of-Work at height " << nHeight << - " " << block.nBits << " block.nBits vs. calc " << nNextWork << - " " << block.GetHash().ToString() << " @ " << block.GetBlockTime() << endl; + cout << "Incorrect HUSH diffbits at height " << nHeight << + " " << block.nBits << " block.nBits vs. calc " << nNextWork << + " " << block.GetHash().ToString() << " @ " << block.GetBlockTime() << endl; // Don't use this CLI option unless you know what you are doing -- Duke - if(!GetArg("-dev-ignore-bad-nbits",false)) { - return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); + //if(!GetArg("-dev-ignore-bad-nbits",false)) { + if (nHeight < 340000) { + return state.DoS(100, error("%s: Incorrect diffbits at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); } else { - cout << "Ignoring bad nBits!!!" << endl; + LogPrintf("%s: Ignoring nbits calc : %lu\n",__func__, nNextWork ); + LogPrintf("%s: Ignoring nbits block: %lu\n",__func__, block.nBits ); + cout << "Ignoring nbits for height=" << nHeight << endl; } } - } else { - // Hush Smart Chains - if ( block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) { - cout << "Incorrect Proof-of-Work! " << block.nBits << " block.nBits vs. calc " << - GetNextWorkRequired(pindexPrev, &block, consensusParams) << - " for height " << nHeight << " " << - block.GetHash().ToString() << " with time " << - block.GetBlockTime() << endl; - - return state.DoS(100, error("%s: Incorrect Proof-of-Work at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); - } } // Check timestamp against prev - if ( ASSETCHAINS_ADAPTIVEPOW <= 0 || nHeight < 30 ) { + if (ASSETCHAINS_ADAPTIVEPOW <= 0 || nHeight < 30) { if (block.GetBlockTime() <= pindexPrev->GetMedianTimePast() ) { fprintf(stderr,"ht.%d too early %u vs %u\n",(int32_t)nHeight,(uint32_t)block.GetBlockTime(),(uint32_t)pindexPrev->GetMedianTimePast()); - return state.Invalid(error("%s: block's timestamp is too early", __func__), REJECT_INVALID, "time-too-old"); + return state.Invalid(error("%s: block's timestamp is too early based on median time", __func__), REJECT_INVALID, "time-too-old-median"); } } else { if ( block.GetBlockTime() <= pindexPrev->nTime ) { fprintf(stderr,"ht.%d too early2 %u vs %u\n",(int32_t)nHeight,(uint32_t)block.GetBlockTime(),(uint32_t)pindexPrev->nTime); - return state.Invalid(error("%s: block's timestamp is too early2", __func__), REJECT_INVALID, "time-too-old"); + return state.Invalid(error("%s: block's timestamp is too early based on previous block", __func__), REJECT_INVALID, "time-too-old-prevblock"); } } @@ -5287,7 +5279,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta { if ( pcheckpoint != 0 && nHeight < pcheckpoint->GetHeight() ) return state.DoS(1, error("%s: forked chain older than last checkpoint (height %d) vs %d", __func__, nHeight,pcheckpoint->GetHeight())); - if ( komodo_checkpoint(¬arized_height,nHeight,hash) < 0 ) + if ( hush_checkpoint(¬arized_height,nHeight,hash) < 0 ) { CBlockIndex *heightblock = chainActive[nHeight]; if ( heightblock != 0 && heightblock->GetBlockHash() == hash ) From e4ffb347564a15873d29e529cebaf00f192d4f7e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 04:51:11 -0500 Subject: [PATCH 197/277] Next height --- src/cc/CCassetstx.cpp | 20 ++++++++++---------- src/cc/CCinclude.h | 2 +- src/cc/CCtokens.cpp | 6 +++--- src/cc/auction.cpp | 6 +++--- src/cc/betprotocol.cpp | 14 +++++++------- src/cc/cclib.cpp | 4 ++-- src/cc/channels.cpp | 8 ++++---- src/cc/customcc.cpp | 2 +- src/cc/dice.cpp | 8 ++++---- src/cc/dilithium.c | 8 ++++---- src/cc/faucet.cpp | 6 +++--- src/cc/fsm.cpp | 4 ++-- src/cc/gamescc.cpp | 20 ++++++++++---------- src/cc/gateways.cpp | 16 ++++++++-------- src/cc/heir.cpp | 8 ++++---- src/cc/import.cpp | 6 +++--- src/cc/importgateway.cpp | 14 +++++++------- src/cc/lotto.cpp | 6 +++--- src/cc/musig.cpp | 4 ++-- src/cc/oracles.cpp | 12 ++++++------ src/cc/payments.cpp | 16 ++++++++-------- src/cc/pegs.cpp | 12 ++++++------ src/cc/prices.cpp | 12 ++++++------ src/cc/rewards.cpp | 8 ++++---- src/cc/rogue_rpc.cpp | 20 ++++++++++---------- src/cc/sudoku.cpp | 6 +++--- src/hush_defs.h | 4 ++-- src/importcoin.cpp | 4 ++-- src/komodo-tx.cpp | 2 +- src/komodo_gateway.h | 2 +- src/rpc/blockchain.cpp | 2 +- src/rpc/crosschain.cpp | 4 ++-- src/rpc/mining.cpp | 2 +- src/rpc/testtransactions.cpp | 8 ++++---- 34 files changed, 138 insertions(+), 138 deletions(-) diff --git a/src/cc/CCassetstx.cpp b/src/cc/CCassetstx.cpp index 17f0f54b2..b5ded8c7d 100644 --- a/src/cc/CCassetstx.cpp +++ b/src/cc/CCassetstx.cpp @@ -160,7 +160,7 @@ UniValue AssetOrders(uint256 refassetid, CPubKey pk, uint8_t additionalEvalCode) // not used (use TokenCreate instead) /* std::string CreateAsset(int64_t txfee,int64_t assetsupply,std::string name,std::string description) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; struct CCcontract_info *cp,C; if ( assetsupply < 0 ) { @@ -188,7 +188,7 @@ UniValue AssetOrders(uint256 refassetid, CPubKey pk, uint8_t additionalEvalCode) // not used (use TokenTransfer instead) /* std::string AssetTransfer(int64_t txfee,uint256 assetid,std::vector destpubkey,int64_t total) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; uint64_t mask; int64_t CCchange=0,inputs=0; struct CCcontract_info *cp,C; if ( total < 0 ) { @@ -230,7 +230,7 @@ UniValue AssetOrders(uint256 refassetid, CPubKey pk, uint8_t additionalEvalCode) // deprecated /* std::string AssetConvert(int64_t txfee,uint256 assetid,std::vector destpubkey,int64_t total,int32_t evalcode) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; int64_t CCchange=0,inputs=0; struct CCcontract_info *cp,C; if ( total < 0 ) { @@ -258,7 +258,7 @@ UniValue AssetOrders(uint256 refassetid, CPubKey pk, uint8_t additionalEvalCode) // rpc tokenbid implementation, locks 'bidamount' coins for the 'pricetotal' of tokens std::string CreateBuyOffer(int64_t txfee, int64_t bidamount, uint256 assetid, int64_t pricetotal) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; struct CCcontract_info *cpAssets, C; uint256 hashBlock; @@ -316,7 +316,7 @@ std::string CreateBuyOffer(int64_t txfee, int64_t bidamount, uint256 assetid, in // rpc tokenask implementation, locks 'askamount' tokens for the 'pricetotal' std::string CreateSell(int64_t txfee,int64_t askamount,uint256 assetid,int64_t pricetotal) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; uint64_t mask; int64_t inputs, CCchange; @@ -386,7 +386,7 @@ std::string CreateSell(int64_t txfee,int64_t askamount,uint256 assetid,int64_t p ////////////////////////// NOT IMPLEMENTED YET///////////////////////////////// std::string CreateSwap(int64_t txfee,int64_t askamount,uint256 assetid,uint256 assetid2,int64_t pricetotal) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; uint64_t mask; int64_t inputs,CCchange; CScript opret; struct CCcontract_info *cp,C; ////////////////////////// NOT IMPLEMENTED YET///////////////////////////////// @@ -455,7 +455,7 @@ std::string CreateSwap(int64_t txfee,int64_t askamount,uint256 assetid,uint256 a // unlocks coins std::string CancelBuyOffer(int64_t txfee,uint256 assetid,uint256 bidtxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction vintx; uint64_t mask; uint256 hashBlock; int64_t bidamount; CPubKey mypk; struct CCcontract_info *cpAssets, C; @@ -501,7 +501,7 @@ std::string CancelBuyOffer(int64_t txfee,uint256 assetid,uint256 bidtxid) //unlocks tokens std::string CancelSell(int64_t txfee,uint256 assetid,uint256 asktxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction vintx; uint64_t mask; uint256 hashBlock; int64_t askamount; CPubKey mypk; @@ -569,7 +569,7 @@ std::string CancelSell(int64_t txfee,uint256 assetid,uint256 asktxid) //send tokens, receive coins: std::string FillBuyOffer(int64_t txfee,uint256 assetid,uint256 bidtxid,int64_t fillamount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction vintx; uint256 hashBlock; CPubKey mypk; @@ -658,7 +658,7 @@ std::string FillBuyOffer(int64_t txfee,uint256 assetid,uint256 bidtxid,int64_t f // send coins, receive tokens std::string FillSell(int64_t txfee, uint256 assetid, uint256 assetid2, uint256 asktxid, int64_t fillunits) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction vintx,filltx; uint256 hashBlock; CPubKey mypk; diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index 41d1da655..6ff5c1d40 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -244,7 +244,7 @@ extern CWallet* pwalletMain; //!< global wallet object pointer to access wallet /// @private seems old-style bool GetAddressUnspent(uint160 addressHash, int type,std::vector > &unspentOutputs); //CBlockIndex *komodo_getblockindex(uint256 hash); //moved to komodo_def.h -//int32_t komodo_nextheight(); //moved to komodo_def.h +//int32_t hush_nextheight(); //moved to komodo_def.h /// CCgetspenttxid finds the txid of the transaction which spends a transaction output. The function does this without loading transactions from the chain, by using spent index /// @param[out] spenttxid transaction id of the spending transaction diff --git a/src/cc/CCtokens.cpp b/src/cc/CCtokens.cpp index 105d6d4c2..67ec3214d 100644 --- a/src/cc/CCtokens.cpp +++ b/src/cc/CCtokens.cpp @@ -802,7 +802,7 @@ CPubKey GetTokenOriginatorPubKey(CScript scriptPubKey) { // returns token creation signed raw tx std::string CreateToken(int64_t txfee, int64_t tokensupply, std::string name, std::string description, vscript_t nonfungibleData) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; struct CCcontract_info *cp, C; if (tokensupply < 0) { CCerror = "negative tokensupply"; @@ -857,7 +857,7 @@ std::string CreateToken(int64_t txfee, int64_t tokensupply, std::string name, st // param additionalEvalCode allows transfer of dual-eval non-fungible tokens std::string TokenTransfer(int64_t txfee, uint256 tokenid, vscript_t destpubkey, int64_t total) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; uint64_t mask; int64_t CCchange = 0, inputs = 0; struct CCcontract_info *cp, C; vscript_t vopretNonfungible, vopretEmpty; @@ -921,7 +921,7 @@ std::string TokenTransfer(int64_t txfee, uint256 tokenid, vscript_t destpubkey, int64_t GetTokenBalance(CPubKey pk, uint256 tokenid) { uint256 hashBlock; - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tokentx; // CCerror = strprintf("obsolete, cannot return correct value without eval"); diff --git a/src/cc/auction.cpp b/src/cc/auction.cpp index 0f05e10f4..4b0df66c8 100644 --- a/src/cc/auction.cpp +++ b/src/cc/auction.cpp @@ -153,7 +153,7 @@ int64_t AddAuctionInputs(struct CCcontract_info *cp,CMutableTransaction &mtx,CPu std::string AuctionBid(uint64_t txfee,uint256 itemhash,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,Auctionpk; CScript opret; int64_t inputs,CCchange=0,nValue=COIN; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_AUCTION); if ( txfee == 0 ) @@ -174,7 +174,7 @@ std::string AuctionBid(uint64_t txfee,uint256 itemhash,int64_t amount) std::string AuctionDeliver(uint64_t txfee,uint256 itemhash,uint256 bidtxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,Auctionpk; CScript opret; int64_t inputs,CCchange=0,nValue=COIN; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_AUCTION); if ( txfee == 0 ) @@ -195,7 +195,7 @@ std::string AuctionDeliver(uint64_t txfee,uint256 itemhash,uint256 bidtxid) std::string AuctionPost(uint64_t txfee,uint256 itemhash,int64_t minbid,char *title,char *description) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,Auctionpk; int64_t funds = 0; CScript opret; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_AUCTION); if ( txfee == 0 ) diff --git a/src/cc/betprotocol.cpp b/src/cc/betprotocol.cpp index 694469ec5..e7da14d28 100644 --- a/src/cc/betprotocol.cpp +++ b/src/cc/betprotocol.cpp @@ -28,7 +28,7 @@ #include "cc/utils.h" #include "primitives/transaction.h" -int32_t komodo_nextheight(); +int32_t hush_nextheight(); std::vector BetProtocol::PlayerConditions() { @@ -57,7 +57,7 @@ CC* BetProtocol::MakeDisputeCond() */ CMutableTransaction BetProtocol::MakeSessionTx(CAmount spendFee) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CC *disputeCond = MakeDisputeCond(); mtx.vout.push_back(CTxOut(spendFee, CCPubKey(disputeCond))); @@ -74,7 +74,7 @@ CMutableTransaction BetProtocol::MakeSessionTx(CAmount spendFee) CMutableTransaction BetProtocol::MakeDisputeTx(uint256 signedSessionTxHash, uint256 vmResultHash) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CC *disputeCond = MakeDisputeCond(); mtx.vin.push_back(CTxIn(signedSessionTxHash, 0, CScript())); @@ -88,7 +88,7 @@ CMutableTransaction BetProtocol::MakeDisputeTx(uint256 signedSessionTxHash, uint CMutableTransaction BetProtocol::MakePostEvidenceTx(uint256 signedSessionTxHash, int playerIdx, std::vector state) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); mtx.vin.push_back(CTxIn(signedSessionTxHash, playerIdx+1, CScript())); mtx.vout.push_back(CTxOut(0, CScript() << OP_RETURN << state)); @@ -119,7 +119,7 @@ CC* BetProtocol::MakePayoutCond(uint256 signedSessionTxHash) CMutableTransaction BetProtocol::MakeStakeTx(CAmount totalPayout, uint256 signedSessionTxHash) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CC *payoutCond = MakePayoutCond(signedSessionTxHash); mtx.vout.push_back(CTxOut(totalPayout, CCPubKey(payoutCond))); @@ -132,7 +132,7 @@ CMutableTransaction BetProtocol::MakeStakeTx(CAmount totalPayout, uint256 signed CMutableTransaction BetProtocol::MakeAgreePayoutTx(std::vector payouts, uint256 signedStakeTxHash) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); mtx.vin.push_back(CTxIn(signedStakeTxHash, 0, CScript())); mtx.vout = payouts; return mtx; @@ -142,7 +142,7 @@ CMutableTransaction BetProtocol::MakeAgreePayoutTx(std::vector payouts, CMutableTransaction BetProtocol::MakeImportPayoutTx(std::vector payouts, CTransaction signedDisputeTx, uint256 signedStakeTxHash, MoMProof momProof) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); mtx.vin.push_back(CTxIn(signedStakeTxHash, 0, CScript())); mtx.vout = payouts; CScript proofData; diff --git a/src/cc/cclib.cpp b/src/cc/cclib.cpp index 6421f1c23..6b598b61d 100644 --- a/src/cc/cclib.cpp +++ b/src/cc/cclib.cpp @@ -558,7 +558,7 @@ int64_t AddCClibtxfee(struct CCcontract_info *cp,CMutableTransaction &mtx,CPubKe std::string Faucet2Fund(struct CCcontract_info *cp,uint64_t txfee,int64_t funds) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,cclibpk; CScript opret; if ( txfee == 0 ) txfee = 10000; @@ -574,7 +574,7 @@ std::string Faucet2Fund(struct CCcontract_info *cp,uint64_t txfee,int64_t funds) std::string CClib_rawtxgen(struct CCcontract_info *cp,uint8_t funcid,cJSON *params) { - CMutableTransaction tmpmtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction tmpmtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,cclibpk; int64_t funds,txfee=0,inputs,CCchange=0,nValue=FAUCET2SIZE; std::string rawhex; uint32_t j; int32_t i,len; uint8_t buf[32768]; bits256 hash; if ( txfee == 0 ) txfee = 10000; diff --git a/src/cc/channels.cpp b/src/cc/channels.cpp index 5302eb355..5b7c3919b 100644 --- a/src/cc/channels.cpp +++ b/src/cc/channels.cpp @@ -466,7 +466,7 @@ int64_t AddChannelsInputs(struct CCcontract_info *cp,CMutableTransaction &mtx, C UniValue ChannelOpen(const CPubKey& pk, uint64_t txfee,CPubKey destpub,int32_t numpayments,int64_t payment, uint256 tokenid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); uint8_t hash[32],hashdest[32]; uint64_t amount,tokens=0,funds; int32_t i; uint256 hashchain,entropy,hentropy; CPubKey mypk; struct CCcontract_info *cp,*cpTokens,C,CTokens; @@ -512,7 +512,7 @@ UniValue ChannelOpen(const CPubKey& pk, uint64_t txfee,CPubKey destpub,int32_t n UniValue ChannelPayment(const CPubKey& pk, uint64_t txfee,uint256 opentxid,int64_t amount, uint256 secret) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,srcpub,destpub; uint256 txid,hashchain,gensecret,hashblock,entropy,hentropy,prevtxid,param3,tokenid; struct CCcontract_info *cp,C; int32_t i,funcid,prevdepth,numvouts,numpayments,totalnumpayments; int64_t payment,change,funds,param2; @@ -596,7 +596,7 @@ UniValue ChannelPayment(const CPubKey& pk, uint64_t txfee,uint256 opentxid,int64 UniValue ChannelClose(const CPubKey& pk, uint64_t txfee,uint256 opentxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,srcpub,destpub; struct CCcontract_info *cp,C; CTransaction channelOpenTx; uint256 hashblock,tmp_txid,prevtxid,hashchain,tokenid; @@ -634,7 +634,7 @@ UniValue ChannelClose(const CPubKey& pk, uint64_t txfee,uint256 opentxid) UniValue ChannelRefund(const CPubKey& pk, uint64_t txfee,uint256 opentxid,uint256 closetxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; struct CCcontract_info *cp,C; int64_t funds,payment,param2; int32_t i,numpayments,numvouts,param1; uint256 hashchain,hashblock,txid,prevtxid,param3,tokenid; diff --git a/src/cc/customcc.cpp b/src/cc/customcc.cpp index 723783be0..213184577 100644 --- a/src/cc/customcc.cpp +++ b/src/cc/customcc.cpp @@ -60,7 +60,7 @@ UniValue custom_func0(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) UniValue custom_func1(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); std::string rawtx; + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); std::string rawtx; UniValue result(UniValue::VOBJ); CPubKey mypk; int64_t amount = COIN; int32_t broadcastflag=0; if ( txfee == 0 ) txfee = CUSTOM_TXFEE; diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index d1d822c7f..e5989ba43 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -1341,7 +1341,7 @@ UniValue DiceList() std::string DiceCreateFunding(uint64_t txfee,char *planstr,int64_t funds,int64_t minbet,int64_t maxbet,int64_t maxodds,int64_t timeoutblocks) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); uint256 zero; CScript fundingPubKey; CPubKey mypk,dicepk; int64_t a,b,c,d; uint64_t sbits; struct CCcontract_info *cp,C; if ( funds < 0 || minbet < 0 || maxbet < 0 || maxodds < 1 || maxodds > 9999 || timeoutblocks < 0 || timeoutblocks > 1440 ) { @@ -1376,7 +1376,7 @@ std::string DiceCreateFunding(uint64_t txfee,char *planstr,int64_t funds,int64_t std::string DiceAddfunding(uint64_t txfee,char *planstr,uint256 fundingtxid,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CScript fundingPubKey,scriptPubKey; uint256 entropy,hentropy; CPubKey mypk,dicepk; uint64_t sbits; struct CCcontract_info *cp,C; int64_t minbet,maxbet,maxodds,timeoutblocks; if ( amount < 0 ) { @@ -1420,7 +1420,7 @@ std::string DiceAddfunding(uint64_t txfee,char *planstr,uint256 fundingtxid,int6 std::string DiceBet(uint64_t txfee,char *planstr,uint256 fundingtxid,int64_t bet,int32_t odds) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CScript fundingPubKey; CPubKey mypk,dicepk; uint64_t sbits,entropyval,entropyval2; int64_t funding,minbet,maxbet,maxodds,timeoutblocks; uint256 entropytxid,entropytxid2,entropy,hentropy; struct CCcontract_info *cp,C; if ( bet < 0 ) { @@ -1479,7 +1479,7 @@ std::string DiceBet(uint64_t txfee,char *planstr,uint256 fundingtxid,int64_t bet std::string DiceBetFinish(uint8_t &funcid,uint256 &entropyused,int32_t &entropyvout,int32_t *resultp,uint64_t txfee,char *planstr,uint256 fundingtxid,uint256 bettxid,int32_t winlosetimeout,uint256 vin0txid,int32_t vin0vout) { - CMutableTransaction savemtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction savemtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CScript scriptPubKey,fundingPubKey; CTransaction oldbetTx,betTx,entropyTx; uint256 hentropyproof,entropytxid,hashBlock,bettorentropy,entropy,hentropy,oldbettxid; CPubKey mypk,dicepk,fundingpk; struct CCcontract_info *cp,C; int64_t inputs=0,CCchange=0,odds,fundsneeded,minbet,maxbet,maxodds,timeoutblocks; int32_t oldentropyvout,retval=0,iswin=0; uint64_t entropyval,sbits; entropyused = zeroid; *resultp = 0; diff --git a/src/cc/dilithium.c b/src/cc/dilithium.c index 82c791c04..44b5518de 100644 --- a/src/cc/dilithium.c +++ b/src/cc/dilithium.c @@ -3164,7 +3164,7 @@ CPubKey Faucet_pubkeyget() UniValue dilithium_register(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx; CPubKey faucetpk,mypk,dilithiumpk; uint8_t seed[SEEDBYTES],pk[CRYPTO_PUBLICKEYBYTES],sk[CRYPTO_SECRETKEYBYTES]; char coinaddr[64],str[CRYPTO_SECRETKEYBYTES*2+1]; int64_t CCchange,inputs; std::vector bigpub; int32_t i,n,warningflag = 0; if ( txfee == 0 ) txfee = DILITHIUM_TXFEE; @@ -3292,7 +3292,7 @@ UniValue dilithium_verify(uint64_t txfee,struct CCcontract_info *cp,cJSON *param UniValue dilithium_send(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx,checkhandle; CPubKey destpub33,mypk,dilithiumpk; int32_t i,n; int64_t amount; uint256 destpubtxid; uint8_t pk[CRYPTO_PUBLICKEYBYTES]; if ( txfee == 0 ) txfee = DILITHIUM_TXFEE; @@ -3320,7 +3320,7 @@ UniValue dilithium_send(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) UniValue dilithium_spend(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx; CPubKey mypk,destpub33; CTransaction vintx; uint256 prevhash,hashBlock,destpubtxid; int32_t i,smlen,n,numvouts; char str[129],*scriptstr,*retstr=""; CTxOut vout; std::string handle; uint8_t pk[CRYPTO_PUBLICKEYBYTES],pk2[CRYPTO_PUBLICKEYBYTES],sk[CRYPTO_SECRETKEYBYTES],msg[32],seed[32]; std::vector sig; if ( txfee == 0 ) txfee = DILITHIUM_TXFEE; @@ -3416,7 +3416,7 @@ int64_t dilithium_inputs(struct CCcontract_info *cp,CMutableTransaction &mtx,CPu UniValue dilithium_Qsend(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx; CPubKey mypk,destpub33; CTransaction tx,vintx; uint256 prevhash,mypubtxid,hashBlock,destpubtxid; int64_t amount,inputsum,outputsum,change; int32_t i,smlen,n,numvouts; char str[129],myCCaddr[64],*scriptstr,*retstr=""; CTxOut vout; std::string handle; uint8_t pk[CRYPTO_PUBLICKEYBYTES],pk2[CRYPTO_PUBLICKEYBYTES],sk[CRYPTO_SECRETKEYBYTES],msg[32],seed[32]; std::vector sig; std::vector voutpubtxids; if ( txfee == 0 ) txfee = DILITHIUM_TXFEE; diff --git a/src/cc/faucet.cpp b/src/cc/faucet.cpp index 75d7c8dd9..dd468697a 100644 --- a/src/cc/faucet.cpp +++ b/src/cc/faucet.cpp @@ -182,7 +182,7 @@ int64_t AddFaucetInputs(struct CCcontract_info *cp,CMutableTransaction &mtx,CPub UniValue FaucetGet(const CPubKey& pk, uint64_t txfee) { - CMutableTransaction tmpmtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction tmpmtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey faucetpk; int64_t inputs,CCchange=0,nValue=FAUCETSIZE; struct CCcontract_info *cp,C; std::string rawhex; uint32_t j; int32_t i,len; uint8_t buf[32768]; bits256 hash; cp = CCinit(&C,EVAL_FAUCET); if ( txfee == 0 ) @@ -221,7 +221,7 @@ UniValue FaucetGet(const CPubKey& pk, uint64_t txfee) UniValue FaucetFund(const CPubKey& pk, uint64_t txfee,int64_t funds) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey faucetpk; CScript opret; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_FAUCET); @@ -240,7 +240,7 @@ UniValue FaucetFund(const CPubKey& pk, uint64_t txfee,int64_t funds) UniValue FaucetInfo() { UniValue result(UniValue::VOBJ); char numstr[64]; - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey faucetpk; struct CCcontract_info *cp,C; int64_t funding; result.push_back(Pair("result","success")); result.push_back(Pair("name","Faucet")); diff --git a/src/cc/fsm.cpp b/src/cc/fsm.cpp index 650ba094b..a73695cb9 100644 --- a/src/cc/fsm.cpp +++ b/src/cc/fsm.cpp @@ -160,7 +160,7 @@ std::string FSMList() std::string FSMCreate(uint64_t txfee,std::string name,std::string states) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,fsmpk; CScript opret; int64_t inputs,CCchange=0,nValue=COIN; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_FSM); if ( txfee == 0 ) @@ -181,7 +181,7 @@ std::string FSMCreate(uint64_t txfee,std::string name,std::string states) std::string FSMInfo(uint256 fsmtxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,fsmpk; int64_t funds = 0; CScript opret; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_FSM); mypk = pubkey2pk(Mypubkey()); diff --git a/src/cc/gamescc.cpp b/src/cc/gamescc.cpp index 13f77147b..a7643e03f 100644 --- a/src/cc/gamescc.cpp +++ b/src/cc/gamescc.cpp @@ -637,7 +637,7 @@ int32_t games_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx { int32_t i,n,vout,spentvini,registration_open = 0,alive = 0; CTransaction tx; uint256 txid,spenttxid,hashBlock; CBlockIndex *pindex; uint64_t txfee = 10000; numplayers = openslots = 0; - if ( komodo_nextheight() <= gameht+GAMES_MAXKEYSTROKESGAP ) + if ( hush_nextheight() <= gameht+GAMES_MAXKEYSTROKESGAP ) registration_open = 1; for (i=0; i 1); obj.push_back(Pair("height",ht)); obj.push_back(Pair("start",ht+delay)); - if ( komodo_nextheight() > ht+delay ) + if ( hush_nextheight() > ht+delay ) { if ( (pindex= komodo_chainactive(ht+delay)) != 0 ) { @@ -1065,7 +1065,7 @@ int32_t games_findbaton(struct CCcontract_info *cp,uint256 &playertxid,gameseven if ( myGetTransaction(batontxid,batontx,hashBlock) != 0 && batontx.vout.size() > 0 ) { if ( hashBlock == zeroid ) - batonht = komodo_nextheight(); + batonht = hush_nextheight(); else if ( (pindex= komodo_blockindex(hashBlock)) == 0 ) return(-4); else batonht = pindex->GetHeight(); @@ -1115,7 +1115,7 @@ void games_gameplayerinfo(struct CCcontract_info *cp,UniValue &obj,uint256 gamet UniValue games_newgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx; CPubKey gamespk,mypk; char *jsonstr; uint64_t inputsum,change,required,buyin=0; int32_t i,n,maxplayers = 1; if ( txfee == 0 ) txfee = 10000; @@ -1157,7 +1157,7 @@ UniValue games_pending(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) gamespk = GetUnspendable(cp,0); GetCCaddress(cp,coinaddr,gamespk); SetCCunspents(unspentOutputs,coinaddr,true); - nextheight = komodo_nextheight(); + nextheight = hush_nextheight(); for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { txid = it->first.txhash; @@ -1227,7 +1227,7 @@ UniValue games_register(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) // vin2 -> original creation TCBOO playerdata used // vin3+ -> buyin // vout0 -> keystrokes/completion baton - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); char destaddr[64],coinaddr[64]; uint256 tokenid,gametxid,origplayergame,playertxid,hashBlock; int32_t err,maxplayers,gameheight,n,numvouts,vout=1; int64_t inputsum,buyin,CCchange=0; CPubKey pk,mypk,gamespk,burnpk; CTransaction tx,playertx; std::vector playerdata; std::string rawtx,symbol,pname; bits256 t; if ( txfee == 0 ) @@ -1252,7 +1252,7 @@ UniValue games_register(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) if ( tokenid != zeroid ) // if it is tokentransfer this will be 0 vout = 1; } - if ( komodo_nextheight() > gameheight + GAMES_MAXKEYSTROKESGAP ) + if ( hush_nextheight() > gameheight + GAMES_MAXKEYSTROKESGAP ) return(cclib_error(result,"didnt register in time, GAMES_MAXKEYSTROKESGAP")); games_univalue(result,0,maxplayers,buyin); GetCCaddress1of2(cp,coinaddr,gamespk,mypk); @@ -1314,7 +1314,7 @@ UniValue games_keystrokes(uint64_t txfee,struct CCcontract_info *cp,cJSON *param // opret -> user input chars // being killed should auto broadcast (possible to be suppressed?) // respawn to be prevented by including timestamps - int32_t nextheight = komodo_nextheight(); + int32_t nextheight = hush_nextheight(); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(),nextheight); UniValue result(UniValue::VOBJ); CPubKey gamespk,mypk; uint256 gametxid,playertxid,batontxid; int64_t batonvalue,buyin; std::vector keystrokes,playerdata; int32_t numplayers,regslot,numkeys,batonht,batonvout,n,elapsed,gameheight,maxplayers; CTransaction tx; CTxOut txout; char *keystrokestr,destaddr[64]; std::string rawtx,symbol,pname; bits256 t; uint8_t mypriv[32]; // if ( txfee == 0 ) @@ -1511,7 +1511,7 @@ UniValue games_finish(uint64_t txfee,struct CCcontract_info *cp,cJSON *params,ch // vout0 -> playerdata marker // vout0 -> 1% ingame gold // get any playerdata, get all keystrokes, replay game and compare final state - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx,symbol,pname; CTransaction gametx; uint64_t seed; int64_t buyin,batonvalue,inputsum,cashout=0,CCchange=0; int32_t i,err,gameheight,tmp,numplayers,regslot,n,num,numkeys,maxplayers,batonht,batonvout; char mygamesaddr[64],str[512]; gamesevent *keystrokes = 0; std::vector playerdata,newdata,nodata; uint256 batontxid,playertxid,gametxid; CPubKey mypk,gamespk; uint8_t player[10000],mypriv[32],funcid; struct CCcontract_info *cpTokens, tokensC; @@ -1720,7 +1720,7 @@ UniValue games_setname(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) UniValue games_fund(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx; int64_t amount,inputsum; CPubKey gamespk,mypk; CScript opret; if ( params != 0 && cJSON_GetArraySize(params) == 1 ) { diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 6dfa82cf5..3962b0b84 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -867,7 +867,7 @@ int64_t AddGatewaysInputs(struct CCcontract_info *cp,CMutableTransaction &mtx,CP UniValue GatewaysBind(const CPubKey& pk, uint64_t txfee,std::string coin,uint256 tokenid,int64_t totalsupply,uint256 oracletxid,uint8_t M,uint8_t N,std::vector pubkeys,uint8_t p1,uint8_t p2,uint8_t p3,uint8_t p4) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction oracletx; uint8_t taddr,prefix,prefix2,wiftype; CPubKey mypk,gatewayspk; CScript opret; uint256 hashBlock; struct CCcontract_info *cp,*cpTokens,C,CTokens; std::string name,description,format; int32_t i,numvouts; int64_t fullsupply; char destaddr[64],coinaddr[64],myTokenCCaddr[64],*fstr; @@ -932,7 +932,7 @@ UniValue GatewaysBind(const CPubKey& pk, uint64_t txfee,std::string coin,uint256 UniValue GatewaysDeposit(const CPubKey& pk, uint64_t txfee,uint256 bindtxid,int32_t height,std::string refcoin,uint256 cointxid,int32_t claimvout,std::string deposithex,std::vectorproof,CPubKey destpub,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tx; CPubKey mypk; uint256 oracletxid,merkleroot,mhash,hashBlock,tokenid,txid; int64_t totalsupply; int32_t i,m,n,numvouts; uint8_t M,N,taddr,prefix,prefix2,wiftype; std::string coin; struct CCcontract_info *cp,C; std::vector pubkeys,publishers; std::vectortxids; char str[65],depositaddr[64],txidaddr[64]; @@ -982,7 +982,7 @@ UniValue GatewaysDeposit(const CPubKey& pk, uint64_t txfee,uint256 bindtxid,int3 UniValue GatewaysClaim(const CPubKey& pk, uint64_t txfee,uint256 bindtxid,std::string refcoin,uint256 deposittxid,CPubKey destpub,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tx; CPubKey mypk,gatewayspk,tmpdestpub; struct CCcontract_info *cp,C; uint8_t M,N,taddr,prefix,prefix2,wiftype; std::string coin, deposithex; std::vector pubkeys,publishers; int64_t totalsupply,depositamount,tmpamount,inputs,CCchange=0; int32_t numvouts,claimvout,height; std::vector proof; @@ -1022,7 +1022,7 @@ UniValue GatewaysClaim(const CPubKey& pk, uint64_t txfee,uint256 bindtxid,std::s UniValue GatewaysWithdraw(const CPubKey& pk, uint64_t txfee,uint256 bindtxid,std::string refcoin,CPubKey withdrawpub,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tx; CPubKey mypk,gatewayspk,signerpk; uint256 txid,tokenid,hashBlock,oracletxid,tmptokenid,tmpbindtxid,withdrawtxid; int32_t vout,numvouts; int64_t nValue,totalsupply,inputs,CCchange=0,tmpamount; uint8_t funcid,K,M,N,taddr,prefix,prefix2,wiftype; std::string coin,hex; std::vector pubkeys; char depositaddr[64],coinaddr[64]; struct CCcontract_info *cp,C,*cpTokens,CTokens; @@ -1078,7 +1078,7 @@ UniValue GatewaysWithdraw(const CPubKey& pk, uint64_t txfee,uint256 bindtxid,std UniValue GatewaysPartialSign(const CPubKey& pk, uint64_t txfee,uint256 lasttxid,std::string refcoin, std::string hex) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,withdrawpub,signerpk,gatewayspk; struct CCcontract_info *cp,C; CTransaction tx,tmptx; std::vector > unspentOutputs; char funcid,depositaddr[64]; int32_t numvouts; uint256 withdrawtxid,hashBlock,bindtxid,tokenid,oracletxid,tmptokenid; std::string coin,tmphex; int64_t amount,totalsupply; @@ -1133,7 +1133,7 @@ UniValue GatewaysPartialSign(const CPubKey& pk, uint64_t txfee,uint256 lasttxid, UniValue GatewaysCompleteSigning(const CPubKey& pk, uint64_t txfee,uint256 lasttxid,std::string refcoin,std::string hex) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,gatewayspk,signerpk,withdrawpub; struct CCcontract_info *cp,C; char funcid,depositaddr[64]; int64_t amount,totalsupply; std::string coin,tmphex; CTransaction tx,tmptx; uint256 withdrawtxid,hashBlock,tokenid,tmptokenid,bindtxid,oracletxid; int32_t numvouts; uint8_t K=0,M,N,taddr,prefix,prefix2,wiftype; std::vector pubkeys; @@ -1187,7 +1187,7 @@ UniValue GatewaysCompleteSigning(const CPubKey& pk, uint64_t txfee,uint256 lastt UniValue GatewaysMarkDone(const CPubKey& pk, uint64_t txfee,uint256 completetxid,std::string refcoin) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; struct CCcontract_info *cp,C; char depositaddr[64]; CTransaction tx; int32_t numvouts; uint256 withdrawtxid,bindtxid,oracletxid,tokenid,tmptokenid,hashBlock; std::string coin,hex; uint8_t K,M,N,taddr,prefix,prefix2,wiftype; std::vector pubkeys; int64_t amount,totalsupply; CPubKey withdrawpub; @@ -1499,7 +1499,7 @@ UniValue GatewaysDumpPrivKey(uint256 bindtxid,CKey key) UniValue GatewaysInfo(uint256 bindtxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ),a(UniValue::VARR); std::string coin; char str[67],numstr[65],depositaddr[64],gatewaystokens[64]; uint8_t M,N; std::vector pubkeys; uint8_t taddr,prefix,prefix2,wiftype; uint256 tokenid,oracletxid,hashBlock; CTransaction tx; CPubKey Gatewayspk; struct CCcontract_info *cp,C; int32_t i; int64_t numvouts,totalsupply,remaining; std::vector msigpubkeys; diff --git a/src/cc/heir.cpp b/src/cc/heir.cpp index d930c30c5..98fe18c71 100644 --- a/src/cc/heir.cpp +++ b/src/cc/heir.cpp @@ -618,7 +618,7 @@ template int64_t LifetimeHeirContractFunds(struct CCcontract_info template UniValue _HeirFund(int64_t txfee, int64_t amount, std::string heirName, CPubKey heirPubkey, int64_t inactivityTimeSec, std::string memo, uint256 tokenid) { UniValue result(UniValue::VOBJ); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); struct CCcontract_info *cp, C; cp = CCinit(&C, Helper::getMyEval()); @@ -725,7 +725,7 @@ UniValue HeirFundTokenCaller(int64_t txfee, int64_t satoshis, std::string heirNa template UniValue _HeirAdd(uint256 fundingtxid, int64_t txfee, int64_t amount, uint256 latesttxid, uint8_t funcId, uint256 tokenid, CPubKey ownerPubkey, CPubKey heirPubkey, int64_t inactivityTimeSec, uint8_t hasHeirSpendingBegun) { UniValue result(UniValue::VOBJ); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); struct CCcontract_info *cp, C; std::string rawhex; @@ -890,7 +890,7 @@ UniValue HeirAddCaller(uint256 fundingtxid, int64_t txfee, std::string strAmount template UniValue _HeirClaim(uint256 fundingtxid, int64_t txfee, int64_t amount, uint256 latesttxid, uint8_t funcId, uint256 tokenid, CPubKey ownerPubkey, CPubKey heirPubkey, int64_t inactivityTimeSec, uint8_t hasHeirSpendingBegun) { UniValue result(UniValue::VOBJ); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey myPubkey; int64_t inputs, change = 0; struct CCcontract_info *cp, C; @@ -1066,7 +1066,7 @@ UniValue HeirInfo(uint256 fundingtxid) { UniValue result(UniValue::VOBJ); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction fundingtx; uint256 hashBlock; const bool allowSlow = false; diff --git a/src/cc/import.cpp b/src/cc/import.cpp index fa12e3921..7f21f6e9f 100644 --- a/src/cc/import.cpp +++ b/src/cc/import.cpp @@ -82,7 +82,7 @@ CMutableTransaction MakeSelfImportSourceTx(CTxDestination &dest, int64_t amount) cpDummy = CCinit(&C, EVAL_TOKENS); // this is just for FinalizeCCTx to work - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); if (AddNormalinputs(mtx, myPubKey, 2 * txfee, 4) == 0) { LOGSTREAM("importcoin", CCLOG_INFO, stream << "MakeSelfImportSourceTx() warning: cannot find normal inputs for txfee" << std::endl); @@ -129,7 +129,7 @@ int32_t GetSelfimportProof(const CMutableTransaction sourceMtx, CMutableTransact CMutableTransaction tmpmtx; //CTransaction sourcetx; - tmpmtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + tmpmtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); /* if (!E_UNMARSHAL(ParseHex(rawsourcetx), ss >> sourcetx)) { @@ -203,7 +203,7 @@ int32_t GetSelfimportProof(const CMutableTransaction sourceMtx, CMutableTransact // make import tx with burntx and dual daemon std::string MakeCodaImportTx(uint64_t txfee, std::string receipt, std::string srcaddr, std::vector vouts) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()),burntx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()),burntx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; uint256 codaburntxid; std::vector dummyproof; int32_t i,numvouts,n,m; std::string coin,error; struct CCcontract_info *cp, C; cJSON *result,*tmp,*tmp1; unsigned char hash[SHA256_DIGEST_LENGTH+1]; diff --git a/src/cc/importgateway.cpp b/src/cc/importgateway.cpp index eb1cd0cb4..fc2f9e22b 100644 --- a/src/cc/importgateway.cpp +++ b/src/cc/importgateway.cpp @@ -474,7 +474,7 @@ bool ImportGatewayValidate(struct CCcontract_info *cp,Eval *eval,const CTransact std::string ImportGatewayBind(uint64_t txfee,std::string coin,uint256 oracletxid,uint8_t M,uint8_t N,std::vector pubkeys,uint8_t p1,uint8_t p2,uint8_t p3,uint8_t p4) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction oracletx; uint8_t taddr,prefix,prefix2,wiftype; CPubKey mypk,importgatewaypk; CScript opret; uint256 hashBlock; struct CCcontract_info *cp,*cpTokens,C,CTokens; std::string name,description,format; int32_t i,numvouts; char destaddr[64],coinaddr[64],myTokenCCaddr[64],str[65],*fstr; @@ -565,7 +565,7 @@ std::string ImportGatewayBind(uint64_t txfee,std::string coin,uint256 oracletxid std::string ImportGatewayDeposit(uint64_t txfee,uint256 bindtxid,int32_t height,std::string refcoin,uint256 burntxid,int32_t claimvout,std::string rawburntx,std::vectorproof,CPubKey destpub,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()), burntx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()), burntx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction bindtx; CPubKey mypk; uint256 oracletxid,merkleroot,mhash,hashBlock,txid; std::vector vouts; int32_t i,m,n,numvouts; uint8_t M,N,taddr,prefix,prefix2,wiftype; std::string coin; struct CCcontract_info *cp,C; std::vector pubkeys,publishers; std::vector txids; char str[128],burnaddr[64]; @@ -643,7 +643,7 @@ std::string ImportGatewayDeposit(uint64_t txfee,uint256 bindtxid,int32_t height, std::string ImportGatewayWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin,CPubKey withdrawpub,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tx; CPubKey mypk,importgatewaypk,signerpk; uint256 txid,hashBlock,oracletxid,tmptokenid,tmpbindtxid,withdrawtxid; int32_t vout,numvouts; int64_t nValue,inputs,CCchange=0,tmpamount; uint8_t funcid,K,M,N,taddr,prefix,prefix2,wiftype; std::string coin,hex; std::vector msigpubkeys; char burnaddr[64],str[65],coinaddr[64]; struct CCcontract_info *cp,C; @@ -721,7 +721,7 @@ std::string ImportGatewayWithdraw(uint64_t txfee,uint256 bindtxid,std::string re std::string ImportGatewayPartialSign(uint64_t txfee,uint256 lasttxid,std::string refcoin, std::string hex) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,withdrawpub,signerpk,importgatewaypk; struct CCcontract_info *cp,C; CTransaction tx,tmptx; std::vector > unspentOutputs; char funcid,str[65],burnaddr[64]; int32_t numvouts; uint256 withdrawtxid,hashBlock,bindtxid,tokenid,oracletxid; std::string coin,tmphex; int64_t amount; @@ -834,7 +834,7 @@ std::string ImportGatewayPartialSign(uint64_t txfee,uint256 lasttxid,std::string std::string ImportGatewayCompleteSigning(uint64_t txfee,uint256 lasttxid,std::string refcoin,std::string hex) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,importgatewaypk,signerpk,withdrawpub; struct CCcontract_info *cp,C; char funcid,str[65],burnaddr[64]; int64_t amount; std::string coin,tmphex; CTransaction tx,tmptx; uint256 withdrawtxid,hashBlock,tokenid,bindtxid,oracletxid; int32_t numvouts; uint8_t K=0,M,N,taddr,prefix,prefix2,wiftype; std::vector pubkeys; @@ -951,7 +951,7 @@ std::string ImportGatewayCompleteSigning(uint64_t txfee,uint256 lasttxid,std::st std::string ImportGatewayMarkDone(uint64_t txfee,uint256 completetxid,std::string refcoin) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk; struct CCcontract_info *cp,C; char str[65],burnaddr[64]; CTransaction tx; int32_t numvouts; uint256 withdrawtxid,bindtxid,oracletxid,tokenid,hashBlock; std::string coin,hex; uint8_t K,M,N,taddr,prefix,prefix2,wiftype; std::vector pubkeys; int64_t amount; CPubKey withdrawpub; @@ -1245,7 +1245,7 @@ UniValue ImportGatewayDumpPrivKey(uint256 bindtxid,CKey key) UniValue ImportGatewayInfo(uint256 bindtxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ),a(UniValue::VARR); std::string coin; char str[67],numstr[65],burnaddr[64],gatewaystokens[64]; uint8_t M,N; std::vector pubkeys; uint8_t taddr,prefix,prefix2,wiftype; uint256 oracletxid,hashBlock; CTransaction tx; CPubKey ImportGatewaypk; struct CCcontract_info *cp,C; int32_t i; int64_t numvouts,remaining; std::vector msigpubkeys; diff --git a/src/cc/lotto.cpp b/src/cc/lotto.cpp index d612d9e0a..9aaa273ef 100644 --- a/src/cc/lotto.cpp +++ b/src/cc/lotto.cpp @@ -286,7 +286,7 @@ UniValue LottoList() std::string LottoCreate(uint64_t txfee,char *planstr,int64_t funding,int32_t ticketsize,int32_t odds,int32_t firstheight,int32_t period) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); uint256 entropy,hentropy; CPubKey mypk,lottopk; uint64_t sbits; int64_t inputs,CCchange=0,nValue=COIN; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_LOTTO); if ( txfee == 0 ) @@ -305,7 +305,7 @@ std::string LottoCreate(uint64_t txfee,char *planstr,int64_t funding,int32_t tic std::string LottoTicket(uint64_t txfee,uint256 lottoid,int64_t numtickets) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,lottopk; CScript opret; int64_t inputs,CCchange=0,nValue=COIN; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_LOTTO); if ( txfee == 0 ) @@ -326,7 +326,7 @@ std::string LottoTicket(uint64_t txfee,uint256 lottoid,int64_t numtickets) std::string LottoWinner(uint64_t txfee) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,lottopk; int64_t winnings = 0; CScript opret; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_LOTTO); if ( txfee == 0 ) diff --git a/src/cc/musig.cpp b/src/cc/musig.cpp index 3aff37b51..4b266e44c 100644 --- a/src/cc/musig.cpp +++ b/src/cc/musig.cpp @@ -753,7 +753,7 @@ UniValue musig_rawtxresult(UniValue &result,std::string rawtx) UniValue musig_send(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); int32_t n; char *hexstr; std::string rawtx; int64_t amount; CPubKey musigpk,mypk; if ( txfee == 0 ) txfee = MUSIG_TXFEE; @@ -778,7 +778,7 @@ UniValue musig_send(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) UniValue musig_spend(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { static secp256k1_context *ctx; - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx; CPubKey mypk,pk; secp256k1_pubkey combined_pk; char *scriptstr,*musigstr; uint8_t msg[32]; CTransaction vintx; uint256 prevhash,hashBlock; int32_t i,n,numvouts; char str[129]; CTxOut vout; secp256k1_schnorrsig musig; if ( ctx == 0 ) ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index b4089d35b..9b593b248 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -862,7 +862,7 @@ int64_t AddMyOraclesFunds(struct CCcontract_info *cp,CMutableTransaction &mtx,CP UniValue OracleCreate(const CPubKey& pk, int64_t txfee,std::string name,std::string description,std::string format) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,Oraclespk; struct CCcontract_info *cp,C; char fmt; cp = CCinit(&C,EVAL_ORACLES); @@ -900,7 +900,7 @@ UniValue OracleCreate(const CPubKey& pk, int64_t txfee,std::string name,std::str UniValue OracleFund(const CPubKey& pk, int64_t txfee,uint256 oracletxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); CTransaction tx; + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tx; CPubKey mypk,oraclespk; struct CCcontract_info *cp,C; std::string name,desc,format; int32_t numvouts; uint256 hashBlock; if (GetLatestTimestamp(komodo_currentheight()) data) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CScript pubKey; CPubKey mypk,batonpk; int64_t offset,datafee,inputs,CCchange = 0; struct CCcontract_info *cp,C; uint256 batontxid,hashBlock; char coinaddr[64],batonaddr[64]; std::vector prevdata; CTransaction tx; std::string name,description,format; int32_t len,numvouts; @@ -1143,7 +1143,7 @@ UniValue OracleInfo(uint256 origtxid) { UniValue result(UniValue::VOBJ),a(UniValue::VARR); std::vector > unspentOutputs; int32_t height; - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tx; std::string name,description,format; uint256 hashBlock,txid,oracletxid,batontxid; CPubKey pk; struct CCcontract_info *cp,C; int64_t datafee,funding; char str[67],markeraddr[64],numstr[64],batonaddr[64]; std::vector data; std::map> publishers; diff --git a/src/cc/payments.cpp b/src/cc/payments.cpp index 4943e5ee2..4b0a0bc09 100644 --- a/src/cc/payments.cpp +++ b/src/cc/payments.cpp @@ -711,7 +711,7 @@ int32_t payments_parsehexdata(std::vector &hexdata,cJSON *item,int32_t UniValue PaymentsRelease(struct CCcontract_info *cp,char *jsonstr) { LOCK(cs_main); - CMutableTransaction tmpmtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(),komodo_nextheight()); UniValue result(UniValue::VOBJ); uint256 createtxid,hashBlock,tokenid; + CMutableTransaction tmpmtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(),hush_nextheight()); UniValue result(UniValue::VOBJ); uint256 createtxid,hashBlock,tokenid; CTransaction tx,txO; CPubKey mypk,txidpk,Paymentspk; int32_t i,n,m,numoprets=0,lockedblocks,minrelease; int64_t newamount,inputsum,amount,CCchange=0,totalallocations=0,checkallocations=0,allocation; CTxOut vout; CScript onlyopret,ccopret; char txidaddr[64],destaddr[64]; std::vector txidoprets; int32_t top,bottom=0,blocksleft=0,minimum=10000; std::vector> excludeScriptPubKeys; int8_t funcid,fixedAmount=0,skipminimum=0; bool fFixedAmount = false; mpz_t mpzTotalAllocations, mpzAllocation; mpz_init(mpzTotalAllocations); @@ -968,7 +968,7 @@ UniValue PaymentsRelease(struct CCcontract_info *cp,char *jsonstr) UniValue PaymentsFund(struct CCcontract_info *cp,char *jsonstr) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); UniValue result(UniValue::VOBJ); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); CPubKey Paymentspk,mypk,txidpk; uint256 txid,hashBlock; int64_t amount,totalallocations; CScript opret; CTransaction tx; char txidaddr[64]; std::string rawtx; int32_t n,useopret = 0,broadcast=0,lockedblocks,minrelease; std::vector txidoprets; int32_t top,bottom,minimum=10000; std::vector> excludeScriptPubKeys; // snapshot uint256 tokenid; int8_t fixedAmount; @@ -1033,7 +1033,7 @@ UniValue PaymentsFund(struct CCcontract_info *cp,char *jsonstr) UniValue PaymentsMerge(struct CCcontract_info *cp,char *jsonstr) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); UniValue result(UniValue::VOBJ); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); CPubKey Paymentspk,mypk,txidpk; uint256 createtxid,hashBlock; int64_t inputsum,totalallocations=0; CScript opret; CTransaction tx; char txidaddr[64],destaddr[64]; std::string rawtx; int32_t n,lockedblocks,minrelease,top,bottom,minimum=10000,blocksleft; std::vector txidoprets; std::vector> excludeScriptPubKeys; // snapshot @@ -1091,7 +1091,7 @@ UniValue PaymentsMerge(struct CCcontract_info *cp,char *jsonstr) UniValue PaymentsTxidopret(struct CCcontract_info *cp,char *jsonstr) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); UniValue result(UniValue::VOBJ); CPubKey mypk; std::string rawtx; + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); CPubKey mypk; std::string rawtx; std::vector scriptPubKey,opret; int32_t n,retval0,retval1=0; int64_t allocation; CScript test; txnouttype whichType; cJSON *params = payments_reparse(&n,jsonstr); mypk = pubkey2pk(Mypubkey()); @@ -1147,7 +1147,7 @@ UniValue PaymentsTxidopret(struct CCcontract_info *cp,char *jsonstr) UniValue PaymentsCreate(struct CCcontract_info *cp,char *jsonstr) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); CTransaction tx; CPubKey Paymentspk,mypk; char markeraddr[64]; std::vector txidoprets; uint256 hashBlock; int32_t i,n,numoprets=0,lockedblocks,minrelease; std::string rawtx; int64_t totalallocations = 0; cJSON *params = payments_reparse(&n,jsonstr); if ( params != 0 && n >= 4 ) @@ -1219,7 +1219,7 @@ UniValue PaymentsCreate(struct CCcontract_info *cp,char *jsonstr) UniValue PaymentsAirdrop(struct CCcontract_info *cp,char *jsonstr) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); uint256 hashBlock; CTransaction tx; CPubKey Paymentspk,mypk; char markeraddr[64]; std::string rawtx; int32_t lockedblocks,minrelease,top,bottom,n,i,minimum=10000; std::vector> excludeScriptPubKeys; int8_t fixedAmount; @@ -1311,7 +1311,7 @@ UniValue PaymentsAirdrop(struct CCcontract_info *cp,char *jsonstr) UniValue PaymentsAirdropTokens(struct CCcontract_info *cp,char *jsonstr) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); uint256 hashBlock, tokenid = zeroid; CTransaction tx; CPubKey Paymentspk,mypk; char markeraddr[64]; std::string rawtx; int32_t lockedblocks,minrelease,top,bottom,n,i,minimum=10000; std::vector> excludeScriptPubKeys; int8_t fixedAmount; @@ -1396,7 +1396,7 @@ UniValue PaymentsInfo(struct CCcontract_info *cp,char *jsonstr) { UniValue result(UniValue::VOBJ),a(UniValue::VARR); CTransaction tx,txO; CPubKey Paymentspk,txidpk; int32_t i,j,n,flag=0,numoprets=0,lockedblocks,minrelease,blocksleft=0; std::vector txidoprets; int64_t funds,fundsopret,elegiblefunds,totalallocations=0,allocation; char fundsaddr[64],fundsopretaddr[64],txidaddr[64],*outstr; uint256 createtxid,hashBlock; int32_t top,bottom,minimum=10000; std::vector> excludeScriptPubKeys; // snapshot - uint256 tokenid; int8_t fixedAmount; CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(),komodo_nextheight()); + uint256 tokenid; int8_t fixedAmount; CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(),hush_nextheight()); cJSON *params = payments_reparse(&n,jsonstr); if ( params != 0 && n == 1 ) { diff --git a/src/cc/pegs.cpp b/src/cc/pegs.cpp index 876d4a595..ba098016f 100644 --- a/src/cc/pegs.cpp +++ b/src/cc/pegs.cpp @@ -694,7 +694,7 @@ std::string PegsFindBestAccount(struct CCcontract_info *cp,uint256 pegstxid, uin UniValue PegsCreate(const CPubKey& pk,uint64_t txfee,int64_t amount, std::vector bindtxids) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,pegspk; struct CCcontract_info *cp,C; CTransaction tx; int32_t numvouts; int64_t totalsupply; std::string coin; char depositaddr[64]; uint256 txid,hashBlock,tmptokenid,oracletxid; uint8_t M,N,taddr,prefix,prefix2,wiftype; std::vector pubkeys; @@ -720,7 +720,7 @@ UniValue PegsCreate(const CPubKey& pk,uint64_t txfee,int64_t amount, std::vector UniValue PegsFund(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 tokenid,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); std::string coin; + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); std::string coin; CTransaction pegstx,tx; int32_t numvouts; int64_t totalsupply,balance=0,funds=0,tokenfunds=0; uint256 accounttxid=zeroid,hashBlock,txid,tmptokenid,oracletxid; CPubKey mypk,pegspk,tmppk; struct CCcontract_info *cp,*cpTokens,CTokens,C; char depositaddr[64],coinaddr[64]; std::pair account(0,0); uint8_t M,N,taddr,prefix,prefix2,wiftype,mypriv[32]; std::vector pubkeys; bool found=false; std::vector bindtxids; @@ -788,7 +788,7 @@ UniValue PegsFund(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 tok UniValue PegsGet(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 tokenid, int64_t amount) { - CMutableTransaction burntx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()),mtx; + CMutableTransaction burntx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()),mtx; CTransaction pegstx,tx; int32_t numvouts; int64_t funds=0; uint256 accounttxid=zeroid,hashBlock,pricestxid; char coinaddr[64]; CPubKey mypk,pegspk,tmppk; struct CCcontract_info *cp,C; std::pair account(0,0); uint8_t mypriv[32]; std::vector dummyproof; std::vector vouts; std::vector bindtxids; CScript opret; @@ -840,7 +840,7 @@ UniValue PegsGet(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 toke UniValue PegsRedeem(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 tokenid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); std::string coin; + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); std::string coin; CTransaction pegstx,tx; int32_t numvouts; int64_t totalsupply,pegsfunds=0,funds=0,tokenfunds=0,amount; uint256 accounttxid=zeroid,hashBlock,txid,tmptokenid,oracletxid; CPubKey mypk,pegspk,tmppk; struct CCcontract_info *cp,*cpTokens,CTokens,C; char depositaddr[64],coinaddr[64]; std::pair account(0,0); uint8_t M,N,taddr,prefix,prefix2,wiftype,mypriv[32]; std::vector pubkeys; bool found=false; std::vector bindtxids; @@ -923,7 +923,7 @@ UniValue PegsRedeem(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 t UniValue PegsExchange(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 tokenid, int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); std::string coin; + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); std::string coin; CTransaction pegstx,tx; int32_t numvouts; int64_t totalsupply,pegsfunds=0,funds=0,tokenfunds=0,tokenamount,tmpamount; uint256 accounttxid=zeroid,hashBlock,txid,tmptokenid,oracletxid; CPubKey mypk,pegspk,tmppk; struct CCcontract_info *cp,*cpTokens,CTokens,C; char depositaddr[64],coinaddr[64]; std::pair account(0,0); uint8_t M,N,taddr,prefix,prefix2,wiftype,mypriv[32]; std::vector pubkeys; bool found=false; std::vector bindtxids; @@ -1010,7 +1010,7 @@ UniValue PegsExchange(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 UniValue PegsLiquidate(const CPubKey& pk,uint64_t txfee,uint256 pegstxid, uint256 tokenid, uint256 liquidatetxid) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); std::string coin; + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); std::string coin; CTransaction pegstx,tx; int32_t numvouts; int64_t totalsupply,pegsfunds=0,funds=0,tokenfunds=0,amount,tmpamount,tokenamount,burnamount; CPubKey mypk,pegspk,tmppk; struct CCcontract_info *cp,*cpTokens,CTokens,C; char depositaddr[64],coinaddr[64]; std::pair account(0,0),myaccount(0,0); uint8_t M,N,taddr,prefix,prefix2,wiftype; std::vector pubkeys; bool found=false; std::vector bindtxids; diff --git a/src/cc/prices.cpp b/src/cc/prices.cpp index 5464d8298..dfa4b5003 100644 --- a/src/cc/prices.cpp +++ b/src/cc/prices.cpp @@ -1455,7 +1455,7 @@ int64_t prices_enumaddedbets(uint256 &batontxid, std::vector &bets, // pricesbet rpc impl: make betting tx UniValue PricesBet(int64_t txfee, int64_t amount, int16_t leverage, std::vector synthetic) { - int32_t nextheight = komodo_nextheight(); + int32_t nextheight = hush_nextheight(); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); struct CCcontract_info *cp, C; CPubKey pricespk, mypk; @@ -1526,7 +1526,7 @@ UniValue PricesBet(int64_t txfee, int64_t amount, int16_t leverage, std::vector< // pricesaddfunding rpc impl: add yet another bet UniValue PricesAddFunding(int64_t txfee, uint256 bettxid, int64_t amount) { - int32_t nextheight = komodo_nextheight(); + int32_t nextheight = hush_nextheight(); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); struct CCcontract_info *cp, C; CTransaction bettx; @@ -1646,7 +1646,7 @@ int32_t prices_scanchain(std::vector &bets, int16_t leverage, std::v // pricescostbasis rpc impl: set cost basis (open price) for the bet (deprecated) UniValue PricesSetcostbasis(int64_t txfee, uint256 bettxid) { - int32_t nextheight = komodo_nextheight(); + int32_t nextheight = hush_nextheight(); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); struct CCcontract_info *cp, C; CTransaction bettx; uint256 hashBlock, batontxid, tokenid; @@ -1718,7 +1718,7 @@ UniValue PricesSetcostbasis(int64_t txfee, uint256 bettxid) // pricesaddfunding rpc impl: add yet another bet UniValue PricesRefillFund(int64_t amount) { - int32_t nextheight = komodo_nextheight(); + int32_t nextheight = hush_nextheight(); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); struct CCcontract_info *cp, C; CPubKey pricespk, mypk, pk; @@ -1885,7 +1885,7 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo) // pricesrekt rpc: anyone can rekt a bet at some block where losses reached limit, collecting fee UniValue PricesRekt(int64_t txfee, uint256 bettxid, int32_t rektheight) { - int32_t nextheight = komodo_nextheight(); + int32_t nextheight = hush_nextheight(); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); struct CCcontract_info *cp, C; CTransaction bettx; @@ -1999,7 +1999,7 @@ UniValue PricesRekt(int64_t txfee, uint256 bettxid, int32_t rektheight) // pricescashout rpc impl: bettor can cashout hit bet if it is not rekt UniValue PricesCashout(int64_t txfee, uint256 bettxid) { - int32_t nextheight = komodo_nextheight(); + int32_t nextheight = hush_nextheight(); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); struct CCcontract_info *cp, C; char destaddr[64]; diff --git a/src/cc/rewards.cpp b/src/cc/rewards.cpp index 3f72157df..7bb8f31b6 100644 --- a/src/cc/rewards.cpp +++ b/src/cc/rewards.cpp @@ -552,7 +552,7 @@ UniValue RewardsList() std::string RewardsCreateFunding(uint64_t txfee,char *planstr,int64_t funds,int64_t APR,int64_t minseconds,int64_t maxseconds,int64_t mindeposit) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,rewardspk; CScript opret; uint64_t sbits,a,b,c,d; struct CCcontract_info *cp,C; if ( funds < COIN || mindeposit < 0 || minseconds < 0 || maxseconds < 0 ) { @@ -587,7 +587,7 @@ std::string RewardsCreateFunding(uint64_t txfee,char *planstr,int64_t funds,int6 std::string RewardsAddfunding(uint64_t txfee,char *planstr,uint256 fundingtxid,int64_t amount) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,rewardspk; CScript opret; uint64_t sbits,a,b,c,d; struct CCcontract_info *cp,C; if ( amount < 0 ) { @@ -622,7 +622,7 @@ std::string RewardsAddfunding(uint64_t txfee,char *planstr,uint256 fundingtxid,i std::string RewardsLock(uint64_t txfee,char *planstr,uint256 fundingtxid,int64_t deposit) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CPubKey mypk,rewardspk; CScript opret; uint64_t lockedfunds,sbits,funding,APR,minseconds,maxseconds,mindeposit; struct CCcontract_info *cp,C; if ( deposit < txfee ) { @@ -666,7 +666,7 @@ std::string RewardsLock(uint64_t txfee,char *planstr,uint256 fundingtxid,int64_t std::string RewardsUnlock(uint64_t txfee,char *planstr,uint256 fundingtxid,uint256 locktxid) { - CMutableTransaction firstmtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction firstmtx,mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tx; char coinaddr[64]; CPubKey mypk,rewardspk; CScript scriptPubKey,ignore; uint256 hashBlock; uint64_t sbits,APR,minseconds,maxseconds,mindeposit; int64_t funding,reward=0,amount=0,inputs,CCchange=0; struct CCcontract_info *cp,C; cp = CCinit(&C,EVAL_REWARDS); if ( txfee == 0 ) diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index eebe14eaa..235bf9abc 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -612,7 +612,7 @@ int32_t rogue_findbaton(struct CCcontract_info *cp,uint256 &playertxid,char **ke if ( myGetTransaction(batontxid,batontx,hashBlock) != 0 && batontx.vout.size() > 0 ) { if ( hashBlock == zeroid ) - batonht = komodo_nextheight(); + batonht = hush_nextheight(); else if ( (pindex= komodo_blockindex(hashBlock)) == 0 ) return(-4); else batonht = pindex->GetHeight(); @@ -630,7 +630,7 @@ int32_t rogue_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx { int32_t i,n,vout,spentvini,registration_open = 0,alive = 0; CTransaction tx; uint256 txid,spenttxid,hashBlock; CBlockIndex *pindex; uint64_t txfee = 10000; numplayers = openslots = 0; - if ( komodo_nextheight() <= gameht+ROGUE_MAXKEYSTROKESGAP ) + if ( hush_nextheight() <= gameht+ROGUE_MAXKEYSTROKESGAP ) registration_open = 1; for (i=0; i 1); obj.push_back(Pair("height",ht)); obj.push_back(Pair("start",ht+delay)); - if ( komodo_nextheight() > ht+delay ) + if ( hush_nextheight() > ht+delay ) { if ( (pindex= komodo_chainactive(ht+delay)) != 0 ) { @@ -790,7 +790,7 @@ UniValue rogue_rawtxresult(UniValue &result,std::string rawtx,int32_t broadcastf UniValue rogue_newgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx; CPubKey roguepk,mypk; char *jsonstr; uint64_t inputsum,change,required,buyin=0; int32_t i,n,maxplayers = 1; if ( txfee == 0 ) txfee = 10000; @@ -850,7 +850,7 @@ UniValue rogue_register(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) // vin2 -> original creation TCBOO playerdata used // vin3+ -> buyin // vout0 -> keystrokes/completion baton - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); char destaddr[64],coinaddr[64]; uint256 tokenid,gametxid,origplayergame,playertxid,hashBlock; int32_t err,maxplayers,gameheight,n,numvouts,vout=1; int64_t inputsum,buyin,CCchange=0; CPubKey pk,mypk,roguepk,burnpk; CTransaction tx,playertx; std::vector playerdata; std::string rawtx,symbol,pname; bits256 t; if ( txfee == 0 ) @@ -875,7 +875,7 @@ UniValue rogue_register(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) if ( tokenid != zeroid ) // if it is tokentransfer this will be 0 vout = 1; } - if ( komodo_nextheight() > gameheight + ROGUE_MAXKEYSTROKESGAP ) + if ( hush_nextheight() > gameheight + ROGUE_MAXKEYSTROKESGAP ) return(cclib_error(result,"didnt register in time, ROGUE_MAXKEYSTROKESGAP")); rogue_univalue(result,0,maxplayers,buyin); GetCCaddress1of2(cp,coinaddr,roguepk,mypk); @@ -937,7 +937,7 @@ UniValue rogue_keystrokes(uint64_t txfee,struct CCcontract_info *cp,cJSON *param // opret -> user input chars // being killed should auto broadcast (possible to be suppressed?) // respawn to be prevented by including timestamps - int32_t nextheight = komodo_nextheight(); + int32_t nextheight = hush_nextheight(); CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(),nextheight); UniValue result(UniValue::VOBJ); CPubKey roguepk,mypk; uint256 gametxid,playertxid,batontxid; int64_t batonvalue,buyin; std::vector keystrokes,playerdata; int32_t numplayers,regslot,numkeys,batonht,batonvout,n,elapsed,gameheight,maxplayers; CTransaction tx; CTxOut txout; char *keystrokestr,destaddr[64]; std::string rawtx,symbol,pname; bits256 t; uint8_t mypriv[32]; // if ( txfee == 0 ) @@ -1223,7 +1223,7 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param // vout0 -> playerdata marker // vout0 -> 1% ingame gold // get any playerdata, get all keystrokes, replay game and compare final state - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx,symbol,pname; CTransaction gametx; uint64_t seed,mult; int64_t buyin,batonvalue,inputsum,cashout=0,CCchange=0; int32_t i,err,gameheight,tmp,numplayers,regslot,n,num,dungeonlevel,numkeys,maxplayers,batonht,batonvout; char myrogueaddr[64],*keystrokes = 0; std::vector playerdata,newdata,nodata; uint256 batontxid,playertxid,gametxid; CPubKey mypk,roguepk; uint8_t player[10000],mypriv[32],funcid; struct CCcontract_info *cpTokens, tokensC; @@ -1289,7 +1289,7 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param mtx.vout.push_back(MakeTokensCC1vout(cp->evalcode,1,mypk)); cashout = rogue_cashout(&P); fprintf(stderr,"\nextracted $$$gold.%d -> %.8f ROGUE hp.%d strength.%d/%d level.%d exp.%d dl.%d n.%d amulet.%d\n",P.gold,(double)cashout/COIN,P.hitpoints,P.strength&0xffff,P.strength>>16,P.level,P.experience,P.dungeonlevel,n,P.amulet); - if ( komodo_nextheight() > 77777 && cashout > ROGUE_MAXCASHOUT ) + if ( hush_nextheight() > 77777 && cashout > ROGUE_MAXCASHOUT ) cashout = ROGUE_MAXCASHOUT; if ( funcid == 'H' && maxplayers > 1 ) { @@ -1403,7 +1403,7 @@ UniValue rogue_pending(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) roguepk = GetUnspendable(cp,0); GetCCaddress(cp,coinaddr,roguepk); SetCCunspents(unspentOutputs,coinaddr,true); - nextheight = komodo_nextheight(); + nextheight = hush_nextheight(); for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { txid = it->first.txhash; diff --git a/src/cc/sudoku.cpp b/src/cc/sudoku.cpp index d7ed51abe..ab2996a73 100644 --- a/src/cc/sudoku.cpp +++ b/src/cc/sudoku.cpp @@ -2643,7 +2643,7 @@ uint8_t sudoku_genopreturndecode(char *unsolved,CScript scriptPubKey) UniValue sudoku_generate(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); CPubKey sudokupk,pk; uint8_t privkey[32],unsolved[9][9],pub33[33]; uint32_t srandi; int32_t i,score; uint256 hash; char coinaddr[64],str[82],*jsonstr; uint64_t inputsum,amount,change=0; std::string rawtx; amount = COIN; /*if ( params != 0 ) @@ -2811,7 +2811,7 @@ UniValue sudoku_pending(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) UniValue sudoku_solution(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); int32_t i,j,good,ind,n,numvouts; uint256 txid; char *jsonstr,*newstr,*txidstr,coinaddr[64],checkaddr[64],CCaddr[64],*solution=0,unsolved[82]; CPubKey pk,mypk; uint8_t vals9[9][9],priv32[32],pub33[33]; uint32_t timestamps[81]; uint64_t balance,inputsum; std::string rawtx; CTransaction tx; uint256 hashBlock; mypk = pubkey2pk(Mypubkey()); memset(timestamps,0,sizeof(timestamps)); @@ -2849,7 +2849,7 @@ UniValue sudoku_solution(uint64_t txfee,struct CCcontract_info *cp,cJSON *params result.push_back(Pair("sudokuaddr",CCaddr)); balance = CCaddress_balance(CCaddr,1); result.push_back(Pair("amount",ValueFromAmount(balance))); - if ( sudoku_captcha(1,timestamps,komodo_nextheight()) < 0 ) + if ( sudoku_captcha(1,timestamps,hush_nextheight()) < 0 ) { result.push_back(Pair("result","error")); result.push_back(Pair("error","captcha failure")); diff --git a/src/hush_defs.h b/src/hush_defs.h index ddb651717..952b81a7b 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -559,7 +559,7 @@ int32_t komodo_priceind(const char *symbol); int32_t komodo_pricesinit(); int64_t komodo_priceave(int64_t *tmpbuf,int64_t *correlated,int32_t cskip); int64_t komodo_pricecorrelated(uint64_t seed,int32_t ind,uint32_t *rawprices,int32_t rawskip,uint32_t *nonzprices,int32_t smoothwidth); -int32_t komodo_nextheight(); +int32_t hush_nextheight(); uint32_t komodo_heightstamp(int32_t height); int64_t komodo_pricemult(int32_t ind); int32_t komodo_priceget(int64_t *buf64,int32_t ind,int32_t height,int32_t numblocks); @@ -571,7 +571,7 @@ bool hush_hardfork_active(uint32_t time); uint256 Parseuint256(const char *hexstr); void komodo_sendmessage(int32_t minpeers, int32_t maxpeers, const char *message, std::vector payload); CBlockIndex *komodo_getblockindex(uint256 hash); -int32_t komodo_nextheight(); +int32_t hush_nextheight(); CBlockIndex *komodo_blockindex(uint256 hash); CBlockIndex *komodo_chainactive(int32_t height); int32_t komodo_blockheight(uint256 hash); diff --git a/src/importcoin.cpp b/src/importcoin.cpp index c3da613c8..16a8d3c64 100644 --- a/src/importcoin.cpp +++ b/src/importcoin.cpp @@ -26,7 +26,7 @@ #include "cc/CCinclude.h" -int32_t komodo_nextheight(); +int32_t hush_nextheight(); // makes import tx for either coins or tokens CTransaction MakeImportCoinTransaction(const ImportProof proof, const CTransaction burnTx, const std::vector payouts, uint32_t nExpiryHeightOverride) @@ -34,7 +34,7 @@ CTransaction MakeImportCoinTransaction(const ImportProof proof, const CTransacti //std::vector payload = E_MARSHAL(ss << EVAL_IMPORTCOIN); CScript scriptSig; - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); if (mtx.fOverwintered) mtx.nExpiryHeight = 0; mtx.vout = payouts; diff --git a/src/komodo-tx.cpp b/src/komodo-tx.cpp index 49831fc9d..38cada6f5 100644 --- a/src/komodo-tx.cpp +++ b/src/komodo-tx.cpp @@ -184,7 +184,7 @@ static void RegisterLoad(const std::string& strInput) } -int32_t komodo_nextheight() +int32_t hush_nextheight() { return(100000000); } diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 870921d4b..5df5d3bf5 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -2241,7 +2241,7 @@ void komodo_cbopretupdate(int32_t forceflag) now = (uint32_t)time(NULL); if ( (ASSETCHAINS_CBOPRET & 1) != 0 ) { -//if ( komodo_nextheight() > 333 ) // for debug only! +//if ( hush_nextheight() > 333 ) // for debug only! // ASSETCHAINS_CBOPRET = 7; size = komodo_cbopretsize(ASSETCHAINS_CBOPRET); if ( Mineropret.size() < size ) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index fa2683b9f..f83567595 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1149,7 +1149,7 @@ UniValue prices(const UniValue& params, bool fHelp, const CPubKey& mypk) int32_t maxsamples = atoi(params[0].get_str().c_str()); if ( maxsamples < 1 ) maxsamples = 1; - nextheight = komodo_nextheight(); + nextheight = hush_nextheight(); UniValue a(UniValue::VARR); if ( PRICES_DAYWINDOW < 7 ) throw JSONRPCError(RPC_INVALID_PARAMETER, "daywindow is too small"); diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index f61534b2c..cdb45fcf4 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -305,7 +305,7 @@ UniValue migrate_createburntransaction(const UniValue& params, bool fHelp, const struct CCcontract_info *cpTokens, C; cpTokens = CCinit(&C, EVAL_TOKENS); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); const std::string chainSymbol(SMART_CHAIN_SYMBOL); std::vector rawproof; //(chainSymbol.begin(), chainSymbol.end()); @@ -694,7 +694,7 @@ UniValue migrate_createnotaryapprovaltransaction(const UniValue& params, bool fH cpDummy = CCinit(&C, EVAL_TOKENS); // just for FinalizeCCtx to work // creating a tx with proof: - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); if (AddNormalinputs(mtx, Mypubkey(), txfee*2, 4) == 0) throw runtime_error("Cannot find normal inputs\n"); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index e5b560d58..ecfc4cb7d 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -390,7 +390,7 @@ UniValue genminingCSV(const UniValue& params, bool fHelp, const CPubKey& mypk) if ( (fp= fopen(fname,"wb")) != 0 ) { fprintf(fp,"height,nTime,nBits,bnTarget,bnTargetB,diff,solvetime\n"); - height = komodo_nextheight(); + height = hush_nextheight(); for (i=0; i Date: Wed, 16 Dec 2020 04:58:22 -0500 Subject: [PATCH 198/277] Compiler happiness --- src/cc/games/prices.cpp | 4 ++-- src/wallet/rpcwallet.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc/games/prices.cpp b/src/cc/games/prices.cpp index 5c8437e5d..cf74b9de4 100644 --- a/src/cc/games/prices.cpp +++ b/src/cc/games/prices.cpp @@ -127,7 +127,7 @@ int64_t prices_blockinfo(int32_t height,char *acaddr) UniValue games_settle(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - UniValue result(UniValue::VOBJ); char acaddr[64]; CPubKey acpk,mypk,gamespk; int64_t prizefund = 0; int32_t height,nextheight = komodo_nextheight(); + UniValue result(UniValue::VOBJ); char acaddr[64]; CPubKey acpk,mypk,gamespk; int64_t prizefund = 0; int32_t height,nextheight = hush_nextheight(); if ( ASSETCHAINS_OVERRIDE_PUBKEY33[0] == 0 ) { result.push_back(Pair("result","error")); @@ -169,7 +169,7 @@ UniValue games_settle(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) UniValue games_bet(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); UniValue result(UniValue::VOBJ); std::string rawtx; int64_t amount,inputsum; uint64_t price; CPubKey gamespk,mypk,acpk; if ( ASSETCHAINS_OVERRIDE_PUBKEY33[0] == 0 ) { diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index e3e6ad3c2..91addcd93 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -8304,7 +8304,7 @@ UniValue opreturn_burn(const UniValue& params, bool fHelp, const CPubKey& mypk) throw JSONRPCError(RPC_TYPE_ERROR, "keypool error."); } - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); + CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); int64_t normalInputs = AddNormalinputs(mtx, myPubkey, nAmount+txfee, 60); if (normalInputs < nAmount) From 1e65ec628908c0cba7629d0df1e1ed680f94f64b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 05:00:43 -0500 Subject: [PATCH 199/277] Tweak relnotes --- doc/relnotes/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index f91459353..793cb90e5 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -13,7 +13,7 @@ and now are officially part of our Git repo. on low resource devices (like internet-of-shit light bulbs/etc) * Hush Docker scripts are now officially maintained! * Faster release binaries with -03 - * Optimized AcceptToMemoryPool, deleting things which do not apply + * Optimized and hardened memory pool code to remove KMD-isms * Updated all our error messages and things for https://hush.is, our new official domain * getblocktemplate RPC now provides better error reporting about From faaca46f079be8287de30ab44db99cec1726702d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 05:03:17 -0500 Subject: [PATCH 200/277] Tweakz --- doc/relnotes/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 793cb90e5..69084f0be 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -3,6 +3,13 @@ Hush release notes were done on Github until 3.5.2, and now are officially part of our Git repo. +## Downloading Releases + +Hush releases are on our own Gitea at git.hush.is +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. + # 3.6.0 * Fixes "block 340k" sync issues! From 363361b0033660102aa4a198b6dce204b940fdfe Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 05:19:44 -0500 Subject: [PATCH 201/277] Ch-ch-checkpoint it out --- contrib/checkpoints.pl | 2 +- src/chainparams.cpp | 15 +++++++++++---- src/checkpoints.cpp | 5 ----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/contrib/checkpoints.pl b/contrib/checkpoints.pl index 4e07f4b27..ac7165718 100755 --- a/contrib/checkpoints.pl +++ b/contrib/checkpoints.pl @@ -11,7 +11,7 @@ use strict; my $perday = 576; my $hush = "./src/hush-cli"; my $gethash = "$hush getblockhash"; -my $stride = shift || 5000; +my $stride = shift || 1000; my $count = 0; my $blocks = qx{$hush getblockcount}; if($?) { diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 258ea3826..2f078a8b0 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -635,10 +635,17 @@ void *chainparams_commandline() { (347000, uint256S("0x00000007ab3ec746a2e279a784cc6710d41a518d2b27941d231a7ff4e4a834ea")) (348000, uint256S("0x0000000c0b772a11bb41c362b74890d4538c325386aea4abbaae15d6789e6acc")) (349000, uint256S("0x0000000138e50eded6f2f3cf8048d0332209c2b0f8093c6bf2695ce6e6e1c149")) - (349686, uint256S("0x0000000ea29fff8d05b3755407269e25cf220a918260e43cea2c9957abfca16a")), - (int64_t) 1607519064, // time of last checkpointed block - (int64_t) 645127, // total txs - (double) 1134 // txs in the last day before last checkpoint block + (350000, uint256S("0x0000000656e29123cd550fc58eebacc37e77e61783d32d0235cde81796a033ac")) + (351000, uint256S("0x000000031517a325e1d9c838c81d88263f7fe0362ede1091a2230c9bf730b21e")) + (352000, uint256S("0x000000026a80af033ac7be8f45fcfc5c0665be0073cc773daf584d6f03af7dae")) + (353000, uint256S("0x00000006cfc77e91f9656fb115b2a1cc75b3def543103e3181aeb5c064929ba1")) + (354000, uint256S("0x00000000488c19fd232d9f524b76480d40621e475f9d07de567323e895ea2d77")) + (355000, uint256S("0x00000006a09508363685c036bbf97abddf1102d7e364a82f4e74139ca185c53a")) + (356000, uint256S("0x000000075259426ff06e73fc17a784d9b8a4a932b95e28a769cc51192c096299")) + (357000, uint256S("0x00000009133b5a079dac92de7371f73af077ca43ce0e435ac727cce95716bf6b")), + (int64_t) 1608068955, // time of last checkpointed block + (int64_t) 654996, // total txs + (double) 584 // txs in the last day before block 357576 }; } else { checkpointData = //(Checkpoints::CCheckpointData) diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index 08ad141d9..c90479120 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -2,7 +2,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -17,15 +16,11 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "checkpoints.h" - #include "chainparams.h" #include "main.h" #include "uint256.h" - #include - #include namespace Checkpoints { From d7db9954290338eaa2ddd94df0d8de869cb515de Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 05:21:01 -0500 Subject: [PATCH 202/277] jl777 still doesn't understand chmod --- src/cc/includes/cJSON.h | 0 src/cc/includes/curve25519.h | 0 src/cc/includes/libgfshare.h | 0 src/cc/includes/tweetnacl.h | 0 src/cc/includes/uthash.h | 0 src/cc/includes/utlist.h | 0 6 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/cc/includes/cJSON.h mode change 100755 => 100644 src/cc/includes/curve25519.h mode change 100755 => 100644 src/cc/includes/libgfshare.h mode change 100755 => 100644 src/cc/includes/tweetnacl.h mode change 100755 => 100644 src/cc/includes/uthash.h mode change 100755 => 100644 src/cc/includes/utlist.h diff --git a/src/cc/includes/cJSON.h b/src/cc/includes/cJSON.h old mode 100755 new mode 100644 diff --git a/src/cc/includes/curve25519.h b/src/cc/includes/curve25519.h old mode 100755 new mode 100644 diff --git a/src/cc/includes/libgfshare.h b/src/cc/includes/libgfshare.h old mode 100755 new mode 100644 diff --git a/src/cc/includes/tweetnacl.h b/src/cc/includes/tweetnacl.h old mode 100755 new mode 100644 diff --git a/src/cc/includes/uthash.h b/src/cc/includes/uthash.h old mode 100755 new mode 100644 diff --git a/src/cc/includes/utlist.h b/src/cc/includes/utlist.h old mode 100755 new mode 100644 From 37e1ead85c8072d1743eeda92765ba0af995b764 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 05:22:39 -0500 Subject: [PATCH 203/277] copyrights --- src/cc/includes/cJSON.h | 3 +++ src/cc/includes/curve25519.h | 3 +++ src/cc/includes/libgfshare.h | 3 +++ src/cc/includes/tweetnacl.h | 3 +++ src/cc/includes/uthash.h | 3 +++ src/cc/includes/utlist.h | 3 +++ 6 files changed, 18 insertions(+) diff --git a/src/cc/includes/cJSON.h b/src/cc/includes/cJSON.h index d919a47a9..8a3fb9d49 100644 --- a/src/cc/includes/cJSON.h +++ b/src/cc/includes/cJSON.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2009 Dave Gamble diff --git a/src/cc/includes/curve25519.h b/src/cc/includes/curve25519.h index 1f714861e..5fed9c9e5 100644 --- a/src/cc/includes/curve25519.h +++ b/src/cc/includes/curve25519.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/includes/libgfshare.h b/src/cc/includes/libgfshare.h index dc8747fe9..6dc5c74e2 100644 --- a/src/cc/includes/libgfshare.h +++ b/src/cc/includes/libgfshare.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * This file is Copyright Daniel Silverstone 2006 * diff --git a/src/cc/includes/tweetnacl.h b/src/cc/includes/tweetnacl.h index ce0fa9bcb..cd0eec7c2 100644 --- a/src/cc/includes/tweetnacl.h +++ b/src/cc/includes/tweetnacl.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #ifndef TWEETNACL_H #define TWEETNACL_H #define crypto_auth_PRIMITIVE "hmacsha512256" diff --git a/src/cc/includes/uthash.h b/src/cc/includes/uthash.h index 7b99c0133..8f5ef34da 100644 --- a/src/cc/includes/uthash.h +++ b/src/cc/includes/uthash.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003-2014, Troy D. Hanson http://troydhanson.github.com/uthash/ diff --git a/src/cc/includes/utlist.h b/src/cc/includes/utlist.h index 93c7ceef0..bf0d1176e 100644 --- a/src/cc/includes/utlist.h +++ b/src/cc/includes/utlist.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2007-2014, Troy D. Hanson http://troydhanson.github.com/uthash/ All rights reserved. From 04baf58cd7962f1d39c9518cd9d2100972d1eee9 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 06:24:25 -0500 Subject: [PATCH 204/277] update readme --- src/cryptoconditions/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptoconditions/README.md b/src/cryptoconditions/README.md index c1971a2b5..e25b94276 100644 --- a/src/cryptoconditions/README.md +++ b/src/cryptoconditions/README.md @@ -1,4 +1,4 @@ -# libcryptoconditions [![Build Status](https://travis-ci.org/libscott/libcryptoconditions.svg?branch=komodo)](https://travis-ci.org/libscott/libcryptoconditions) +# libcryptoconditions Interledger Crypto-Conditions in C, targeting spec [draft-thomas-crypto-conditions-03](https://tools.ietf.org/html/draft-thomas-crypto-conditions-03). From da8543f57ca8d98b75ef352cb99865bfa3b18361 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 06:25:11 -0500 Subject: [PATCH 205/277] Fuck Travis CI for giving up on open source --- src/cryptoconditions/.travis.yml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 src/cryptoconditions/.travis.yml diff --git a/src/cryptoconditions/.travis.yml b/src/cryptoconditions/.travis.yml deleted file mode 100644 index 166cc9def..000000000 --- a/src/cryptoconditions/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: C -sudo: true -compiler: - - clang - - gcc -before_script: ./autogen.sh -addons: - apt: - packages: - - gdb From bcc5927086e916b555261ca3c107156f129098f7 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 06:28:16 -0500 Subject: [PATCH 206/277] copyrights --- src/cryptoconditions/src/anon.c | 2 -- src/cryptoconditions/src/cryptoconditions.c | 5 ++--- src/cryptoconditions/src/ed25519.c | 3 ++- src/cryptoconditions/src/eval.c | 3 ++- src/cryptoconditions/src/include/cJSON.c | 3 +++ src/cryptoconditions/src/include/cJSON.h | 3 +++ src/cryptoconditions/src/include/libbase58.h | 3 +++ src/cryptoconditions/src/include/sha256.c | 3 +++ src/cryptoconditions/src/include/sha256.h | 3 +++ src/cryptoconditions/src/include/tweetnacl.c | 3 +++ src/cryptoconditions/src/include/tweetnacl.h | 3 +++ src/cryptoconditions/src/json_rpc.c | 2 ++ src/cryptoconditions/src/prefix.c | 2 ++ src/cryptoconditions/src/preimage.c | 2 ++ src/cryptoconditions/src/secp256k1.c | 2 ++ src/cryptoconditions/src/threshold.c | 2 ++ src/cryptoconditions/src/utils.c | 4 ++-- 17 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/cryptoconditions/src/anon.c b/src/cryptoconditions/src/anon.c index 6e21cabf4..9eb30325e 100644 --- a/src/cryptoconditions/src/anon.c +++ b/src/cryptoconditions/src/anon.c @@ -21,10 +21,8 @@ #include "include/cJSON.h" #include "cryptoconditions.h" - struct CCType CC_AnonType; - CC *mkAnon(const Condition_t *asnCond) { CCType *realType = getTypeByAsnEnum(asnCond->present); diff --git a/src/cryptoconditions/src/cryptoconditions.c b/src/cryptoconditions/src/cryptoconditions.c index 601a54009..e9795dedf 100644 --- a/src/cryptoconditions/src/cryptoconditions.c +++ b/src/cryptoconditions/src/cryptoconditions.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -13,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "strings.h" #include "asn/Condition.h" #include "asn/Fulfillment.h" @@ -29,10 +30,8 @@ #include "src/eval.c" #include "src/json_rpc.c" #include - #include - struct CCType *CCTypeRegistry[] = { &CC_PreimageType, &CC_PrefixType, diff --git a/src/cryptoconditions/src/ed25519.c b/src/cryptoconditions/src/ed25519.c index e1e4bda95..ac92e00c3 100644 --- a/src/cryptoconditions/src/ed25519.c +++ b/src/cryptoconditions/src/ed25519.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -22,7 +24,6 @@ #include "include/ed25519/src/ed25519.h" #include "cryptoconditions.h" - struct CCType CC_Ed25519Type; diff --git a/src/cryptoconditions/src/eval.c b/src/cryptoconditions/src/eval.c index fca557c6a..d2f843972 100644 --- a/src/cryptoconditions/src/eval.c +++ b/src/cryptoconditions/src/eval.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -22,7 +24,6 @@ #include "internal.h" #include "include/cJSON.h" - struct CCType CC_EvalType; diff --git a/src/cryptoconditions/src/include/cJSON.c b/src/cryptoconditions/src/include/cJSON.c index 5c99b8cb2..5a6c15058 100644 --- a/src/cryptoconditions/src/include/cJSON.c +++ b/src/cryptoconditions/src/include/cJSON.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2009-2017 Dave Gamble and cJSON contributors diff --git a/src/cryptoconditions/src/include/cJSON.h b/src/cryptoconditions/src/include/cJSON.h index 547dddad5..b2fa212e9 100644 --- a/src/cryptoconditions/src/include/cJSON.h +++ b/src/cryptoconditions/src/include/cJSON.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2009-2017 Dave Gamble and cJSON contributors diff --git a/src/cryptoconditions/src/include/libbase58.h b/src/cryptoconditions/src/include/libbase58.h index 78f1b4591..e5c4215ce 100644 --- a/src/cryptoconditions/src/include/libbase58.h +++ b/src/cryptoconditions/src/include/libbase58.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cryptoconditions/src/include/sha256.c b/src/cryptoconditions/src/include/sha256.c index e273836ce..5e4079afe 100644 --- a/src/cryptoconditions/src/include/sha256.c +++ b/src/cryptoconditions/src/include/sha256.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 2005 Colin Percival * Copyright 2013 Christian Mehlis & René Kijewski diff --git a/src/cryptoconditions/src/include/sha256.h b/src/cryptoconditions/src/include/sha256.h index 7bbf3f43a..97a5a548e 100644 --- a/src/cryptoconditions/src/include/sha256.h +++ b/src/cryptoconditions/src/include/sha256.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 2005 Colin Percival * Copyright 2013 Christian Mehlis & René Kijewski diff --git a/src/cryptoconditions/src/include/tweetnacl.c b/src/cryptoconditions/src/include/tweetnacl.c index 8ac0a1806..2c23f2800 100644 --- a/src/cryptoconditions/src/include/tweetnacl.c +++ b/src/cryptoconditions/src/include/tweetnacl.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #include "tweetnacl.h" #define FOR(i,n) for (i = 0;i < n;++i) #define sv static void diff --git a/src/cryptoconditions/src/include/tweetnacl.h b/src/cryptoconditions/src/include/tweetnacl.h index 9277fbf8f..5aa5a830f 100644 --- a/src/cryptoconditions/src/include/tweetnacl.h +++ b/src/cryptoconditions/src/include/tweetnacl.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #ifndef TWEETNACL_H #define TWEETNACL_H #define crypto_auth_PRIMITIVE "hmacsha512256" diff --git a/src/cryptoconditions/src/json_rpc.c b/src/cryptoconditions/src/json_rpc.c index 0af0ba4f8..4b930db9e 100644 --- a/src/cryptoconditions/src/json_rpc.c +++ b/src/cryptoconditions/src/json_rpc.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * diff --git a/src/cryptoconditions/src/prefix.c b/src/cryptoconditions/src/prefix.c index c5ff5d7ba..f3eb14695 100644 --- a/src/cryptoconditions/src/prefix.c +++ b/src/cryptoconditions/src/prefix.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * diff --git a/src/cryptoconditions/src/preimage.c b/src/cryptoconditions/src/preimage.c index 10262e049..4032c57e5 100644 --- a/src/cryptoconditions/src/preimage.c +++ b/src/cryptoconditions/src/preimage.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * diff --git a/src/cryptoconditions/src/secp256k1.c b/src/cryptoconditions/src/secp256k1.c index 0185b4459..ebec5c1c5 100644 --- a/src/cryptoconditions/src/secp256k1.c +++ b/src/cryptoconditions/src/secp256k1.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * diff --git a/src/cryptoconditions/src/threshold.c b/src/cryptoconditions/src/threshold.c index de13565e1..2e20a6faf 100644 --- a/src/cryptoconditions/src/threshold.c +++ b/src/cryptoconditions/src/threshold.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * diff --git a/src/cryptoconditions/src/utils.c b/src/cryptoconditions/src/utils.c index 6d302d74d..62779ae7e 100644 --- a/src/cryptoconditions/src/utils.c +++ b/src/cryptoconditions/src/utils.c @@ -1,4 +1,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -19,14 +21,12 @@ #include #include #include - #include "include/cJSON.h" #include "include/sha256.h" #include "asn/asn_application.h" #include "cryptoconditions.h" #include "internal.h" - static unsigned char encoding_table[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', From c7158300f955acd6e11f74ea4c13a280db5d370d Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 07:52:26 -0500 Subject: [PATCH 207/277] MIT/etc licenses cost money, yo --- COPYING | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/COPYING b/COPYING index 875deb660..e2383446e 100644 --- a/COPYING +++ b/COPYING @@ -19,3 +19,7 @@ open-source licenses. For further details see 'contrib/debian/copyright'. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (https://www.openssl.org/). This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). + +We are open to granting more permissive (such as MIT or Apache 2.0) licenses to Hush +software on a *case-by-case* basis, for an agreed upon price. Please contact +The Hush developers if you are interested. From 0bfd7ac3306db81408c6b4193389487879d2e400 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 07:52:36 -0500 Subject: [PATCH 208/277] cc copyrights --- src/cryptoconditions/src/asn/BIT_STRING.c | 3 +++ src/cryptoconditions/src/asn/BIT_STRING.h | 3 +++ src/cryptoconditions/src/asn/CompoundSha256Condition.c | 3 +++ src/cryptoconditions/src/asn/CompoundSha256Condition.h | 3 +++ src/cryptoconditions/src/asn/Condition.c | 3 +++ src/cryptoconditions/src/asn/Condition.h | 3 +++ src/cryptoconditions/src/asn/ConditionTypes.c | 3 +++ src/cryptoconditions/src/asn/ConditionTypes.h | 3 +++ src/cryptoconditions/src/asn/Ed25519FingerprintContents.c | 3 +++ src/cryptoconditions/src/asn/Ed25519FingerprintContents.h | 3 +++ src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.c | 3 +++ src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.h | 3 +++ src/cryptoconditions/src/asn/EvalFulfillment.c | 3 +++ src/cryptoconditions/src/asn/EvalFulfillment.h | 3 +++ src/cryptoconditions/src/asn/Fulfillment.c | 3 +++ src/cryptoconditions/src/asn/Fulfillment.h | 3 +++ src/cryptoconditions/src/asn/INTEGER.c | 3 +++ src/cryptoconditions/src/asn/INTEGER.h | 3 +++ src/cryptoconditions/src/asn/NativeEnumerated.c | 3 +++ src/cryptoconditions/src/asn/NativeEnumerated.h | 3 +++ src/cryptoconditions/src/asn/NativeInteger.c | 3 +++ src/cryptoconditions/src/asn/NativeInteger.h | 3 +++ src/cryptoconditions/src/asn/OCTET_STRING.c | 3 +++ src/cryptoconditions/src/asn/OCTET_STRING.h | 3 +++ src/cryptoconditions/src/asn/PrefixFingerprintContents.c | 3 +++ src/cryptoconditions/src/asn/PrefixFingerprintContents.h | 3 +++ src/cryptoconditions/src/asn/PrefixFulfillment.c | 3 +++ src/cryptoconditions/src/asn/PrefixFulfillment.h | 3 +++ src/cryptoconditions/src/asn/PreimageFulfillment.c | 3 +++ src/cryptoconditions/src/asn/PreimageFulfillment.h | 3 +++ src/cryptoconditions/src/asn/RsaFingerprintContents.c | 3 +++ src/cryptoconditions/src/asn/RsaFingerprintContents.h | 3 +++ src/cryptoconditions/src/asn/RsaSha256Fulfillment.c | 3 +++ src/cryptoconditions/src/asn/RsaSha256Fulfillment.h | 3 +++ src/cryptoconditions/src/asn/Secp256k1FingerprintContents.c | 3 +++ src/cryptoconditions/src/asn/Secp256k1FingerprintContents.h | 3 +++ src/cryptoconditions/src/asn/Secp256k1Fulfillment.c | 3 +++ src/cryptoconditions/src/asn/Secp256k1Fulfillment.h | 3 +++ src/cryptoconditions/src/asn/SimpleSha256Condition.c | 3 +++ src/cryptoconditions/src/asn/SimpleSha256Condition.h | 3 +++ src/cryptoconditions/src/asn/ThresholdFingerprintContents.c | 3 +++ src/cryptoconditions/src/asn/ThresholdFingerprintContents.h | 3 +++ src/cryptoconditions/src/asn/ThresholdFulfillment.c | 3 +++ src/cryptoconditions/src/asn/ThresholdFulfillment.h | 3 +++ src/cryptoconditions/src/asn/asn_SET_OF.c | 3 +++ src/cryptoconditions/src/asn/asn_SET_OF.h | 3 +++ src/cryptoconditions/src/asn/asn_application.h | 3 +++ src/cryptoconditions/src/asn/asn_codecs.h | 3 +++ src/cryptoconditions/src/asn/asn_codecs_prim.c | 3 +++ src/cryptoconditions/src/asn/asn_codecs_prim.h | 3 +++ src/cryptoconditions/src/asn/asn_internal.h | 3 +++ src/cryptoconditions/src/asn/asn_system.h | 3 +++ src/cryptoconditions/src/asn/ber_decoder.c | 3 +++ src/cryptoconditions/src/asn/ber_decoder.h | 3 +++ src/cryptoconditions/src/asn/ber_tlv_length.c | 3 +++ src/cryptoconditions/src/asn/ber_tlv_length.h | 3 +++ src/cryptoconditions/src/asn/ber_tlv_tag.c | 3 +++ src/cryptoconditions/src/asn/ber_tlv_tag.h | 3 +++ src/cryptoconditions/src/asn/constr_CHOICE.c | 3 +++ src/cryptoconditions/src/asn/constr_CHOICE.h | 3 +++ src/cryptoconditions/src/asn/constr_SEQUENCE.c | 3 +++ src/cryptoconditions/src/asn/constr_SEQUENCE.h | 3 +++ src/cryptoconditions/src/asn/constr_SET_OF.c | 3 +++ src/cryptoconditions/src/asn/constr_SET_OF.h | 3 +++ src/cryptoconditions/src/asn/constr_TYPE.c | 3 +++ src/cryptoconditions/src/asn/constr_TYPE.h | 3 +++ src/cryptoconditions/src/asn/constraints.c | 3 +++ src/cryptoconditions/src/asn/constraints.h | 3 +++ src/cryptoconditions/src/asn/der_encoder.c | 3 +++ src/cryptoconditions/src/asn/der_encoder.h | 3 +++ src/cryptoconditions/src/asn/per_decoder.c | 3 +++ src/cryptoconditions/src/asn/per_decoder.h | 3 +++ src/cryptoconditions/src/asn/per_encoder.c | 3 +++ src/cryptoconditions/src/asn/per_encoder.h | 3 +++ src/cryptoconditions/src/asn/per_opentype.c | 3 +++ src/cryptoconditions/src/asn/per_opentype.h | 3 +++ src/cryptoconditions/src/asn/per_support.c | 3 +++ src/cryptoconditions/src/asn/per_support.h | 3 +++ src/cryptoconditions/src/asn/xer_decoder.c | 3 +++ src/cryptoconditions/src/asn/xer_decoder.h | 3 +++ src/cryptoconditions/src/asn/xer_encoder.c | 3 +++ src/cryptoconditions/src/asn/xer_encoder.h | 3 +++ src/cryptoconditions/src/asn/xer_support.c | 3 +++ src/cryptoconditions/src/asn/xer_support.h | 3 +++ 84 files changed, 252 insertions(+) diff --git a/src/cryptoconditions/src/asn/BIT_STRING.c b/src/cryptoconditions/src/asn/BIT_STRING.c index 997ff4161..129bad968 100644 --- a/src/cryptoconditions/src/asn/BIT_STRING.c +++ b/src/cryptoconditions/src/asn/BIT_STRING.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/BIT_STRING.h b/src/cryptoconditions/src/asn/BIT_STRING.h index 732e878bc..dfe0180de 100644 --- a/src/cryptoconditions/src/asn/BIT_STRING.h +++ b/src/cryptoconditions/src/asn/BIT_STRING.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/CompoundSha256Condition.c b/src/cryptoconditions/src/asn/CompoundSha256Condition.c index 31c276bf6..4449a7470 100644 --- a/src/cryptoconditions/src/asn/CompoundSha256Condition.c +++ b/src/cryptoconditions/src/asn/CompoundSha256Condition.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/CompoundSha256Condition.h b/src/cryptoconditions/src/asn/CompoundSha256Condition.h index 9dea601c4..9a22243f3 100644 --- a/src/cryptoconditions/src/asn/CompoundSha256Condition.h +++ b/src/cryptoconditions/src/asn/CompoundSha256Condition.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Condition.c b/src/cryptoconditions/src/asn/Condition.c index 49ec83e3b..c6783c5f5 100644 --- a/src/cryptoconditions/src/asn/Condition.c +++ b/src/cryptoconditions/src/asn/Condition.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Condition.h b/src/cryptoconditions/src/asn/Condition.h index 9994d8b88..aa64624d8 100644 --- a/src/cryptoconditions/src/asn/Condition.h +++ b/src/cryptoconditions/src/asn/Condition.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/ConditionTypes.c b/src/cryptoconditions/src/asn/ConditionTypes.c index 16ca9d19c..bc45b5650 100644 --- a/src/cryptoconditions/src/asn/ConditionTypes.c +++ b/src/cryptoconditions/src/asn/ConditionTypes.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/ConditionTypes.h b/src/cryptoconditions/src/asn/ConditionTypes.h index 760d5bfff..d2681a6bb 100644 --- a/src/cryptoconditions/src/asn/ConditionTypes.h +++ b/src/cryptoconditions/src/asn/ConditionTypes.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Ed25519FingerprintContents.c b/src/cryptoconditions/src/asn/Ed25519FingerprintContents.c index c47213100..c1320a218 100644 --- a/src/cryptoconditions/src/asn/Ed25519FingerprintContents.c +++ b/src/cryptoconditions/src/asn/Ed25519FingerprintContents.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Ed25519FingerprintContents.h b/src/cryptoconditions/src/asn/Ed25519FingerprintContents.h index c936f8718..a3466a392 100644 --- a/src/cryptoconditions/src/asn/Ed25519FingerprintContents.h +++ b/src/cryptoconditions/src/asn/Ed25519FingerprintContents.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.c b/src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.c index 6f756fb56..636f4c37f 100644 --- a/src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.c +++ b/src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.h b/src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.h index 01c1fb104..c1633694e 100644 --- a/src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.h +++ b/src/cryptoconditions/src/asn/Ed25519Sha512Fulfillment.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/EvalFulfillment.c b/src/cryptoconditions/src/asn/EvalFulfillment.c index f43b21e1f..5b56f4400 100644 --- a/src/cryptoconditions/src/asn/EvalFulfillment.c +++ b/src/cryptoconditions/src/asn/EvalFulfillment.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/EvalFulfillment.h b/src/cryptoconditions/src/asn/EvalFulfillment.h index a484a4103..3161ed96a 100644 --- a/src/cryptoconditions/src/asn/EvalFulfillment.h +++ b/src/cryptoconditions/src/asn/EvalFulfillment.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Fulfillment.c b/src/cryptoconditions/src/asn/Fulfillment.c index faf43b772..15c734763 100644 --- a/src/cryptoconditions/src/asn/Fulfillment.c +++ b/src/cryptoconditions/src/asn/Fulfillment.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Fulfillment.h b/src/cryptoconditions/src/asn/Fulfillment.h index 169faf0b1..04f140b2a 100644 --- a/src/cryptoconditions/src/asn/Fulfillment.h +++ b/src/cryptoconditions/src/asn/Fulfillment.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/INTEGER.c b/src/cryptoconditions/src/asn/INTEGER.c index eed82176b..1911e8d61 100644 --- a/src/cryptoconditions/src/asn/INTEGER.c +++ b/src/cryptoconditions/src/asn/INTEGER.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003-2014 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/INTEGER.h b/src/cryptoconditions/src/asn/INTEGER.h index b68bd250b..d9d9e9705 100644 --- a/src/cryptoconditions/src/asn/INTEGER.h +++ b/src/cryptoconditions/src/asn/INTEGER.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/NativeEnumerated.c b/src/cryptoconditions/src/asn/NativeEnumerated.c index 78366af31..9794d3e7c 100644 --- a/src/cryptoconditions/src/asn/NativeEnumerated.c +++ b/src/cryptoconditions/src/asn/NativeEnumerated.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/NativeEnumerated.h b/src/cryptoconditions/src/asn/NativeEnumerated.h index c59bb1ba9..de4e0d8bc 100644 --- a/src/cryptoconditions/src/asn/NativeEnumerated.h +++ b/src/cryptoconditions/src/asn/NativeEnumerated.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004, 2005, 2006 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/NativeInteger.c b/src/cryptoconditions/src/asn/NativeInteger.c index e8ce6d2c3..9b3bd42b7 100644 --- a/src/cryptoconditions/src/asn/NativeInteger.c +++ b/src/cryptoconditions/src/asn/NativeInteger.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004, 2005, 2006 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/NativeInteger.h b/src/cryptoconditions/src/asn/NativeInteger.h index 9369111b4..dd22777c1 100644 --- a/src/cryptoconditions/src/asn/NativeInteger.h +++ b/src/cryptoconditions/src/asn/NativeInteger.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/OCTET_STRING.c b/src/cryptoconditions/src/asn/OCTET_STRING.c index a886ff8fa..95dc3eca3 100644 --- a/src/cryptoconditions/src/asn/OCTET_STRING.c +++ b/src/cryptoconditions/src/asn/OCTET_STRING.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2005, 2006 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/OCTET_STRING.h b/src/cryptoconditions/src/asn/OCTET_STRING.h index 75c995de9..d4d7d826c 100644 --- a/src/cryptoconditions/src/asn/OCTET_STRING.h +++ b/src/cryptoconditions/src/asn/OCTET_STRING.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/PrefixFingerprintContents.c b/src/cryptoconditions/src/asn/PrefixFingerprintContents.c index 13f54aaa1..d8e8c0af4 100644 --- a/src/cryptoconditions/src/asn/PrefixFingerprintContents.c +++ b/src/cryptoconditions/src/asn/PrefixFingerprintContents.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/PrefixFingerprintContents.h b/src/cryptoconditions/src/asn/PrefixFingerprintContents.h index 48b8ffaa5..dd3575b3e 100644 --- a/src/cryptoconditions/src/asn/PrefixFingerprintContents.h +++ b/src/cryptoconditions/src/asn/PrefixFingerprintContents.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/PrefixFulfillment.c b/src/cryptoconditions/src/asn/PrefixFulfillment.c index f4c854807..c2ab68212 100644 --- a/src/cryptoconditions/src/asn/PrefixFulfillment.c +++ b/src/cryptoconditions/src/asn/PrefixFulfillment.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/PrefixFulfillment.h b/src/cryptoconditions/src/asn/PrefixFulfillment.h index 974b7ecd8..f9229d27b 100644 --- a/src/cryptoconditions/src/asn/PrefixFulfillment.h +++ b/src/cryptoconditions/src/asn/PrefixFulfillment.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/PreimageFulfillment.c b/src/cryptoconditions/src/asn/PreimageFulfillment.c index e7b918824..86bcdb04a 100644 --- a/src/cryptoconditions/src/asn/PreimageFulfillment.c +++ b/src/cryptoconditions/src/asn/PreimageFulfillment.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/PreimageFulfillment.h b/src/cryptoconditions/src/asn/PreimageFulfillment.h index ebfe35f22..c13ca564e 100644 --- a/src/cryptoconditions/src/asn/PreimageFulfillment.h +++ b/src/cryptoconditions/src/asn/PreimageFulfillment.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/RsaFingerprintContents.c b/src/cryptoconditions/src/asn/RsaFingerprintContents.c index 63d9f5296..462aac97f 100644 --- a/src/cryptoconditions/src/asn/RsaFingerprintContents.c +++ b/src/cryptoconditions/src/asn/RsaFingerprintContents.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/RsaFingerprintContents.h b/src/cryptoconditions/src/asn/RsaFingerprintContents.h index ca9ac6993..9d63a472b 100644 --- a/src/cryptoconditions/src/asn/RsaFingerprintContents.h +++ b/src/cryptoconditions/src/asn/RsaFingerprintContents.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/RsaSha256Fulfillment.c b/src/cryptoconditions/src/asn/RsaSha256Fulfillment.c index 3072a6bea..d4948073f 100644 --- a/src/cryptoconditions/src/asn/RsaSha256Fulfillment.c +++ b/src/cryptoconditions/src/asn/RsaSha256Fulfillment.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/RsaSha256Fulfillment.h b/src/cryptoconditions/src/asn/RsaSha256Fulfillment.h index 801e745a0..ca8dd32a9 100644 --- a/src/cryptoconditions/src/asn/RsaSha256Fulfillment.h +++ b/src/cryptoconditions/src/asn/RsaSha256Fulfillment.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Secp256k1FingerprintContents.c b/src/cryptoconditions/src/asn/Secp256k1FingerprintContents.c index e31887f75..903ad4ca5 100644 --- a/src/cryptoconditions/src/asn/Secp256k1FingerprintContents.c +++ b/src/cryptoconditions/src/asn/Secp256k1FingerprintContents.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Secp256k1FingerprintContents.h b/src/cryptoconditions/src/asn/Secp256k1FingerprintContents.h index 1f6e8fa61..46370abec 100644 --- a/src/cryptoconditions/src/asn/Secp256k1FingerprintContents.h +++ b/src/cryptoconditions/src/asn/Secp256k1FingerprintContents.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Secp256k1Fulfillment.c b/src/cryptoconditions/src/asn/Secp256k1Fulfillment.c index cf8d65512..a02366a22 100644 --- a/src/cryptoconditions/src/asn/Secp256k1Fulfillment.c +++ b/src/cryptoconditions/src/asn/Secp256k1Fulfillment.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/Secp256k1Fulfillment.h b/src/cryptoconditions/src/asn/Secp256k1Fulfillment.h index 894826cb8..16c4641e4 100644 --- a/src/cryptoconditions/src/asn/Secp256k1Fulfillment.h +++ b/src/cryptoconditions/src/asn/Secp256k1Fulfillment.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/SimpleSha256Condition.c b/src/cryptoconditions/src/asn/SimpleSha256Condition.c index 17c45a5fb..35faf4bc7 100644 --- a/src/cryptoconditions/src/asn/SimpleSha256Condition.c +++ b/src/cryptoconditions/src/asn/SimpleSha256Condition.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/SimpleSha256Condition.h b/src/cryptoconditions/src/asn/SimpleSha256Condition.h index cd859b4b3..be94c496d 100644 --- a/src/cryptoconditions/src/asn/SimpleSha256Condition.h +++ b/src/cryptoconditions/src/asn/SimpleSha256Condition.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/ThresholdFingerprintContents.c b/src/cryptoconditions/src/asn/ThresholdFingerprintContents.c index b4e05ac67..2d4f335a1 100644 --- a/src/cryptoconditions/src/asn/ThresholdFingerprintContents.c +++ b/src/cryptoconditions/src/asn/ThresholdFingerprintContents.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/ThresholdFingerprintContents.h b/src/cryptoconditions/src/asn/ThresholdFingerprintContents.h index 4162a7070..876297100 100644 --- a/src/cryptoconditions/src/asn/ThresholdFingerprintContents.h +++ b/src/cryptoconditions/src/asn/ThresholdFingerprintContents.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/ThresholdFulfillment.c b/src/cryptoconditions/src/asn/ThresholdFulfillment.c index 28c5e36a8..6a995e645 100644 --- a/src/cryptoconditions/src/asn/ThresholdFulfillment.c +++ b/src/cryptoconditions/src/asn/ThresholdFulfillment.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/ThresholdFulfillment.h b/src/cryptoconditions/src/asn/ThresholdFulfillment.h index 29bf19236..77b6a6425 100644 --- a/src/cryptoconditions/src/asn/ThresholdFulfillment.h +++ b/src/cryptoconditions/src/asn/ThresholdFulfillment.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "Crypto-Conditions" diff --git a/src/cryptoconditions/src/asn/asn_SET_OF.c b/src/cryptoconditions/src/asn/asn_SET_OF.c index 944f2cb8a..c8cd940dd 100644 --- a/src/cryptoconditions/src/asn/asn_SET_OF.c +++ b/src/cryptoconditions/src/asn/asn_SET_OF.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/asn_SET_OF.h b/src/cryptoconditions/src/asn/asn_SET_OF.h index 7edf14b51..3718dea46 100644 --- a/src/cryptoconditions/src/asn/asn_SET_OF.h +++ b/src/cryptoconditions/src/asn/asn_SET_OF.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/asn_application.h b/src/cryptoconditions/src/asn/asn_application.h index 71e9ba61b..9945a5927 100644 --- a/src/cryptoconditions/src/asn/asn_application.h +++ b/src/cryptoconditions/src/asn/asn_application.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/asn_codecs.h b/src/cryptoconditions/src/asn/asn_codecs.h index 4b2a29429..6a4a981c6 100644 --- a/src/cryptoconditions/src/asn/asn_codecs.h +++ b/src/cryptoconditions/src/asn/asn_codecs.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/asn_codecs_prim.c b/src/cryptoconditions/src/asn/asn_codecs_prim.c index 426339c94..d0adab97b 100644 --- a/src/cryptoconditions/src/asn/asn_codecs_prim.c +++ b/src/cryptoconditions/src/asn/asn_codecs_prim.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/asn_codecs_prim.h b/src/cryptoconditions/src/asn/asn_codecs_prim.h index be673ba19..5170db831 100644 --- a/src/cryptoconditions/src/asn/asn_codecs_prim.h +++ b/src/cryptoconditions/src/asn/asn_codecs_prim.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/asn_internal.h b/src/cryptoconditions/src/asn/asn_internal.h index 9c94ca6c3..ce224eac5 100644 --- a/src/cryptoconditions/src/asn/asn_internal.h +++ b/src/cryptoconditions/src/asn/asn_internal.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2005, 2007 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/asn_system.h b/src/cryptoconditions/src/asn/asn_system.h index 7e64ba109..124bd2c11 100644 --- a/src/cryptoconditions/src/asn/asn_system.h +++ b/src/cryptoconditions/src/asn/asn_system.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2007 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/ber_decoder.c b/src/cryptoconditions/src/asn/ber_decoder.c index b3a6329e0..5c876e542 100644 --- a/src/cryptoconditions/src/asn/ber_decoder.c +++ b/src/cryptoconditions/src/asn/ber_decoder.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/ber_decoder.h b/src/cryptoconditions/src/asn/ber_decoder.h index a3e5c5a3d..623d3f8db 100644 --- a/src/cryptoconditions/src/asn/ber_decoder.h +++ b/src/cryptoconditions/src/asn/ber_decoder.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/ber_tlv_length.c b/src/cryptoconditions/src/asn/ber_tlv_length.c index 4c2f1e5fd..f5e28941c 100644 --- a/src/cryptoconditions/src/asn/ber_tlv_length.c +++ b/src/cryptoconditions/src/asn/ber_tlv_length.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/ber_tlv_length.h b/src/cryptoconditions/src/asn/ber_tlv_length.h index 349680224..42b3e30e2 100644 --- a/src/cryptoconditions/src/asn/ber_tlv_length.h +++ b/src/cryptoconditions/src/asn/ber_tlv_length.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/ber_tlv_tag.c b/src/cryptoconditions/src/asn/ber_tlv_tag.c index 42708760e..7c0bef647 100644 --- a/src/cryptoconditions/src/asn/ber_tlv_tag.c +++ b/src/cryptoconditions/src/asn/ber_tlv_tag.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/ber_tlv_tag.h b/src/cryptoconditions/src/asn/ber_tlv_tag.h index 60e866861..e0f5a38ec 100644 --- a/src/cryptoconditions/src/asn/ber_tlv_tag.h +++ b/src/cryptoconditions/src/asn/ber_tlv_tag.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/constr_CHOICE.c b/src/cryptoconditions/src/asn/constr_CHOICE.c index 6116e6a6b..a8cd0e19d 100644 --- a/src/cryptoconditions/src/asn/constr_CHOICE.c +++ b/src/cryptoconditions/src/asn/constr_CHOICE.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/constr_CHOICE.h b/src/cryptoconditions/src/asn/constr_CHOICE.h index 60d8105e0..2a7a99bc5 100644 --- a/src/cryptoconditions/src/asn/constr_CHOICE.h +++ b/src/cryptoconditions/src/asn/constr_CHOICE.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/constr_SEQUENCE.c b/src/cryptoconditions/src/asn/constr_SEQUENCE.c index 5923023de..10e9a0cd5 100644 --- a/src/cryptoconditions/src/asn/constr_SEQUENCE.c +++ b/src/cryptoconditions/src/asn/constr_SEQUENCE.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/constr_SEQUENCE.h b/src/cryptoconditions/src/asn/constr_SEQUENCE.h index 6a7c6e5ed..0b20eab85 100644 --- a/src/cryptoconditions/src/asn/constr_SEQUENCE.h +++ b/src/cryptoconditions/src/asn/constr_SEQUENCE.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/constr_SET_OF.c b/src/cryptoconditions/src/asn/constr_SET_OF.c index 90e1b5539..c3671a8ca 100644 --- a/src/cryptoconditions/src/asn/constr_SET_OF.c +++ b/src/cryptoconditions/src/asn/constr_SET_OF.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/constr_SET_OF.h b/src/cryptoconditions/src/asn/constr_SET_OF.h index c0f1db8d9..19fe763cd 100644 --- a/src/cryptoconditions/src/asn/constr_SET_OF.h +++ b/src/cryptoconditions/src/asn/constr_SET_OF.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/constr_TYPE.c b/src/cryptoconditions/src/asn/constr_TYPE.c index 322f68c86..3fdee6819 100644 --- a/src/cryptoconditions/src/asn/constr_TYPE.c +++ b/src/cryptoconditions/src/asn/constr_TYPE.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/constr_TYPE.h b/src/cryptoconditions/src/asn/constr_TYPE.h index 596e5f298..6cfc68a3a 100644 --- a/src/cryptoconditions/src/asn/constr_TYPE.h +++ b/src/cryptoconditions/src/asn/constr_TYPE.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004, 2005, 2006 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/constraints.c b/src/cryptoconditions/src/asn/constraints.c index 1bdda73e5..c6901a78f 100644 --- a/src/cryptoconditions/src/asn/constraints.c +++ b/src/cryptoconditions/src/asn/constraints.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #include "asn_internal.h" #include "constraints.h" diff --git a/src/cryptoconditions/src/asn/constraints.h b/src/cryptoconditions/src/asn/constraints.h index a38e586c8..86dedfd6f 100644 --- a/src/cryptoconditions/src/asn/constraints.h +++ b/src/cryptoconditions/src/asn/constraints.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/der_encoder.c b/src/cryptoconditions/src/asn/der_encoder.c index 1c014802a..c1e744396 100644 --- a/src/cryptoconditions/src/asn/der_encoder.c +++ b/src/cryptoconditions/src/asn/der_encoder.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/der_encoder.h b/src/cryptoconditions/src/asn/der_encoder.h index b7debab3f..d0d1d5057 100644 --- a/src/cryptoconditions/src/asn/der_encoder.h +++ b/src/cryptoconditions/src/asn/der_encoder.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/per_decoder.c b/src/cryptoconditions/src/asn/per_decoder.c index 4f2e73e9b..b026f7241 100644 --- a/src/cryptoconditions/src/asn/per_decoder.c +++ b/src/cryptoconditions/src/asn/per_decoder.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #include "asn_application.h" #include #include diff --git a/src/cryptoconditions/src/asn/per_decoder.h b/src/cryptoconditions/src/asn/per_decoder.h index 9fe08887a..89370b140 100644 --- a/src/cryptoconditions/src/asn/per_decoder.h +++ b/src/cryptoconditions/src/asn/per_decoder.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2005, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/per_encoder.c b/src/cryptoconditions/src/asn/per_encoder.c index b54170b82..bc8da9a62 100644 --- a/src/cryptoconditions/src/asn/per_encoder.c +++ b/src/cryptoconditions/src/asn/per_encoder.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 #include "asn_application.h" #include #include diff --git a/src/cryptoconditions/src/asn/per_encoder.h b/src/cryptoconditions/src/asn/per_encoder.h index 0c4501791..95a7bf2d6 100644 --- a/src/cryptoconditions/src/asn/per_encoder.h +++ b/src/cryptoconditions/src/asn/per_encoder.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2006, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/per_opentype.c b/src/cryptoconditions/src/asn/per_opentype.c index 0c221aba2..b33468ecf 100644 --- a/src/cryptoconditions/src/asn/per_opentype.c +++ b/src/cryptoconditions/src/asn/per_opentype.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/per_opentype.h b/src/cryptoconditions/src/asn/per_opentype.h index facfaa637..eefc3a8c8 100644 --- a/src/cryptoconditions/src/asn/per_opentype.h +++ b/src/cryptoconditions/src/asn/per_opentype.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/per_support.c b/src/cryptoconditions/src/asn/per_support.c index 6ee0c55f1..92aa42b66 100644 --- a/src/cryptoconditions/src/asn/per_support.c +++ b/src/cryptoconditions/src/asn/per_support.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2005-2014 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/per_support.h b/src/cryptoconditions/src/asn/per_support.h index cc470ce2f..636e8380c 100644 --- a/src/cryptoconditions/src/asn/per_support.h +++ b/src/cryptoconditions/src/asn/per_support.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2005-2014 Lev Walkin . * All rights reserved. diff --git a/src/cryptoconditions/src/asn/xer_decoder.c b/src/cryptoconditions/src/asn/xer_decoder.c index b410c620f..19155981d 100644 --- a/src/cryptoconditions/src/asn/xer_decoder.c +++ b/src/cryptoconditions/src/asn/xer_decoder.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/xer_decoder.h b/src/cryptoconditions/src/asn/xer_decoder.h index 06a434989..a081921fe 100644 --- a/src/cryptoconditions/src/asn/xer_decoder.h +++ b/src/cryptoconditions/src/asn/xer_decoder.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/xer_encoder.c b/src/cryptoconditions/src/asn/xer_encoder.c index 460657580..ce42c8469 100644 --- a/src/cryptoconditions/src/asn/xer_encoder.c +++ b/src/cryptoconditions/src/asn/xer_encoder.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/xer_encoder.h b/src/cryptoconditions/src/asn/xer_encoder.h index f86dc543e..ef6c0f5b7 100644 --- a/src/cryptoconditions/src/asn/xer_encoder.h +++ b/src/cryptoconditions/src/asn/xer_encoder.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. diff --git a/src/cryptoconditions/src/asn/xer_support.c b/src/cryptoconditions/src/asn/xer_support.c index 36b4bfbfc..07892d091 100644 --- a/src/cryptoconditions/src/asn/xer_support.c +++ b/src/cryptoconditions/src/asn/xer_support.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 X/IO Labs, xiolabs.com. * Copyright (c) 2003, 2004, 2005 Lev Walkin . diff --git a/src/cryptoconditions/src/asn/xer_support.h b/src/cryptoconditions/src/asn/xer_support.h index 8b01944ab..b830008bd 100644 --- a/src/cryptoconditions/src/asn/xer_support.h +++ b/src/cryptoconditions/src/asn/xer_support.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2003, 2004 X/IO Labs, xiolabs.com. * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. From 97936d5f7068135144fbc6714a7d7ecf4518d518 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 07:57:42 -0500 Subject: [PATCH 209/277] update debian copyright list --- contrib/debian/copyright | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/contrib/debian/copyright b/contrib/debian/copyright index 2f51f4a4c..f2d71c287 100644 --- a/contrib/debian/copyright +++ b/contrib/debian/copyright @@ -1,16 +1,8 @@ -Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=174 -Upstream-Name: Zcash -Upstream-Contact: Zcash Company -Source: https://github.com/zcash/zcash - Files: * -Copyright: 2016-2018, The Zcash developers - 2009-2018, Bitcoin Core developers - 2009-2018, Bitcoin Developers -License: Expat -Comment: The Bitcoin Core developers encompasses the current developers listed on bitcoin.org, - as well as the numerous contributors to the project. - The Zcash developers are listed at https://z.cash/team.html. +Copyright: 2016-2020, The Hush developers + 2009-2016, Bitcoin Core developers +License: GPLv3 +Comment: https://hush.is/developers Files: depends/sources/libsodium-*.tar.gz Copyright: 2013-2016 Frank Denis @@ -31,10 +23,6 @@ Copyright: 1990, 2016 Oracle and/or its affiliates; 2000-2005 INRIA, France Telecom License: BDB -Files: depends/sources/openssl-*.tar.gz -Copyright: 1998-2016 The OpenSSL Project and 1995-1998 Eric Young -License: OpenSSL+SSLeay - Files: depends/sources/zeromq-*.tar.gz Copyright: 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. From b103b66d476acc0561e96f97e32ee46ec56210cf Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 08:03:58 -0500 Subject: [PATCH 210/277] update readme --- README.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c3aa5a9c9..6c54ff31f 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,28 @@ -# HUSH +# Hush -## What is HUSH? +## What is Hush? ![Logo](doc/hush/hush.png "Logo") -HUSH (originally Zdash) is a source code fork of [ZCash](https://z.cash/) and has -it's own genesis block. It is not a chain fork of another coin. Based on -Bitcoin's code, it intends to offer a far higher standard of privacy through a -sophisticated zero-knowledge proving scheme that preserves confidentiality of -transaction metadata. +Hush implements Extreme Privacy via blockchain tech. We have our own +genesis block. We are not a chain fork (copy) of another coin. We are based on +Bitcoin code, with sophisticated zero-knowledge mathematics added for privacy. +This keeps your transaction metadata private! -This software is the HUSH node and command-line client. It downloads and stores -the entire history of HUSH transactions; depending on the speed of your -computer and network connection, the synchronization process could take a day -or more once the blockchain has reached a significant size. +## This repository -**HUSH is unfinished and highly experimental.** Use at your own risk! +This software is the Hush node and command-line client. It downloads and stores +the entire history of Hush transactions; depending on the speed of your +computer and network connection, it will likely take a few hours at least, but +some people report full nodes syncing in less than 1.5 hours. A competing privacy +coin takes over 24 hours to sync their full nodes because of Sprout Transactions, lulz. + +**Hush is unfinished and highly experimental.** Use at your own risk! ## Telegram Please feel free to join us on Telegram : - * Main group: https://hush.is/telegram + * Main group: https://hush.is/tg * Support group: https://hush.is/telegram_support * Mining group: https://hush.is/telegram_mining From 187fea17d9e5de279dab94b5855d35bb23c9f14a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 08:14:43 -0500 Subject: [PATCH 211/277] update our beloved readme --- README.md | 30 +++++++++++++++++++++++++++--- doc/relnotes/README.md | 4 ++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6c54ff31f..57f1de3c6 100644 --- a/README.md +++ b/README.md @@ -17,15 +17,39 @@ computer and network connection, it will likely take a few hours at least, but some people report full nodes syncing in less than 1.5 hours. A competing privacy coin takes over 24 hours to sync their full nodes because of Sprout Transactions, lulz. -**Hush is unfinished and highly experimental.** Use at your own risk! +## BANNED BY GITHUB -## Telegram +In working on this release, Duke Leto was suspended from Github, which gave Hush developers +the impetus to completely leave that racist and censorship-loving platform. -Please feel free to join us on Telegram : +Hush now has it's own git.hush.is Gitea instance, +because we will not be silenced by Microsoft. + +All Hush software will be released from git.hush.is and hush.is, downloads from any other +domains should be assumed to be backdoored. + +**Hush is unfinished and highly experimental.** Use at your own risk! Just like Bitcoin. + +## Socials + +Please feel free to join us on Telegram for official support : * Main group: https://hush.is/tg * Support group: https://hush.is/telegram_support * Mining group: https://hush.is/telegram_mining +Other socials: + + * @MyHushTeam on Twitter + * Hush on YouTube + * Hush on Reddit + +## Official Explorer + +explorer.hush.is + +We are looking for alternate explorers to be run on Tor, i2P and other TLDs, if you are interested +please join TG and ask questions. + ## Claiming Funds From Old Hush Wallets Hush migrated to a new mainnet after Block 500,000 on the old Hush blockchain. diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 69084f0be..19b30f704 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -20,8 +20,8 @@ evil organizations. on low resource devices (like internet-of-shit light bulbs/etc) * Hush Docker scripts are now officially maintained! * Faster release binaries with -03 - * Optimized and hardened memory pool code to remove KMD-isms - * Updated all our error messages and things for https://hush.is, + * Optimized and hardened memory pool code + * Updated all our error messages and things for https://hush.is , our new official domain * getblocktemplate RPC now provides better error reporting about whether there are no peers or if it's not in sync From 4d05f3b1615989619aa33ce24e2841955bba9fb9 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 08:30:32 -0500 Subject: [PATCH 212/277] yep --- src/bitcoind-res.rc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bitcoind-res.rc b/src/bitcoind-res.rc index c72d3769a..18b5ae782 100644 --- a/src/bitcoind-res.rc +++ b/src/bitcoind-res.rc @@ -16,14 +16,14 @@ BEGIN BEGIN BLOCK "040904E4" // U.S. English - multilingual (hex) BEGIN - VALUE "CompanyName", "Komodo" - VALUE "FileDescription", "komodod (Komodo node with a JSON-RPC server)" + VALUE "CompanyName", "Hush" + VALUE "FileDescription", "hushd (Hush full node with a JSON-RPC server)" VALUE "FileVersion", VER_FILEVERSION_STR - VALUE "InternalName", "komodod" + VALUE "InternalName", "hushd" VALUE "LegalCopyright", COPYRIGHT_STR - VALUE "LegalTrademarks1", "Distributed under the GPLv3 software license, see the accompanying file COPYING or https://www.opensource.org/licenses/mit-license.php" - VALUE "OriginalFilename", "komodod.exe" - VALUE "ProductName", "komodod" + VALUE "LegalTrademarks1", "Distributed under the GPLv3 software license, see the accompanying file COPYING" + VALUE "OriginalFilename", "hushd.exe" + VALUE "ProductName", "hushd" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END From c8e2b12618ada7cc9aff708c6e26f1e889b11215 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 08:30:54 -0500 Subject: [PATCH 213/277] yeah huh --- src/main.cpp | 3 +-- src/rpc/server.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 42106c2c3..73bab32a1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -625,8 +625,7 @@ CBlockIndex* FindForkInGlobalIndex(const CChain& chain, const CBlockLocator& loc CCoinsViewCache *pcoinsTip = NULL; CBlockTreeDB *pblocktree = NULL; -// Komodo globals - +// Hush globals #define HUSH_ZCASH #include "hush.h" diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index 1de69fdd4..8d893c25d 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -277,7 +277,7 @@ UniValue stop(const UniValue& params, bool fHelp, const CPubKey& mypk) StartShutdown(); if ((strncmp(SMART_CHAIN_SYMBOL, "HUSH3", 5) == 0) ) { - sprintf(buf,"Hush server stopping..."); + sprintf(buf,"Hush server stopping, for now..."); } else { sprintf(buf,"%s server stopping...",SMART_CHAIN_SYMBOL); } From 7136da99aec4dc488a16d7a21226cc393ab7f11c Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 18:32:33 -0500 Subject: [PATCH 214/277] Delete some KMD garbage --- qa/hush/performance-measurements.sh | 341 ---------------------------- src/cc/COptCCParams.cpp | 119 ---------- 2 files changed, 460 deletions(-) delete mode 100755 qa/hush/performance-measurements.sh delete mode 100644 src/cc/COptCCParams.cpp diff --git a/qa/hush/performance-measurements.sh b/qa/hush/performance-measurements.sh deleted file mode 100755 index 3370bd20f..000000000 --- a/qa/hush/performance-measurements.sh +++ /dev/null @@ -1,341 +0,0 @@ -#!/bin/bash -set -u - - -DATADIR=./benchmark-datadir -SHA256CMD="$(command -v sha256sum || echo shasum)" -SHA256ARGS="$(command -v sha256sum >/dev/null || echo '-a 256')" - -function zcash_rpc { - ./src/zcash-cli -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 "$@" -} - -function zcash_rpc_slow { - # Timeout of 1 hour - zcash_rpc -rpcclienttimeout=3600 "$@" -} - -function zcash_rpc_veryslow { - # Timeout of 2.5 hours - zcash_rpc -rpcclienttimeout=9000 "$@" -} - -function zcash_rpc_wait_for_start { - zcash_rpc -rpcwait getinfo > /dev/null -} - -function zcashd_generate { - zcash_rpc generate 101 > /dev/null -} - -function extract_benchmark_datadir { - if [ -f "$1.tar.xz" ]; then - # Check the hash of the archive: - "$SHA256CMD" $SHA256ARGS -c < /dev/null - wait $ZCASHD_PID -} - -function zcashd_massif_start { - case "$1" in - sendtoaddress|loadwallet|listunspent) - case "$2" in - 200k-recv) - use_200k_benchmark 0 - ;; - 200k-send) - use_200k_benchmark 1 - ;; - *) - echo "Bad arguments to zcashd_massif_start." - exit 1 - esac - ;; - *) - rm -rf "$DATADIR" - mkdir -p "$DATADIR/regtest" - touch "$DATADIR/zcash.conf" - esac - rm -f massif.out - valgrind --tool=massif --time-unit=ms --massif-out-file=massif.out ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 & - ZCASHD_PID=$! - zcash_rpc_wait_for_start -} - -function zcashd_massif_stop { - zcash_rpc stop > /dev/null - wait $ZCASHD_PID - ms_print massif.out -} - -function zcashd_valgrind_start { - rm -rf "$DATADIR" - mkdir -p "$DATADIR/regtest" - touch "$DATADIR/zcash.conf" - rm -f valgrind.out - valgrind --leak-check=yes -v --error-limit=no --log-file="valgrind.out" ./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 & - ZCASHD_PID=$! - zcash_rpc_wait_for_start -} - -function zcashd_valgrind_stop { - zcash_rpc stop > /dev/null - wait $ZCASHD_PID - cat valgrind.out -} - -function extract_benchmark_data { - if [ -f "block-107134.tar.xz" ]; then - # Check the hash of the archive: - "$SHA256CMD" $SHA256ARGS -c < &vch) - -EXAMPLE taken from Verus how to create scriptPubKey from COptCCParams class: -EXAMPLE taken from Verus how to decode scriptPubKey from COptCCParams class: -*/ - -bool MakeGuardedOutput(CAmount value, CPubKey &dest, CTransaction &stakeTx, CTxOut &vout) -{ - CCcontract_info *cp, C; - cp = CCinit(&C,EVAL_STAKEGUARD); - - CPubKey ccAddress = CPubKey(ParseHex(cp->CChexstr)); - - // return an output that is bound to the stake transaction and can be spent by presenting either a signed condition by the original - // destination address or a properly signed stake transaction of the same utxo on a fork - vout = MakeCC1of2vout(EVAL_STAKEGUARD, value, dest, ccAddress); - - std::vector vPubKeys = std::vector(); - vPubKeys.push_back(dest); - vPubKeys.push_back(ccAddress); - - std::vector> vData = std::vector>(); - - CVerusHashWriter hw = CVerusHashWriter(SER_GETHASH, PROTOCOL_VERSION); - - hw << stakeTx.vin[0].prevout.hash; - hw << stakeTx.vin[0].prevout.n; - - uint256 utxo = hw.GetHash(); - vData.push_back(std::vector(utxo.begin(), utxo.end())); // Can we use any data here to construct vector? - - CStakeParams p; - if (GetStakeParams(stakeTx, p)) - { - // prev block hash and height is here to make validation easy - vData.push_back(std::vector(p.prevHash.begin(), p.prevHash.end())); - std::vector height = std::vector(4); - for (int i = 0; i < 4; i++) - { - height[i] = (p.blkHeight >> (8 * i)) & 0xff; - } - vData.push_back(height); - - COptCCParams ccp = COptCCParams(COptCCParams::VERSION, EVAL_STAKEGUARD, 1, 2, vPubKeys, vData); - - vout.scriptPubKey << ccp.AsVector() << OP_DROP; - return true; - } - return false; -} - -bool ValidateMatchingStake(const CTransaction &ccTx, uint32_t voutNum, const CTransaction &stakeTx, bool &cheating) -{ - // an invalid or non-matching stake transaction cannot cheat - cheating = false; - - //printf("ValidateMatchingStake: ccTx.vin[0].prevout.hash: %s, ccTx.vin[0].prevout.n: %d\n", ccTx.vin[0].prevout.hash.GetHex().c_str(), ccTx.vin[0].prevout.n); - - if (ccTx.IsCoinBase()) - { - CStakeParams p; - if (ValidateStakeTransaction(stakeTx, p)) - { - std::vector> vParams = std::vector>(); - CScript dummy; - - if (ccTx.vout[voutNum].scriptPubKey.IsPayToCryptoCondition(&dummy, vParams) && vParams.size() > 0) - { - COptCCParams ccp = COptCCParams(vParams[0]); - if (ccp.IsValid() & ccp.vData.size() >= 3 && ccp.vData[2].size() <= 4) - { - CVerusHashWriter hw = CVerusHashWriter(SER_GETHASH, PROTOCOL_VERSION); - - hw << stakeTx.vin[0].prevout.hash; - hw << stakeTx.vin[0].prevout.n; - uint256 utxo = hw.GetHash(); - - uint32_t height = 0; - int i, dataLen = ccp.vData[2].size(); - for (i = dataLen - 1; i >= 0; i--) - { - height = (height << 8) + ccp.vData[2][i]; - } - // for debugging strange issue - // printf("iterator: %d, height: %d, datalen: %d\n", i, height, dataLen); - - if (utxo == uint256(ccp.vData[0])) - { - if (p.prevHash != uint256(ccp.vData[1]) && p.blkHeight >= height) - { - cheating = true; - return true; - } - // if block height is equal and we are at the else, prevHash must have been equal - else if (p.blkHeight == height) - { - return true; - } - } - } - } - } - } - return false; -} From 980350b9b4e3018a06f4848d88f2d2434b2a63cc Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 22:10:59 -0500 Subject: [PATCH 215/277] Stuck in the grind --- qa/hush/create_benchmark_archive.py | 25 ++- qa/hush/create_wallet_200k_utxos.py | 4 +- qa/hush/full-test-suite.sh | 3 +- qa/hush/full_test_suite.py | 5 +- qa/rpc-tests/README.md | 10 +- qa/rpc-tests/ac_private.py | 4 +- qa/rpc-tests/addressindex.py | 6 +- qa/rpc-tests/bip65-cltv-p2p.py | 5 +- qa/rpc-tests/bipdersig-p2p.py | 2 +- qa/rpc-tests/blockchain.py | 1 + qa/rpc-tests/cryptoconditions.py | 1 + qa/rpc-tests/cryptoconditions_channels.py | 1 + qa/rpc-tests/cryptoconditions_dice.py | 1 + qa/rpc-tests/cryptoconditions_faucet.py | 1 + qa/rpc-tests/cryptoconditions_gateways.py | 1 + qa/rpc-tests/cryptoconditions_heir.py | 1 + qa/rpc-tests/cryptoconditions_oracles.py | 1 + qa/rpc-tests/cryptoconditions_rewards.py | 1 + qa/rpc-tests/cryptoconditions_token.py | 1 + qa/rpc-tests/decodescript.py | 1 + qa/rpc-tests/disablewallet.py | 1 + qa/rpc-tests/finalsaplingroot.py | 1 + qa/rpc-tests/forknotify.py | 1 + qa/rpc-tests/fundrawtransaction.py | 1 + qa/rpc-tests/getblocktemplate.py | 1 + qa/rpc-tests/getblocktemplate_longpoll.py | 1 + qa/rpc-tests/getblocktemplate_proposals.py | 1 + qa/rpc-tests/getchaintips.py | 1 + qa/rpc-tests/hardforkdetection.py | 1 + qa/rpc-tests/httpbasics.py | 1 + qa/rpc-tests/invalidateblock.py | 1 + qa/rpc-tests/invalidblockrequest.py | 1 + qa/rpc-tests/ivk_import_export.py | 1 + qa/rpc-tests/key_import_export.py | 1 + qa/rpc-tests/keypool.py | 1 + qa/rpc-tests/listtransactions.py | 1 + qa/rpc-tests/maxblocksinflight.py | 1 + qa/rpc-tests/mempool_nu_activation.py | 1 + qa/rpc-tests/mempool_reorg.py | 1 + qa/rpc-tests/mempool_resurrect_test.py | 1 + qa/rpc-tests/mempool_spendcoinbase.py | 1 + qa/rpc-tests/mempool_tx_expiry.py | 1 + qa/rpc-tests/mempool_tx_input_limit.py | 1 + qa/rpc-tests/merkle_blocks.py | 1 + qa/rpc-tests/nodehandling.py | 1 + qa/rpc-tests/nspv_client_test.py | 37 ++-- qa/rpc-tests/p2p-acceptblock.py | 1 + qa/rpc-tests/p2p_node_bloom.py | 1 + qa/rpc-tests/p2p_txexpiry_dos.py | 1 + qa/rpc-tests/prioritisetransaction.py | 1 + qa/rpc-tests/proxy_test.py | 1 + qa/rpc-tests/pruning.py | 1 + qa/rpc-tests/rawtransactions.py | 1 + qa/rpc-tests/receivedby.py | 1 + qa/rpc-tests/rest.py | 1 + qa/rpc-tests/rewind_index.py | 1 + qa/rpc-tests/rpcbind_test.py | 1 + qa/rpc-tests/script_test.py | 1 + qa/rpc-tests/signrawtransaction_offline.py | 5 +- qa/rpc-tests/signrawtransactions.py | 1 + qa/rpc-tests/smartfees.py | 1 + qa/rpc-tests/spentindex.py | 3 +- qa/rpc-tests/test_framework/authproxy.py | 7 +- qa/rpc-tests/test_framework/bignum.py | 9 +- qa/rpc-tests/test_framework/blockstore.py | 3 + qa/rpc-tests/test_framework/blocktools.py | 6 +- qa/rpc-tests/test_framework/comptool.py | 3 +- qa/rpc-tests/test_framework/equihash.py | 3 + qa/rpc-tests/test_framework/mininode.py | 27 +-- qa/rpc-tests/test_framework/netutil.py | 1 + qa/rpc-tests/test_framework/script.py | 20 +- qa/rpc-tests/test_framework/socks5.py | 1 + qa/rpc-tests/test_framework/test_framework.py | 7 +- qa/rpc-tests/test_framework/util.py | 5 +- qa/rpc-tests/timestampindex.py | 9 +- qa/rpc-tests/txindex.py | 3 +- qa/rpc-tests/txn_doublespend.py | 1 + qa/rpc-tests/wallet.py | 1 + qa/rpc-tests/wallet_1941.py | 1 + qa/rpc-tests/wallet_addresses.py | 1 + qa/rpc-tests/wallet_anchorfork.py | 1 + qa/rpc-tests/wallet_changeindicator.py | 1 + qa/rpc-tests/wallet_import_export.py | 3 +- qa/rpc-tests/wallet_listreceived.py | 1 + qa/rpc-tests/wallet_mergetoaddress.py | 1 + qa/rpc-tests/wallet_nullifiers.py | 1 + qa/rpc-tests/wallet_overwintertx.py | 1 + qa/rpc-tests/wallet_persistence.py | 1 + qa/rpc-tests/wallet_protectcoinbase.py | 4 +- qa/rpc-tests/wallet_sapling.py | 5 +- qa/rpc-tests/wallet_shieldcoinbase.py | 1 + qa/rpc-tests/wallet_shieldcoinbase_sapling.py | 3 +- qa/rpc-tests/wallet_treestate.py | 1 + qa/rpc-tests/walletbackup.py | 1 + qa/rpc-tests/zapwallettxes.py | 1 + qa/rpc-tests/zkey_import_export.py | 1 + qa/rpc-tests/zmq_test.py | 4 +- src/alert.cpp | 130 +---------- src/cc/CCPrices.h | 2 +- src/cc/CCinclude.h | 27 +-- src/cc/import.cpp | 6 +- src/cc/importgateway.cpp | 30 +-- src/cc/oracles.cpp | 6 +- src/cc/prices.cpp | 18 +- src/crosschain.cpp | 88 ++++---- src/gtest/test_noteencryption.cpp | 4 +- src/hush.h | 2 +- src/hush_defs.h | 15 +- src/hush_globals.h | 8 +- src/hush_structs.h | 6 +- src/hush_utils.h | 2 +- src/komodo_cJSON.h | 8 +- src/komodo_kv.h | 28 +-- src/main.cpp | 208 ++++++------------ src/miner.cpp | 60 ++--- src/notarizationdb.cpp | 43 ++-- src/pow.cpp | 55 +---- src/rpc/blockchain.cpp | 4 +- src/test/alert_tests.cpp | 8 - src/test/rpc_wallet_tests.cpp | 20 +- src/transaction_builder.cpp | 2 +- src/transaction_builder.h | 6 +- .../asyncrpcoperation_mergetoaddress.cpp | 12 +- src/wallet/asyncrpcoperation_mergetoaddress.h | 4 +- src/wallet/asyncrpcoperation_sendmany.cpp | 63 ++---- src/wallet/asyncrpcoperation_sendmany.h | 4 +- src/wallet/rpcwallet.cpp | 195 ++++++---------- src/wallet/wallet.h | 2 +- src/zcash/Note.cpp | 2 +- src/zcash/Note.hpp | 8 +- src/zcash/Zcash.h | 6 +- src/zcbenchmarks.cpp | 2 +- 132 files changed, 529 insertions(+), 853 deletions(-) diff --git a/qa/hush/create_benchmark_archive.py b/qa/hush/create_benchmark_archive.py index 84bd236de..b9cc314ab 100644 --- a/qa/hush/create_benchmark_archive.py +++ b/qa/hush/create_benchmark_archive.py @@ -1,3 +1,6 @@ +# Copyright (c) 2016-2020 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 import binascii import calendar import json @@ -10,13 +13,13 @@ import sys import tarfile import time -ZCASH_CLI = './src/zcash-cli' +HUSH_CLI = './src/hush-cli' USAGE = """ Requirements: - find - xz -- %s (edit ZCASH_CLI in this script to alter the path) -- A running mainnet zcashd using the default datadir with -txindex=1 +- %s (edit HUSH_CLI in this script to alter the path) +- A running mainnet hushd using the default datadir with -txindex=1 Example usage: @@ -25,11 +28,11 @@ virtualenv venv . venv/bin/activate pip install --global-option=build_ext --global-option="-L$(pwd)/src/leveldb/" --global-option="-I$(pwd)/src/leveldb/include/" plyvel pip install progressbar2 -LD_LIBRARY_PATH=src/leveldb python qa/zcash/create_benchmark_archive.py -""" % ZCASH_CLI +LD_LIBRARY_PATH=src/leveldb python qa/hush/create_benchmark_archive.py +""" % HUSH_CLI def check_deps(): - if subprocess.call(['which', 'find', 'xz', ZCASH_CLI], stdout=subprocess.PIPE): + if subprocess.call(['which', 'find', 'xz', HUSH_CLI], stdout=subprocess.PIPE): print USAGE sys.exit() @@ -154,15 +157,15 @@ def deterministic_filter(tarinfo): return tarinfo def create_benchmark_archive(blk_hash): - blk = json.loads(subprocess.check_output([ZCASH_CLI, 'getblock', blk_hash])) + blk = json.loads(subprocess.check_output([HUSH_CLI, 'getblock', blk_hash])) print 'Height: %d' % blk['height'] print 'Transactions: %d' % len(blk['tx']) os.mkdir('benchmark') with open('benchmark/block-%d.dat' % blk['height'], 'wb') as f: - f.write(binascii.unhexlify(subprocess.check_output([ZCASH_CLI, 'getblock', blk_hash, 'false']).strip())) + f.write(binascii.unhexlify(subprocess.check_output([HUSH_CLI, 'getblock', blk_hash, 'false']).strip())) - txs = [json.loads(subprocess.check_output([ZCASH_CLI, 'getrawtransaction', tx, '1']) + txs = [json.loads(subprocess.check_output([HUSH_CLI, 'getrawtransaction', tx, '1']) ) for tx in blk['tx']] js_txs = len([tx for tx in txs if len(tx['vjoinsplit']) > 0]) @@ -187,7 +190,7 @@ def create_benchmark_archive(blk_hash): bar = progressbar.ProgressBar(redirect_stdout=True) print 'Collecting input coins for block' for tx in bar(unique_inputs.keys()): - rawtx = json.loads(subprocess.check_output([ZCASH_CLI, 'getrawtransaction', tx, '1'])) + rawtx = json.loads(subprocess.check_output([HUSH_CLI, 'getrawtransaction', tx, '1'])) mask_size = 0 mask_code = 0 @@ -235,7 +238,7 @@ def create_benchmark_archive(blk_hash): binascii.unhexlify(rawtx['vout'][i]['scriptPubKey']['hex']))) # - VARINT(nHeight) coins.extend(encode_varint(json.loads( - subprocess.check_output([ZCASH_CLI, 'getblockheader', rawtx['blockhash']]) + subprocess.check_output([HUSH_CLI, 'getblockheader', rawtx['blockhash']]) )['height'])) db_key = b'c' + bytes(binascii.unhexlify(tx)[::-1]) diff --git a/qa/hush/create_wallet_200k_utxos.py b/qa/hush/create_wallet_200k_utxos.py index ee0139950..ea0b057bf 100644 --- a/qa/hush/create_wallet_200k_utxos.py +++ b/qa/hush/create_wallet_200k_utxos.py @@ -1,9 +1,8 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2017 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - -# # Create a large wallet # # To use: @@ -11,7 +10,6 @@ # - Add wallet_large.py to RPC tests list # - ./qa/pull-tester/rpc-tests.sh wallet_large --nocleanup # - Archive the resulting /tmp/test###### directory -# from test_framework.test_framework import BitcoinTestFramework from test_framework.util import ( diff --git a/qa/hush/full-test-suite.sh b/qa/hush/full-test-suite.sh index f8ebbb895..d046741c9 100755 --- a/qa/hush/full-test-suite.sh +++ b/qa/hush/full-test-suite.sh @@ -1,7 +1,8 @@ #!/usr/bin/env python2 # Copyright (c) 2016-2020 The Hush developers -# Released under the GPLv3 # Execute all of the automated tests related to Hush +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html import argparse import os diff --git a/qa/hush/full_test_suite.py b/qa/hush/full_test_suite.py index 754884092..ec6a8d19a 100755 --- a/qa/hush/full_test_suite.py +++ b/qa/hush/full_test_suite.py @@ -1,9 +1,8 @@ #!/usr/bin/env python2 # Copyright (c) 2016-2020 The Hush developers -# Released under the GPLv3 -# +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # Execute all of the automated tests related to Hush -# import argparse from glob import glob diff --git a/qa/rpc-tests/README.md b/qa/rpc-tests/README.md index f5f3da760..472c38874 100644 --- a/qa/rpc-tests/README.md +++ b/qa/rpc-tests/README.md @@ -20,10 +20,9 @@ Possible options: ``` -h, --help show this help message and exit - --nocleanup Leave komodods and test.* datadir on exit or error - --noshutdown Don't stop komodods after the test execution - --srcdir=SRCDIR Source directory containing hushd/hush-cli (default: - ../../src) + --nocleanup Leave binaries and test.* datadir on exit or error + --noshutdown Don't stop full node after the test execution + --srcdir=SRCDIR Source directory containing hushd/hush-cli (default: ../../src) --tmpdir=TMPDIR Root directory for datadirs --tracerpc Print out all RPC calls as they are made ``` @@ -39,8 +38,7 @@ After the first run, the cache/ blockchain and wallets are copied into a temporary directory and used as the initial test state. -If you get into a bad state, you should be able -to recover with: +If you get into a bad state, you should be able to recover with: ```bash rm -rf cache diff --git a/qa/rpc-tests/ac_private.py b/qa/rpc-tests/ac_private.py index 9d4e376f5..5c871d49c 100755 --- a/qa/rpc-tests/ac_private.py +++ b/qa/rpc-tests/ac_private.py @@ -1,8 +1,6 @@ #!/usr/bin/env python2 -# Copyright (c) 2018-2020 The Hush developers +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers -# Released under the GPLv3 - # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/addressindex.py b/qa/rpc-tests/addressindex.py index c0fbc107f..9b321cd6d 100755 --- a/qa/rpc-tests/addressindex.py +++ b/qa/rpc-tests/addressindex.py @@ -1,11 +1,9 @@ #!/usr/bin/env python2 # Copyright (c) 2014-2015 The Bitcoin Core developers +# Copyright (c) 2016-2020 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 - -# # Test addressindex generation and fetching -# import time from test_framework.test_framework import BitcoinTestFramework @@ -346,4 +344,4 @@ class AddressIndexTest(BitcoinTestFramework): if __name__ == '__main__': - AddressIndexTest().main() \ No newline at end of file + AddressIndexTest().main() diff --git a/qa/rpc-tests/bip65-cltv-p2p.py b/qa/rpc-tests/bip65-cltv-p2p.py index c0665777a..8aef7fe0e 100755 --- a/qa/rpc-tests/bip65-cltv-p2p.py +++ b/qa/rpc-tests/bip65-cltv-p2p.py @@ -1,8 +1,7 @@ #!/usr/bin/env python2 -# -# Distributed under the GPLv3/X11 software license, see the accompanying +# Copyright (c) 2016-2020 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 -# from test_framework.test_framework import ComparisonTestFramework from test_framework.util import start_nodes diff --git a/qa/rpc-tests/bipdersig-p2p.py b/qa/rpc-tests/bipdersig-p2p.py index 595e23180..d03dcf004 100755 --- a/qa/rpc-tests/bipdersig-p2p.py +++ b/qa/rpc-tests/bipdersig-p2p.py @@ -1,5 +1,5 @@ #!/usr/bin/env python2 -# +# Copyright (c) 2016-2020 The Hush developers # Distributed under the GPLv3/X11 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # diff --git a/qa/rpc-tests/blockchain.py b/qa/rpc-tests/blockchain.py index affd50a37..59acb737c 100755 --- a/qa/rpc-tests/blockchain.py +++ b/qa/rpc-tests/blockchain.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions.py b/qa/rpc-tests/cryptoconditions.py index cfed77a4b..44bd89001 100755 --- a/qa/rpc-tests/cryptoconditions.py +++ b/qa/rpc-tests/cryptoconditions.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions_channels.py b/qa/rpc-tests/cryptoconditions_channels.py index 086eb2eb8..1158f0cc7 100755 --- a/qa/rpc-tests/cryptoconditions_channels.py +++ b/qa/rpc-tests/cryptoconditions_channels.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions_dice.py b/qa/rpc-tests/cryptoconditions_dice.py index 3a4e87333..e2622ffaf 100755 --- a/qa/rpc-tests/cryptoconditions_dice.py +++ b/qa/rpc-tests/cryptoconditions_dice.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions_faucet.py b/qa/rpc-tests/cryptoconditions_faucet.py index 99cf673a4..ecbaa6ae6 100755 --- a/qa/rpc-tests/cryptoconditions_faucet.py +++ b/qa/rpc-tests/cryptoconditions_faucet.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions_gateways.py b/qa/rpc-tests/cryptoconditions_gateways.py index 52d5a2ab4..824219586 100755 --- a/qa/rpc-tests/cryptoconditions_gateways.py +++ b/qa/rpc-tests/cryptoconditions_gateways.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions_heir.py b/qa/rpc-tests/cryptoconditions_heir.py index 9e07e283a..ddce32bc9 100755 --- a/qa/rpc-tests/cryptoconditions_heir.py +++ b/qa/rpc-tests/cryptoconditions_heir.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions_oracles.py b/qa/rpc-tests/cryptoconditions_oracles.py index e916d5002..36e4169da 100755 --- a/qa/rpc-tests/cryptoconditions_oracles.py +++ b/qa/rpc-tests/cryptoconditions_oracles.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions_rewards.py b/qa/rpc-tests/cryptoconditions_rewards.py index 86ee97753..b2136c903 100755 --- a/qa/rpc-tests/cryptoconditions_rewards.py +++ b/qa/rpc-tests/cryptoconditions_rewards.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/cryptoconditions_token.py b/qa/rpc-tests/cryptoconditions_token.py index e2da04f41..1799739dd 100755 --- a/qa/rpc-tests/cryptoconditions_token.py +++ b/qa/rpc-tests/cryptoconditions_token.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 SuperNET developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/decodescript.py b/qa/rpc-tests/decodescript.py index 0a46413f9..309af1712 100755 --- a/qa/rpc-tests/decodescript.py +++ b/qa/rpc-tests/decodescript.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2015 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/disablewallet.py b/qa/rpc-tests/disablewallet.py index db7260741..d07724842 100755 --- a/qa/rpc-tests/disablewallet.py +++ b/qa/rpc-tests/disablewallet.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/finalsaplingroot.py b/qa/rpc-tests/finalsaplingroot.py index 491bdbc4b..75933abf9 100755 --- a/qa/rpc-tests/finalsaplingroot.py +++ b/qa/rpc-tests/finalsaplingroot.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/forknotify.py b/qa/rpc-tests/forknotify.py index c571d1243..4499dda3a 100755 --- a/qa/rpc-tests/forknotify.py +++ b/qa/rpc-tests/forknotify.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/fundrawtransaction.py b/qa/rpc-tests/fundrawtransaction.py index dd19b267e..4daf95f13 100755 --- a/qa/rpc-tests/fundrawtransaction.py +++ b/qa/rpc-tests/fundrawtransaction.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/getblocktemplate.py b/qa/rpc-tests/getblocktemplate.py index 77517d6b3..d72142963 100755 --- a/qa/rpc-tests/getblocktemplate.py +++ b/qa/rpc-tests/getblocktemplate.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2016 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/getblocktemplate_longpoll.py b/qa/rpc-tests/getblocktemplate_longpoll.py index a078f0c2d..753d9aed6 100755 --- a/qa/rpc-tests/getblocktemplate_longpoll.py +++ b/qa/rpc-tests/getblocktemplate_longpoll.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/getblocktemplate_proposals.py b/qa/rpc-tests/getblocktemplate_proposals.py index 3687e3c23..6c935f95a 100755 --- a/qa/rpc-tests/getblocktemplate_proposals.py +++ b/qa/rpc-tests/getblocktemplate_proposals.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/getchaintips.py b/qa/rpc-tests/getchaintips.py index 121be3fb5..cfd19ee47 100755 --- a/qa/rpc-tests/getchaintips.py +++ b/qa/rpc-tests/getchaintips.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/hardforkdetection.py b/qa/rpc-tests/hardforkdetection.py index dbfb5cd34..a2bf39f77 100755 --- a/qa/rpc-tests/hardforkdetection.py +++ b/qa/rpc-tests/hardforkdetection.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # # Test hard fork detection diff --git a/qa/rpc-tests/httpbasics.py b/qa/rpc-tests/httpbasics.py index e739428df..96578d106 100755 --- a/qa/rpc-tests/httpbasics.py +++ b/qa/rpc-tests/httpbasics.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/invalidateblock.py b/qa/rpc-tests/invalidateblock.py index 45623e2a7..a0aa2c278 100755 --- a/qa/rpc-tests/invalidateblock.py +++ b/qa/rpc-tests/invalidateblock.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/invalidblockrequest.py b/qa/rpc-tests/invalidblockrequest.py index 1bb85c905..71ef3a325 100755 --- a/qa/rpc-tests/invalidblockrequest.py +++ b/qa/rpc-tests/invalidblockrequest.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # # Distributed under the GPLv3/X11 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/ivk_import_export.py b/qa/rpc-tests/ivk_import_export.py index 30765744d..b7834ce8d 100755 --- a/qa/rpc-tests/ivk_import_export.py +++ b/qa/rpc-tests/ivk_import_export.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2019 Bartlomiej Lisiecki # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/key_import_export.py b/qa/rpc-tests/key_import_export.py index 1e4afe9a7..1a799f488 100755 --- a/qa/rpc-tests/key_import_export.py +++ b/qa/rpc-tests/key_import_export.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2017 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/keypool.py b/qa/rpc-tests/keypool.py index e3cdf203a..c663fe752 100755 --- a/qa/rpc-tests/keypool.py +++ b/qa/rpc-tests/keypool.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/listtransactions.py b/qa/rpc-tests/listtransactions.py index 808578f8c..90eae5f55 100755 --- a/qa/rpc-tests/listtransactions.py +++ b/qa/rpc-tests/listtransactions.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/maxblocksinflight.py b/qa/rpc-tests/maxblocksinflight.py index a083bcaa8..04780139c 100755 --- a/qa/rpc-tests/maxblocksinflight.py +++ b/qa/rpc-tests/maxblocksinflight.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # # Distributed under the GPLv3/X11 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/mempool_nu_activation.py b/qa/rpc-tests/mempool_nu_activation.py index d45b3e430..50d9a2ce9 100755 --- a/qa/rpc-tests/mempool_nu_activation.py +++ b/qa/rpc-tests/mempool_nu_activation.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/mempool_reorg.py b/qa/rpc-tests/mempool_reorg.py index 57e06f0bd..98b61a70a 100755 --- a/qa/rpc-tests/mempool_reorg.py +++ b/qa/rpc-tests/mempool_reorg.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/mempool_resurrect_test.py b/qa/rpc-tests/mempool_resurrect_test.py index b5a9f8704..8e7ffacd5 100755 --- a/qa/rpc-tests/mempool_resurrect_test.py +++ b/qa/rpc-tests/mempool_resurrect_test.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/mempool_spendcoinbase.py b/qa/rpc-tests/mempool_spendcoinbase.py index 53c3625ca..335d94187 100755 --- a/qa/rpc-tests/mempool_spendcoinbase.py +++ b/qa/rpc-tests/mempool_spendcoinbase.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/mempool_tx_expiry.py b/qa/rpc-tests/mempool_tx_expiry.py index f96055386..d28944a83 100755 --- a/qa/rpc-tests/mempool_tx_expiry.py +++ b/qa/rpc-tests/mempool_tx_expiry.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/mempool_tx_input_limit.py b/qa/rpc-tests/mempool_tx_input_limit.py index 7f6ed446a..ace5ac59d 100755 --- a/qa/rpc-tests/mempool_tx_input_limit.py +++ b/qa/rpc-tests/mempool_tx_input_limit.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2017 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/merkle_blocks.py b/qa/rpc-tests/merkle_blocks.py index 9a593afe5..065d46fd1 100755 --- a/qa/rpc-tests/merkle_blocks.py +++ b/qa/rpc-tests/merkle_blocks.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/nodehandling.py b/qa/rpc-tests/nodehandling.py index e26c9da83..1aea66eb0 100755 --- a/qa/rpc-tests/nodehandling.py +++ b/qa/rpc-tests/nodehandling.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/nspv_client_test.py b/qa/rpc-tests/nspv_client_test.py index 26f88cf5a..9bb0f293f 100755 --- a/qa/rpc-tests/nspv_client_test.py +++ b/qa/rpc-tests/nspv_client_test.py @@ -1,7 +1,11 @@ +#!/usr/bin/env python2 +# Copyright (c) 2016-2020 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 import sys -sys.path.append('../../src/tui') - -from lib import tuilib +# tuilib was removed, tests left here as inspiration +#sys.path.append('../../src/tui') +#from lib import tuilib import unittest import time @@ -11,17 +15,17 @@ change chain parameters if needed or add a new chain to test below added 1 second sleep after each case to surely not face the nSPV server limitation (1 call/second) ''' -wif = '' +wif = '' dest_address = '' -amount = '0.01' -chain = 'ILN' +amount = '0.01' +chain = 'HUSH3' if not wif or not dest_address: raise Exception("Please set test wif and address to send transactions to") rpc_proxy = tuilib.def_credentials(chain) -chain_params = {"KMD": { +chain_params = {"HUSH3": { 'tx_list_address': 'RGShWG446Pv24CKzzxjA23obrzYwNbs1kA', 'min_chain_height': 1468080, 'notarization_height': '1468000', @@ -33,19 +37,6 @@ chain_params = {"KMD": { 'tx_proof_id': 'f7beb36a65bc5bcbc9c8f398345aab7948160493955eb4a1f05da08c4ac3784f', 'tx_spent_height': 1456212, 'tx_proof_height': '1468520', - }, - "ILN": { - 'tx_list_address': 'RUp3xudmdTtxvaRnt3oq78FJBjotXy55uu', - 'min_chain_height': 3689, - 'notarization_height': '2000', - 'prev_notarization_h': 1998, - 'next_notarization_h': 2008, - 'hdrs_proof_low': '2000', - 'hdrs_proof_high': '2100', - 'numhdrs_expected': 113, - 'tx_proof_id': '67ffe0eaecd6081de04675c492a59090b573ee78955c4e8a85b8ac0be0e8e418', - 'tx_spent_height': 2681, - 'tx_proof_height': '2690', } } @@ -98,7 +89,7 @@ class TestNspvClient(unittest.TestCase): print("testing nspv_login") result = rpc_proxy.nspv_login(wif) self.assertEqual(result["result"], "success") - self.assertEqual(result["status"], "wif will expire in 777 seconds") + self.assertEqual(result["status"], "wif will expire in 555 seconds") time.sleep(1) def test_nspv_listunspent(self): @@ -156,9 +147,9 @@ class TestNspvClient(unittest.TestCase): time.sleep(1) def test_nspv_login_timout(self): - print("testing auto-logout in 777 seconds") + print("testing auto-logout in 555 seconds") rpc_proxy.nspv_login(wif) - time.sleep(778) + time.sleep(556) result = rpc_proxy.nspv_spend(dest_address, amount) self.assertEqual(result["result"], "error") self.assertEqual(result["error"], "wif expired") diff --git a/qa/rpc-tests/p2p-acceptblock.py b/qa/rpc-tests/p2p-acceptblock.py index 4fd47cf33..77895df7c 100755 --- a/qa/rpc-tests/p2p-acceptblock.py +++ b/qa/rpc-tests/p2p-acceptblock.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # # Distributed under the GPLv3/X11 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/p2p_node_bloom.py b/qa/rpc-tests/p2p_node_bloom.py index fac89cb6c..9bb9e9f71 100755 --- a/qa/rpc-tests/p2p_node_bloom.py +++ b/qa/rpc-tests/p2p_node_bloom.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/p2p_txexpiry_dos.py b/qa/rpc-tests/p2p_txexpiry_dos.py index 582cafd6b..ca72c3baa 100755 --- a/qa/rpc-tests/p2p_txexpiry_dos.py +++ b/qa/rpc-tests/p2p_txexpiry_dos.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/prioritisetransaction.py b/qa/rpc-tests/prioritisetransaction.py index 09647ebd1..8572bf195 100755 --- a/qa/rpc-tests/prioritisetransaction.py +++ b/qa/rpc-tests/prioritisetransaction.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2017 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/proxy_test.py b/qa/rpc-tests/proxy_test.py index 31b96f594..897ff369e 100755 --- a/qa/rpc-tests/proxy_test.py +++ b/qa/rpc-tests/proxy_test.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2015 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/pruning.py b/qa/rpc-tests/pruning.py index c6a61f6c4..7e85a9853 100755 --- a/qa/rpc-tests/pruning.py +++ b/qa/rpc-tests/pruning.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/rawtransactions.py b/qa/rpc-tests/rawtransactions.py index d70352e2a..88cf55f93 100755 --- a/qa/rpc-tests/rawtransactions.py +++ b/qa/rpc-tests/rawtransactions.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/receivedby.py b/qa/rpc-tests/receivedby.py index 0374381cf..a630d65d3 100755 --- a/qa/rpc-tests/receivedby.py +++ b/qa/rpc-tests/receivedby.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/rest.py b/qa/rpc-tests/rest.py index aee67ffa1..3943af911 100755 --- a/qa/rpc-tests/rest.py +++ b/qa/rpc-tests/rest.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/rewind_index.py b/qa/rpc-tests/rewind_index.py index de2ed966c..e7b9d4e44 100755 --- a/qa/rpc-tests/rewind_index.py +++ b/qa/rpc-tests/rewind_index.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/rpcbind_test.py b/qa/rpc-tests/rpcbind_test.py index 09fb630f3..6e8180fe3 100755 --- a/qa/rpc-tests/rpcbind_test.py +++ b/qa/rpc-tests/rpcbind_test.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/script_test.py b/qa/rpc-tests/script_test.py index ea61a04d0..d1e6064f1 100755 --- a/qa/rpc-tests/script_test.py +++ b/qa/rpc-tests/script_test.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # # Distributed under the GPLv3/X11 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/signrawtransaction_offline.py b/qa/rpc-tests/signrawtransaction_offline.py index 0d7def43b..0318b8663 100755 --- a/qa/rpc-tests/signrawtransaction_offline.py +++ b/qa/rpc-tests/signrawtransaction_offline.py @@ -1,4 +1,7 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 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 from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal, assert_true, initialize_chain_clean, start_node @@ -54,4 +57,4 @@ class SignOfflineTest (BitcoinTestFramework): assert_true(len(online_tx_hash) > 0) if __name__ == '__main__': - SignOfflineTest().main() \ No newline at end of file + SignOfflineTest().main() diff --git a/qa/rpc-tests/signrawtransactions.py b/qa/rpc-tests/signrawtransactions.py index 4508784d6..a92a4a7eb 100755 --- a/qa/rpc-tests/signrawtransactions.py +++ b/qa/rpc-tests/signrawtransactions.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2015 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/smartfees.py b/qa/rpc-tests/smartfees.py index b072f224f..caf879564 100755 --- a/qa/rpc-tests/smartfees.py +++ b/qa/rpc-tests/smartfees.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014-2015 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/spentindex.py b/qa/rpc-tests/spentindex.py index a2ce5f2b8..090fa7920 100755 --- a/qa/rpc-tests/spentindex.py +++ b/qa/rpc-tests/spentindex.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014-2015 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html @@ -136,4 +137,4 @@ class SpentIndexTest(BitcoinTestFramework): if __name__ == '__main__': - SpentIndexTest().main() \ No newline at end of file + SpentIndexTest().main() diff --git a/qa/rpc-tests/test_framework/authproxy.py b/qa/rpc-tests/test_framework/authproxy.py index 28b33e286..553d6fc89 100644 --- a/qa/rpc-tests/test_framework/authproxy.py +++ b/qa/rpc-tests/test_framework/authproxy.py @@ -1,3 +1,6 @@ +# Copyright (c) 2016-2020 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 2011 Jeff Garzik @@ -47,10 +50,8 @@ try: except ImportError: import urlparse -USER_AGENT = "AuthServiceProxy/0.1" - +USER_AGENT = "FUCKjl777LULZ" HTTP_TIMEOUT = 600 - log = logging.getLogger("BitcoinRPC") class JSONRPCException(Exception): diff --git a/qa/rpc-tests/test_framework/bignum.py b/qa/rpc-tests/test_framework/bignum.py index 7343ac920..799b1929f 100644 --- a/qa/rpc-tests/test_framework/bignum.py +++ b/qa/rpc-tests/test_framework/bignum.py @@ -1,12 +1,7 @@ -# -# -# bignum.py -# -# This file is copied from python-bitcoinlib. -# +# Copyright (c) 2016-2020 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 -# +# This file is from python-bitcoinlib. """Bignum routines""" diff --git a/qa/rpc-tests/test_framework/blockstore.py b/qa/rpc-tests/test_framework/blockstore.py index fc157f718..5f1aa3752 100644 --- a/qa/rpc-tests/test_framework/blockstore.py +++ b/qa/rpc-tests/test_framework/blockstore.py @@ -1,3 +1,6 @@ +# Copyright (c) 2016-2020 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 # BlockStore: a helper class that keeps a map of blocks and implements # helper functions for responding to getheaders and getdata, # and for constructing a getheaders message diff --git a/qa/rpc-tests/test_framework/blocktools.py b/qa/rpc-tests/test_framework/blocktools.py index c546e63eb..0c0e09230 100644 --- a/qa/rpc-tests/test_framework/blocktools.py +++ b/qa/rpc-tests/test_framework/blocktools.py @@ -1,9 +1,7 @@ -# blocktools.py - utilities for manipulating blocks and transactions -# +# Copyright (c) 2016-2020 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 -# - +# blocktools.py - utilities for manipulating blocks and transactions from mininode import CBlock, CTransaction, CTxIn, CTxOut, COutPoint from script import CScript, OP_0, OP_EQUAL, OP_HASH160 diff --git a/qa/rpc-tests/test_framework/comptool.py b/qa/rpc-tests/test_framework/comptool.py index b956690dd..45034ec47 100755 --- a/qa/rpc-tests/test_framework/comptool.py +++ b/qa/rpc-tests/test_framework/comptool.py @@ -1,8 +1,7 @@ #!/usr/bin/env python2 -# +# Copyright (c) 2016-2020 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 -# from mininode import CBlock, CTransaction, CInv, NodeConn, NodeConnCB, \ msg_inv, msg_getheaders, msg_ping, msg_mempool, mininode_lock, MAX_INV_SZ diff --git a/qa/rpc-tests/test_framework/equihash.py b/qa/rpc-tests/test_framework/equihash.py index e40451978..15c3d2ebb 100755 --- a/qa/rpc-tests/test_framework/equihash.py +++ b/qa/rpc-tests/test_framework/equihash.py @@ -1,3 +1,6 @@ +# Copyright (c) 2016-2020 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 from operator import itemgetter import struct diff --git a/qa/rpc-tests/test_framework/mininode.py b/qa/rpc-tests/test_framework/mininode.py index dab40a39d..74909baaf 100755 --- a/qa/rpc-tests/test_framework/mininode.py +++ b/qa/rpc-tests/test_framework/mininode.py @@ -1,6 +1,7 @@ -# mininode.py - Bitcoin P2P network half-a-node # Copyright (c) 2016-2020 The Hush developers -# Lovingly maintained and released under the GPLv3 +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html +# mininode.py - Bitcoin P2P network half-a-node # # This python code was modified from ArtForz' public domain half-a-node, as # found in the mini-node branch of http://github.com/jgarzik/pynode. @@ -40,18 +41,14 @@ from .equihash import ( zcash_person, ) -OVERWINTER_PROTO_VERSION = 170003 -BIP0031_VERSION = 60000 -SPROUT_PROTO_VERSION = 170002 # past bip-31 for ping/pong -SAPLING_PROTO_VERSION = 170006 -MY_SUBVERSION = "/python-mininode-hush-tester:3.3.0/" - +OVERWINTER_PROTO_VERSION = 170003 +BIP0031_VERSION = 60000 +SPROUT_PROTO_VERSION = 170002 # past bip-31 for ping/pong +SAPLING_PROTO_VERSION = 1987420 +MY_SUBVERSION = "/SpicySand/" OVERWINTER_VERSION_GROUP_ID = 0x03C48270 - -MAX_INV_SZ = 50000 - - -COIN = 100000000 # 1 HUSH in puposhis +MAX_INV_SZ = 50000 +COIN = 100000000 # 1 HUSH in puposhis # Keep our own socket map for asyncore, so that we can track disconnects # ourselves (to workaround an issue with closing an asyncore socket when @@ -417,14 +414,14 @@ ZC_NOTEPLAINTEXT_LEADING = 1 ZC_V_SIZE = 8 ZC_RHO_SIZE = 32 ZC_R_SIZE = 32 -ZC_MEMO_SIZE = 512 +HUSH_MEMO_SIZE = 512 ZC_NOTEPLAINTEXT_SIZE = ( ZC_NOTEPLAINTEXT_LEADING + ZC_V_SIZE + ZC_RHO_SIZE + ZC_R_SIZE + - ZC_MEMO_SIZE + HUSH_MEMO_SIZE ) NOTEENCRYPTION_AUTH_BYTES = 16 diff --git a/qa/rpc-tests/test_framework/netutil.py b/qa/rpc-tests/test_framework/netutil.py index 59ffe9fc0..125cfebf8 100644 --- a/qa/rpc-tests/test_framework/netutil.py +++ b/qa/rpc-tests/test_framework/netutil.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/test_framework/script.py b/qa/rpc-tests/test_framework/script.py index 93c161162..023be7679 100644 --- a/qa/rpc-tests/test_framework/script.py +++ b/qa/rpc-tests/test_framework/script.py @@ -1,15 +1,11 @@ -# -# script.py -# -# This file is modified from python-bitcoinlib. -# +# Copyright (c) 2016-2020 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 -# +# This file is modified from python-bitcoinlib. """Scripts -Functionality to build scripts, as well as SignatureHash(). +Functionality to build Bitcoin style Scripts, as well as SignatureHash(). """ from __future__ import absolute_import, division, print_function, unicode_literals @@ -29,13 +25,11 @@ import binascii from test_framework import bignum -MAX_SCRIPT_SIZE = 10000 +MAX_SCRIPT_SIZE = 10000 MAX_SCRIPT_ELEMENT_SIZE = 520 -MAX_SCRIPT_OPCODES = 201 - -OPCODE_NAMES = {} - -_opcode_instances = [] +MAX_SCRIPT_OPCODES = 201 +OPCODE_NAMES = {} +_opcode_instances = [] class CScriptOp(int): """A single script opcode""" __slots__ = [] diff --git a/qa/rpc-tests/test_framework/socks5.py b/qa/rpc-tests/test_framework/socks5.py index 1ec159d05..f361b4bb7 100644 --- a/qa/rpc-tests/test_framework/socks5.py +++ b/qa/rpc-tests/test_framework/socks5.py @@ -1,3 +1,4 @@ +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2015 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/test_framework/test_framework.py b/qa/rpc-tests/test_framework/test_framework.py index a85541449..d54bb49e4 100755 --- a/qa/rpc-tests/test_framework/test_framework.py +++ b/qa/rpc-tests/test_framework/test_framework.py @@ -1,14 +1,12 @@ #!/usr/bin/env python2 # Copyright (c) 2014 The Bitcoin Core developers # Copyright (c) 2016-2020 The Hush developers -# Released under the GPLv3 - +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # Base class for RPC testing - # Add python-bitcoinrpc to module search path: import os import sys - import shutil import tempfile import traceback @@ -19,7 +17,6 @@ from util import assert_equal, check_json_precision, \ start_nodes, connect_nodes_bi, stop_nodes, \ sync_blocks, sync_mempools, wait_bitcoinds - class BitcoinTestFramework(object): # These may be over-ridden by subclasses: diff --git a/qa/rpc-tests/test_framework/util.py b/qa/rpc-tests/test_framework/util.py index 0d1eb40f3..a0b409970 100644 --- a/qa/rpc-tests/test_framework/util.py +++ b/qa/rpc-tests/test_framework/util.py @@ -1,12 +1,9 @@ +# Copyright (c) 2018-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Copyright (c) 2018-2019 The SuperNET developers -# Copyright (c) 2018-2020 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 -# # Helpful routines for regression testing -# - # Add python-bitcoinrpc to module search path: import os import sys diff --git a/qa/rpc-tests/timestampindex.py b/qa/rpc-tests/timestampindex.py index 13c89d74b..9bf213db2 100755 --- a/qa/rpc-tests/timestampindex.py +++ b/qa/rpc-tests/timestampindex.py @@ -1,17 +1,14 @@ #!/usr/bin/env python2 -# Copyright (c) 2014-2015 The Bitcoin Core developers # Copyright (c) 2016-2020 The Hush developers -# Released under the GPLv3 -# +# Copyright (c) 2014-2015 The Bitcoin Core developers +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html # Test timestampindex generation and fetching -# import time - from test_framework.test_framework import HushTestFramework from test_framework.util import * - class TimestampIndexTest(HushTestFramework): def setup_chain(self): diff --git a/qa/rpc-tests/txindex.py b/qa/rpc-tests/txindex.py index 587766fdd..c04ebc817 100755 --- a/qa/rpc-tests/txindex.py +++ b/qa/rpc-tests/txindex.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014-2015 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html @@ -70,4 +71,4 @@ class TxIndexTest(BitcoinTestFramework): if __name__ == '__main__': - TxIndexTest().main() \ No newline at end of file + TxIndexTest().main() diff --git a/qa/rpc-tests/txn_doublespend.py b/qa/rpc-tests/txn_doublespend.py index adb24787b..2a5e5481e 100755 --- a/qa/rpc-tests/txn_doublespend.py +++ b/qa/rpc-tests/txn_doublespend.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet.py b/qa/rpc-tests/wallet.py index 3c891396c..1d60d35b0 100755 --- a/qa/rpc-tests/wallet.py +++ b/qa/rpc-tests/wallet.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_1941.py b/qa/rpc-tests/wallet_1941.py index cc741caa7..03188daad 100755 --- a/qa/rpc-tests/wallet_1941.py +++ b/qa/rpc-tests/wallet_1941.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2016 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_addresses.py b/qa/rpc-tests/wallet_addresses.py index 479c42157..d0392b26a 100755 --- a/qa/rpc-tests/wallet_addresses.py +++ b/qa/rpc-tests/wallet_addresses.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_anchorfork.py b/qa/rpc-tests/wallet_anchorfork.py index 2ef372e9a..397f3e07e 100755 --- a/qa/rpc-tests/wallet_anchorfork.py +++ b/qa/rpc-tests/wallet_anchorfork.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_changeindicator.py b/qa/rpc-tests/wallet_changeindicator.py index 61a15be8f..7a66b52d3 100755 --- a/qa/rpc-tests/wallet_changeindicator.py +++ b/qa/rpc-tests/wallet_changeindicator.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_import_export.py b/qa/rpc-tests/wallet_import_export.py index 21a06e737..9e5f6d9fb 100755 --- a/qa/rpc-tests/wallet_import_export.py +++ b/qa/rpc-tests/wallet_import_export.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html @@ -81,4 +82,4 @@ def parse_wallet_file_lines(file_lines, i): return ("".join(keys), i) if __name__ == '__main__': - WalletImportExportTest().main() \ No newline at end of file + WalletImportExportTest().main() diff --git a/qa/rpc-tests/wallet_listreceived.py b/qa/rpc-tests/wallet_listreceived.py index 8a6b67e96..c2b3d175e 100755 --- a/qa/rpc-tests/wallet_listreceived.py +++ b/qa/rpc-tests/wallet_listreceived.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_mergetoaddress.py b/qa/rpc-tests/wallet_mergetoaddress.py index e084d7815..b00714bdd 100755 --- a/qa/rpc-tests/wallet_mergetoaddress.py +++ b/qa/rpc-tests/wallet_mergetoaddress.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2017 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_nullifiers.py b/qa/rpc-tests/wallet_nullifiers.py index f4288fb31..5ea6ca70e 100755 --- a/qa/rpc-tests/wallet_nullifiers.py +++ b/qa/rpc-tests/wallet_nullifiers.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2016 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_overwintertx.py b/qa/rpc-tests/wallet_overwintertx.py index f02beab75..22fd573fd 100755 --- a/qa/rpc-tests/wallet_overwintertx.py +++ b/qa/rpc-tests/wallet_overwintertx.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_persistence.py b/qa/rpc-tests/wallet_persistence.py index 8f3f10ddc..930276227 100755 --- a/qa/rpc-tests/wallet_persistence.py +++ b/qa/rpc-tests/wallet_persistence.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2018 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_protectcoinbase.py b/qa/rpc-tests/wallet_protectcoinbase.py index 62dbdc579..26268ae6a 100755 --- a/qa/rpc-tests/wallet_protectcoinbase.py +++ b/qa/rpc-tests/wallet_protectcoinbase.py @@ -1,9 +1,9 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2016 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - from test_framework.test_framework import BitcoinTestFramework from test_framework.authproxy import JSONRPCException from test_framework.mininode import COIN @@ -217,7 +217,7 @@ class WalletProtectCoinbaseTest (BitcoinTestFramework): # UTXO selection in z_sendmany sorts in ascending order, so smallest utxos are consumed first. # At this point in time, unspent notes all have a value of 10.0 and standard z_sendmany fee is 0.0001. recipients = [] - amount = Decimal('10.0') - Decimal('0.00010000') - Decimal('0.00000001') # this leaves change at 1 zatoshi less than dust threshold + amount = Decimal('10.0') - Decimal('0.00010000') - Decimal('0.00000001') # this leaves change at 1 puposhi less than dust threshold recipients.append({"address":self.nodes[0].getnewaddress(), "amount":amount }) myopid = self.nodes[0].z_sendmany(mytaddr, recipients) wait_and_assert_operationid_status(self.nodes[0], myopid, "failed", "Insufficient transparent funds, have 10.00, need 0.00000053 more to avoid creating invalid change output 0.00000001 (dust threshold is 0.00000054)") diff --git a/qa/rpc-tests/wallet_sapling.py b/qa/rpc-tests/wallet_sapling.py index ea9bdb080..927bebc9d 100755 --- a/qa/rpc-tests/wallet_sapling.py +++ b/qa/rpc-tests/wallet_sapling.py @@ -1,7 +1,8 @@ #!/usr/bin/env python2 -# Copyright (c) 2018 The Zcash developers # Copyright (c) 2016-2020 The Hush developers -# Released under the GPLv3 +# Copyright (c) 2018 The Zcash developers +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html from test_framework.test_framework import BitcoinTestFramework from test_framework.authproxy import JSONRPCException diff --git a/qa/rpc-tests/wallet_shieldcoinbase.py b/qa/rpc-tests/wallet_shieldcoinbase.py index 4cb6893e8..5f43d733e 100755 --- a/qa/rpc-tests/wallet_shieldcoinbase.py +++ b/qa/rpc-tests/wallet_shieldcoinbase.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2017 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/wallet_shieldcoinbase_sapling.py b/qa/rpc-tests/wallet_shieldcoinbase_sapling.py index beb06e672..4754fce73 100755 --- a/qa/rpc-tests/wallet_shieldcoinbase_sapling.py +++ b/qa/rpc-tests/wallet_shieldcoinbase_sapling.py @@ -1,6 +1,7 @@ #!/usr/bin/env python2 # Copyright (c) 2016-2020 The Hush developers -# Released under the GPLv3 +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html import inspect import os diff --git a/qa/rpc-tests/wallet_treestate.py b/qa/rpc-tests/wallet_treestate.py index d8f7aaf74..ec09be052 100755 --- a/qa/rpc-tests/wallet_treestate.py +++ b/qa/rpc-tests/wallet_treestate.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2016 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/walletbackup.py b/qa/rpc-tests/walletbackup.py index 99f1cc4e1..2b93c6dc1 100755 --- a/qa/rpc-tests/walletbackup.py +++ b/qa/rpc-tests/walletbackup.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/zapwallettxes.py b/qa/rpc-tests/zapwallettxes.py index a8db2eb4c..cb0475ef7 100755 --- a/qa/rpc-tests/zapwallettxes.py +++ b/qa/rpc-tests/zapwallettxes.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2014 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/zkey_import_export.py b/qa/rpc-tests/zkey_import_export.py index 49927107f..643497d58 100755 --- a/qa/rpc-tests/zkey_import_export.py +++ b/qa/rpc-tests/zkey_import_export.py @@ -1,4 +1,5 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2017 The Zcash developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html diff --git a/qa/rpc-tests/zmq_test.py b/qa/rpc-tests/zmq_test.py index 6725a2778..0d0bc50a1 100755 --- a/qa/rpc-tests/zmq_test.py +++ b/qa/rpc-tests/zmq_test.py @@ -1,11 +1,9 @@ #!/usr/bin/env python2 +# Copyright (c) 2016-2020 The Hush developers # Copyright (c) 2015 The Bitcoin Core developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - -# # Test ZMQ interface -# from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal, bytes_to_hex_str, start_nodes diff --git a/src/alert.cpp b/src/alert.cpp index 5669186ed..4473de0c8 100644 --- a/src/alert.cpp +++ b/src/alert.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -18,20 +17,16 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "alert.h" - #include "clientversion.h" #include "net.h" #include "pubkey.h" #include "timedata.h" #include "ui_interface.h" #include "util.h" - #include #include #include - #include #include #include @@ -118,7 +113,7 @@ uint256 CAlert::GetHash() const bool CAlert::IsInEffect() const { - return (GetTime() < nExpiration); + return false; } bool CAlert::Cancels(const CAlert& alert) const @@ -138,146 +133,31 @@ bool CAlert::AppliesTo(int nVersion, const std::string& strSubVerIn) const bool CAlert::AppliesToMe() const { - return AppliesTo(PROTOCOL_VERSION, FormatSubVersion(GetArg("-clientname","MagicBean"), CLIENT_VERSION, std::vector())); + return false; } bool CAlert::RelayTo(CNode* pnode) const { - if (!IsInEffect()) - return false; - // don't relay to nodes which haven't sent their version message - if (pnode->nVersion == 0) - return false; - // returns true if wasn't already contained in the set - if (pnode->setKnown.insert(GetHash()).second) - { - if (AppliesTo(pnode->nVersion, pnode->strSubVer) || - AppliesToMe() || - GetTime() < nRelayUntil) - { - pnode->PushMessage("alert", *this); - return true; - } - } return false; } bool CAlert::CheckSignature(const std::vector& alertKey) const { - CPubKey key(alertKey); - if (!key.Verify(Hash(vchMsg.begin(), vchMsg.end()), vchSig)) - return error("CAlert::CheckSignature(): verify signature failed"); - - // Now unserialize the data - CDataStream sMsg(vchMsg, SER_NETWORK, PROTOCOL_VERSION); - sMsg >> *(CUnsignedAlert*)this; - return true; + return false; } CAlert CAlert::getAlertByHash(const uint256 &hash) { CAlert retval; - { - LOCK(cs_mapAlerts); - map::iterator mi = mapAlerts.find(hash); - if(mi != mapAlerts.end()) - retval = mi->second; - } return retval; } bool CAlert::ProcessAlert(const std::vector& alertKey, bool fThread) { - if (!CheckSignature(alertKey)) - return false; - if (!IsInEffect()) - return false; - - // alert.nID=max is reserved for if the alert key is - // compromised. It must have a pre-defined message, - // must never expire, must apply to all versions, - // and must cancel all previous - // alerts or it will be ignored (so an attacker can't - // send an "everything is OK, don't panic" version that - // cannot be overridden): - int maxInt = std::numeric_limits::max(); - if (nID == maxInt) - { - if (!( - nExpiration == maxInt && - nCancel == (maxInt-1) && - nMinVer == 0 && - nMaxVer == maxInt && - setSubVer.empty() && - nPriority == maxInt && - strStatusBar == "URGENT: Alert key compromised, upgrade required" - )) - return false; - } - - { - LOCK(cs_mapAlerts); - // Cancel previous alerts - for (map::iterator mi = mapAlerts.begin(); mi != mapAlerts.end();) - { - const CAlert& alert = (*mi).second; - if (Cancels(alert)) - { - LogPrint("alert", "cancelling alert %d\n", alert.nID); - uiInterface.NotifyAlertChanged((*mi).first, CT_DELETED); - mapAlerts.erase(mi++); - } - else if (!alert.IsInEffect()) - { - LogPrint("alert", "expiring alert %d\n", alert.nID); - uiInterface.NotifyAlertChanged((*mi).first, CT_DELETED); - mapAlerts.erase(mi++); - } - else - mi++; - } - - // Check if this alert has been cancelled - BOOST_FOREACH(PAIRTYPE(const uint256, CAlert)& item, mapAlerts) - { - const CAlert& alert = item.second; - if (alert.Cancels(*this)) - { - LogPrint("alert", "alert already cancelled by %d\n", alert.nID); - return false; - } - } - - // Add to mapAlerts - mapAlerts.insert(make_pair(GetHash(), *this)); - // Notify UI and -alertnotify if it applies to me - if(AppliesToMe()) - { - uiInterface.NotifyAlertChanged(GetHash(), CT_NEW); - Notify(strStatusBar, fThread); - } - } - - LogPrint("alert", "accepted alert %d, AppliesToMe()=%d\n", nID, AppliesToMe()); return true; } -void -CAlert::Notify(const std::string& strMessage, bool fThread) +void CAlert::Notify(const std::string& strMessage, bool fThread) { - std::string strCmd = GetArg("-alertnotify", ""); - if (strCmd.empty()) return; - - // Alert text should be plain ascii coming from a trusted source, but to - // be safe we first strip anything not in safeChars, then add single quotes around - // the whole string before passing it to the shell: - std::string singleQuote("'"); - std::string safeStatus = SanitizeString(strMessage); - safeStatus = singleQuote+safeStatus+singleQuote; - boost::replace_all(strCmd, "%s", safeStatus); - - if (fThread) - boost::thread t(runCommand, strCmd); // thread runs free - else - runCommand(strCmd); + return; } diff --git a/src/cc/CCPrices.h b/src/cc/CCPrices.h index f82f7d550..bb413cabc 100644 --- a/src/cc/CCPrices.h +++ b/src/cc/CCPrices.h @@ -25,7 +25,7 @@ int32_t komodo_priceget(int64_t *buf64,int32_t ind,int32_t height,int32_t numblocks); extern void GetKomodoEarlytxidScriptPub(); -extern CScript KOMODO_EARLYTXID_SCRIPTPUB; +extern CScript HUSH_EARLYTXID_SCRIPTPUB; // #define PRICES_DAYWINDOW ((3600*24/ASSETCHAINS_BLOCKTIME) + 1) // defined in hush_defs.h #define PRICES_TXFEE 10000 diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index 6ff5c1d40..058ac6fc5 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -15,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef CC_INCLUDE_H #define CC_INCLUDE_H @@ -32,7 +31,7 @@ Details. /// this script's hash is what the p2sh address was. /// All of the above are the standard bitcoin vout types and there should be plenty of materials about it. /// -/// What I did with the cryptoconditions (CC) contracts (now rebranded as Antara modules) is created a fourth type of vout, the CC vout. This is using the cryptoconditions standard and it is even a different signature mechanism, +/// Cryptoconditions (CC) contracts created a fourth type of vout, the CC vout. This is using the cryptoconditions standard and it is even a different signature mechanism, /// ed25519 instead of secp256k1. It is basically a big extension to the bitcoin script. There is a special opcode that is added that says it is a CC script. /// /// But it gets more interesting. Each CC script has an evalcode. @@ -49,7 +48,7 @@ Details. /// However, it is a CC output, so in addition to the signature, whatever constraints a CC contract implements must also be satistifed. /// This allows funds to be locked and yet anybody is able to spend it, assuming they satisfy the CC's rules. /// -/// One other technical note is that komodod has the insight-explorer extensions built in +/// One other technical note is that Hush has the insight-explorer extensions built in /// so it can lookup directly all transactions to any address. /// This is a key performance boosting thing as if it wasnt there, trying to get all the utxo for an address not in the wallet is quite time consuming. /// @@ -101,12 +100,12 @@ Details. enum opretid : uint8_t { // cc contracts data: OPRETID_NONFUNGIBLEDATA = 0x11, //!< NFT data id - OPRETID_ASSETSDATA = 0x12, //!< assets contract data id - OPRETID_GATEWAYSDATA = 0x13, //!< gateways contract data id - OPRETID_CHANNELSDATA = 0x14, //!< channels contract data id - OPRETID_HEIRDATA = 0x15, //!< heir contract data id - OPRETID_ROGUEGAMEDATA = 0x16, //!< rogue contract data id - OPRETID_PEGSDATA = 0x17, //!< pegs contract data id + OPRETID_ASSETSDATA = 0x12, //!< assets contract data id + OPRETID_GATEWAYSDATA = 0x13, //!< gateways contract data id + OPRETID_CHANNELSDATA = 0x14, //!< channels contract data id + OPRETID_HEIRDATA = 0x15, //!< heir contract data id + OPRETID_ROGUEGAMEDATA = 0x16, //!< rogue contract data id + OPRETID_PEGSDATA = 0x17, //!< pegs contract data id /*! \cond INTERNAL */ // non cc contract data: @@ -138,8 +137,6 @@ struct CC_utxo /// \endcond /// \cond INTERNAL -// these are the parameters stored after Verus crypto-condition vouts. new versions may change -// the format struct CC_meta { std::vector version; @@ -774,7 +771,7 @@ bool Getscriptaddress(char *destaddr,const CScript &scriptPubKey); /// @returns true if success bool GetCustomscriptaddress(char *destaddr,const CScript &scriptPubKey,uint8_t taddr,uint8_t prefix,uint8_t prefix2); -/// Returns my pubkey, that is set by -pubkey komodod parameter +/// Returns my pubkey, that is set by -pubkey hushd parameter /// @returns public key as byte array std::vector Mypubkey(); @@ -825,7 +822,7 @@ std::string FinalizeCCTx(uint64_t skipmask,struct CCcontract_info *cp,CMutableTr /// FinalizeCCTx is a very useful function that will properly sign both CC and normal inputs, adds normal change and might add an opreturn output. /// This allows for Antara module transaction creation rpc functions to create an CMutableTransaction object, add the appropriate vins and vouts to it and use FinalizeCCTx to properly sign the transaction. -/// By using -addressindex=1 of komodod daemon, it allows tracking of all the CC addresses. +/// By using -addressindex=1 of hushd daemon, it allows tracking of all the CC addresses. /// /// For signing the vins the function builds several default probe scriptPubKeys and checks them against the referred previous transactions (vintx) vouts. /// For cryptocondition vins the function creates a basic set of probe cryptconditions with mypk and module global pubkey, both for coins and tokens cases. @@ -893,7 +890,7 @@ int64_t AddNormalinputs(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int3 int64_t AddNormalinputsLocal(CMutableTransaction &mtx,CPubKey mypk,int64_t total,int32_t maxinputs); /// AddNormalinputs2 adds normal (not cc) inputs to the transaction object vin array for the specified total amount using utxos on my pubkey's TX_PUBKEY address (my pubkey is set by -pubkey command line parameter), to fund the transaction. -/// 'My pubkey' is the -pubkey parameter of komodod. +/// 'My pubkey' is the -pubkey parameter of hushd. /// @param mtx mutable transaction object /// @param total amount of inputs to add. If total equals to 0 the function does not add inputs but returns amount of all available normal inputs in the wallet /// @param maxinputs maximum number of inputs to add @@ -972,7 +969,7 @@ void CCLogPrintStream(const char *category, int level, const char *functionName, } /// Macro for logging messages using bitcoin LogAcceptCategory and LogPrintStr functions. /// Supports error, info and three levels of debug messages. -/// Logging category is set by -debug=category komodod param. +/// Logging category is set by -debug=category hushd param. /// To set debug level pass -debug=category-1, -debug=category-2 or -debug=category-3 param. If some level is enabled lower level messages also will be printed. /// To print info-level messages pass just -debug=category parameter, with no level. /// Error-level messages will always be printed, even if -debug parameter is not set diff --git a/src/cc/import.cpp b/src/cc/import.cpp index 7f21f6e9f..8f41d0cde 100644 --- a/src/cc/import.cpp +++ b/src/cc/import.cpp @@ -39,7 +39,7 @@ extern std::string ASSETCHAINS_SELFIMPORT; extern uint16_t ASSETCHAINS_CODAPORT,ASSETCHAINS_BEAMPORT; extern uint8_t ASSETCHAINS_OVERRIDE_PUBKEY33[33]; -extern uint256 KOMODO_EARLYTXID; +extern uint256 HUSH_EARLYTXID; // utilities from gateways.cpp uint256 BitcoinGetProofMerkleRoot(const std::vector &proofData, std::vector &txids); @@ -364,9 +364,9 @@ int32_t CheckGATEWAYimport(CTransaction importTx,CTransaction burnTx,std::string std::vector > unspentOutputs; // ASSETCHAINS_SELFIMPORT is coin - if (KOMODO_EARLYTXID!=zeroid && bindtxid!=KOMODO_EARLYTXID) + if (HUSH_EARLYTXID!=zeroid && bindtxid!=HUSH_EARLYTXID) { - LOGSTREAM("importgateway", CCLOG_INFO, stream << "CheckGATEWAYimport invalid import gateway. On this chain only valid import gateway is " << KOMODO_EARLYTXID.GetHex() << std::endl); + LOGSTREAM("importgateway", CCLOG_INFO, stream << "CheckGATEWAYimport invalid import gateway. On this chain only valid import gateway is " << HUSH_EARLYTXID.GetHex() << std::endl); return(-1); } // check for valid burn from external coin blockchain and if valid return(0); diff --git a/src/cc/importgateway.cpp b/src/cc/importgateway.cpp index fc2f9e22b..901621535 100644 --- a/src/cc/importgateway.cpp +++ b/src/cc/importgateway.cpp @@ -28,7 +28,7 @@ #define KMD_TADDR 0 #define CC_MARKER_VALUE 10000 -extern uint256 KOMODO_EARLYTXID; +extern uint256 HUSH_EARLYTXID; CScript EncodeImportGatewayBindOpRet(uint8_t funcid,std::string coin,uint256 oracletxid,uint8_t M,uint8_t N,std::vector importgatewaypubkeys,uint8_t taddr,uint8_t prefix,uint8_t prefix2,uint8_t wiftype) { @@ -570,9 +570,9 @@ std::string ImportGatewayDeposit(uint64_t txfee,uint256 bindtxid,int32_t height, int32_t i,m,n,numvouts; uint8_t M,N,taddr,prefix,prefix2,wiftype; std::string coin; struct CCcontract_info *cp,C; std::vector pubkeys,publishers; std::vector txids; char str[128],burnaddr[64]; - if (KOMODO_EARLYTXID!=zeroid && bindtxid!=KOMODO_EARLYTXID) + if (HUSH_EARLYTXID!=zeroid && bindtxid!=HUSH_EARLYTXID) { - CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",KOMODO_EARLYTXID.GetHex()); + CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",HUSH_EARLYTXID.GetHex()); LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } @@ -649,9 +649,9 @@ std::string ImportGatewayWithdraw(uint64_t txfee,uint256 bindtxid,std::string re std::vector msigpubkeys; char burnaddr[64],str[65],coinaddr[64]; struct CCcontract_info *cp,C; std::vector > unspentOutputs; - if (KOMODO_EARLYTXID!=zeroid && bindtxid!=KOMODO_EARLYTXID) + if (HUSH_EARLYTXID!=zeroid && bindtxid!=HUSH_EARLYTXID) { - CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",KOMODO_EARLYTXID.GetHex()); + CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",HUSH_EARLYTXID.GetHex()); LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } @@ -748,9 +748,9 @@ std::string ImportGatewayPartialSign(uint64_t txfee,uint256 lasttxid,std::string LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } - else if (KOMODO_EARLYTXID!=zeroid && bindtxid!=KOMODO_EARLYTXID) + else if (HUSH_EARLYTXID!=zeroid && bindtxid!=HUSH_EARLYTXID) { - CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",KOMODO_EARLYTXID.GetHex()); + CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",HUSH_EARLYTXID.GetHex()); LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } @@ -795,9 +795,9 @@ std::string ImportGatewayPartialSign(uint64_t txfee,uint256 lasttxid,std::string LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } - else if (KOMODO_EARLYTXID!=zeroid && bindtxid!=KOMODO_EARLYTXID) + else if (HUSH_EARLYTXID!=zeroid && bindtxid!=HUSH_EARLYTXID) { - CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",KOMODO_EARLYTXID.GetHex()); + CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",HUSH_EARLYTXID.GetHex()); LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } @@ -866,9 +866,9 @@ std::string ImportGatewayCompleteSigning(uint64_t txfee,uint256 lasttxid,std::st LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } - else if (KOMODO_EARLYTXID!=zeroid && bindtxid!=KOMODO_EARLYTXID) + else if (HUSH_EARLYTXID!=zeroid && bindtxid!=HUSH_EARLYTXID) { - CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",KOMODO_EARLYTXID.GetHex()); + CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",HUSH_EARLYTXID.GetHex()); LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } @@ -912,9 +912,9 @@ std::string ImportGatewayCompleteSigning(uint64_t txfee,uint256 lasttxid,std::st LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } - else if (KOMODO_EARLYTXID!=zeroid && bindtxid!=KOMODO_EARLYTXID) + else if (HUSH_EARLYTXID!=zeroid && bindtxid!=HUSH_EARLYTXID) { - CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",KOMODO_EARLYTXID.GetHex()); + CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",HUSH_EARLYTXID.GetHex()); LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } @@ -990,9 +990,9 @@ std::string ImportGatewayMarkDone(uint64_t txfee,uint256 completetxid,std::strin LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } - else if (KOMODO_EARLYTXID!=zeroid && bindtxid!=KOMODO_EARLYTXID) + else if (HUSH_EARLYTXID!=zeroid && bindtxid!=HUSH_EARLYTXID) { - CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",KOMODO_EARLYTXID.GetHex()); + CCerror = strprintf("invalid import gateway. On this chain only valid import gateway is %s",HUSH_EARLYTXID.GetHex()); LOGSTREAM("importgateway",CCLOG_INFO, stream << CCerror << std::endl); return(""); } diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index 9b593b248..f5b5586a1 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -363,7 +363,7 @@ int32_t oracle_format(uint256 *hashp,int64_t *valp,char *str,uint8_t fmt,uint8_t { if ( str != 0 ) { - if ( slen < IGUANA_MAXSCRIPTSIZE && offset+slen <= datalen ) + if ( slen < DRAGON_MAXSCRIPTSIZE && offset+slen <= datalen ) { for (i=0; i eg: mine the chain past block 100, preventing anyone else, creating another payments plan on chain before block 100. We call the following in Validation and RPC where the address is needed. -if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB.size() == 0 ) +if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0 ) GetKomodoEarlytxidScriptPub(); This will fetch the op_return, calculate the scriptPubKey and save it to the global. @@ -244,7 +244,7 @@ static bool ValidateBetTx(struct CCcontract_info *cp, Eval *eval, const CTransac std::vector vec; // check payment cc config: - if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB.size() == 0 ) + if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0 ) GetKomodoEarlytxidScriptPub(); if (bettx.vout.size() < 6 || bettx.vout.size() > 7) @@ -263,7 +263,7 @@ static bool ValidateBetTx(struct CCcontract_info *cp, Eval *eval, const CTransac if (MakeCC1vout(cp->evalcode, bettx.vout[2].nValue, pricespk) != bettx.vout[2] ) return eval->Invalid("cannot validate vout2 in bet tx with pk from opreturn"); // This should be all you need to verify it, maybe also check amount? - if ( bettx.vout[4].scriptPubKey != KOMODO_EARLYTXID_SCRIPTPUB ) + if ( bettx.vout[4].scriptPubKey != HUSH_EARLYTXID_SCRIPTPUB ) return eval->Invalid("the fee was paid to wrong address."); int64_t betamount = bettx.vout[2].nValue; @@ -297,7 +297,7 @@ static bool ValidateAddFundingTx(struct CCcontract_info *cp, Eval *eval, const C vscript_t vintxOpret; // check payment cc config: - if (ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB.size() == 0) + if (ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0) GetKomodoEarlytxidScriptPub(); if (addfundingtx.vout.size() < 4 || addfundingtx.vout.size() > 5) @@ -323,7 +323,7 @@ static bool ValidateAddFundingTx(struct CCcontract_info *cp, Eval *eval, const C return eval->Invalid("cannot validate vout1 in add funding tx with global pk"); // This should be all you need to verify it, maybe also check amount? - if (addfundingtx.vout[2].scriptPubKey != KOMODO_EARLYTXID_SCRIPTPUB) + if (addfundingtx.vout[2].scriptPubKey != HUSH_EARLYTXID_SCRIPTPUB) return eval->Invalid("the fee was paid to wrong address."); int64_t betamount = addfundingtx.vout[1].nValue; @@ -1505,14 +1505,14 @@ UniValue PricesBet(int64_t txfee, int64_t amount, int16_t leverage, std::vector< mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, pricespk)); // vout1 cc marker (NVOUT_CCMARKER) mtx.vout.push_back(MakeCC1vout(cp->evalcode, betamount, pricespk)); // vout2 betamount mtx.vout.push_back(CTxOut(txfee, CScript() << ParseHex(HexStr(pricespk)) << OP_CHECKSIG)); // vout3 normal marker NVOUT_NORMALMARKER - TODO: remove it as we have cc marker now, when move to the new chain - if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB.size() == 0 ) + if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0 ) { // Lock here, as in validation we cannot call lock in the function itself. // may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here. LOCK(cs_main); GetKomodoEarlytxidScriptPub(); } - mtx.vout.push_back(CTxOut(amount-betamount, KOMODO_EARLYTXID_SCRIPTPUB)); + mtx.vout.push_back(CTxOut(amount-betamount, HUSH_EARLYTXID_SCRIPTPUB)); //test: mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); // vout4 test revshare fee rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_betopret(mypk, nextheight - 1, amount, leverage, firstprice, vec, zeroid)); @@ -1576,14 +1576,14 @@ UniValue PricesAddFunding(int64_t txfee, uint256 bettxid, int64_t amount) mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, mypk)); // vout0 baton for total funding mtx.vout.push_back(MakeCC1vout(cp->evalcode, betamount, pricespk)); // vout1 added amount - if (ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB.size() == 0) + if (ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0) { // Lock here, as in validation we cannot call lock in the function itself. // may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here. LOCK(cs_main); GetKomodoEarlytxidScriptPub(); } - mtx.vout.push_back(CTxOut(amount - betamount, KOMODO_EARLYTXID_SCRIPTPUB)); + mtx.vout.push_back(CTxOut(amount - betamount, HUSH_EARLYTXID_SCRIPTPUB)); // test: mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); //vout2 test revshare fee rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_addopret(bettxid, mypk, amount)); diff --git a/src/crosschain.cpp b/src/crosschain.cpp index ab3093769..d015c210a 100644 --- a/src/crosschain.cpp +++ b/src/crosschain.cpp @@ -15,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "cc/eval.h" #include "crosschain.h" #include "importcoin.h" @@ -23,15 +22,14 @@ #include "notarizationdb.h" #include "merkleblock.h" #include "cc/CCinclude.h" - /* * The crosschain workflow. * * 3 chains, A, B, and HUSH. We would like to prove TX on B. - * There is a notarisation, nA0, which will include TX via an MoM. - * The notarisation nA0 must fall between 2 notarisations of B, + * There is a notarization, nA0, which will include TX via an MoM. + * The notarization nA0 must fall between 2 notarizations of B, * ie, nB0 and nB1. An MoMoM including this range is propagated to - * B in notarisation receipt (backnotarisation) bnB2. + * B in notarization receipt (backnotarization) bnB2. * * A: TX bnA0 * \ / @@ -42,10 +40,8 @@ // XXX: There are potential crashes wherever we access chainActive without a lock, // because it might be disconnecting blocks at the same time. - - -// TODO: this assumes a blocktime of 60 seconds and limiting of 1 day of blocks -int NOTARISATION_SCAN_LIMIT_BLOCKS = 1440; +// TODO: this assumes a blocktime of 75 seconds for HUSH and 60 seconds for other chains +int NOTARISATION_SCAN_LIMIT_BLOCKS = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? 1152 : 1440; CBlockIndex *komodo_getblockindex(uint256 hash); /* On HUSH */ @@ -53,12 +49,12 @@ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int hushHeig std::vector &moms, uint256 &destNotarizationTxid) { /* - * Notaries don't wait for confirmation on HUSH before performing a backnotarisation, + * Notaries don't wait for confirmation on HUSH before performing a backnotarization, * but we need a determinable range that will encompass all merkle roots. Include MoMs - * including the block height of the last notarisation until the height before the - * previous notarisation. + * including the block height of the last notarization until the height before the + * previous notarization. * - * hushHeight notarisations-0 notarisations-1 + * hushHeight notarizations-0 notarizations-1 * *********************| * > scan backwards > */ @@ -76,13 +72,13 @@ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int hushHeig for (i=0; i hushHeight) break; - NotarizationsInBlock notarisations; + NotarizationsInBlock notarizations; uint256 blockHash = *chainActive[hushHeight-i]->phashBlock; - if (!GetBlockNotarizations(blockHash, notarisations)) + if (!GetBlockNotarizations(blockHash, notarizations)) continue; - // See if we have an own notarisation in this block - BOOST_FOREACH(Notarization& nota, notarisations) { + // See if we have an own notarization in this block + BOOST_FOREACH(Notarization& nota, notarizations) { if (strcmp(nota.second.symbol, symbol) == 0) { seenOwnNotarizations++; @@ -95,7 +91,7 @@ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int hushHeig } if (seenOwnNotarizations >= 1) { - BOOST_FOREACH(Notarization& nota, notarisations) { + BOOST_FOREACH(Notarization& nota, notarizations) { if (GetSymbolAuthority(nota.second.symbol) == authority) if (nota.second.ccId == targetCCid) { tmp_moms.insert(nota.second.MoM); @@ -105,7 +101,7 @@ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int hushHeig } } - // Not enough own notarisations found to return determinate MoMoM + // Not enough own notarizations found to return determinate MoMoM destNotarizationTxid = uint256(); moms.clear(); return uint256(); @@ -120,9 +116,9 @@ end: /* - * Get a notarisation from a given height + * Get a notarization from a given height * - * Will scan notarisations leveldb up to a limit + * Will scan notarizations leveldb up to a limit */ template int ScanNotarizationsFromHeight(int nHeight, const IsTarget f, Notarization &found) @@ -131,12 +127,12 @@ int ScanNotarizationsFromHeight(int nHeight, const IsTarget f, Notarization &fou int start = std::max(nHeight, 1); for (int h=start; hphashBlock, notarisations)) + if (!GetBlockNotarizations(*chainActive[h]->phashBlock, notarizations)) continue; - BOOST_FOREACH(found, notarisations) { + BOOST_FOREACH(found, notarizations) { if (f(found)) { return h; } @@ -152,14 +148,14 @@ TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_ { /* * Here we are given a proof generated by an assetchain A which goes from given txid to - * an assetchain MoM. We need to go from the notarisationTxid for A to the MoMoM range of the - * backnotarisation for B (given by hushHeight of notarisation), find the MoM within the MoMs for + * an assetchain MoM. We need to go from the notarizationTxid for A to the MoMoM range of the + * backnotarization for B (given by hushHeight of notarization), find the MoM within the MoMs for * that range, and finally extend the proof to lead to the MoMoM (proof root). */ EvalRef eval; uint256 MoM = assetChainProof.second.Exec(txid); - // Get a Hush height for given notarisation Txid + // Get a Hush height for given notarization Txid int hushHeight; { CTransaction sourceNotarization; @@ -170,11 +166,11 @@ TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_ hushHeight = blockIdx.GetHeight(); } - // We now have a hushHeight of the notarisation from chain A. So we know that a MoM exists + // We now have a hushHeight of the notarization from chain A. So we know that a MoM exists // at that height. // If we call CalculateProofRoot with that height, it'll scan backwards, until it finds - // a notarisation from B, and it might not include our notarisation from A - // at all. So, the thing we need to do is scan forwards to find the notarisation for B, + // a notarization from B, and it might not include our notarization from A + // at all. So, the thing we need to do is scan forwards to find the notarization for B, // that is inclusive of A. Notarization nota; auto isTarget = [&](Notarization ¬a) { @@ -182,7 +178,7 @@ TxProof GetCrossChainProof(const uint256 txid, const char* targetSymbol, uint32_ }; hushHeight = ScanNotarizationsFromHeight(hushHeight, isTarget, nota); if (!hushHeight) - throw std::runtime_error("Cannot find notarisation for target inclusive of source"); + throw std::runtime_error("Cannot find notarization for target inclusive of source"); if ( offset != 0 ) hushHeight += offset; @@ -257,38 +253,36 @@ bool IsSameAssetChain(const Notarization ¬a) { return strcmp(nota.second.symbol, SMART_CHAIN_SYMBOL) == 0; }; - /* On assetchain */ -bool GetNextBacknotarisation(uint256 hushNotarizationTxid, Notarization &out) +bool GetNextBacknotarization(uint256 hushNotarizationTxid, Notarization &out) { /* * Here we are given a txid, and a proof. - * We go from the HUSH notarisation txid to the backnotarisation, - * then jump to the next backnotarisation, which contains the corresponding MoMoM. + * We go from the HUSH notarization txid to the backnotarization, + * then jump to the next backnotarization, which contains the corresponding MoMoM. */ Notarization bn; if (!GetBackNotarization(hushNotarizationTxid, bn)) return false; - // Need to get block height of that backnotarisation + // Need to get block height of that backnotarization EvalRef eval; CBlockIndex block; CTransaction tx; if (!eval->GetTxConfirmed(bn.first, tx, block)){ - fprintf(stderr, "Can't get height of backnotarisation, this should not happen\n"); + fprintf(stderr, "Can't get height of backnotarization, this should not happen\n"); return false; } return (bool) ScanNotarizationsFromHeight(block.GetHeight()+1, &IsSameAssetChain, out); } - bool CheckMoMoM(uint256 hushNotarizationHash, uint256 momom) { /* - * Given a notarisation hash and an MoMoM. Backnotarisations may arrive out of order - * or multiple in the same block. So dereference the notarisation hash to the corresponding - * backnotarisation and scan around the hushheight to see if the MoMoM is a match. + * Given a notarization hash and an MoMoM. Backnotarizations may arrive out of order + * or multiple in the same block. So dereference the notarization hash to the corresponding + * backnotarization and scan around the hushheight to see if the MoMoM is a match. * This is a sledgehammer approach... */ @@ -296,12 +290,12 @@ bool CheckMoMoM(uint256 hushNotarizationHash, uint256 momom) if (!GetBackNotarization(hushNotarizationHash, bn)) return false; - // Need to get block height of that backnotarisation + // Need to get block height of that backnotarization EvalRef eval; CBlockIndex block; CTransaction tx; if (!eval->GetTxConfirmed(bn.first, tx, block)){ - fprintf(stderr, "Can't get height of backnotarisation, this should not happen\n"); + fprintf(stderr, "Can't get height of backnotarization, this should not happen\n"); return false; } @@ -423,7 +417,7 @@ bool CheckNotariesApproval(uint256 burntxid, const std::vector & notary /* * On assetchain * in: txid - * out: pair + * out: pair */ TxProof GetAssetchainProof(uint256 hash,CTransaction burnTx) @@ -443,15 +437,15 @@ TxProof GetAssetchainProof(uint256 hash,CTransaction burnTx) blockIndex = komodo_getblockindex(blockHash); int h = blockIndex->GetHeight(); - // The assumption here is that the first notarisation for a height GTE than + // The assumption here is that the first notarization for a height GTE than // the transaction block height will contain the corresponding MoM. If there - // are sequence issues with the notarisations this may fail. + // are sequence issues with the notarizations this may fail. auto isTarget = [&](Notarization ¬a) { if (!IsSameAssetChain(nota)) return false; return nota.second.height >= blockIndex->GetHeight(); }; if (!ScanNotarizationsFromHeight(blockIndex->GetHeight(), isTarget, nota)) - throw std::runtime_error("backnotarisation not yet confirmed"); + throw std::runtime_error("backnotarization not yet confirmed"); // index of block in MoM leaves nIndex = nota.second.height - blockIndex->GetHeight(); diff --git a/src/gtest/test_noteencryption.cpp b/src/gtest/test_noteencryption.cpp index a760e8007..0e187c3ff 100644 --- a/src/gtest/test_noteencryption.cpp +++ b/src/gtest/test_noteencryption.cpp @@ -31,8 +31,8 @@ TEST(noteencryption, NotePlaintext) auto ivk = fvk.in_viewing_key(); SaplingPaymentAddress addr = *ivk.address({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - std::array memo; - for (size_t i = 0; i < ZC_MEMO_SIZE; i++) { + std::array memo; + for (size_t i = 0; i < HUSH_MEMO_SIZE; i++) { // Fill the message with dummy data memo[i] = (unsigned char) i; } diff --git a/src/hush.h b/src/hush.h index 3f25c47de..380674a7e 100644 --- a/src/hush.h +++ b/src/hush.h @@ -359,7 +359,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie struct hush_state *sp; char fname[512],symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; int32_t retval,ht,func; uint8_t num,pubkeys[64][33]; if ( didinit == 0 ) { - portable_mutex_init(&KOMODO_KV_mutex); + portable_mutex_init(&HUSH_KV_mutex); portable_mutex_init(&KOMODO_CC_mutex); didinit = 1; } diff --git a/src/hush_defs.h b/src/hush_defs.h index 952b81a7b..0ac0eeff2 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -20,14 +20,14 @@ #include "arith_uint256.h" #include "chain.h" #include "hush_nk.h" -#define KOMODO_EARLYTXID_HEIGHT 100 +#define HUSH_EARLYTXID_HEIGHT 100 #define ASSETCHAINS_MINHEIGHT 128 #define ASSETCHAINS_MAX_ERAS 7 #define KOMODO_ELECTION_GAP 2000 #define ROUNDROBIN_DELAY 61 #define HUSH_SMART_CHAIN_MAXLEN 65 #define KOMODO_LIMITED_NETWORKSIZE 4 -#define IGUANA_MAXSCRIPTSIZE 10001 +#define DRAGON_MAXSCRIPTSIZE 10001 #define KOMODO_MAXMEMPOOLTIME 3600 // affects consensus #define CRYPTO555_PUBSECPSTR "038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac" #define CRYPTO555_HUSHADDR "RFetqf8WUfWnwNeXdknkm8ojk7EXnYFzrv" @@ -513,7 +513,7 @@ extern std::string NOTARY_PUBKEY,ASSETCHAINS_OVERRIDE_PUBKEY,ASSETCHAINS_SCRIPTP extern uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_MARMARA; extern std::vector ASSETCHAINS_PRICES,ASSETCHAINS_STOCKS; -extern uint256 KOMODO_EARLYTXID; +extern uint256 HUSH_EARLYTXID; extern int32_t HUSH_CONNECTING,KOMODO_CCACTIVATE,KOMODO_DEALERNODE; extern uint32_t ASSETCHAINS_CC; @@ -529,7 +529,6 @@ extern char NOTARYADDRS[64][64]; extern char NOTARY_ADDRESSES[NUM_HUSH_SEASONS][64][64]; extern int32_t HUSH_TESTNODE, HUSH_SNAPSHOT_INTERVAL; extern int32_t ASSETCHAINS_EARLYTXIDCONTRACT; -extern int32_t ASSETCHAINS_STAKED_SPLIT_PERCENTAGE; int tx_height( const uint256 &hash ); extern std::vector vWhiteListAddress; extern std::map mapHeightEvalActivate; @@ -537,9 +536,9 @@ void komodo_netevent(std::vector payload); int32_t getacseason(uint32_t timestamp); int32_t gethushseason(int32_t height); -#define IGUANA_MAXSCRIPTSIZE 10001 -#define KOMODO_KVDURATION 1440 -#define KOMODO_KVBINARY 2 +#define DRAGON_MAXSCRIPTSIZE 10001 +#define HUSH_KVDURATION 1440 +#define HUSH_KVBINARY 2 #define PRICES_SMOOTHWIDTH 1 #define PRICES_MAXDATAPOINTS 8 uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uint64_t basevolume); @@ -547,7 +546,7 @@ int32_t komodo_paxprices(int32_t *heights,uint64_t *prices,int32_t max,char *bas int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); char *bitcoin_address(char *coinaddr,uint8_t addrtype,uint8_t *pubkey_or_rmd160,int32_t len); int32_t komodo_minerids(uint8_t *minerids,int32_t height,int32_t width); -int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[IGUANA_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen); +int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[DRAGON_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen); uint32_t komodo_blocktime(uint256 hash); int32_t hush_longestchain(); diff --git a/src/hush_globals.h b/src/hush_globals.h index 1204b336b..cc86e50b2 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -45,7 +45,7 @@ struct hush_state KOMODO_STATES[34]; #define _COINBASE_MATURITY 100 int COINBASE_MATURITY = _COINBASE_MATURITY;//100; unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; -uint256 KOMODO_EARLYTXID; +uint256 HUSH_EARLYTXID; int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,HUSH_NSPV; int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; @@ -101,11 +101,11 @@ uint64_t PENDING_KOMODO_TX; extern int32_t HUSH_LOADINGBLOCKS; unsigned int MAX_BLOCK_SIGOPS = 20000; int32_t HUSH_TESTNODE, HUSH_SNAPSHOT_INTERVAL; -CScript KOMODO_EARLYTXID_SCRIPTPUB; +CScript HUSH_EARLYTXID_SCRIPTPUB; int32_t ASSETCHAINS_EARLYTXIDCONTRACT; std::map mapHeightEvalActivate; -struct komodo_kv *KOMODO_KV; -pthread_mutex_t KOMODO_KV_mutex,KOMODO_CC_mutex; +struct komodo_kv *HUSH_KV; +pthread_mutex_t HUSH_KV_mutex,KOMODO_CC_mutex; #define MAX_CURRENCIES 32 char CURRENCIES[][8] = { "USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "NZD", // major currencies diff --git a/src/hush_structs.h b/src/hush_structs.h index fc7f1b2b8..c47eabbd9 100644 --- a/src/hush_structs.h +++ b/src/hush_structs.h @@ -45,9 +45,9 @@ #define KOMODO_OPRETURN_WITHDRAW 'W' // assetchain #define KOMODO_OPRETURN_REDEEMED 'X' -#define KOMODO_KVPROTECTED 1 -#define KOMODO_KVBINARY 2 -#define KOMODO_KVDURATION 1440 +#define HUSH_KVPROTECTED 1 +#define HUSH_KVBINARY 2 +#define HUSH_KVDURATION 1440 #define HUSH_SMART_CHAIN_MAXLEN 65 #ifndef _BITS256 diff --git a/src/hush_utils.h b/src/hush_utils.h index 665338716..6776c300b 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1860,7 +1860,7 @@ void hush_args(char *argv0) { printf("HUSH_REWIND %d\n",HUSH_REWIND); } - KOMODO_EARLYTXID = Parseuint256(GetArg("-earlytxid","0").c_str()); + HUSH_EARLYTXID = Parseuint256(GetArg("-earlytxid","0").c_str()); ASSETCHAINS_EARLYTXIDCONTRACT = GetArg("-ac_earlytxidcontract",0); if ( name.c_str()[0] != 0 ) { diff --git a/src/komodo_cJSON.h b/src/komodo_cJSON.h index e80ce98a2..a08957499 100644 --- a/src/komodo_cJSON.h +++ b/src/komodo_cJSON.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 (c) 2009 Dave Gamble @@ -19,7 +22,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - /****************************************************************************** * Copyright © 2014-2019 The SuperNET Developers. * * * @@ -34,10 +36,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef komodo_cJSON__h #define komodo_cJSON__h - #include #include #include @@ -45,9 +45,7 @@ #include #include #include - #include "cJSON.h" - //#include "../crypto555/OS_portable.h" #define MAX_JSON_FIELD 4096 // on the big side diff --git a/src/komodo_kv.h b/src/komodo_kv.h index 891717855..c4cd51e73 100644 --- a/src/komodo_kv.h +++ b/src/komodo_kv.h @@ -42,7 +42,7 @@ int32_t komodo_kvnumdays(uint32_t flags) int32_t komodo_kvduration(uint32_t flags) { - return(komodo_kvnumdays(flags) * KOMODO_KVDURATION); + return(komodo_kvnumdays(flags) * HUSH_KVDURATION); } uint64_t komodo_kvfee(uint32_t flags,int32_t opretlen,int32_t keylen) @@ -56,21 +56,21 @@ uint64_t komodo_kvfee(uint32_t flags,int32_t opretlen,int32_t keylen) return(fee); } -int32_t komodo_kvsearch(uint256 *pubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[IGUANA_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen) +int32_t komodo_kvsearch(uint256 *pubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[DRAGON_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen) { struct komodo_kv *ptr; int32_t duration,retval = -1; *heightp = -1; *flagsp = 0; memset(pubkeyp,0,sizeof(*pubkeyp)); - portable_mutex_lock(&KOMODO_KV_mutex); - HASH_FIND(hh,KOMODO_KV,key,keylen,ptr); + portable_mutex_lock(&HUSH_KV_mutex); + HASH_FIND(hh,HUSH_KV,key,keylen,ptr); if ( ptr != 0 ) { duration = komodo_kvduration(ptr->flags); //fprintf(stderr,"duration.%d flags.%d current.%d ht.%d keylen.%d valuesize.%d\n",duration,ptr->flags,current_height,ptr->height,ptr->keylen,ptr->valuesize); if ( current_height > (ptr->height + duration) ) { - HASH_DELETE(hh,KOMODO_KV,ptr); + HASH_DELETE(hh,HUSH_KV,ptr); if ( ptr->value != 0 ) free(ptr->value); if ( ptr->key != 0 ) @@ -92,7 +92,7 @@ int32_t komodo_kvsearch(uint256 *pubkeyp,int32_t current_height,uint32_t *flagsp memcpy(value,ptr->value,retval); } } //else fprintf(stderr,"couldnt find (%s)\n",(char *)key); - portable_mutex_unlock(&KOMODO_KV_mutex); + portable_mutex_unlock(&HUSH_KV_mutex); if ( retval < 0 ) { // search rawmempool @@ -103,7 +103,7 @@ int32_t komodo_kvsearch(uint256 *pubkeyp,int32_t current_height,uint32_t *flagsp void komodo_kvupdate(uint8_t *opretbuf,int32_t opretlen,uint64_t value) { static uint256 zeroes; - uint32_t flags; uint256 pubkey,refpubkey,sig; int32_t i,refvaluesize,hassig,coresize,haspubkey,height,kvheight; uint16_t keylen,valuesize,newflag = 0; uint8_t *key,*valueptr,keyvalue[IGUANA_MAXSCRIPTSIZE*8]; struct komodo_kv *ptr; char *transferpubstr,*tstr; uint64_t fee; + uint32_t flags; uint256 pubkey,refpubkey,sig; int32_t i,refvaluesize,hassig,coresize,haspubkey,height,kvheight; uint16_t keylen,valuesize,newflag = 0; uint8_t *key,*valueptr,keyvalue[DRAGON_MAXSCRIPTSIZE*8]; struct komodo_kv *ptr; char *transferpubstr,*tstr; uint64_t fee; if ( SMART_CHAIN_SYMBOL[0] == 0 ) // disable KV for KMD return; dragon_rwnum(0,&opretbuf[1],sizeof(keylen),&keylen); @@ -150,12 +150,12 @@ void komodo_kvupdate(uint8_t *opretbuf,int32_t opretlen,uint64_t value) } } } - portable_mutex_lock(&KOMODO_KV_mutex); - HASH_FIND(hh,KOMODO_KV,key,keylen,ptr); + portable_mutex_lock(&HUSH_KV_mutex); + HASH_FIND(hh,HUSH_KV,key,keylen,ptr); if ( ptr != 0 ) { //fprintf(stderr,"(%s) already there\n",(char *)key); - //if ( (ptr->flags & KOMODO_KVPROTECTED) != 0 ) + //if ( (ptr->flags & HUSH_KVPROTECTED) != 0 ) { tstr = (char *)"transfer:"; transferpubstr = (char *)&valueptr[strlen(tstr)]; @@ -174,10 +174,10 @@ void komodo_kvupdate(uint8_t *opretbuf,int32_t opretlen,uint64_t value) ptr->keylen = keylen; memcpy(ptr->key,key,keylen); newflag = 1; - HASH_ADD_KEYPTR(hh,KOMODO_KV,ptr->key,ptr->keylen,ptr); + HASH_ADD_KEYPTR(hh,HUSH_KV,ptr->key,ptr->keylen,ptr); //fprintf(stderr,"KV add.(%s) (%s)\n",ptr->key,valueptr); } - if ( newflag != 0 || (ptr->flags & KOMODO_KVPROTECTED) == 0 ) + if ( newflag != 0 || (ptr->flags & HUSH_KVPROTECTED) == 0 ) { if ( ptr->value != 0 ) free(ptr->value), ptr->value = 0; @@ -186,7 +186,7 @@ void komodo_kvupdate(uint8_t *opretbuf,int32_t opretlen,uint64_t value) ptr->value = (uint8_t *)calloc(1,valuesize); memcpy(ptr->value,valueptr,valuesize); } - } else fprintf(stderr,"newflag.%d zero or protected %d\n",newflag,(ptr->flags & KOMODO_KVPROTECTED)); + } else fprintf(stderr,"newflag.%d zero or protected %d\n",newflag,(ptr->flags & HUSH_KVPROTECTED)); /*for (i=0; i<32; i++) printf("%02x",((uint8_t *)&ptr->pubkey)[i]); printf(" <- "); @@ -196,7 +196,7 @@ void komodo_kvupdate(uint8_t *opretbuf,int32_t opretlen,uint64_t value) memcpy(&ptr->pubkey,&pubkey,sizeof(ptr->pubkey)); ptr->height = height; ptr->flags = flags; // jl777 used to or in KVPROTECTED - portable_mutex_unlock(&KOMODO_KV_mutex); + portable_mutex_unlock(&HUSH_KV_mutex); } else fprintf(stderr,"KV update size mismatch %d vs %d\n",opretlen,coresize); } else fprintf(stderr,"not enough fee\n"); } diff --git a/src/main.cpp b/src/main.cpp index 73bab32a1..28cfcf1e9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -837,7 +837,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) EXCLUSIVE_LOCKS_REQUIRE bool IsStandardTx(const CTransaction& tx, string& reason, const int nHeight) { bool overwinterActive = NetworkUpgradeActive(nHeight, Params().GetConsensus(), Consensus::UPGRADE_OVERWINTER); - bool saplingActive = NetworkUpgradeActive(nHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING); + bool saplingActive = NetworkUpgradeActive(nHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING); if (saplingActive) { // Sapling standard rules apply @@ -891,7 +891,7 @@ bool IsStandardTx(const CTransaction& tx, string& reason, const int nHeight) if (whichType == TX_NULL_DATA) { - if ( txout.scriptPubKey.size() > IGUANA_MAXSCRIPTSIZE ) + if ( txout.scriptPubKey.size() > DRAGON_MAXSCRIPTSIZE ) { reason = "opreturn too big"; return(false); @@ -1098,17 +1098,10 @@ unsigned int GetP2SHSigOpCount(const CTransaction& tx, const CCoinsViewCache& in return nSigOps; } -/** - * Ensure that a coinbase transaction is structured according to the consensus rules of the - * chain - */ +// Ensure that a coinbase transaction is structured according to the consensus rules of the chain bool ContextualCheckCoinbaseTransaction(int32_t slowflag,const CBlock *block,CBlockIndex * const previndex,const CTransaction& tx, const int nHeight,int32_t validateprices) { - if ( ASSETCHAINS_MARMARA != 0 && nHeight > 0 && (nHeight & 1) == 0 ) - { - - } - else if ( slowflag != 0 && ASSETCHAINS_CBOPRET != 0 && validateprices != 0 && nHeight > 0 && tx.vout.size() > 0 ) + if ( slowflag != 0 && ASSETCHAINS_CBOPRET != 0 && validateprices != 0 && nHeight > 0 && tx.vout.size() > 0 ) { if ( komodo_opretvalidate(block,previndex,nHeight,tx.vout[tx.vout.size()-1].scriptPubKey) < 0 ) return(false); @@ -1133,8 +1126,8 @@ bool ContextualCheckTransaction(int32_t slowflag,const CBlock *block, CBlockInde bool (*isInitBlockDownload)(),int32_t validateprices) { bool overwinterActive = NetworkUpgradeActive(nHeight, Params().GetConsensus(), Consensus::UPGRADE_OVERWINTER); - bool saplingActive = NetworkUpgradeActive(nHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING); - bool isSprout = !overwinterActive; + bool saplingActive = NetworkUpgradeActive(nHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING); + bool isSprout = !overwinterActive; // If Sprout rules apply, reject transactions which are intended for Overwinter and beyond if (isSprout && tx.fOverwintered) { @@ -1361,21 +1354,19 @@ bool CheckTransaction(uint32_t tiptime,const CTransaction& tx, CValidationState return true; } -int32_t komodo_isnotaryvout(char *coinaddr,uint32_t tiptime) // from ac_private chains only -{ +int32_t hush_isnotaryvout(char *coinaddr,uint32_t tiptime) { int32_t season = getacseason(tiptime); - if ( NOTARY_ADDRESSES[season-1][0][0] == 0 ) - { + if ( NOTARY_ADDRESSES[season-1][0][0] == 0 ) { uint8_t pubkeys[64][33]; hush_notaries(pubkeys,0,tiptime); } if ( strcmp(coinaddr,CRYPTO555_HUSHADDR) == 0 ) return(1); - for (int32_t i = 0; i < NUM_HUSH_NOTARIES; i++) - { - if ( strcmp(coinaddr,NOTARY_ADDRESSES[season-1][i]) == 0 ) - { - //fprintf(stderr, "coinaddr.%s notaryaddress[%i].%s\n",coinaddr,i,NOTARY_ADDRESSES[season-1][i]); + for (int32_t i = 0; i < NUM_HUSH_NOTARIES; i++) { + if ( strcmp(coinaddr,NOTARY_ADDRESSES[season-1][i]) == 0 ) { + if(fDebug) { + fprintf(stderr, "%s: coinaddr.%s notaryaddress[%i].%s\n",__func__, coinaddr,i,NOTARY_ADDRESSES[season-1][i]); + } return(1); } } @@ -1471,14 +1462,14 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio // char destaddr[65]; Getscriptaddress(destaddr,txout.scriptPubKey); - if ( komodo_isnotaryvout(destaddr,tiptime) == 0 ) + if ( hush_isnotaryvout(destaddr,tiptime) == 0 ) { invalid_private_taddr = 1; //return state.DoS(100, error("CheckTransaction(): this is a private chain, no public allowed"),REJECT_INVALID, "bad-txns-acprivacy-chain"); } } } - if ( txout.scriptPubKey.size() > IGUANA_MAXSCRIPTSIZE ) + if ( txout.scriptPubKey.size() > DRAGON_MAXSCRIPTSIZE ) return state.DoS(100, error("CheckTransaction(): txout.scriptPubKey.size() too big"),REJECT_INVALID, "bad-txns-opret-too-big"); nValueOut += txout.nValue; if (!MoneyRange(nValueOut)) @@ -2886,14 +2877,13 @@ static bool ApplyTxInUndo(const CTxInUndo& undo, CCoinsViewCache& view, const CO void ConnectNotarizations(const CBlock &block, int height) { - NotarizationsInBlock notarisations = ScanBlockNotarizations(block, height); - if (notarisations.size() > 0) { + NotarizationsInBlock notarizations = ScanBlockNotarizations(block, height); + if (notarizations.size() > 0) { CDBBatch batch = CDBBatch(*pnotarizations); - batch.Write(block.GetHash(), notarisations); - WriteBackNotarizations(notarisations, batch); + batch.Write(block.GetHash(), notarizations); + WriteBackNotarizations(notarizations, batch); pnotarizations->WriteBatch(batch, true); - LogPrintf("ConnectBlock: wrote %i block notarizations in block: %s\n", - notarisations.size(), block.GetHash().GetHex().data()); + LogPrintf("ConnectBlock: wrote %i block notarizations in block: %s\n", notarizations.size(), block.GetHash().GetHex().data()); } } @@ -2905,8 +2895,7 @@ void DisconnectNotarizations(const CBlock &block) batch.Erase(block.GetHash()); EraseBackNotarizations(nibs, batch); pnotarizations->WriteBatch(batch, true); - LogPrintf("DisconnectTip: deleted %i block notarizations in block: %s\n", - nibs.size(), block.GetHash().GetHex().data()); + LogPrintf("DisconnectTip: deleted %i block notarizations in block: %s\n", nibs.size(), block.GetHash().GetHex().data()); } } @@ -3268,22 +3257,21 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin // Do this here before the block is moved to the main block files. if ( ASSETCHAINS_NOTARY_PAY[0] != 0 && pindex->GetHeight() > 10 ) { - // do a full block scan to get notarisation position and to enforce a valid notarization is in position 1. - // if notarisation in the block, must be position 1 and the coinbase must pay notaries. - int32_t notarisationTx = hush_connectblock(true,pindex,*(CBlock *)&block); + // do a full block scan to get ntz position and to enforce a valid notarization is in position 1. + // if ntz in the block, must be position 1 and the coinbase must pay notaries. + int32_t notarizationTx = hush_connectblock(true,pindex,*(CBlock *)&block); // -1 means that the valid notarization isnt in position 1 or there are too many notarizations in this block. - if ( notarisationTx == -1 ) + if ( notarizationTx == -1 ) return state.DoS(100, error("ConnectBlock(): Notarization is not in TX position 1 or block contains more than 1 notarization! Invalid Block!"), REJECT_INVALID, "bad-notarization-position"); - // 1 means this block contains a valid notarisation and its in position 1. + // 1 means this block contains a valid notarization and its in position 1. // its no longer possible for any attempted notarization to be in a block with a valid one! - // if notaries create a notarisation even if its not in this chain it will need to be mined inside its own block! - if ( notarisationTx == 1 ) + // if notaries create a notarization even if its not in this chain it will need to be mined inside its own block! + if ( notarizationTx == 1 ) { // Check if the notaries have been paid. if ( block.vtx[0].vout.size() == 1 ) - return state.DoS(100, error("ConnectBlock(): Notaries have not been paid!"), - REJECT_INVALID, "bad-cb-amount"); + return state.DoS(100, error("ConnectBlock(): Notaries have not been paid!"), REJECT_INVALID, "bad-cb-amount"); // calculate the notaries compensation and validate the amounts and pubkeys are correct. notarypaycheque = komodo_checknotarypay((CBlock *)&block,(int32_t)pindex->GetHeight()); //fprintf(stderr, "notarypaycheque.%lu\n", notarypaycheque); @@ -3294,6 +3282,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin REJECT_INVALID, "bad-cb-amount"); } } + // Move the block to the main block file, we need this to create the TxIndex in the following loop. if ( (pindex->nStatus & BLOCK_IN_TMPFILE) != 0 ) { @@ -3626,7 +3615,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin setDirtyBlockIndex.insert(pindex); } - ConnectNotarizations(block, pindex->GetHeight()); // MoMoM notarisation DB. + ConnectNotarizations(block, pindex->GetHeight()); // MoMoM notarization DB. if (fTxIndex) if (!pblocktree->WriteTxIndex(vPos)) @@ -7161,12 +7150,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } - // Relay alerts + // Do Not Relay alerts + /* { LOCK(cs_mapAlerts); BOOST_FOREACH(PAIRTYPE(const uint256, CAlert)& item, mapAlerts) item.second.RelayTo(pfrom); } + */ pfrom->fSuccessfullyConnected = true; @@ -7183,17 +7174,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, //pfrom->nTimeOffset = nTimeOffset; //AddTimeData(pfrom->addr, nTimeOffset); pfrom->nTimeOffset = timeWarning.AddTimeData(pfrom->addr, nTime, GetTime()); - } - - - else if (pfrom->nVersion == 0) - { + } else if (pfrom->nVersion == 0) { // Must have a version message before anything else Misbehaving(pfrom->GetId(), 1); return false; - } - else if ( strCommand == "events" ) - { + } else if ( strCommand == "events" ) { if ( ASSETCHAINS_CCLIB != "gamescc" ) { Misbehaving(pfrom->GetId(), 1); @@ -7203,9 +7188,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, vRecv >> payload; komodo_netevent(payload); return(true); - } - else if (strCommand == "verack") - { + } else if (strCommand == "verack") { pfrom->SetRecvVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); if ( HUSH_NSPV_SUPERLITE ) @@ -7224,26 +7207,18 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } - // Disconnect existing peer connection when: // 1. The version message has been received // 2. Peer version is below the minimum version for the current epoch - else if (pfrom->nVersion < chainparams.GetConsensus().vUpgrades[ - CurrentEpoch(GetHeight(), chainparams.GetConsensus())].nProtocolVersion) - { - LogPrintf("peer=%d using obsolete version %i vs %d; disconnecting\n", pfrom->id, pfrom->nVersion,(int32_t)chainparams.GetConsensus().vUpgrades[ - CurrentEpoch(GetHeight(), chainparams.GetConsensus())].nProtocolVersion); + else if (pfrom->nVersion < chainparams.GetConsensus().vUpgrades[CurrentEpoch(GetHeight(), chainparams.GetConsensus())].nProtocolVersion) { + LogPrintf("peer=%d using obsolete version %i vs %d; disconnecting\n", pfrom->id, pfrom->nVersion,(int32_t)chainparams.GetConsensus().vUpgrades[CurrentEpoch(GetHeight(), chainparams.GetConsensus())].nProtocolVersion); pfrom->PushMessage("reject", strCommand, REJECT_OBSOLETE, strprintf("Version must be %d or greater", chainparams.GetConsensus().vUpgrades[ CurrentEpoch(GetHeight(), chainparams.GetConsensus())].nProtocolVersion)); pfrom->fDisconnect = true; return false; - } - - - else if (strCommand == "addr") - { + } else if (strCommand == "addr") { vector vAddr; vRecv >> vAddr; @@ -7490,11 +7465,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (!vToFetch.empty()) pfrom->PushMessage("getdata", vToFetch); - } - - - else if (strCommand == "getdata") - { + } else if (strCommand == "getdata") { vector vInv; vRecv >> vInv; if (vInv.size() > MAX_INV_SZ) @@ -7511,11 +7482,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, pfrom->vRecvGetData.insert(pfrom->vRecvGetData.end(), vInv.begin(), vInv.end()); ProcessGetData(pfrom); - } - - - else if (strCommand == "getblocks") - { + } else if (strCommand == "getblocks") { CBlockLocator locator; uint256 hashStop; vRecv >> locator >> hashStop; @@ -7547,11 +7514,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, break; } } - } - - - else if (strCommand == "getheaders") - { + } else if (strCommand == "getheaders") { CBlockLocator locator; uint256 hashStop; vRecv >> locator >> hashStop; @@ -7574,9 +7537,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, return true; } pindex = (*mi).second; - } - else - { + } else { // Find the last block the caller has in the main chain pindex = FindForkInGlobalIndex(chainActive, locator); if (pindex) @@ -7607,11 +7568,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if ( counter++ < 3 ) fprintf(stderr,"you can ignore redundant getheaders from peer.%d %d prev.%d\n",(int32_t)pfrom->id,(int32_t)(pindex ? pindex->GetHeight() : -1),pfrom->lasthdrsreq); }*/ - } - - - else if (strCommand == "tx") - { + } else if (strCommand == "tx") { if (IsInitialBlockDownload()) return true; @@ -7696,7 +7653,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, BOOST_FOREACH(uint256 hash, vEraseQueue) EraseOrphanTx(hash); } - // TODO: currently, prohibit joinsplits and shielded spends/outputs from entering mapOrphans + // TODO: currently, prohibit shielded spends/outputs from entering mapOrphans else if (fMissingInputs && tx.vjoinsplit.empty() && tx.vShieldedSpend.empty() && @@ -7707,7 +7664,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // DoS prevention: do not allow mapOrphanTransactions to grow unbounded unsigned int nMaxOrphanTx = (unsigned int)std::max((int64_t)0, GetArg("-maxorphantx", DEFAULT_MAX_ORPHAN_TRANSACTIONS)); - unsigned int nEvicted = LimitOrphanTxSize(nMaxOrphanTx); + unsigned int nEvicted = LimitOrphanTxSize(nMaxOrphanTx); if (nEvicted > 0) LogPrint("mempool", "mapOrphan overflow, removed %u tx\n", nEvicted); } else { @@ -7744,9 +7701,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (nDoS > 0) Misbehaving(pfrom->GetId(), nDoS); } - } - - else if (strCommand == "headers" && !fImporting && !fReindex) // Ignore headers received while importing + } else if (strCommand == "headers" && !fImporting && !fReindex) // Ignore headers received while importing { std::vector headers; @@ -7809,9 +7764,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } CheckBlockIndex(); - } - - else if (strCommand == "block" && !fImporting && !fReindex) // Ignore blocks received while importing + } else if (strCommand == "block" && !fImporting && !fReindex) // Ignore blocks received while importing { CBlock block; vRecv >> block; @@ -7838,11 +7791,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } - } - - - else if (strCommand == "mempool") - { + } else if (strCommand == "mempool") { LOCK2(cs_main, pfrom->cs_filter); std::vector vtxid; @@ -7864,17 +7813,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } if (vInv.size() > 0) pfrom->PushMessage("inv", vInv); - } - else if (fAlerts && strCommand == "alert") - { + } else if (fAlerts && strCommand == "alert") { + //TODO: probably completely ignore this CAlert alert; vRecv >> alert; uint256 alertHash = alert.GetHash(); - if (pfrom->setKnown.count(alertHash) == 0) - { - if (alert.ProcessAlert(Params().AlertKey())) - { + if (pfrom->setKnown.count(alertHash) == 0) { + if (alert.ProcessAlert(Params().AlertKey())) { // Relay pfrom->setKnown.insert(alertHash); { @@ -7882,8 +7828,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, BOOST_FOREACH(CNode* pnode, vNodes) alert.RelayTo(pnode); } - } - else { + } else { // Small DoS penalty so peers that send us lots of // duplicate/expired/invalid-signature/whatever alerts // eventually get banned. @@ -7893,12 +7838,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, Misbehaving(pfrom->GetId(), 10); } } - } - - else if (!(nLocalServices & NODE_BLOOM) && + } else if (!(nLocalServices & NODE_BLOOM) && (strCommand == "filterload" || - strCommand == "filteradd")) - { + strCommand == "filteradd")) { if (pfrom->nVersion >= NO_BLOOM_VERSION) { Misbehaving(pfrom->GetId(), 100); return false; @@ -7906,11 +7848,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, pfrom->fDisconnect = true; return false; } - } - - - else if (strCommand == "filterload") - { + } else if (strCommand == "filterload") { CBloomFilter filter; vRecv >> filter; @@ -7925,11 +7863,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, pfrom->pfilter->UpdateEmptyFull(); } pfrom->fRelayTxes = true; - } - - - else if (strCommand == "filteradd") - { + } else if (strCommand == "filteradd") { vector vData; vRecv >> vData; @@ -7945,22 +7879,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else Misbehaving(pfrom->GetId(), 100); } - } - - - else if (strCommand == "filterclear") - { + } else if (strCommand == "filterclear") { LOCK(pfrom->cs_filter); if (nLocalServices & NODE_BLOOM) { delete pfrom->pfilter; pfrom->pfilter = new CBloomFilter(); } pfrom->fRelayTxes = true; - } - - - else if (strCommand == "reject") - { + } else if (strCommand == "reject") { if (fDebug) { try { string strMsg; unsigned char ccode; string strReason; @@ -7981,19 +7907,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, LogPrint("net", "Unparseable reject message received\n"); } } - } - else if (strCommand == "notfound") { + } else if (strCommand == "notfound") { // We do not care about the NOTFOUND message, but logging an Unknown Command // message would be undesirable as we transmit it ourselves. - } - - else { + } else { // Ignore unknown commands for extensibility LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand), pfrom->id); } - - return true; } @@ -8117,7 +8038,6 @@ bool ProcessMessages(CNode* pfrom) return fOk; } - bool SendMessages(CNode* pto, bool fSendTrickle) { const Consensus::Params& consensusParams = Params().GetConsensus(); @@ -8375,8 +8295,6 @@ std::string CBlockFileInfo::ToString() const { return strprintf("CBlockFileInfo(blocks=%u, size=%u, heights=%u...%u, time=%s...%s)", nBlocks, nSize, nHeightFirst, nHeightLast, DateTimeStrFormat("%Y-%m-%d", nTimeFirst), DateTimeStrFormat("%Y-%m-%d", nTimeLast)); } - - static class CMainCleanup { public: diff --git a/src/miner.cpp b/src/miner.cpp index 0d6e16023..bc78a2bc7 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -47,12 +47,9 @@ #ifdef ENABLE_WALLET #include "wallet/wallet.h" #endif - #include "zcash/Address.hpp" #include "transaction_builder.h" - #include "sodium.h" - #include #include #ifdef ENABLE_MINING @@ -145,7 +142,7 @@ int32_t komodo_baseid(char *origbase); int32_t hush_longestchain(); int64_t komodo_block_unlocktime(uint32_t nHeight); uint64_t the_commission(const CBlock *block,int32_t height); -int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *ptr); +int32_t hush_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *ptr); int32_t decode_hex(uint8_t *bytes,int32_t n,char *hex); int32_t komodo_is_notarytx(const CTransaction& tx); uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &NotarizationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len); @@ -364,7 +361,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 scriptlen = (int32_t)tx1.vout[txin.prevout.n].scriptPubKey.size(); if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[i],33) == 0 ) { - // We can add the index of each notary to vector, and clear it if this notarisation is not valid later on. + // We can add the index of each notary to vector, and clear it if this notarization is not valid later on. TMP_NotarizationNotaries.push_back(i); } } @@ -373,11 +370,11 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 } if ( numSN != 0 && notarypubkeys[0][0] != 0 && TMP_NotarizationNotaries.size() >= numSN / 5 ) { - // check a notary didnt sign twice (this would be an invalid notarisation later on and cause problems) + // check a notary didnt sign twice (this would be an invalid notarization later on and cause problems) std::set checkdupes( TMP_NotarizationNotaries.begin(), TMP_NotarizationNotaries.end() ); if ( checkdupes.size() != TMP_NotarizationNotaries.size() ) { - fprintf(stderr, "possible notarisation is signed multiple times by same notary, passed as normal transaction.\n"); + fprintf(stderr, "%s: WTFBBQ! possible notarization is signed multiple times by same notary, passed as normal transaction.\n", __func__); } else fNotarization = true; } nTotalIn += tx.GetShieldedValueIn(); @@ -394,12 +391,11 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 CFeeRate feeRate(nTotalIn-tx.GetValueOut(), nTxSize); - if ( fNotarization ) - { + if ( fNotarization ) { // Special miner for notary pay chains. Can only enter this if numSN/notarypubkeys is set higher up. if ( tx.vout.size() == 2 && tx.vout[1].nValue == 0 ) { - // Get the OP_RETURN for the notarisation + // Get the OP_RETURN for the notarization uint8_t *script = (uint8_t *)&tx.vout[1].scriptPubKey[0]; int32_t scriptlen = (int32_t)tx.vout[1].scriptPubKey.size(); if ( script[0] == OP_RETURN ) @@ -422,33 +418,29 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 } } } - } - else if ( dPriority == 1e16 ) - { + } else if ( dPriority == 1e16 ) { dPriority -= 10; - // make sure notarisation is tx[1] in block. + // make sure notarization is tx[1] in block. } - if (porphan) - { + if (porphan) { porphan->dPriority = dPriority; porphan->feeRate = feeRate; - } - else + } else { vecPriority.push_back(TxPriority(dPriority, feeRate, &(mi->GetTx()))); + } } // Collect transactions into block - uint64_t nBlockSize = 1000; - uint64_t nBlockTx = 0; int64_t interest; - int nBlockSigOps = 100; - bool fSortedByFee = (nBlockPrioritySize <= 0); + uint64_t nBlockSize = 1000; + uint64_t nBlockTx = 0; + int nBlockSigOps = 100; + bool fSortedByFee = (nBlockPrioritySize <= 0); TxPriorityCompare comparer(fSortedByFee); std::make_heap(vecPriority.begin(), vecPriority.end(), comparer); - while (!vecPriority.empty()) - { + while (!vecPriority.empty()) { // Take highest priority transaction off the priority queue: double dPriority = vecPriority.front().get<0>(); CFeeRate feeRate = vecPriority.front().get<1>(); @@ -625,7 +617,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 if ( ASSETCHAINS_SCRIPTPUB.size() > 1 ) { static bool didinit = false; - if ( !didinit && nHeight > KOMODO_EARLYTXID_HEIGHT && KOMODO_EARLYTXID != zeroid && komodo_appendACscriptpub() ) + if ( !didinit && nHeight > HUSH_EARLYTXID_HEIGHT && HUSH_EARLYTXID != zeroid && komodo_appendACscriptpub() ) { fprintf(stderr, "appended ccopreturn to ASSETCHAINS_SCRIPTPUB.%s\n", ASSETCHAINS_SCRIPTPUB.c_str()); didinit = true; @@ -637,9 +629,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 txNew.vout[1].scriptPubKey.resize(len); ptr = (uint8_t *)&txNew.vout[1].scriptPubKey[0]; decode_hex(ptr,len,(char *)ASSETCHAINS_SCRIPTPUB.c_str()); - } - else - { + } else { txNew.vout[1].scriptPubKey.resize(35); ptr = (uint8_t *)&txNew.vout[1].scriptPubKey[0]; ptr[0] = 33; @@ -652,17 +642,13 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 //fprintf(stderr," set ASSETCHAINS_OVERRIDE_PUBKEY33 into vout[1]\n"); } //printf("autocreate commision vout\n"); - } - else if ( (uint64_t)(txNew.vout[0].nValue) >= ASSETCHAINS_TIMELOCKGTE) - { + } else if ( (uint64_t)(txNew.vout[0].nValue) >= ASSETCHAINS_TIMELOCKGTE) { fprintf(stderr,"timelocked chains not supported in this code!\n"); LEAVE_CRITICAL_SECTION(cs_main); LEAVE_CRITICAL_SECTION(mempool.cs); return(0); - } - else if ( fNotarizationBlock && ASSETCHAINS_NOTARY_PAY[0] != 0 && pblock->vtx[1].vout.size() == 2 && pblock->vtx[1].vout[1].nValue == 0 ) - { - // Get the OP_RETURN for the notarisation + } else if ( fNotarizationBlock && ASSETCHAINS_NOTARY_PAY[0] != 0 && pblock->vtx[1].vout.size() == 2 && pblock->vtx[1].vout[1].nValue == 0 ) { + // Get the OP_RETURN for the notarization uint8_t *script = (uint8_t *)&pblock->vtx[1].vout[1].scriptPubKey[0]; int32_t scriptlen = (int32_t)pblock->vtx[1].vout[1].scriptPubKey.size(); if ( script[0] == OP_RETURN ) @@ -679,7 +665,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 return(0); } //fprintf(stderr, "Created notary payment coinbase totalsat.%lu\n",totalsats); - } else fprintf(stderr, "vout 2 of notarisation is not OP_RETURN scriptlen.%i\n", scriptlen); + } else fprintf(stderr, "vout 2 of notarization is not OP_RETURN scriptlen.%i\n", scriptlen); } if ( ASSETCHAINS_CBOPRET != 0 ) { @@ -733,7 +719,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 memcpy(&r,&randvals,sizeof(r)); pblock->nTime += (r % (33 - gpucount)*(33 - gpucount)); } - if ( komodo_notaryvin(txNotary,NOTARY_PUBKEY33,ptr) > 0 ) + if ( hush_notaryvin(txNotary,NOTARY_PUBKEY33,ptr) > 0 ) { CAmount txfees = 5000; pblock->vtx.push_back(txNotary); diff --git a/src/notarizationdb.cpp b/src/notarizationdb.cpp index 80009f950..470513fa4 100644 --- a/src/notarizationdb.cpp +++ b/src/notarizationdb.cpp @@ -12,16 +12,15 @@ NotarizationDB *pnotarizations; NotarizationDB::NotarizationDB(size_t nCacheSize, bool fMemory, bool fWipe) : CDBWrapper(GetDataDir() / "notarizations", nCacheSize, fMemory, fWipe, false, 64) { } -NotarizationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) -{ +NotarizationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) { EvalRef eval; NotarizationsInBlock vNotarizations; int timestamp = block.nTime; bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; // No valid ntz's before this height - int minheight = ishush3 ? 360000 : 1; - if(ishush3 && (nHeight <= GetArg("-dpow_height",minheight))) { + int minheight = ishush3 ? 365420 : 1; + if(ishush3 && (nHeight <= GetArg("-dpow-start-height",minheight))) { return vNotarizations; } @@ -48,28 +47,26 @@ NotarizationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) printf("Parsed a notarization for: %s, txid:%s, ccid:%i, momdepth:%i\n", data.symbol, tx.GetHash().GetHex().data(), data.ccId, data.MoMDepth); if (!data.MoMoM.IsNull()) printf("MoMoM:%s\n", data.MoMoM.GetHex().data()); } - } else + } else { LogPrintf("WARNING: Couldn't parse notarization for tx: %s at height %i\n", tx.GetHash().GetHex().data(), nHeight); + } } return vNotarizations; } -bool GetBlockNotarizations(uint256 blockHash, NotarizationsInBlock &nibs) -{ +bool GetBlockNotarizations(uint256 blockHash, NotarizationsInBlock &nibs) { return pnotarizations->Read(blockHash, nibs); } -bool GetBackNotarization(uint256 notarisationHash, Notarization &n) -{ - return pnotarizations->Read(notarisationHash, n); +bool GetBackNotarization(uint256 notarizationHash, Notarization &n) { + return pnotarizations->Read(notarizationHash, n); } -// Write an index of HUSH notarisation id -> backnotarisation -void WriteBackNotarizations(const NotarizationsInBlock notarisations, CDBBatch &batch) -{ +// Write an index of HUSH notarization id -> backnotarization +void WriteBackNotarizations(const NotarizationsInBlock notarizations, CDBBatch &batch) { int wrote = 0; - BOOST_FOREACH(const Notarization &n, notarisations) + BOOST_FOREACH(const Notarization &n, notarizations) { if (!n.second.txHash.IsNull()) { batch.Write(n.second.txHash, n); @@ -78,30 +75,28 @@ void WriteBackNotarizations(const NotarizationsInBlock notarisations, CDBBatch & } } -void EraseBackNotarizations(const NotarizationsInBlock notarisations, CDBBatch &batch) -{ - BOOST_FOREACH(const Notarization &n, notarisations) +void EraseBackNotarizations(const NotarizationsInBlock notarizations, CDBBatch &batch) { + BOOST_FOREACH(const Notarization &n, notarizations) { if (!n.second.txHash.IsNull()) batch.Erase(n.second.txHash); } } -// Scan notarisationsdb backwards for blocks containing a notarisation -// for given symbol. Return height of matched notarisation or 0. -int ScanNotarizationsDB(int height, std::string symbol, int scanLimitBlocks, Notarization& out) -{ +// Scan notarizationsdb backwards for blocks containing a notarization +// for given symbol. Return height of matched notarization or 0. +int ScanNotarizationsDB(int height, std::string symbol, int scanLimitBlocks, Notarization& out) { if (height < 0 || height > chainActive.Height()) return false; for (int i=0; i height) break; - NotarizationsInBlock notarisations; + NotarizationsInBlock notarizations; uint256 blockHash = *chainActive[height-i]->phashBlock; - if (!GetBlockNotarizations(blockHash, notarisations)) + if (!GetBlockNotarizations(blockHash, notarizations)) continue; - BOOST_FOREACH(Notarization& nota, notarisations) { + BOOST_FOREACH(Notarization& nota, notarizations) { if (strcmp(nota.second.symbol, symbol.data()) == 0) { out = nota; return height-i; diff --git a/src/pow.cpp b/src/pow.cpp index a8b449246..032ca29fe 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -509,14 +509,12 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead // changes consensus. Have fun -- Duke int64_t AveragingWindowTimespan(int32_t height) { int64_t AWT = 2550; - if (height >= 340000) { - //trying to emulate 3.5.0 behavior - //AWT = 1275; + /* + int32_t forkHeight = 0; + if (height >= forkHeight) { + AWT = 1275; } - // TODO: - //if (height >= XXX){ - // AWT = 1275; - //} + */ return AWT; } @@ -703,48 +701,10 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t memset(blocktimes,0,sizeof(blocktimes)); tiptime = komodo_chainactive_timestamp(); bnTarget.SetCompact(blkHeader.nBits, &fNegative, &fOverflow); - if ( height == 0 ) - { + if ( height == 0 ) { height = komodo_currentheight() + 1; //fprintf(stderr,"set height to %d\n",height); } - if ( height > 34000 && SMART_CHAIN_SYMBOL[0] == 0 ) // 0 -> non-special notary - { - special = hush_chosennotary(¬aryid,height,pubkey33,tiptime); - for (i=0; i<33; i++) - { - if ( pubkey33[i] != 0 ) - nonz++; - } - if ( nonz == 0 ) - { - //fprintf(stderr,"ht.%d null pubkey checkproof return\n",height); - return(true); // will come back via different path with pubkey set - } - flag = komodo_eligiblenotary(pubkeys,mids,blocktimes,&nonzpkeys,height); - special2 = komodo_is_special(pubkeys,mids,blocktimes,height,pubkey33,blkHeader.nTime); - if ( notaryid >= 0 ) - { - if ( height > 10000 && height < 80000 && (special != 0 || special2 > 0) ) - flag = 1; - else if ( height >= 80000 && height < 108000 && special2 > 0 ) - flag = 1; - else if ( height >= 108000 && special2 > 0 ) - flag = (height > 1000000 || (height % KOMODO_ELECTION_GAP) > 64 || (height % KOMODO_ELECTION_GAP) == 0); - else if ( height == 790833 ) - flag = 1; - else if ( special2 < 0 ) - { - if ( height > 792000 ) - flag = 0; - else fprintf(stderr,"ht.%d notaryid.%d special.%d flag.%d special2.%d\n",height,notaryid,special,flag,special2); - } - if ( (flag != 0 || special2 > 0) && special2 != -2 ) - { - bnTarget.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); - } - } - } arith_uint256 bnLimit = (height <= 1 || ASSETCHAINS_ALGO == ASSETCHAINS_EQUIHASH) ? UintToArith256(params.powLimit) : UintToArith256(params.powAlternate); if (fNegative || bnTarget == 0 || fOverflow || bnTarget > bnLimit) return error("CheckProofOfWork(): nBits below minimum work"); @@ -760,9 +720,9 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t if ( HUSH_LOADINGBLOCKS != 0 ) return true; + /* if ( SMART_CHAIN_SYMBOL[0] != 0 || height > 792000 ) { - //if ( 0 && height > 792000 ) if ( Params().NetworkIDString() != "regtest" ) { for (i=31; i>=0; i--) @@ -780,6 +740,7 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t } return false; } + */ } /*for (i=31; i>=0; i--) fprintf(stderr,"%02x",((uint8_t *)&hash)[i]); diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index f83567595..8c3330d9d 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -859,7 +859,7 @@ UniValue gettxoutsetinfo(const UniValue& params, bool fHelp, const CPubKey& mypk UniValue kvsearch(const UniValue& params, bool fHelp, const CPubKey& mypk) { - UniValue ret(UniValue::VOBJ); uint32_t flags; uint8_t value[IGUANA_MAXSCRIPTSIZE*8],key[IGUANA_MAXSCRIPTSIZE*8]; int32_t duration,j,height,valuesize,keylen; uint256 refpubkey; static uint256 zeroes; + UniValue ret(UniValue::VOBJ); uint32_t flags; uint8_t value[DRAGON_MAXSCRIPTSIZE*8],key[DRAGON_MAXSCRIPTSIZE*8]; int32_t duration,j,height,valuesize,keylen; uint256 refpubkey; static uint256 zeroes; if (fHelp || params.size() != 1 ) throw runtime_error( "kvsearch key\n" @@ -902,7 +902,7 @@ UniValue kvsearch(const UniValue& params, bool fHelp, const CPubKey& mypk) if ( memcmp(&zeroes,&refpubkey,sizeof(refpubkey)) != 0 ) ret.push_back(Pair("owner",refpubkey.GetHex())); ret.push_back(Pair("height",height)); - duration = ((flags >> 2) + 1) * KOMODO_KVDURATION; + duration = ((flags >> 2) + 1) * HUSH_KVDURATION; ret.push_back(Pair("expiration", (int64_t)(height+duration))); ret.push_back(Pair("flags",(int64_t)flags)); ret.push_back(Pair("value",val)); diff --git a/src/test/alert_tests.cpp b/src/test/alert_tests.cpp index a4750b1e6..edf5cb1fc 100644 --- a/src/test/alert_tests.cpp +++ b/src/test/alert_tests.cpp @@ -2,17 +2,13 @@ // Copyright (c) 2016-2020 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 - -// // Unit tests for alert system -// #include "alert.h" #include "chain.h" #include "chainparams.h" #include "clientversion.h" #include "data/alertTests.raw.h" - #include "main.h" #include "rpc/protocol.h" #include "rpc/server.h" @@ -20,15 +16,11 @@ #include "streams.h" #include "util.h" #include "utilstrencodings.h" - #include "test/test_bitcoin.h" - #include - #include #include #include - #include "key.h" #include "alertkeys.h" #include diff --git a/src/test/rpc_wallet_tests.cpp b/src/test/rpc_wallet_tests.cpp index f30e4b2fc..563ef18bd 100644 --- a/src/test/rpc_wallet_tests.cpp +++ b/src/test/rpc_wallet_tests.cpp @@ -910,8 +910,8 @@ BOOST_AUTO_TEST_CASE(rpc_z_sendmany_parameters) "1 50.00000001" ), runtime_error); - // memo bigger than allowed length of ZC_MEMO_SIZE - std::vector v (2 * (ZC_MEMO_SIZE+1)); // x2 for hexadecimal string format + // memo bigger than allowed length of HUSH_MEMO_SIZE + std::vector v (2 * (HUSH_MEMO_SIZE+1)); // x2 for hexadecimal string format std::fill(v.begin(),v.end(), 'A'); std::string badmemo(v.begin(), v.end()); auto pa = pwalletMain->GenerateNewSproutZKey(); @@ -1035,17 +1035,17 @@ BOOST_AUTO_TEST_CASE(rpc_z_sendmany_internals) TEST_FRIEND_AsyncRPCOperation_sendmany proxy(ptr); std::string memo = "DEADBEEF"; - std::array array = proxy.get_memo_from_hex_string(memo); + std::array array = proxy.get_memo_from_hex_string(memo); BOOST_CHECK_EQUAL(array[0], 0xDE); BOOST_CHECK_EQUAL(array[1], 0xAD); BOOST_CHECK_EQUAL(array[2], 0xBE); BOOST_CHECK_EQUAL(array[3], 0xEF); - for (int i=4; i v (2 * (ZC_MEMO_SIZE+1)); + std::vector v (2 * (HUSH_MEMO_SIZE+1)); std::fill(v.begin(),v.end(), 'A'); std::string bigmemo(v.begin(), v.end()); @@ -1697,8 +1697,8 @@ BOOST_AUTO_TEST_CASE(rpc_z_mergetoaddress_parameters) "0.0001 100 -1" ), runtime_error); - // memo bigger than allowed length of ZC_MEMO_SIZE - std::vector v (2 * (ZC_MEMO_SIZE+1)); // x2 for hexadecimal string format + // memo bigger than allowed length of HUSH_MEMO_SIZE + std::vector v (2 * (HUSH_MEMO_SIZE+1)); // x2 for hexadecimal string format std::fill(v.begin(),v.end(), 'A'); std::string badmemo(v.begin(), v.end()); auto pa = pwalletMain->GenerateNewSproutZKey(); @@ -1806,17 +1806,17 @@ BOOST_AUTO_TEST_CASE(rpc_z_mergetoaddress_internals) TEST_FRIEND_AsyncRPCOperation_mergetoaddress proxy(ptr); std::string memo = "DEADBEEF"; - std::array array = proxy.get_memo_from_hex_string(memo); + std::array array = proxy.get_memo_from_hex_string(memo); BOOST_CHECK_EQUAL(array[0], 0xDE); BOOST_CHECK_EQUAL(array[1], 0xAD); BOOST_CHECK_EQUAL(array[2], 0xBE); BOOST_CHECK_EQUAL(array[3], 0xEF); - for (int i=4; i v (2 * (ZC_MEMO_SIZE+1)); + std::vector v (2 * (HUSH_MEMO_SIZE+1)); std::fill(v.begin(),v.end(), 'A'); std::string bigmemo(v.begin(), v.end()); diff --git a/src/transaction_builder.cpp b/src/transaction_builder.cpp index 8da3012c9..fc980d58a 100644 --- a/src/transaction_builder.cpp +++ b/src/transaction_builder.cpp @@ -53,7 +53,7 @@ void TransactionBuilder::AddSaplingOutput( uint256 ovk, libzcash::SaplingPaymentAddress to, CAmount value, - std::array memo) + std::array memo) { auto note = libzcash::SaplingNote(to, value); outputs.emplace_back(ovk, note, memo); diff --git a/src/transaction_builder.h b/src/transaction_builder.h index adee59765..4185b248f 100644 --- a/src/transaction_builder.h +++ b/src/transaction_builder.h @@ -36,12 +36,12 @@ struct SpendDescriptionInfo { struct OutputDescriptionInfo { uint256 ovk; libzcash::SaplingNote note; - std::array memo; + std::array memo; OutputDescriptionInfo( uint256 ovk, libzcash::SaplingNote note, - std::array memo) : ovk(ovk), note(note), memo(memo) {} + std::array memo) : ovk(ovk), note(note), memo(memo) {} }; struct TransparentInputInfo { @@ -90,7 +90,7 @@ public: uint256 ovk, libzcash::SaplingPaymentAddress to, CAmount value, - std::array memo = {{0}}); + std::array memo = {{0}}); // Assumes that the value correctly corresponds to the provided UTXO. void AddTransparentInput(COutPoint utxo, CScript scriptPubKey, CAmount value, uint32_t nSequence = 0xffffffff); diff --git a/src/wallet/asyncrpcoperation_mergetoaddress.cpp b/src/wallet/asyncrpcoperation_mergetoaddress.cpp index 67a502ee0..d867caf10 100644 --- a/src/wallet/asyncrpcoperation_mergetoaddress.cpp +++ b/src/wallet/asyncrpcoperation_mergetoaddress.cpp @@ -333,7 +333,7 @@ bool AsyncRPCOperation_mergetoaddress::main_impl() } else { std::string zaddr = std::get<0>(recipient_); std::string memo = std::get<1>(recipient_); - std::array hexMemo = get_memo_from_hex_string(memo); + std::array hexMemo = get_memo_from_hex_string(memo); auto saplingPaymentAddress = boost::get(&toPaymentAddress_); if (saplingPaymentAddress == nullptr) { // This should never happen as we have already determined that the payment is to sapling @@ -486,9 +486,9 @@ void AsyncRPCOperation_mergetoaddress::sign_send_raw_transaction(UniValue obj) tx_ = tx; } -std::array AsyncRPCOperation_mergetoaddress::get_memo_from_hex_string(std::string s) +std::array AsyncRPCOperation_mergetoaddress::get_memo_from_hex_string(std::string s) { - std::array memo = {{0x00}}; + std::array memo = {{0x00}}; std::vector rawMemo = ParseHex(s.c_str()); @@ -498,13 +498,13 @@ std::array AsyncRPCOperation_mergetoaddress::get_me throw JSONRPCError(RPC_INVALID_PARAMETER, "Memo must be in hexadecimal format"); } - if (rawMemo.size() > ZC_MEMO_SIZE) { - throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Memo size of %d is too big, maximum allowed is %d", rawMemo.size(), ZC_MEMO_SIZE)); + if (rawMemo.size() > HUSH_MEMO_SIZE) { + throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Memo size of %d is too big, maximum allowed is %d", rawMemo.size(), HUSH_MEMO_SIZE)); } // copy vector into boost array int lenMemo = rawMemo.size(); - for (int i = 0; i < ZC_MEMO_SIZE && i < lenMemo; i++) { + for (int i = 0; i < HUSH_MEMO_SIZE && i < lenMemo; i++) { memo[i] = rawMemo[i]; } return memo; diff --git a/src/wallet/asyncrpcoperation_mergetoaddress.h b/src/wallet/asyncrpcoperation_mergetoaddress.h index aa8831fd3..b1eeae82d 100644 --- a/src/wallet/asyncrpcoperation_mergetoaddress.h +++ b/src/wallet/asyncrpcoperation_mergetoaddress.h @@ -99,7 +99,7 @@ private: TransactionBuilder builder_; CTransaction tx_; - std::array get_memo_from_hex_string(std::string s); + std::array get_memo_from_hex_string(std::string s); bool main_impl(); void sign_send_raw_transaction(UniValue obj); // throws exception if there was an error @@ -135,7 +135,7 @@ public: // Delegated methods - std::array get_memo_from_hex_string(std::string s) + std::array get_memo_from_hex_string(std::string s) { return delegate->get_memo_from_hex_string(s); } diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index 63fcc676e..b9029b2e6 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -2,7 +2,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -17,7 +16,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "asyncrpcoperation_sendmany.h" #include "asyncrpcqueue.h" #include "amount.h" @@ -40,15 +38,12 @@ #include "zcash/IncrementalMerkleTree.hpp" #include "sodium.h" #include "miner.h" - #include - #include #include #include #include #include - #include using namespace libzcash; @@ -199,11 +194,16 @@ bool AsyncRPCOperation_sendmany::main_impl() { assert(isfromtaddr_ != isfromzaddr_); - bool isSingleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()==1); + if(t_outputs_.size() > 0) { + throw JSONRPCError(RPC_WALLET_ERROR, "Extreme Privacy! You cannot send to a transparent address."); + } + + bool isSingleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()==1); bool isMultipleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()>=1); - bool isPureTaddrOnlyTx = (isfromtaddr_ && z_outputs_.size() == 0); + bool isPureTaddrOnlyTx = (isfromtaddr_ && z_outputs_.size() == 0); CAmount minersFee = fee_; + // TODO: fix this garbage ZEC prisoner mindset bullshit // When spending coinbase utxos, you can only specify a single zaddr as the change must go somewhere // and if there are multiple zaddrs, we don't know where to send it. if (isfromtaddr_) { @@ -243,12 +243,13 @@ bool AsyncRPCOperation_sendmany::main_impl() { t_outputs_total += std::get<1>(t); } + CAmount z_outputs_total = 0; for (SendManyRecipient & t : z_outputs_) { z_outputs_total += std::get<1>(t); } - CAmount sendAmount = z_outputs_total + t_outputs_total; + CAmount sendAmount = z_outputs_total + t_outputs_total; CAmount targetAmount = sendAmount + minersFee; assert(!isfromtaddr_ || z_inputs_total == 0); @@ -302,7 +303,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { FormatMoney(t_inputs_total), FormatMoney(dustThreshold - dustChange), FormatMoney(dustChange), FormatMoney(dustThreshold))); } - t_inputs_ = selectedTInputs; + t_inputs_ = selectedTInputs; t_inputs_total = selectedUTXOAmount; // Check mempooltxinputlimit to avoid creating a transaction which the local mempool rejects @@ -331,15 +332,8 @@ bool AsyncRPCOperation_sendmany::main_impl() { CAmount amount = std::get<2>(t); builder_.AddTransparentInput(COutPoint(txid, vout), scriptPubKey, amount); } - // for Komodo, set lock time to accure interest, for other chains, set - // locktime to spend time locked coinbases - if (SMART_CHAIN_SYMBOL[0] == 0) - { - if ( !hush_hardfork_active((uint32_t)chainActive.LastTip()->nTime) ) - builder_.SetLockTime((uint32_t)time(NULL) - 60); // set lock time for Komodo interest - else - builder_.SetLockTime((uint32_t)chainActive.Tip()->GetMedianTimePast()); - } + // for other chains, set locktime to spend time locked coinbases + //builder_.SetLockTime((uint32_t)chainActive.Tip()->GetMedianTimePast()); } else { CMutableTransaction rawTx(tx_); for (SendManyInputUTXO & t : t_inputs_) { @@ -349,13 +343,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { CTxIn in(COutPoint(txid, vout)); rawTx.vin.push_back(in); } - if (SMART_CHAIN_SYMBOL[0] == 0) - { - if ( !hush_hardfork_active((uint32_t)chainActive.LastTip()->nTime) ) - rawTx.nLockTime = (uint32_t)time(NULL) - 60; // jl777 - else - rawTx.nLockTime = (uint32_t)chainActive.Tip()->GetMedianTimePast(); - } + //rawTx.nLockTime = (uint32_t)chainActive.Tip()->GetMedianTimePast(); tx_ = CTransaction(rawTx); } } @@ -370,8 +358,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { /** - * SCENARIO #0 - * + * SCENARIO #0 (All HUSH and Hush Smart Chains) * Sprout not involved, so we just use the TransactionBuilder and we're done. * We added the transparent inputs to the builder earlier. */ @@ -516,14 +503,11 @@ bool AsyncRPCOperation_sendmany::main_impl() { return true; } - /** - * END SCENARIO #0 - */ - + // END SCENARIO #0 + // No other scenarios, because Hush developers are elite. return false; } - /** * Sign and send a raw transaction. * Raw transaction as hex string should be in object field "rawtxn" @@ -579,7 +563,6 @@ void AsyncRPCOperation_sendmany::sign_send_raw_transaction(UniValue obj) set_result(o); } else { // Test mode does not send the transaction to the network. - CDataStream stream(ParseHex(signedtxn), SER_NETWORK, PROTOCOL_VERSION); CTransaction tx; stream >> tx; @@ -751,9 +734,9 @@ void AsyncRPCOperation_sendmany::add_taddr_change_output_to_tx(CBitcoinAddress * tx_ = CTransaction(rawTx); } -std::array AsyncRPCOperation_sendmany::get_memo_from_hex_string(std::string s) { +std::array AsyncRPCOperation_sendmany::get_memo_from_hex_string(std::string s) { // initialize to default memo (no_memo), see section 5.5 of the protocol spec - std::array memo = {{0xF6}}; + std::array memo = {{0xF6}}; std::vector rawMemo = ParseHex(s.c_str()); @@ -763,21 +746,19 @@ std::array AsyncRPCOperation_sendmany::get_memo_fro throw JSONRPCError(RPC_INVALID_PARAMETER, "Memo must be in hexadecimal format"); } - if (rawMemo.size() > ZC_MEMO_SIZE) { - throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Memo size of %d is too big, maximum allowed is %d", rawMemo.size(), ZC_MEMO_SIZE)); + if (rawMemo.size() > HUSH_MEMO_SIZE) { + throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Memo size of %d is too big, maximum allowed is %d", rawMemo.size(), HUSH_MEMO_SIZE)); } // copy vector into boost array int lenMemo = rawMemo.size(); - for (int i = 0; i < ZC_MEMO_SIZE && i < lenMemo; i++) { + for (int i = 0; i < HUSH_MEMO_SIZE && i < lenMemo; i++) { memo[i] = rawMemo[i]; } return memo; } -/** - * Override getStatus() to append the operation's input parameters to the default status object. - */ +// Override getStatus() to append the operation's input parameters to the default status object. UniValue AsyncRPCOperation_sendmany::getStatus() const { UniValue v = AsyncRPCOperation::getStatus(); if (contextinfo_.isNull()) { diff --git a/src/wallet/asyncrpcoperation_sendmany.h b/src/wallet/asyncrpcoperation_sendmany.h index a789749bd..a524c970c 100644 --- a/src/wallet/asyncrpcoperation_sendmany.h +++ b/src/wallet/asyncrpcoperation_sendmany.h @@ -112,7 +112,7 @@ private: void add_taddr_outputs_to_tx(); bool find_unspent_notes(); bool find_utxos(bool fAcceptCoinbase); - std::array get_memo_from_hex_string(std::string s); + std::array get_memo_from_hex_string(std::string s); bool main_impl(); void sign_send_raw_transaction(UniValue obj); // throws exception if there was an error @@ -152,7 +152,7 @@ public: return delegate->find_utxos(fAcceptCoinbase); } - std::array get_memo_from_hex_string(std::string s) { + std::array get_memo_from_hex_string(std::string s) { return delegate->get_memo_from_hex_string(s); } diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 91addcd93..11c27f5ad 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -64,7 +64,7 @@ const std::string ADDR_TYPE_AMNESIA = "amnesia"; extern int32_t HUSH_INSYNC; uint32_t komodo_segid32(char *coinaddr); int32_t hush_dpowconfs(int32_t height,int32_t numconfs); -int32_t komodo_isnotaryvout(char *coinaddr,uint32_t tiptime); // from ac_private chains only +int32_t hush_isnotaryvout(char *coinaddr,uint32_t tiptime); // from ac_private chains only CBlockIndex *komodo_getblockindex(uint256 hash); extern string randomSietchZaddr(); extern CAmount fConsolidationTxFee; @@ -83,7 +83,7 @@ UniValue z_getoperationstatus_IMPL(const UniValue&, bool); #define PLAN_NAME_MAX 8 #define VALID_PLAN_NAME(x) (strlen(x) <= PLAN_NAME_MAX) -#define THROW_IF_SYNCING(INSYNC) if (INSYNC == 0) { throw runtime_error(strprintf("%s: Chain still syncing at height %d, aborting to prevent linkability analysis!",__FUNCTION__,chainActive.Tip()->GetHeight())); } +#define THROW_IF_SYNCING(INSYNC) if (INSYNC == 0) { throw runtime_error(strprintf("%s: Extreme Privacy! Chain still syncing at height %d, aborting to prevent linkability analysis",__FUNCTION__,chainActive.Tip()->GetHeight())); } int tx_height( const uint256 &hash ); @@ -526,7 +526,7 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) if ( ASSETCHAINS_PRIVATE != 0 && AmountFromValue(params[1]) > 0 ) { - if ( komodo_isnotaryvout((char *)params[0].get_str().c_str(),chainActive.LastTip()->nTime) == 0 ) + if ( hush_isnotaryvout((char *)params[0].get_str().c_str(),chainActive.LastTip()->nTime) == 0 ) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid " + strprintf("%s",komodo_chainname()) + " address"); } @@ -563,10 +563,10 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) #include "hush_defs.h" -#define KOMODO_KVPROTECTED 1 -#define KOMODO_KVBINARY 2 -#define KOMODO_KVDURATION 1440 -#define IGUANA_MAXSCRIPTSIZE 10001 +#define HUSH_KVPROTECTED 1 +#define HUSH_KVBINARY 2 +#define HUSH_KVDURATION 1440 +#define DRAGON_MAXSCRIPTSIZE 10001 uint64_t PAX_fiatdest(uint64_t *seedp,int32_t tokomodo,char *destaddr,uint8_t pubkey37[37],char *coinaddr,int32_t height,char *base,int64_t fiatoshis); int32_t komodo_opreturnscript(uint8_t *script,uint8_t type,uint8_t *opret,int32_t opretlen); extern int32_t KOMODO_PAX; @@ -575,7 +575,7 @@ int32_t komodo_is_issuer(); int32_t dragon_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp); int32_t komodo_isrealtime(int32_t *kmdheightp); int32_t pax_fiatstatus(uint64_t *available,uint64_t *deposited,uint64_t *issued,uint64_t *withdrawn,uint64_t *approved,uint64_t *redeemed,char *base); -int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[IGUANA_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen); +int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[DRAGON_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen); int32_t komodo_kvcmp(uint8_t *refvalue,uint16_t refvaluesize,uint8_t *value,uint16_t valuesize); uint64_t komodo_kvfee(uint32_t flags,int32_t opretlen,int32_t keylen); uint256 komodo_kvsig(uint8_t *buf,int32_t len,uint256 privkey); @@ -587,7 +587,7 @@ UniValue kvupdate(const UniValue& params, bool fHelp, const CPubKey& mypk) { static uint256 zeroes; CWalletTx wtx; UniValue ret(UniValue::VOBJ); - uint8_t keyvalue[IGUANA_MAXSCRIPTSIZE*8],opretbuf[IGUANA_MAXSCRIPTSIZE*8]; int32_t i,coresize,haveprivkey,duration,opretlen,height; uint16_t keylen=0,valuesize=0,refvaluesize=0; uint8_t *key,*value=0; uint32_t flags,tmpflags,n; struct komodo_kv *ptr; uint64_t fee; uint256 privkey,pubkey,refpubkey,sig; + uint8_t keyvalue[DRAGON_MAXSCRIPTSIZE*8],opretbuf[DRAGON_MAXSCRIPTSIZE*8]; int32_t i,coresize,haveprivkey,duration,opretlen,height; uint16_t keylen=0,valuesize=0,refvaluesize=0; uint8_t *key,*value=0; uint32_t flags,tmpflags,n; struct komodo_kv *ptr; uint64_t fee; uint256 privkey,pubkey,refpubkey,sig; if (fHelp || params.size() < 3 ) throw runtime_error( "kvupdate key \"value\" days passphrase\n" @@ -651,7 +651,7 @@ UniValue kvupdate(const UniValue& params, bool fHelp, const CPubKey& mypk) memcpy(keyvalue,key,keylen); if ( (refvaluesize= komodo_kvsearch(&refpubkey,chainActive.LastTip()->GetHeight(),&tmpflags,&height,&keyvalue[keylen],key,keylen)) >= 0 ) { - if ( (tmpflags & KOMODO_KVPROTECTED) != 0 ) + if ( (tmpflags & HUSH_KVPROTECTED) != 0 ) { if ( memcmp(&refpubkey,&pubkey,sizeof(refpubkey)) != 0 ) { @@ -678,7 +678,7 @@ UniValue kvupdate(const UniValue& params, bool fHelp, const CPubKey& mypk) if ( memcmp(&zeroes,&refpubkey,sizeof(refpubkey)) != 0 ) ret.push_back(Pair("owner",refpubkey.GetHex())); ret.push_back(Pair("height", (int64_t)height)); - duration = komodo_kvduration(flags); //((flags >> 2) + 1) * KOMODO_KVDURATION; + duration = komodo_kvduration(flags); //((flags >> 2) + 1) * HUSH_KVDURATION; ret.push_back(Pair("expiration", (int64_t)(height+duration))); ret.push_back(Pair("flags",(int64_t)flags)); ret.push_back(Pair("key",params[0].get_str())); @@ -4290,7 +4290,7 @@ UniValue z_viewtransaction(const UniValue& params, bool fHelp, const CPubKey& my " \"outputPrev\" : n, (numeric) the index of the output within the vShieldedOutput\n" " \"address\" : \"zcashaddress\", (string) The Hush shielded address involved in the transaction\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 puposhis\n" " }\n" " ,...\n" " ],\n" @@ -4301,7 +4301,7 @@ UniValue z_viewtransaction(const UniValue& params, bool fHelp, const CPubKey& my " \"address\" : \"hushaddress\", (string) The Hush address involved in the transaction\n" " \"outgoing\" : true|false (boolean) True if the output is not for an address in the wallet\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 puposhis\n" " \"memo\" : \"hexmemo\", (string) Hexademical string representation of the memo field\n" " \"memoStr\" : \"memo\", (string) Only returned if memo contains valid UTF-8 text.\n" " }\n" @@ -4535,12 +4535,6 @@ UniValue z_getoperationstatus_IMPL(const UniValue& params, bool fRemoveFinishedO // JSDescription size depends on the transaction version -#define V3_JS_DESCRIPTION_SIZE (GetSerializeSize(JSDescription(), SER_NETWORK, (OVERWINTER_TX_VERSION | (1 << 31)))) -// Here we define the maximum number of zaddr outputs that can be included in a transaction. -// If input notes are small, we might actually require more than one joinsplit per zaddr output. -// For now though, we assume we use one joinsplit per zaddr output (and the second output note is change). -// We reduce the result by 1 to ensure there is room for non-joinsplit CTransaction data. -#define Z_SENDMANY_MAX_ZADDR_OUTPUTS_BEFORE_SAPLING ((MAX_TX_SIZE_BEFORE_SAPLING / V3_JS_DESCRIPTION_SIZE) - 1) // transaction.h comment: spending taddr output requires CTxIn >= 148 bytes and typical taddr txout is 34 bytes #define CTXIN_SPEND_DUST_SIZE 148 @@ -4557,7 +4551,6 @@ UniValue z_sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk) "\nSend multiple times. Amounts are decimal numbers with at most 8 digits of precision." "\nChange generated from a taddr flows to a new taddr address, while change generated from a zaddr returns to itself." "\nWhen sending coinbase UTXOs to a zaddr, change is not allowed. The entire value of the UTXO(s) must be consumed." - + strprintf("\nBefore Sapling activates, the maximum number of zaddr outputs is %d due to transaction size limits.\n", Z_SENDMANY_MAX_ZADDR_OUTPUTS_BEFORE_SAPLING) + HelpRequiringPassphrase() + "\n" "\nArguments:\n" "1. \"fromaddress\" (string, required) The taddr or zaddr to send the funds from.\n" @@ -4579,11 +4572,12 @@ UniValue z_sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk) LOCK2(cs_main, pwalletMain->cs_wallet); + // Hilarious that Komodo commented this out, opening themselves up to metadata attackz, lulz THROW_IF_SYNCING(HUSH_INSYNC); // Check that the from address is valid. auto fromaddress = params[0].get_str(); - bool fromTaddr = false; + bool fromTaddr = false; bool fromSapling = false; uint32_t branchId = CurrentEpochBranchId(chainActive.Height(), Params().GetConsensus()); @@ -4642,9 +4636,9 @@ UniValue z_sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk) } else { throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, unknown address format: ")+address ); } - } - //else if ( ASSETCHAINS_PRIVATE != 0 && komodo_isnotaryvout((char *)address.c_str()) == 0 ) - // throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "cant use transparent addresses in private chain"); + }// else if ( ASSETCHAINS_PRIVATE != 0 && hush_isnotaryvout((char *)address.c_str()) == 0 ) { + // throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Extreme Privacy! You must send to a zaddr"); + //} // Allowing duplicate receivers helps various HushList protocol operations //if (setAddress.count(address)) @@ -4660,8 +4654,8 @@ UniValue z_sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk) } else if (!IsHex(memo)) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, expected memo data in hexadecimal format."); } - if (memo.length() > ZC_MEMO_SIZE*2) { - throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Invalid parameter, size of memo is larger than maximum allowed %d", ZC_MEMO_SIZE )); + if (memo.length() > HUSH_MEMO_SIZE*2) { + throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Invalid parameter, size of memo is larger than maximum allowed %d", HUSH_MEMO_SIZE )); } } @@ -4733,24 +4727,10 @@ UniValue z_sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk) if (!NetworkUpgradeActive(nextBlockHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING)) { if (NetworkUpgradeActive(nextBlockHeight, Params().GetConsensus(), Consensus::UPGRADE_OVERWINTER)) { mtx.nVersionGroupId = OVERWINTER_VERSION_GROUP_ID; - mtx.nVersion = OVERWINTER_TX_VERSION; + mtx.nVersion = OVERWINTER_TX_VERSION; } else { mtx.fOverwintered = false; - mtx.nVersion = 2; - } - - max_tx_size = MAX_TX_SIZE_BEFORE_SAPLING; - - // Check the number of zaddr outputs does not exceed the limit. - if (zaddrRecipients.size() > Z_SENDMANY_MAX_ZADDR_OUTPUTS_BEFORE_SAPLING) { - throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, too many zaddr outputs"); - } - } - - // If Sapling is not active, do not allow sending from or sending to Sapling addresses. - if (!NetworkUpgradeActive(nextBlockHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING)) { - if (fromSapling || containsSaplingOutput) { - throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, Sapling has not activated"); + mtx.nVersion = 2; } } @@ -4829,13 +4809,9 @@ UniValue z_sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk) boost::optional builder; builder = TransactionBuilder(Params().GetConsensus(), nextBlockHeight, pwalletMain); - // Contextual transaction we will build on - // (used if no Sapling addresses are involved) - CMutableTransaction contextualTx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextBlockHeight); - bool isShielded = !fromTaddr || zaddrRecipients.size() > 0; - if (contextualTx.nVersion == 1 && isShielded) { - contextualTx.nVersion = 2; // Tx format should support vjoinsplits - } + // Contextual transaction + CMutableTransaction contextualTx; // = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextBlockHeight); + contextualTx.nVersion = 2; // Create operation and add to global queue std::shared_ptr q = getAsyncRPCQueue(); @@ -4860,7 +4836,6 @@ When estimating the number of coinbase utxos we can shield in a single transacti 105 + 1 + 3*(73+1) = 328 bytes of scriptSig, rounded up to 400 based on testnet experiments. */ #define CTXIN_SPEND_P2SH_SIZE 400 - #define SHIELD_COINBASE_DEFAULT_LIMIT 50 UniValue z_shieldcoinbase(const UniValue& params, bool fHelp, const CPubKey& mypk) @@ -4876,8 +4851,7 @@ UniValue z_shieldcoinbase(const UniValue& params, bool fHelp, const CPubKey& myp "\ncan be used to return a list of locked utxos. The number of coinbase utxos selected for shielding can be limited" "\nby the caller. If the limit parameter is set to zero, and Overwinter is not yet active, the -mempooltxinputlimit" "\noption will determine the number of uxtos. Any limit is constrained by the consensus rule defining a maximum" - "\ntransaction size of " - + strprintf("%d bytes before Sapling, and %d bytes once Sapling activates.", MAX_TX_SIZE_BEFORE_SAPLING, MAX_TX_SIZE_AFTER_SAPLING) + "\ntransaction size of " + strprintf("%d bytes.", MAX_TX_SIZE_AFTER_SAPLING) + HelpRequiringPassphrase() + "\n" "\nArguments:\n" "1. \"fromaddress\" (string, required) The address is a taddr or \"*\" for all taddrs belonging to the wallet.\n" @@ -4901,6 +4875,7 @@ UniValue z_shieldcoinbase(const UniValue& params, bool fHelp, const CPubKey& myp LOCK2(cs_main, pwalletMain->cs_wallet); + // Hilarious that Komodo commented this out, opening themselves up to metadata attackz, lulz THROW_IF_SYNCING(HUSH_INSYNC); // Validate the from address @@ -4941,27 +4916,12 @@ UniValue z_shieldcoinbase(const UniValue& params, bool fHelp, const CPubKey& myp int nextBlockHeight = chainActive.Height() + 1; bool overwinterActive = NetworkUpgradeActive(nextBlockHeight, Params().GetConsensus(), Consensus::UPGRADE_OVERWINTER); unsigned int max_tx_size = MAX_TX_SIZE_AFTER_SAPLING; - if (!NetworkUpgradeActive(nextBlockHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING)) { - max_tx_size = MAX_TX_SIZE_BEFORE_SAPLING; - } - - // If Sapling is not active, do not allow sending to a Sapling address. - if (!NetworkUpgradeActive(nextBlockHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING)) { - auto res = DecodePaymentAddress(destaddress); - if (IsValidPaymentAddress(res)) { - bool toSapling = boost::get(&res) != nullptr; - if (toSapling) { - throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, Sapling has not activated"); - } - } else { - throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, unknown address format: ") + destaddress ); - } - } // Prepare to get coinbase utxos std::vector inputs; CAmount shieldedValue = 0; CAmount remainingValue = 0; + //TODO: update these estimates size_t estimatedTxSize = 2000; // 1802 joinsplit description + tx overhead + wiggle room #ifdef __LP64__ @@ -5087,9 +5047,7 @@ UniValue z_shieldcoinbase(const UniValue& params, bool fHelp, const CPubKey& myp } #define MERGE_TO_ADDRESS_DEFAULT_TRANSPARENT_LIMIT 50 -#define MERGE_TO_ADDRESS_DEFAULT_SPROUT_LIMIT 10 -#define MERGE_TO_ADDRESS_DEFAULT_SAPLING_LIMIT 90 - +#define MERGE_TO_ADDRESS_DEFAULT_SAPLING_LIMIT 90 #define OUTPUTDESCRIPTION_SIZE GetSerializeSize(OutputDescription(), SER_NETWORK, PROTOCOL_VERSION) #define SPENDDESCRIPTION_SIZE GetSerializeSize(SpendDescription(), SER_NETWORK, PROTOCOL_VERSION) @@ -5099,11 +5057,6 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp return NullUniValue; string enableArg = "zmergetoaddress"; - //auto fEnableMergeToAddress = fExperimentalMode && GetBoolArg("-" + enableArg, true); - //std::string strDisabledMsg = ""; - //if (!fEnableMergeToAddress) { - // strDisabledMsg = experimentalDisabledHelpMsg("z_mergetoaddress", enableArg); - //} if (fHelp || params.size() < 2 || params.size() > 7) throw runtime_error( @@ -5115,8 +5068,6 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp "\n\nThe number of UTXOs and notes selected for merging can be limited by the caller. If the transparent limit" "\nparameter is set to zero, and Overwinter is not yet active, the -mempooltxinputlimit option will determine the" "\nnumber of UTXOs. Any limit is constrained by the consensus rule defining a maximum transaction size of" - + strprintf("\n%d bytes before Sapling, and %d bytes once Sapling activates.", MAX_TX_SIZE_BEFORE_SAPLING, MAX_TX_SIZE_AFTER_SAPLING) - + HelpRequiringPassphrase() + "\n" "\nArguments:\n" "1. fromaddresses (string, required) A JSON array with addresses.\n" " The following special strings are accepted inside the array:\n" @@ -5157,9 +5108,10 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp LOCK2(cs_main, pwalletMain->cs_wallet); + // Hilarious that Komodo commented this out, opening themselves up to metadata attackz, lulz THROW_IF_SYNCING(HUSH_INSYNC); - bool useAnyUTXO = false; + bool useAnyUTXO = false; bool useAnySapling = false; std::set taddrs = {}; std::set zaddrs = {}; @@ -5168,7 +5120,7 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp if (addresses.size()==0) throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, fromaddresses array is empty."); - // Keep track of addresses to spot duplicates + // Keep track of addresses std::set setAddress; // Sources @@ -5208,9 +5160,8 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot specify specific z-addrs when using \"ANY_SAPLING\""); } - const int nextBlockHeight = chainActive.Height() + 1; + const int nextBlockHeight = chainActive.Height() + 1; const bool overwinterActive = NetworkUpgradeActive(nextBlockHeight, Params().GetConsensus(), Consensus::UPGRADE_OVERWINTER); - const bool saplingActive = NetworkUpgradeActive(nextBlockHeight, Params().GetConsensus(), Consensus::UPGRADE_SAPLING); // Validate the destination address auto destaddress = params[1].get_str(); @@ -5221,10 +5172,6 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp if (IsValidPaymentAddress(decodeAddr)) { if (boost::get(&decodeAddr) != nullptr) { isToSaplingZaddr = true; - // If Sapling is not active, do not allow sending to a sapling addresses. - if (!saplingActive) { - throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, Sapling has not activated"); - } } else { throw JSONRPCError(RPC_INVALID_PARAMETER, "Only Sapling zaddrs allowed!"); } @@ -5233,7 +5180,7 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp } } - // Convert fee from currency format to zatoshis + // Convert fee from currency format to puposhis CAmount nFee = SHIELD_COINBASE_DEFAULT_MINERS_FEE; if (params.size() > 2) { if (params[2].get_real() == 0.0) { @@ -5276,10 +5223,11 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp if (!isToSaplingZaddr) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Memo can not be used with a taddr. It can only be used with a zaddr."); } else if (!IsHex(memo)) { + //TODO: this sux, would be nice to accept in utf8 throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, expected memo data in hexadecimal format."); } - if (memo.length() > ZC_MEMO_SIZE*2) { - throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Invalid parameter, size of memo is larger than maximum allowed %d", ZC_MEMO_SIZE )); + if (memo.length() > HUSH_MEMO_SIZE*2) { + throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Invalid parameter, size of memo is larger than maximum allowed %d", HUSH_MEMO_SIZE )); } } @@ -5288,17 +5236,16 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp // Prepare to get UTXOs and notes std::vector utxoInputs; std::vector saplingNoteInputs; - CAmount mergedUTXOValue = 0; - CAmount mergedNoteValue = 0; + CAmount mergedUTXOValue = 0; + CAmount mergedNoteValue = 0; CAmount remainingUTXOValue = 0; CAmount remainingNoteValue = 0; - size_t utxoCounter = 0; - size_t noteCounter = 0; - bool maxedOutUTXOsFlag = false; - bool maxedOutNotesFlag = false; - size_t mempoolLimit = (nUTXOLimit != 0) ? nUTXOLimit : (overwinterActive ? 0 : (size_t)GetArg("-mempooltxinputlimit", 0)); - - unsigned int max_tx_size = saplingActive ? MAX_TX_SIZE_AFTER_SAPLING : MAX_TX_SIZE_BEFORE_SAPLING; + size_t utxoCounter = 0; + size_t noteCounter = 0; + bool maxedOutUTXOsFlag = false; + bool maxedOutNotesFlag = false; + size_t mempoolLimit = (nUTXOLimit != 0) ? nUTXOLimit : (overwinterActive ? 0 : (size_t)GetArg("-mempooltxinputlimit", 0)); + unsigned int max_tx_size = MAX_TX_SIZE_AFTER_SAPLING; size_t estimatedTxSize = 200; // tx overhead + wiggle room if (isToSaplingZaddr) { @@ -5329,8 +5276,7 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp CAmount nValue = out.tx->vout[out.i].nValue; - if (maximum_utxo_size != 0) - { + if (maximum_utxo_size != 0) { //fprintf(stderr, "utxo txid.%s vout.%i nValue.%li scriptpubkeylength.%i\n",out.tx->GetHash().ToString().c_str(),out.i,nValue,out.tx->vout[out.i].scriptPubKey.size()); if (nValue > maximum_utxo_size) continue; @@ -5426,9 +5372,7 @@ UniValue z_mergetoaddress(const UniValue& params, bool fHelp, const CPubKey& myp contextInfo.push_back(Pair("fee", ValueFromAmount(nFee))); // Contextual transaction we will build on - CMutableTransaction contextualTx = CreateNewContextualCMutableTransaction( - Params().GetConsensus(), - nextBlockHeight); + CMutableTransaction contextualTx; //= CreateNewContextualCMutableTransaction( Params().GetConsensus(), nextBlockHeight); // Builder (used if Sapling addresses are involved) boost::optional builder; @@ -5511,7 +5455,7 @@ UniValue z_listoperationids(const UniValue& params, bool fHelp, const CPubKey& m int32_t decode_hex(uint8_t *bytes,int32_t n,char *hex); extern std::string NOTARY_PUBKEY; -int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *pTr) +int32_t hush_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *pTr) { set setAddress; uint8_t *script,utxosig[128]; uint256 utxotxid; uint64_t utxovalue; int32_t i,siglen=0,nMinDepth = 0,nMaxDepth = 9999999; vector vecOutputs; uint32_t utxovout,eligible,earliest = 0; CScript best_scriptPubKey; bool fNegative,fOverflow; bool signSuccess; SignatureData sigdata; uint64_t txfee; uint8_t *ptr; @@ -5612,8 +5556,7 @@ int32_t komodo_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void * #include "../cc/CCPayments.h" #include "../cc/CCPegs.h" -int32_t ensure_CCrequirements(uint8_t evalcode) -{ +int32_t ensure_CCrequirements(uint8_t evalcode) { CCerror = ""; if ( ASSETCHAINS_CCDISABLES[evalcode] != 0 || (evalcode == EVAL_MARMARA && ASSETCHAINS_MARMARA == 0) ) { @@ -5725,54 +5668,46 @@ UniValue setpubkey(const UniValue& params, bool fHelp, const CPubKey& mypk) " \"R-address\" : \"R address\", (string) The pubkey\n" " }\n" "\nExamples:\n" - + HelpExampleCli("setpubkey", "02f7597468703c1c5c8465dd6d43acaae697df9df30bed21494d193412a1ea193e") - + HelpExampleRpc("setpubkey", "02f7597468703c1c5c8465dd6d43acaae697df9df30bed21494d193412a1ea193e") + + HelpExampleCli("setpubkey", "0420597468703c1c5c8465dd6d43acaae697df9df30bed21494d193412a1ea1987") + + HelpExampleRpc("setpubkey", "0420597468703c1c5c8465dd6d43acaae697df9df30bed21494d193412a1ea1987") ); LOCK2(cs_main, pwalletMain ? &pwalletMain->cs_wallet : NULL); char Raddress[64]; uint8_t pubkey33[33]; - if ( NOTARY_PUBKEY33[0] == 0 ) - { - if (strlen(params[0].get_str().c_str()) == 66) - { + if ( NOTARY_PUBKEY33[0] == 0 ) { + if (strlen(params[0].get_str().c_str()) == 66) { decode_hex(pubkey33,33,(char *)params[0].get_str().c_str()); pubkey2addr((char *)Raddress,(uint8_t *)pubkey33); CBitcoinAddress address(Raddress); bool isValid = address.IsValid(); - if (isValid) - { + if (isValid) { CTxDestination dest = address.Get(); isminetype mine = pwalletMain ? IsMine(*pwalletMain, dest) : ISMINE_NO; - if ( mine == ISMINE_NO ) + if ( mine == ISMINE_NO ) { result.push_back(Pair("WARNING", "privkey for this pubkey is not imported to wallet!")); - else - { + } else { result.push_back(Pair("ismine", "true")); } NOTARY_PUBKEY = params[0].get_str(); decode_hex(NOTARY_PUBKEY33,33,(char *)NOTARY_PUBKEY.c_str()); USE_EXTERNAL_PUBKEY = 1; NOTARY_ADDRESS = address.ToString(); - } - else + } else { result.push_back(Pair("error", "pubkey entered is invalid.")); - } - else + } + } else { result.push_back(Pair("error", "pubkey is wrong length, must be 66 char hex string.")); - } - else - { - if ( NOTARY_ADDRESS.empty() ) - { + } + } else { + if ( NOTARY_ADDRESS.empty() ) { pubkey2addr((char *)Raddress,(uint8_t *)NOTARY_PUBKEY33); NOTARY_ADDRESS.assign(Raddress); } result.push_back(Pair("error", "Can only set pubkey once, to change it you need to restart your daemon.")); } - if ( NOTARY_PUBKEY33[0] != 0 && !NOTARY_ADDRESS.empty() ) - { + if ( NOTARY_PUBKEY33[0] != 0 && !NOTARY_ADDRESS.empty() ) { result.push_back(Pair("address", NOTARY_ADDRESS)); result.push_back(Pair("pubkey", NOTARY_PUBKEY)); } @@ -7443,9 +7378,9 @@ UniValue tokencreate(const UniValue& params, bool fHelp, const CPubKey& mypk) if (params.size() == 4) { nonfungibleData = ParseHex(params[3].get_str()); - if (nonfungibleData.size() > IGUANA_MAXSCRIPTSIZE) // opret limit + if (nonfungibleData.size() > DRAGON_MAXSCRIPTSIZE) // opret limit { - ERR_RESULT("Non-fungible data size must be <= " + std::to_string(IGUANA_MAXSCRIPTSIZE)); + ERR_RESULT("Non-fungible data size must be <= " + std::to_string(DRAGON_MAXSCRIPTSIZE)); return(result); } if( nonfungibleData.empty() ) { diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index d7cb97731..0e03c4d6e 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -347,7 +347,7 @@ struct SaplingNoteEntry SaplingOutPoint op; libzcash::SaplingPaymentAddress address; libzcash::SaplingNote note; - std::array memo; + std::array memo; int confirmations; }; diff --git a/src/zcash/Note.cpp b/src/zcash/Note.cpp index dc8169b81..58279203a 100644 --- a/src/zcash/Note.cpp +++ b/src/zcash/Note.cpp @@ -66,7 +66,7 @@ boost::optional SaplingNote::nullifier(const SaplingFullViewingKey& vk, // Construct and populate SaplingNotePlaintext for a given note and memo. SaplingNotePlaintext::SaplingNotePlaintext( const SaplingNote& note, - std::array memo) : BaseNotePlaintext(note, memo) + std::array memo) : BaseNotePlaintext(note, memo) { d = note.d; rcm = note.r; diff --git a/src/zcash/Note.hpp b/src/zcash/Note.hpp index 5110c7715..617501943 100644 --- a/src/zcash/Note.hpp +++ b/src/zcash/Note.hpp @@ -48,15 +48,15 @@ public: class BaseNotePlaintext { protected: uint64_t value_ = 0; - std::array memo_; + std::array memo_; public: BaseNotePlaintext() {} - BaseNotePlaintext(const BaseNote& note, std::array memo) + BaseNotePlaintext(const BaseNote& note, std::array memo) : value_(note.value()), memo_(memo) {} virtual ~BaseNotePlaintext() {} inline uint64_t value() const { return value_; } - inline const std::array & memo() const { return memo_; } + inline const std::array & memo() const { return memo_; } }; typedef std::pair SaplingNotePlaintextEncryptionResult; @@ -68,7 +68,7 @@ public: SaplingNotePlaintext() {} - SaplingNotePlaintext(const SaplingNote& note, std::array memo); + SaplingNotePlaintext(const SaplingNote& note, std::array memo); static boost::optional decrypt( const SaplingEncCiphertext &ciphertext, diff --git a/src/zcash/Zcash.h b/src/zcash/Zcash.h index a713e45a7..d33de633a 100644 --- a/src/zcash/Zcash.h +++ b/src/zcash/Zcash.h @@ -17,14 +17,14 @@ #define ZC_V_SIZE 8 #define ZC_RHO_SIZE 32 #define ZC_R_SIZE 32 -#define ZC_MEMO_SIZE 512 +#define HUSH_MEMO_SIZE 512 #define ZC_DIVERSIFIER_SIZE 11 #define ZC_JUBJUB_POINT_SIZE 32 #define ZC_JUBJUB_SCALAR_SIZE 32 -#define ZC_NOTEPLAINTEXT_SIZE (ZC_NOTEPLAINTEXT_LEADING + ZC_V_SIZE + ZC_RHO_SIZE + ZC_R_SIZE + ZC_MEMO_SIZE) +#define ZC_NOTEPLAINTEXT_SIZE (ZC_NOTEPLAINTEXT_LEADING + ZC_V_SIZE + ZC_RHO_SIZE + ZC_R_SIZE + HUSH_MEMO_SIZE) -#define ZC_SAPLING_ENCPLAINTEXT_SIZE (ZC_NOTEPLAINTEXT_LEADING + ZC_DIVERSIFIER_SIZE + ZC_V_SIZE + ZC_R_SIZE + ZC_MEMO_SIZE) +#define ZC_SAPLING_ENCPLAINTEXT_SIZE (ZC_NOTEPLAINTEXT_LEADING + ZC_DIVERSIFIER_SIZE + ZC_V_SIZE + ZC_R_SIZE + HUSH_MEMO_SIZE) #define ZC_SAPLING_OUTPLAINTEXT_SIZE (ZC_JUBJUB_POINT_SIZE + ZC_JUBJUB_SCALAR_SIZE) #define ZC_SAPLING_ENCCIPHERTEXT_SIZE (ZC_SAPLING_ENCPLAINTEXT_SIZE + NOTEENCRYPTION_AUTH_BYTES) diff --git a/src/zcbenchmarks.cpp b/src/zcbenchmarks.cpp index 1a630abf6..582b269b3 100644 --- a/src/zcbenchmarks.cpp +++ b/src/zcbenchmarks.cpp @@ -304,7 +304,7 @@ double benchmark_create_sapling_output() auto sk = libzcash::SaplingSpendingKey::random(); auto address = sk.default_address(); - std::array memo; + std::array memo; SaplingNote note(address, GetRand(MAX_MONEY)); libzcash::SaplingNotePlaintext notePlaintext(note, memo); From 676931bc845de0e8ae135c5168ded682fee8f575 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 22:49:20 -0500 Subject: [PATCH 216/277] Movin on up --- src/{komodo_curve25519.h => hush_curve25519.h} | 0 src/{komodo_gateway.h => hush_gateway.h} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{komodo_curve25519.h => hush_curve25519.h} (100%) rename src/{komodo_gateway.h => hush_gateway.h} (100%) diff --git a/src/komodo_curve25519.h b/src/hush_curve25519.h similarity index 100% rename from src/komodo_curve25519.h rename to src/hush_curve25519.h diff --git a/src/komodo_gateway.h b/src/hush_gateway.h similarity index 100% rename from src/komodo_gateway.h rename to src/hush_gateway.h From e3a68dfdfb76ef36b6611efd33641d26e13c368b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 22:49:58 -0500 Subject: [PATCH 217/277] Hush is the extreme future, Komodo is the KYC past --- depends/packages/googlemock.mk | 4 - depends/packages/wolfssl.mk | 1 - src/bitcoind.cpp | 2 +- src/cc/CCinclude.h | 6 +- src/cc/CCutils.cpp | 2 +- src/cc/games/prices.cpp | 6 +- src/cc/gamescc.cpp | 10 +- src/cc/oracles.cpp | 4 +- src/cc/payments.cpp | 2 +- src/cc/pegs.cpp | 4 +- src/cc/rewards.cpp | 2 +- src/cc/rogue_rpc.cpp | 10 +- src/cc/sudoku.cpp | 4 +- src/hush.h | 14 +-- src/hush/utiltls.h | 3 +- src/hush_defs.h | 12 +-- src/hush_gateway.h | 20 ++-- src/hush_globals.h | 2 +- src/hush_notary.h | 4 +- src/komodo_ccdata.h | 4 +- src/komodo_nSPV_fullnode.h | 18 ++-- src/komodo_pax.h | 3 + src/main.cpp | 98 ++----------------- src/miner.cpp | 4 +- src/pow.cpp | 9 +- src/rpc/crosschain.cpp | 6 +- src/rpc/mining.cpp | 4 +- src/rpc/misc.cpp | 14 +-- .../asyncrpcoperation_mergetoaddress.cpp | 2 +- src/wallet/asyncrpcoperation_sendmany.cpp | 2 +- src/wallet/rpcwallet.cpp | 10 +- src/wallet/wallet.cpp | 2 +- src/wallet/walletdb.cpp | 4 +- 33 files changed, 106 insertions(+), 186 deletions(-) diff --git a/depends/packages/googlemock.mk b/depends/packages/googlemock.mk index 2809fdeb7..7230e8958 100644 --- a/depends/packages/googlemock.mk +++ b/depends/packages/googlemock.mk @@ -27,10 +27,6 @@ define $(package)_build_cmds endef endif - - - - define $(package)_stage_cmds $($(package)_install) -D ./make/gmock-all.o $($(package)_staging_dir)$(host_prefix)/lib/libgmock.a && \ cp -a ./include $($(package)_staging_dir)$(host_prefix)/include diff --git a/depends/packages/wolfssl.mk b/depends/packages/wolfssl.mk index 03f323b3a..1b5126c10 100644 --- a/depends/packages/wolfssl.mk +++ b/depends/packages/wolfssl.mk @@ -49,4 +49,3 @@ endef #define $(package)_postprocess_cmds # rm -rf bin share #endef - diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 85bb80c9f..69e5eebcc 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -61,7 +61,7 @@ extern uint64_t ASSETCHAINS_CBOPRET; void hush_passport_iteration(); int32_t hush_longestchain(); void komodo_cbopretupdate(int32_t forceflag); -CBlockIndex *komodo_chainactive(int32_t height); +CBlockIndex *hush_chainactive(int32_t height); void WaitForShutdown(boost::thread_group* threadGroup) { diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index 058ac6fc5..24485d660 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -257,9 +257,9 @@ void CCclearvars(struct CCcontract_info *cp); UniValue CClib(struct CCcontract_info *cp,char *method,char *jsonstr); UniValue CClib_info(struct CCcontract_info *cp); -//CBlockIndex *komodo_blockindex(uint256 hash); //moved to komodo_def.h -//CBlockIndex *komodo_chainactive(int32_t height); //moved to komodo_def.h -//int32_t komodo_blockheight(uint256 hash); //moved to komodo_def.h +//CBlockIndex *hush_blockindex(uint256 hash); //moved to komodo_def.h +//CBlockIndex *hush_chainactive(int32_t height); //moved to komodo_def.h +//int32_t hush_blockheight(uint256 hash); //moved to komodo_def.h //void StartShutdown(); static const uint256 zeroid; //!< null uint256 constant diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index d599ff425..d0e085c85 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -715,7 +715,7 @@ bool komodo_txnotarizedconfirmed(uint256 txid) fprintf(stderr,"komodo_txnotarizedconfirmed no hashBlock for txid %s\n",txid.ToString().c_str()); return(0); } - else if ( (pindex= komodo_blockindex(hashBlock)) == 0 || (txheight= pindex->GetHeight()) <= 0 ) + else if ( (pindex= hush_blockindex(hashBlock)) == 0 || (txheight= pindex->GetHeight()) <= 0 ) { fprintf(stderr,"komodo_txnotarizedconfirmed no txheight.%d %p for txid %s\n",txheight,pindex,txid.ToString().c_str()); return(0); diff --git a/src/cc/games/prices.cpp b/src/cc/games/prices.cpp index cf74b9de4..0269bde65 100644 --- a/src/cc/games/prices.cpp +++ b/src/cc/games/prices.cpp @@ -1,4 +1,6 @@ - +// Copyright (c) 2016-2020 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. * * * @@ -67,7 +69,7 @@ void prices_bardisp(struct prices_bar *bar) int64_t prices_blockinfo(int32_t height,char *acaddr) { std::vector vopret; CBlockIndex *pindex; CBlock block; CTransaction tx,vintx; uint64_t pricebits; char destaddr[64]; uint32_t aveprice=0,timestamp,uprice; uint256 hashBlock; int64_t dist,mindist=(1LL<<60),prizefund = 0; int32_t mini=-1,i,n,vini,numvouts,iter; struct prices_bar refbar; - if ( (pindex= komodo_chainactive(height)) != 0 ) + if ( (pindex= hush_chainactive(height)) != 0 ) { if ( komodo_blockload(block,pindex) == 0 ) { diff --git a/src/cc/gamescc.cpp b/src/cc/gamescc.cpp index a7643e03f..99cdcb128 100644 --- a/src/cc/gamescc.cpp +++ b/src/cc/gamescc.cpp @@ -601,7 +601,7 @@ int32_t games_isvalidgame(struct CCcontract_info *cp,int32_t &gameheight,CTransa if ( (txid == zeroid || myGetTransaction(txid,tx,hashBlock) != 0) && (numvouts= tx.vout.size()) > 1 ) { if ( txid != zeroid ) - gameheight = komodo_blockheight(hashBlock); + gameheight = hush_blockheight(hashBlock); else { txid = tx.GetHash(); @@ -674,7 +674,7 @@ int32_t games_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx { if ( myGetTransaction(txid,tx,hashBlock) != 0 ) { - if ( (pindex= komodo_blockindex(hashBlock)) != 0 ) + if ( (pindex= hush_blockindex(hashBlock)) != 0 ) { if ( pindex->GetHeight() <= gameht+GAMES_MAXKEYSTROKESGAP ) alive++; @@ -857,7 +857,7 @@ int64_t games_buyins(uint256 gametxid,int32_t maxplayers) uint64_t games_gamefields(UniValue &obj,int64_t maxplayers,int64_t buyin,uint256 gametxid,char *mygamesaddr) { CBlockIndex *pindex; int32_t ht,openslots,delay,numplayers; uint256 hashBlock; uint64_t seed=0; char cmd[512]; CTransaction tx; - if ( myGetTransaction(gametxid,tx,hashBlock) != 0 && (pindex= komodo_blockindex(hashBlock)) != 0 ) + if ( myGetTransaction(gametxid,tx,hashBlock) != 0 && (pindex= hush_blockindex(hashBlock)) != 0 ) { ht = pindex->GetHeight(); delay = GAMES_REGISTRATION * (maxplayers > 1); @@ -865,7 +865,7 @@ uint64_t games_gamefields(UniValue &obj,int64_t maxplayers,int64_t buyin,uint256 obj.push_back(Pair("start",ht+delay)); if ( hush_nextheight() > ht+delay ) { - if ( (pindex= komodo_chainactive(ht+delay)) != 0 ) + if ( (pindex= hush_chainactive(ht+delay)) != 0 ) { hashBlock = pindex->GetBlockHash(); obj.push_back(Pair("starthash",hashBlock.ToString())); @@ -1066,7 +1066,7 @@ int32_t games_findbaton(struct CCcontract_info *cp,uint256 &playertxid,gameseven { if ( hashBlock == zeroid ) batonht = hush_nextheight(); - else if ( (pindex= komodo_blockindex(hashBlock)) == 0 ) + else if ( (pindex= hush_blockindex(hashBlock)) == 0 ) return(-4); else batonht = pindex->GetHeight(); batonvalue = batontx.vout[0].nValue; diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index f5b5586a1..f7635c03e 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -903,7 +903,7 @@ UniValue OracleFund(const CPubKey& pk, int64_t txfee,uint256 oracletxid) CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), hush_nextheight()); CTransaction tx; CPubKey mypk,oraclespk; struct CCcontract_info *cp,C; std::string name,desc,format; int32_t numvouts; uint256 hashBlock; - if (GetLatestTimestamp(komodo_currentheight())PUBKEY_SPOOFING_FIX_ACTIVATION && AddMyOraclesFunds(cp,mtx,mypk,oracletxid)!=CC_MARKER_VALUE) + if (GetLatestTimestamp(hush_currentheight())>PUBKEY_SPOOFING_FIX_ACTIVATION && AddMyOraclesFunds(cp,mtx,mypk,oracletxid)!=CC_MARKER_VALUE) CCERR_RESULT("oraclescc",CCLOG_INFO, stream << "error adding inputs from your Oracles CC address, please fund it first with oraclesfund rpc!"); mtx.vout.push_back(CTxOut(txfee,CScript() << ParseHex(HexStr(markerpubkey)) << OP_CHECKSIG)); mtx.vout.push_back(MakeCC1vout(cp->evalcode,txfee,batonpk)); diff --git a/src/cc/payments.cpp b/src/cc/payments.cpp index 4b0a0bc09..405455ee1 100644 --- a/src/cc/payments.cpp +++ b/src/cc/payments.cpp @@ -268,7 +268,7 @@ bool payments_game(int32_t &top, int32_t &bottom) bool payments_lockedblocks(uint256 blockhash,int32_t lockedblocks,int32_t &blocksleft) { int32_t ht = chainActive.Height(); - CBlockIndex* pblockindex = komodo_blockindex(blockhash); + CBlockIndex* pblockindex = hush_blockindex(blockhash); if ( pblockindex == 0 || pblockindex->GetHeight()+lockedblocks > ht) { blocksleft = pblockindex->GetHeight()+lockedblocks - ht; diff --git a/src/cc/pegs.cpp b/src/cc/pegs.cpp index ba098016f..a05e827a0 100644 --- a/src/cc/pegs.cpp +++ b/src/cc/pegs.cpp @@ -104,7 +104,7 @@ extern uint64_t ASSETCHAINS_PEGSCCPARAMS[3]; extern uint8_t DecodeGatewaysBindOpRet(char *depositaddr,const CScript &scriptPubKey,uint256 &tokenid,std::string &coin,int64_t &totalsupply,uint256 &oracletxid,uint8_t &M,uint8_t &N,std::vector &gatewaypubkeys,uint8_t &taddr,uint8_t &prefix,uint8_t &prefix2,uint8_t &wiftype); extern int64_t GetTokenBalance(CPubKey pk, uint256 tokenid); -extern int32_t komodo_currentheight(); +extern int32_t hush_currentheight(); extern int32_t prices_syntheticvec(std::vector &vec, std::vector synthetic); extern int64_t prices_syntheticprice(std::vector vec, int32_t height, int32_t minmax, int16_t leverage); @@ -529,7 +529,7 @@ int64_t PegsGetTokenPrice(uint256 tokenid) { std::vector vexpr; SplitStr(desc, vexpr); - if (prices_syntheticvec(exp, vexpr)>=0 && (price = prices_syntheticprice(exp, komodo_currentheight(), 0, 1))>=0) + if (prices_syntheticvec(exp, vexpr)>=0 && (price = prices_syntheticprice(exp, hush_currentheight(), 0, 1))>=0) return (price); } return (0); diff --git a/src/cc/rewards.cpp b/src/cc/rewards.cpp index 7bb8f31b6..b5c23f3f6 100644 --- a/src/cc/rewards.cpp +++ b/src/cc/rewards.cpp @@ -712,7 +712,7 @@ std::string RewardsUnlock(uint64_t txfee,char *planstr,uint256 fundingtxid,uint2 } if ( amount > txfee ) { - reward = RewardsCalc((int64_t)amount,mtx.vin[0].prevout.hash,(int64_t)APR,(int64_t)minseconds,(int64_t)maxseconds,komodo_chainactive_timestamp()); + reward = RewardsCalc((int64_t)amount,mtx.vin[0].prevout.hash,(int64_t)APR,(int64_t)minseconds,(int64_t)maxseconds,hush_chainactive_timestamp()); if ( scriptPubKey.size() > 0 ) { if ( reward > txfee ) diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index 235bf9abc..dd60ef1a7 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -311,7 +311,7 @@ int32_t rogue_isvalidgame(struct CCcontract_info *cp,int32_t &gameheight,CTransa if ( (txid == zeroid || myGetTransaction(txid,tx,hashBlock) != 0) && (numvouts= tx.vout.size()) > 1 ) { if ( txid != zeroid ) - gameheight = komodo_blockheight(hashBlock); + gameheight = hush_blockheight(hashBlock); else { txid = tx.GetHash(); @@ -613,7 +613,7 @@ int32_t rogue_findbaton(struct CCcontract_info *cp,uint256 &playertxid,char **ke { if ( hashBlock == zeroid ) batonht = hush_nextheight(); - else if ( (pindex= komodo_blockindex(hashBlock)) == 0 ) + else if ( (pindex= hush_blockindex(hashBlock)) == 0 ) return(-4); else batonht = pindex->GetHeight(); batonvalue = batontx.vout[0].nValue; @@ -668,7 +668,7 @@ int32_t rogue_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx { if ( myGetTransaction(txid,tx,hashBlock) != 0 ) { - if ( (pindex= komodo_blockindex(hashBlock)) != 0 ) + if ( (pindex= hush_blockindex(hashBlock)) != 0 ) { if ( pindex->GetHeight() <= gameht+ROGUE_MAXKEYSTROKESGAP ) alive++; @@ -687,7 +687,7 @@ int32_t rogue_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx uint64_t rogue_gamefields(UniValue &obj,int64_t maxplayers,int64_t buyin,uint256 gametxid,char *myrogueaddr) { CBlockIndex *pindex; int32_t ht,openslots,delay,numplayers; uint256 hashBlock; uint64_t seed=0; char cmd[512]; CTransaction tx; - if ( myGetTransaction(gametxid,tx,hashBlock) != 0 && (pindex= komodo_blockindex(hashBlock)) != 0 ) + if ( myGetTransaction(gametxid,tx,hashBlock) != 0 && (pindex= hush_blockindex(hashBlock)) != 0 ) { ht = pindex->GetHeight(); delay = ROGUE_REGISTRATION * (maxplayers > 1); @@ -695,7 +695,7 @@ uint64_t rogue_gamefields(UniValue &obj,int64_t maxplayers,int64_t buyin,uint256 obj.push_back(Pair("start",ht+delay)); if ( hush_nextheight() > ht+delay ) { - if ( (pindex= komodo_chainactive(ht+delay)) != 0 ) + if ( (pindex= hush_chainactive(ht+delay)) != 0 ) { hashBlock = pindex->GetBlockHash(); obj.push_back(Pair("starthash",hashBlock.ToString())); diff --git a/src/cc/sudoku.cpp b/src/cc/sudoku.cpp index ab2996a73..893f14083 100644 --- a/src/cc/sudoku.cpp +++ b/src/cc/sudoku.cpp @@ -2738,7 +2738,7 @@ UniValue sudoku_txidinfo(uint64_t txfee,struct CCcontract_info *cp,cJSON *params if ( sudoku_genopreturndecode(unsolved,tx.vout[numvouts-1].scriptPubKey) == 'G' ) { result.push_back(Pair("result","success")); - if ( (pindex= komodo_blockindex(hashBlock)) != 0 ) + if ( (pindex= hush_blockindex(hashBlock)) != 0 ) result.push_back(Pair("height",pindex->GetHeight())); Getscriptaddress(CCaddr,tx.vout[1].scriptPubKey); result.push_back(Pair("sudokuaddr",CCaddr)); @@ -2790,7 +2790,7 @@ UniValue sudoku_pending(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) if ( sudoku_genopreturndecode(unsolved,tx.vout[numvouts-1].scriptPubKey) == 'G' ) { UniValue obj(UniValue::VOBJ); - if ( (pindex= komodo_blockindex(hashBlock)) != 0 ) + if ( (pindex= hush_blockindex(hashBlock)) != 0 ) obj.push_back(Pair("height",pindex->GetHeight())); obj.push_back(Pair("amount",ValueFromAmount(tx.vout[1].nValue))); obj.push_back(Pair("txid",txid.GetHex())); diff --git a/src/hush.h b/src/hush.h index 380674a7e..fdad77627 100644 --- a/src/hush.h +++ b/src/hush.h @@ -44,15 +44,15 @@ bool check_pprevnotarizedht(); #include "hush_structs.h" #include "hush_globals.h" #include "hush_utils.h" -#include "komodo_curve25519.h" +#include "hush_curve25519.h" #include "komodo_cJSON.c" #include "hush_bitcoind.h" #include "komodo_pax.h" #include "hush_notary.h" -int32_t komodo_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *dest); +int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *dest); #include "komodo_kv.h" -#include "komodo_gateway.h" +#include "hush_gateway.h" #include "komodo_events.h" #include "komodo_ccdata.h" @@ -64,7 +64,7 @@ void hush_currentheight_set(int32_t height) } extern struct NSPV_inforesp NSPV_inforesult; -int32_t komodo_currentheight() +int32_t hush_currentheight() { char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; if ( HUSH_NSPV_SUPERLITE ) @@ -76,7 +76,7 @@ int32_t komodo_currentheight() else return(0); } -int32_t komodo_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *dest) +int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *dest) { static int32_t errs; int32_t func,ht,notarized_height,num,matched=0,MoMdepth; uint256 MoM,notarized_hash,notarized_desttxid; uint8_t pubkeys[64][33]; @@ -222,7 +222,7 @@ int32_t memread(void *dest,int32_t size,uint8_t *filedata,long *fposp,long datal return(-1); } -int32_t komodo_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fposp,long datalen,char *symbol,char *dest) +int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fposp,long datalen,char *symbol,char *dest) { static int32_t errs; int32_t func= -1,ht,notarized_height,MoMdepth,num,matched=0; uint256 MoM,notarized_hash,notarized_desttxid; uint8_t pubkeys[64][33]; long fpos = *fposp; @@ -380,7 +380,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie else { fprintf(stderr,"hush_faststateinit retval.%d\n",retval); - while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 ) + while ( hush_parsestatefile(sp,fp,symbol,dest) >= 0 ) ; } } else fp = fopen(fname,"wb+"); diff --git a/src/hush/utiltls.h b/src/hush/utiltls.h index bb241ca11..c69c82c41 100644 --- a/src/hush/utiltls.h +++ b/src/hush/utiltls.h @@ -1,5 +1,5 @@ -// Copyright (c) 2017 The Zen Core developers // Copyright (c) 2016-2020 The Hush developers +// Copyright (c) 2017 The Zen Core developers // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html @@ -11,7 +11,6 @@ namespace hush { #define CERT_VALIDITY_DAYS (365 * 10) // period of validity, in days, for a self-signed certificate WOLFSSL_EVP_PKEY* GenerateEcKey(int nid = NID_X9_62_prime256v1); - WOLFSSL_X509* GenerateCertificate(WOLFSSL_EVP_PKEY *keypair); } diff --git a/src/hush_defs.h b/src/hush_defs.h index 0ac0eeff2..9f394d132 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -548,7 +548,7 @@ char *bitcoin_address(char *coinaddr,uint8_t addrtype,uint8_t *pubkey_or_rmd160, int32_t komodo_minerids(uint8_t *minerids,int32_t height,int32_t width); int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *flagsp,int32_t *heightp,uint8_t value[DRAGON_MAXSCRIPTSIZE],uint8_t *key,int32_t keylen); -uint32_t komodo_blocktime(uint256 hash); +uint32_t hush_blocktime(uint256 hash); int32_t hush_longestchain(); int32_t hush_dpowconfs(int32_t height,int32_t numconfs); int8_t komodo_segid(int32_t nocache,int32_t height); @@ -562,7 +562,7 @@ int32_t hush_nextheight(); uint32_t komodo_heightstamp(int32_t height); int64_t komodo_pricemult(int32_t ind); int32_t komodo_priceget(int64_t *buf64,int32_t ind,int32_t height,int32_t numblocks); -int32_t komodo_currentheight(); +int32_t hush_currentheight(); int32_t komodo_notarized_bracket(struct notarized_checkpoint *nps[2],int32_t height); arith_uint256 komodo_adaptivepow_target(int32_t height,arith_uint256 bnTarget,uint32_t nTime); bool hush_hardfork_active(uint32_t time); @@ -571,12 +571,12 @@ uint256 Parseuint256(const char *hexstr); void komodo_sendmessage(int32_t minpeers, int32_t maxpeers, const char *message, std::vector payload); CBlockIndex *komodo_getblockindex(uint256 hash); int32_t hush_nextheight(); -CBlockIndex *komodo_blockindex(uint256 hash); -CBlockIndex *komodo_chainactive(int32_t height); -int32_t komodo_blockheight(uint256 hash); +CBlockIndex *hush_blockindex(uint256 hash); +CBlockIndex *hush_chainactive(int32_t height); +int32_t hush_blockheight(uint256 hash); bool komodo_txnotarizedconfirmed(uint256 txid); int32_t komodo_blockload(CBlock& block, CBlockIndex *pindex); -uint32_t komodo_chainactive_timestamp(); +uint32_t hush_chainactive_timestamp(); uint32_t GetLatestTimestamp(int32_t height); #ifndef HUSH_NSPV_FULLNODE diff --git a/src/hush_gateway.h b/src/hush_gateway.h index 5df5d3bf5..4b8a9ce06 100644 --- a/src/hush_gateway.h +++ b/src/hush_gateway.h @@ -1153,7 +1153,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 return(typestr); } -int32_t komodo_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fposp,long datalen,char *symbol,char *dest); +int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fposp,long datalen,char *symbol,char *dest); void hush_stateind_set(struct hush_state *sp,uint32_t *inds,int32_t n,uint8_t *filedata,long datalen,char *symbol,char *dest) { @@ -1232,7 +1232,7 @@ void hush_stateind_set(struct hush_state *sp,uint32_t *inds,int32_t n,uint8_t *f if ( doissue != 0 ) { //printf("issue %c total.%d lastfpos.%ld\n",func,count,lastfpos); - komodo_parsestatefiledata(sp,filedata,&lastfpos,datalen,symbol,dest); + hush_parsestatefiledata(sp,filedata,&lastfpos,datalen,symbol,dest); count++; } } @@ -1373,7 +1373,7 @@ int32_t hush_faststateinit(struct hush_state *sp,char *fname,char *symbol,char * if ( (indfp= fopen(indfname,"wb")) != 0 ) fwrite(&prevpos100,1,sizeof(prevpos100),indfp), indcounter++; fprintf(stderr,"processing %s %ldKB, validated.%ld\n",fname,datalen/1024,validated); - while ( (func= komodo_parsestatefiledata(sp,filedata,&fpos,datalen,symbol,dest)) >= 0 ) + while ( (func= hush_parsestatefiledata(sp,filedata,&fpos,datalen,symbol,dest)) >= 0 ) { lastfpos = komodo_indfile_update(indfp,&prevpos100,lastfpos,fpos,func,&indcounter); } @@ -1398,7 +1398,7 @@ int32_t hush_faststateinit(struct hush_state *sp,char *fname,char *symbol,char * fseek(indfp,indcounter * sizeof(uint32_t),SEEK_SET); if ( ftell(indfp) == indcounter * sizeof(uint32_t) ) { - while ( (func= komodo_parsestatefiledata(sp,filedata,&fpos,datalen,symbol,dest)) >= 0 ) + while ( (func= hush_parsestatefiledata(sp,filedata,&fpos,datalen,symbol,dest)) >= 0 ) { lastfpos = komodo_indfile_update(indfp,&prevpos100,lastfpos,fpos,func,&indcounter); if ( lastfpos != fpos ) @@ -1433,9 +1433,9 @@ void hush_passport_iteration() fprintf(stderr,"[%s] PASSPORT iteration waiting for HUSH_INITDONE\n",SMART_CHAIN_SYMBOL); sleep(3); } - if ( komodo_chainactive_timestamp() > lastinterest ) + if ( hush_chainactive_timestamp() > lastinterest ) { - lastinterest = komodo_chainactive_timestamp(); + lastinterest = hush_chainactive_timestamp(); } refsp = hush_stateptr(symbol,dest); if ( SMART_CHAIN_SYMBOL[0] == 0 || strcmp(SMART_CHAIN_SYMBOL,"JUSTLIES") == 0 ) @@ -1476,7 +1476,7 @@ void hush_passport_iteration() { fpos = 0; fprintf(stderr,"%s processing %s %ldKB\n",SMART_CHAIN_SYMBOL,fname,datalen/1024); - while ( komodo_parsestatefiledata(sp,filedata,&fpos,datalen,symbol,dest) >= 0 ) + while ( hush_parsestatefiledata(sp,filedata,&fpos,datalen,symbol,dest) >= 0 ) lastfpos = fpos; fprintf(stderr,"%s took %d seconds to process %s %ldKB\n",SMART_CHAIN_SYMBOL,(int32_t)(time(NULL)-starttime),fname,datalen/1024); lastpos[baseid] = lastfpos; @@ -1492,7 +1492,7 @@ void hush_passport_iteration() if ( SMART_CHAIN_SYMBOL[0] != 0 ) printf("%s passport refid.%d %s fname.(%s) base.%s %ld %ld\n",SMART_CHAIN_SYMBOL,refid,symbol,fname,base,ftell(fp),lastpos[baseid]); fseek(fp,lastpos[baseid],SEEK_SET); - while ( komodo_parsestatefile(sp,fp,symbol,dest) >= 0 && n < limit ) + while ( hush_parsestatefile(sp,fp,symbol,dest) >= 0 && n < limit ) { if ( n == limit-1 ) { @@ -1628,7 +1628,7 @@ int32_t komodo_heightpricebits(uint64_t *seedp,uint32_t *heightbits,int32_t nHei CBlockIndex *pindex; CBlock block; if ( seedp != 0 ) *seedp = 0; - if ( (pindex= komodo_chainactive(nHeight)) != 0 ) + if ( (pindex= hush_chainactive(nHeight)) != 0 ) { if ( komodo_blockload(block,pindex) == 0 ) { @@ -2306,7 +2306,7 @@ void komodo_cbopretupdate(int32_t forceflag) if ( (ExtremePrice.dir > 0 && PriceCache[0][ExtremePrice.ind] >= ExtremePrice.pricebits) || (ExtremePrice.dir < 0 && PriceCache[0][ExtremePrice.ind] <= ExtremePrice.pricebits) ) { fprintf(stderr,"future price is close enough to allow approving previously rejected block ind.%d %u vs %u\n",ExtremePrice.ind,PriceCache[0][ExtremePrice.ind],ExtremePrice.pricebits); - if ( (pindex= komodo_blockindex(ExtremePrice.blockhash)) != 0 ) + if ( (pindex= hush_blockindex(ExtremePrice.blockhash)) != 0 ) pindex->nStatus &= ~BLOCK_FAILED_MASK; else fprintf(stderr,"couldnt find block.%s\n",ExtremePrice.blockhash.GetHex().c_str()); } diff --git a/src/hush_globals.h b/src/hush_globals.h index cc86e50b2..a9850370b 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -21,7 +21,7 @@ void komodo_prefetch(FILE *fp); uint32_t komodo_heightstamp(int32_t height); void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotaries,uint8_t notaryid,uint256 txhash,uint64_t voutmask,uint8_t numvouts,uint32_t *pvals,uint8_t numpvals,int32_t kheight,uint32_t ktime,uint64_t opretvalue,uint8_t *opretbuf,uint16_t opretlen,uint16_t vout,uint256 MoM,int32_t MoMdepth); void komodo_init(int32_t height); -int32_t komodo_MoMdata(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip); +int32_t hush_MoMdata(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip); int32_t komodo_notarizeddata(int32_t nHeight,uint256 *notarized_hashp,uint256 *notarized_desttxidp); char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port); void komodo_init(int32_t height); diff --git a/src/hush_notary.h b/src/hush_notary.h index b48537f2b..58f6646b7 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -298,7 +298,7 @@ int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *tx if ( (sp= hush_stateptr(symbol,dest)) != 0 ) { CBlockIndex *pindex; - if ( (pindex= komodo_blockindex(sp->NOTARIZED_HASH)) == 0 || pindex->GetHeight() < 0 ) + if ( (pindex= hush_blockindex(sp->NOTARIZED_HASH)) == 0 || pindex->GetHeight() < 0 ) { //fprintf(stderr,"found orphaned notarization at ht.%d pindex.%p\n",sp->NOTARIZED_HEIGHT,(void *)pindex); memset(&sp->NOTARIZED_HASH,0,sizeof(sp->NOTARIZED_HASH)); @@ -334,7 +334,7 @@ int32_t hush_dpowconfs(int32_t txheight,int32_t numconfs) return(numconfs); } -int32_t komodo_MoMdata(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t height,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip) +int32_t hush_MoMdata(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t height,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip) { struct notarized_checkpoint *np = 0; if ( (np= komodo_npptr(height)) != 0 ) diff --git a/src/komodo_ccdata.h b/src/komodo_ccdata.h index c1755314f..aa64da448 100644 --- a/src/komodo_ccdata.h +++ b/src/komodo_ccdata.h @@ -33,7 +33,7 @@ uint256 komodo_calcMoM(int32_t height,int32_t MoMdepth) return(zero); for (i=0; ihashMerkleRoot); else return(zero); @@ -100,7 +100,7 @@ int32_t komodo_addpair(struct komodo_ccdataMoMoM *mdata,int32_t notarized_height return(maxpairs); } -int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height) +int32_t hush_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height) { uint8_t hexdata[8192]; struct komodo_ccdata *ccdata,*tmpptr; int32_t len,maxpairs,i,retval=-1,depth,starti,endi,CCid=0; struct komodo_ccdata_entry *allMoMs; starti = endi = depth = len = maxpairs = 0; diff --git a/src/komodo_nSPV_fullnode.h b/src/komodo_nSPV_fullnode.h index cb7cc5acf..362b9cfad 100644 --- a/src/komodo_nSPV_fullnode.h +++ b/src/komodo_nSPV_fullnode.h @@ -83,7 +83,7 @@ int32_t NSPV_ntzextract(struct NSPV_ntz *ptr,uint256 ntztxid,int32_t txidht,uint ptr->txidheight = txidht; ptr->othertxid = desttxid; ptr->txid = ntztxid; - if ( (pindex= komodo_chainactive(ptr->txidheight)) != 0 ) + if ( (pindex= hush_chainactive(ptr->txidheight)) != 0 ) ptr->timestamp = pindex->nTime; return(0); } @@ -113,7 +113,7 @@ int32_t NSPV_getntzsresp(struct NSPV_ntzsresp *ptr,int32_t origreqheight) int32_t NSPV_setequihdr(struct NSPV_equihdr *hdr,int32_t height) { CBlockIndex *pindex; - if ( (pindex= komodo_chainactive(height)) != 0 ) + if ( (pindex= hush_chainactive(height)) != 0 ) { hdr->nVersion = pindex->nVersion; if ( pindex->pprev == 0 ) @@ -141,7 +141,7 @@ int32_t NSPV_getinfo(struct NSPV_inforesp *ptr,int32_t reqheight) if ( NSPV_getntzsresp(&pair,ptr->height-1) < 0 ) return(-1); ptr->notarization = pair.prevntz; - if ( (pindex2= komodo_chainactive(ptr->notarization.txidheight)) != 0 ) + if ( (pindex2= hush_chainactive(ptr->notarization.txidheight)) != 0 ) ptr->notarization.timestamp = pindex->nTime; //fprintf(stderr, "timestamp.%i\n", ptr->notarization.timestamp ); if ( reqheight == 0 ) @@ -761,11 +761,11 @@ int32_t NSPV_gettxproof(struct NSPV_txproof *ptr,int32_t vout,uint256 txid,int32 ptr->vout = vout; ptr->hashblock = hashBlock; if ( height == 0 ) - ptr->height = komodo_blockheight(hashBlock); + ptr->height = hush_blockheight(hashBlock); else { ptr->height = height; - if ( (pindex= komodo_chainactive(height)) != 0 && komodo_blockload(block,pindex) == 0 ) + if ( (pindex= hush_chainactive(height)) != 0 && komodo_blockload(block,pindex) == 0 ) { BOOST_FOREACH(const CTransaction&tx, block.vtx) { @@ -804,18 +804,18 @@ int32_t NSPV_getntzsproofresp(struct NSPV_ntzsproofresp *ptr,uint256 prevntztxid int32_t i; uint256 hashBlock,bhash0,bhash1,desttxid0,desttxid1; CTransaction tx; ptr->prevtxid = prevntztxid; ptr->prevntz = NSPV_getrawtx(tx,hashBlock,&ptr->prevtxlen,ptr->prevtxid); - ptr->prevtxidht = komodo_blockheight(hashBlock); + ptr->prevtxidht = hush_blockheight(hashBlock); if ( NSPV_notarizationextract(0,&ptr->common.prevht,&bhash0,&desttxid0,tx) < 0 ) return(-2); - else if ( komodo_blockheight(bhash0) != ptr->common.prevht ) + else if ( hush_blockheight(bhash0) != ptr->common.prevht ) return(-3); ptr->nexttxid = nextntztxid; ptr->nextntz = NSPV_getrawtx(tx,hashBlock,&ptr->nexttxlen,ptr->nexttxid); - ptr->nexttxidht = komodo_blockheight(hashBlock); + ptr->nexttxidht = hush_blockheight(hashBlock); if ( NSPV_notarizationextract(0,&ptr->common.nextht,&bhash1,&desttxid1,tx) < 0 ) return(-5); - else if ( komodo_blockheight(bhash1) != ptr->common.nextht ) + else if ( hush_blockheight(bhash1) != ptr->common.nextht ) return(-6); else if ( ptr->common.prevht > ptr->common.nextht || (ptr->common.nextht - ptr->common.prevht) > 1440 ) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 0ca6d6e92..0ec408c45 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/main.cpp b/src/main.cpp index 28cfcf1e9..ea5e9d9b5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -75,7 +75,7 @@ CCriticalSection cs_main; extern uint8_t NOTARY_PUBKEY33[33]; extern int32_t HUSH_LOADINGBLOCKS,HUSH_LONGESTCHAIN,HUSH_INSYNC,HUSH_CONNECTING,HUSH_EXTRASATOSHI; int32_t HUSH_NEWBLOCKS; -int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block); +int32_t hush_block2pubkey33(uint8_t *pubkey33,CBlock *block); //void komodo_broadcast(CBlock *pblock,int32_t limit); bool Getscriptaddress(char *destaddr,const CScript &scriptPubKey); void hush_setactivation(int32_t height); @@ -697,7 +697,7 @@ bool komodo_dailysnapshot(int32_t height) { //fprintf(stderr, "undoing block.%i\n",n); CBlockIndex *pindex; CBlock block; - if ( (pindex= komodo_chainactive(n)) == 0 || komodo_blockload(block, pindex) != 0 ) + if ( (pindex= hush_chainactive(n)) == 0 || komodo_blockload(block, pindex) != 0 ) return false; // undo transactions in reverse order for (int32_t i = block.vtx.size() - 1; i >= 0; i--) @@ -1421,6 +1421,7 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio } } + //TODO: desprout // Transactions containing empty `vin` must have either non-empty // `vjoinsplit` or non-empty `vShieldedSpend`. if (tx.vin.empty() && tx.vjoinsplit.empty() && tx.vShieldedSpend.empty()) @@ -1508,57 +1509,6 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio } } - // Ensure that joinsplit values are well-formed - BOOST_FOREACH(const JSDescription& joinsplit, tx.vjoinsplit) - { - if ( acpublic != 0 ) - { - return state.DoS(100, error("CheckTransaction(): this is a public chain, no privacy allowed"), - REJECT_INVALID, "bad-txns-acpublic-chain"); - } - if ( tiptime >= KOMODO_SAPLING_DEADLINE ) - { - return state.DoS(100, error("CheckTransaction(): no more sprout after deadline"), - REJECT_INVALID, "bad-txns-sprout-expired"); - } - if (joinsplit.vpub_old < 0) { - return state.DoS(100, error("CheckTransaction(): joinsplit.vpub_old negative"), - REJECT_INVALID, "bad-txns-vpub_old-negative"); - } - - if (joinsplit.vpub_new < 0) { - return state.DoS(100, error("CheckTransaction(): joinsplit.vpub_new negative"), - REJECT_INVALID, "bad-txns-vpub_new-negative"); - } - - if (joinsplit.vpub_old > MAX_MONEY) { - return state.DoS(100, error("CheckTransaction(): joinsplit.vpub_old too high"), - REJECT_INVALID, "bad-txns-vpub_old-toolarge"); - } - - if (joinsplit.vpub_new > MAX_MONEY) { - return state.DoS(100, error("CheckTransaction(): joinsplit.vpub_new too high"), - REJECT_INVALID, "bad-txns-vpub_new-toolarge"); - } - - if (joinsplit.vpub_new != 0 && joinsplit.vpub_old != 0) { - return state.DoS(100, error("CheckTransaction(): joinsplit.vpub_new and joinsplit.vpub_old both nonzero"), - REJECT_INVALID, "bad-txns-vpubs-both-nonzero"); - } - - nValueOut += joinsplit.vpub_old; - if (!MoneyRange(nValueOut)) { - return state.DoS(100, error("CheckTransaction(): txout total out of range"), - REJECT_INVALID, "bad-txns-txouttotal-toolarge"); - } - if ( joinsplit.vpub_new == 0 && joinsplit.vpub_old == 0 ) - z_z++; - else if ( joinsplit.vpub_new == 0 && joinsplit.vpub_old != 0 ) - t_z++; - else if ( joinsplit.vpub_new != 0 && joinsplit.vpub_old == 0 ) - z_t++; - } - if ( ASSETCHAINS_PRIVATE != 0 && invalid_private_taddr != 0 ) { static uint32_t counter; @@ -1591,15 +1541,6 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio // to the value pool. { CAmount nValueIn = 0; - for (std::vector::const_iterator it(tx.vjoinsplit.begin()); it != tx.vjoinsplit.end(); ++it) - { - nValueIn += it->vpub_new; - - if (!MoneyRange(it->vpub_new) || !MoneyRange(nValueIn)) { - return state.DoS(100, error("CheckTransaction(): txin total out of range"), - REJECT_INVALID, "bad-txns-txintotal-toolarge"); - } - } // Also check for Sapling if (tx.valueBalance >= 0) { @@ -1623,22 +1564,6 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio vInOutPoints.insert(txin.prevout); } - // Check for duplicate joinsplit nullifiers in this transaction - { - set vJoinSplitNullifiers; - BOOST_FOREACH(const JSDescription& joinsplit, tx.vjoinsplit) - { - BOOST_FOREACH(const uint256& nf, joinsplit.nullifiers) - { - if (vJoinSplitNullifiers.count(nf)) - return state.DoS(100, error("CheckTransaction(): duplicate nullifiers"), - REJECT_INVALID, "bad-joinsplits-nullifiers-duplicate"); - - vJoinSplitNullifiers.insert(nf); - } - } - } - // Check for duplicate sapling nullifiers in this transaction { set vSaplingNullifiers; @@ -1652,8 +1577,7 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio } } - if (tx.IsMint()) - { + if (tx.IsMint()) { // There should be no joinsplits in a coinbase transaction if (tx.vjoinsplit.size() > 0) return state.DoS(100, error("CheckTransaction(): coinbase has joinsplits"), @@ -1670,9 +1594,7 @@ bool CheckTransactionWithoutProofVerification(uint32_t tiptime,const CTransactio if (tx.vin[0].scriptSig.size() < 2 || tx.vin[0].scriptSig.size() > 100) return state.DoS(100, error("CheckTransaction(): coinbase script size"), REJECT_INVALID, "bad-cb-length"); - } - else - { + } else { BOOST_FOREACH(const CTxIn& txin, tx.vin) if (txin.prevout.IsNull()) return state.DoS(10, error("CheckTransaction(): prevout is null"), @@ -2310,7 +2232,7 @@ bool ReadBlockFromDisk(int32_t height,CBlock& block, const CDiskBlockPos& pos,bo // Check the header if ( 0 && checkPOW != 0 ) { - komodo_block2pubkey33(pubkey33,(CBlock *)&block); + hush_block2pubkey33(pubkey33,(CBlock *)&block); if (!(CheckEquihashSolution(&block, Params()) && CheckProofOfWork(block, pubkey33, height, Params().GetConsensus()))) { int32_t i; for (i=0; i<33; i++) @@ -5035,7 +4957,7 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C { //if ( !CheckEquihashSolution(&block, Params()) ) // return state.DoS(100, error("CheckBlock: Equihash solution invalid"),REJECT_INVALID, "invalid-solution"); - komodo_block2pubkey33(pubkey33,(CBlock *)&block); + hush_block2pubkey33(pubkey33,(CBlock *)&block); if ( !CheckProofOfWork(block,pubkey33,height,Params().GetConsensus()) ) { int32_t z; for (z=31; z>=0; z--) @@ -5474,7 +5396,7 @@ bool AcceptBlock(int32_t *futureblockp,CBlock& block, CValidationState& state, C CValidationState tmpstate; CBlockIndex *tmpindex; int32_t ht,longest; ht = (int32_t)pindex->GetHeight(); longest = hush_longestchain(); - if ( (longest == 0 || ht < longest-6) && (tmpindex=komodo_chainactive(ht)) != 0 ) + if ( (longest == 0 || ht < longest-6) && (tmpindex=hush_chainactive(ht)) != 0 ) { fprintf(stderr,"reconsider height.%d, longest.%d\n",(int32_t)ht,longest); if ( Queued_reconsiderblock == zeroid ) @@ -6542,8 +6464,8 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) nLoaded++; if (state.IsError()) break; - } else if (hash != chainparams.GetConsensus().hashGenesisBlock && komodo_blockheight(hash) % 1000 == 0) { - LogPrintf("Block Import: already had block %s at height %d\n", hash.ToString(), komodo_blockheight(hash)); + } else if (hash != chainparams.GetConsensus().hashGenesisBlock && hush_blockheight(hash) % 1000 == 0) { + LogPrintf("Block Import: already had block %s at height %d\n", hash.ToString(), hush_blockheight(hash)); } // Recursively process earlier encountered successors of this block diff --git a/src/miner.cpp b/src/miner.cpp index bc78a2bc7..c145eac7b 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -144,7 +144,7 @@ int64_t komodo_block_unlocktime(uint32_t nHeight); uint64_t the_commission(const CBlock *block,int32_t height); int32_t hush_notaryvin(CMutableTransaction &txNew,uint8_t *notarypub33, void *ptr); int32_t decode_hex(uint8_t *bytes,int32_t n,char *hex); -int32_t komodo_is_notarytx(const CTransaction& tx); +int32_t hush_is_notarytx(const CTransaction& tx); uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &NotarizationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len); int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); int32_t komodo_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *script, int32_t len); @@ -303,7 +303,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 } else { TMP_NotarizationNotaries.clear(); bool fToCryptoAddress = false; - if ( numSN != 0 && notarypubkeys[0][0] != 0 && komodo_is_notarytx(tx) == 1 ) + if ( numSN != 0 && notarypubkeys[0][0] != 0 && hush_is_notarytx(tx) == 1 ) fToCryptoAddress = true; BOOST_FOREACH(const CTxIn& txin, tx.vin) diff --git a/src/pow.cpp b/src/pow.cpp index 032ca29fe..0eb73d397 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -32,7 +32,7 @@ #ifdef ENABLE_RUST #include "librustzcash.h" #endif // ENABLE_RUST -uint32_t komodo_chainactive_timestamp(); +uint32_t hush_chainactive_timestamp(); #include "hush_defs.h" @@ -674,8 +674,7 @@ bool CheckEquihashSolution(const CBlockHeader *pblock, const CChainParams& param } int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,uint32_t timestamp); -int32_t komodo_is_special(uint8_t pubkeys[66][33],int32_t mids[66],uint32_t blocktimes[66],int32_t height,uint8_t pubkey33[33],uint32_t blocktime); -int32_t komodo_currentheight(); +int32_t hush_currentheight(); void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height); bool komodo_checkopret(CBlock *pblock, CScript &merkleroot); CScript komodo_makeopret(CBlock *pblock, bool fNew); @@ -699,10 +698,10 @@ bool CheckProofOfWork(const CBlockHeader &blkHeader, uint8_t *pubkey33, int32_t //fprintf(stderr," checkpow\n"); memcpy(origpubkey33,pubkey33,33); memset(blocktimes,0,sizeof(blocktimes)); - tiptime = komodo_chainactive_timestamp(); + tiptime = hush_chainactive_timestamp(); bnTarget.SetCompact(blkHeader.nBits, &fNegative, &fOverflow); if ( height == 0 ) { - height = komodo_currentheight() + 1; + height = hush_currentheight() + 1; //fprintf(stderr,"set height to %d\n",height); } arith_uint256 bnLimit = (height <= 1 || ASSETCHAINS_ALGO == ASSETCHAINS_EQUIHASH) ? UintToArith256(params.powLimit) : UintToArith256(params.powAlternate); diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index cdb45fcf4..2155c4d58 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -56,8 +56,8 @@ int32_t ensure_CCrequirements(uint8_t evalcode); bool EnsureWalletIsAvailable(bool avoidException); -int32_t komodo_MoM(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip); -int32_t komodo_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height); +int32_t hush_MoM(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip); +int32_t hush_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height); struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t kmdstarti,int32_t kmdendi); uint256 komodo_calcMoM(int32_t height,int32_t MoMdepth); int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); @@ -108,7 +108,7 @@ UniValue height_MoM(const UniValue& params, bool fHelp, const CPubKey& mypk) height = chainActive.Tip()->GetHeight(); } //fprintf(stderr,"height_MoM height.%d\n",height); - depth = komodo_MoM(¬arized_height,&MoM,&kmdtxid,height,&MoMoM,&MoMoMoffset,&MoMoMdepth,&kmdstarti,&kmdendi); + depth = hush_MoM(¬arized_height,&MoM,&kmdtxid,height,&MoMoM,&MoMoMoffset,&MoMoMdepth,&kmdstarti,&kmdendi); ret.push_back(Pair("coin",(char *)(SMART_CHAIN_SYMBOL[0] == 0 ? "HUSH" : SMART_CHAIN_SYMBOL))); ret.push_back(Pair("height",height)); ret.push_back(Pair("timestamp",(uint64_t)timestamp)); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index ecfc4cb7d..5e9120491 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -377,7 +377,7 @@ UniValue setgenerate(const UniValue& params, bool fHelp, const CPubKey& mypk) } #endif -CBlockIndex *komodo_chainactive(int32_t height); +CBlockIndex *hush_chainactive(int32_t height); arith_uint256 zawy_ctB(arith_uint256 bnTarget,uint32_t solvetime); UniValue genminingCSV(const UniValue& params, bool fHelp, const CPubKey& mypk) @@ -393,7 +393,7 @@ UniValue genminingCSV(const UniValue& params, bool fHelp, const CPubKey& mypk) height = hush_nextheight(); for (i=0; inBits,&fNegative,&fOverflow); solvetime = (prevtime==0) ? 0 : (int32_t)(pindex->nTime - prevtime); diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 40e3e6dcd..1fa60822c 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -58,13 +58,13 @@ using namespace std; int32_t hush_longestchain(); int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp); bool komodo_txnotarizedconfirmed(uint256 txid); -uint32_t komodo_chainactive_timestamp(); +uint32_t hush_chainactive_timestamp(); int32_t hush_whoami(char *pubkeystr,int32_t height,uint32_t timestamp); extern uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE; extern int32_t KOMODO_LASTMINED,JUMBLR_PAUSE,HUSH_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; uint32_t komodo_segid32(char *coinaddr); -int64_t komodo_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height); +int64_t hush_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height); int32_t notarizedtxid_height(char *dest,char *txidstr,int32_t *hushnotarized_heightp); uint64_t komodo_notarypayamount(int32_t nHeight, int64_t notarycount); int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); @@ -285,7 +285,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) obj.push_back(Pair("errors", GetWarnings("statusbar"))); if ( NOTARY_PUBKEY33[0] != 0 ) { char pubkeystr[65]; int32_t notaryid; std::string notaryname; - if( (notaryid= hush_whoami(pubkeystr,(int32_t)chainActive.LastTip()->GetHeight(),komodo_chainactive_timestamp())) >= 0 ) { + if( (notaryid= hush_whoami(pubkeystr,(int32_t)chainActive.LastTip()->GetHeight(),hush_chainactive_timestamp())) >= 0 ) { obj.push_back(Pair("notaryid", notaryid)); if ( KOMODO_LASTMINED != 0 ) obj.push_back(Pair("lastmined", KOMODO_LASTMINED)); @@ -424,7 +424,7 @@ UniValue coinsupply(const UniValue& params, bool fHelp, const CPubKey& mypk) currentHeight = chainActive.Height(); if (height >= 0 && height <= currentHeight) { - if ( (supply= komodo_coinsupply(&zfunds,&sproutfunds,height)) > 0 ) + if ( (supply= hush_coinsupply(&zfunds,&sproutfunds,height)) > 0 ) { result.push_back(Pair("result", "success")); result.push_back(Pair("coin", SMART_CHAIN_SYMBOL[0] == 0 ? "HUSH" : SMART_CHAIN_SYMBOL)); @@ -438,9 +438,9 @@ UniValue coinsupply(const UniValue& params, bool fHelp, const CPubKey& mypk) blocks_per_year = 24*3600*365 / ASSETCHAINS_BLOCKTIME; if ( height > blocks_per_year ) { - supply1 = komodo_coinsupply(&zf1,&sf1,height - blocks_per_year/12); - supply3 = komodo_coinsupply(&zf3,&sf3,height - blocks_per_year/4); - supply12 = komodo_coinsupply(&zf12,&sf12,height - blocks_per_year); + supply1 = hush_coinsupply(&zf1,&sf1,height - blocks_per_year/12); + supply3 = hush_coinsupply(&zf3,&sf3,height - blocks_per_year/4); + supply12 = hush_coinsupply(&zf12,&sf12,height - blocks_per_year); if ( supply1 != 0 && supply3 != 0 && supply12 != 0 ) { result.push_back(Pair("lastmonth", ValueFromAmount(supply1+zf1))); diff --git a/src/wallet/asyncrpcoperation_mergetoaddress.cpp b/src/wallet/asyncrpcoperation_mergetoaddress.cpp index d867caf10..6b3ef02d4 100644 --- a/src/wallet/asyncrpcoperation_mergetoaddress.cpp +++ b/src/wallet/asyncrpcoperation_mergetoaddress.cpp @@ -46,7 +46,7 @@ #include #include -int32_t komodo_blockheight(uint256 hash); +int32_t hush_blockheight(uint256 hash); using namespace libzcash; diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index b9029b2e6..e5f73fb78 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -51,7 +51,7 @@ using namespace libzcash; extern char SMART_CHAIN_SYMBOL[65]; int32_t hush_dpowconfs(int32_t height,int32_t numconfs); -int32_t komodo_blockheight(uint256 hash); +int32_t hush_blockheight(uint256 hash); int tx_height( const uint256 &hash ); bool hush_hardfork_active(uint32_t time); extern UniValue signrawtransaction(const UniValue& params, bool fHelp, const CPubKey& mypk); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 11c27f5ad..d79990b4b 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -138,10 +138,10 @@ void WalletTxToJSON(const CWalletTx& wtx, UniValue& entry) entry.push_back(Pair("generated", true)); if (confirms > 0) { - entry.push_back(Pair("confirmations", hush_dpowconfs((int32_t)komodo_blockheight(wtx.hashBlock),confirms))); + entry.push_back(Pair("confirmations", hush_dpowconfs((int32_t)hush_blockheight(wtx.hashBlock),confirms))); entry.push_back(Pair("blockhash", wtx.hashBlock.GetHex())); entry.push_back(Pair("blockindex", wtx.nIndex)); - entry.push_back(Pair("blocktime", (uint64_t)komodo_blocktime(wtx.hashBlock))); + entry.push_back(Pair("blocktime", (uint64_t)hush_blocktime(wtx.hashBlock))); entry.push_back(Pair("expiryheight", (int64_t)wtx.nExpiryHeight)); } else entry.push_back(Pair("confirmations", confirms)); uint256 hash = wtx.GetHash(); @@ -1659,7 +1659,7 @@ UniValue ListReceived(const UniValue& params, bool fByAccounts) tallyitem& item = mapTally[address]; item.nAmount += txout.nValue; item.nConf = min(item.nConf, nDepth); - item.nHeight = komodo_blockheight(wtx.hashBlock); + item.nHeight = hush_blockheight(wtx.hashBlock); item.txids.push_back(wtx.GetHash()); if (mine & ISMINE_WATCH_ONLY) item.fIsWatchonly = true; @@ -5561,8 +5561,8 @@ int32_t ensure_CCrequirements(uint8_t evalcode) { if ( ASSETCHAINS_CCDISABLES[evalcode] != 0 || (evalcode == EVAL_MARMARA && ASSETCHAINS_MARMARA == 0) ) { // check if a height activation has been set. - fprintf(stderr, "evalcode.%i activates at height. %i current height.%i\n", evalcode, mapHeightEvalActivate[evalcode], komodo_currentheight()); - if ( mapHeightEvalActivate[evalcode] == 0 || komodo_currentheight() == 0 || mapHeightEvalActivate[evalcode] > komodo_currentheight() ) + fprintf(stderr, "evalcode.%i activates at height. %i current height.%i\n", evalcode, mapHeightEvalActivate[evalcode], hush_currentheight()); + if ( mapHeightEvalActivate[evalcode] == 0 || hush_currentheight() == 0 || mapHeightEvalActivate[evalcode] > hush_currentheight() ) { fprintf(stderr,"evalcode %d disabled\n",evalcode); return(-1); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 9257b7e01..14e1898a4 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -64,7 +64,7 @@ bool fSendFreeTransactions = false; bool fPayAtLeastCustomFee = true; #include "hush_defs.h" -CBlockIndex *komodo_chainactive(int32_t height); +CBlockIndex *hush_chainactive(int32_t height); extern std::string DONATION_PUBKEY; int32_t hush_dpowconfs(int32_t height,int32_t numconfs); int tx_height( const uint256 &hash ); diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp index 290902116..265ab6247 100644 --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -38,7 +38,7 @@ using namespace std; static uint64_t nAccountingEntryNumber = 0; static list deadTxns; -extern CBlockIndex *komodo_blockindex(uint256 hash); +extern CBlockIndex *hush_blockindex(uint256 hash); // // CWalletDB @@ -932,7 +932,7 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) if (!EraseTx(hash)) fprintf(stderr, "could not delete tx.%s\n",hash.ToString().c_str()); uint256 blockhash; CTransaction tx; CBlockIndex* pindex; - if ( GetTransaction(hash,tx,blockhash,false) && (pindex= komodo_blockindex(blockhash)) != 0 && chainActive.Contains(pindex) ) + if ( GetTransaction(hash,tx,blockhash,false) && (pindex= hush_blockindex(blockhash)) != 0 && chainActive.Contains(pindex) ) { CWalletTx wtx(pwallet,tx); pwallet->AddToWallet(wtx, true, NULL); From 97887c9166627b5007ba5b369e11e5c0b133536e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 23:19:52 -0500 Subject: [PATCH 218/277] Cleaning --- src/cc/rogue/rogue.777.0 | 1 - src/cc/rogue/rogue.777.1 | 1 - src/cc/rogue/rogue.777.2 | 1 - src/cc/rogue/rogue.777.3 | 0 src/{komodo_cJSON.c => hush_cJSON.c} | 0 src/{komodo_cJSON.h => hush_cJSON.h} | 0 src/{komodo_ccdata.h => hush_ccdata.h} | 0 src/{komodo_events.h => hush_events.h} | 0 src/{komodo_kv.h => hush_kv.h} | 0 src/{komodo_nSPV.h => hush_nSPV.h} | 0 src/{komodo_nSPV_defs.h => hush_nSPV_defs.h} | 0 src/{komodo_nSPV_fullnode.h => hush_nSPV_fullnode.h} | 0 src/{komodo_nSPV_superlite.h => hush_nSPV_superlite.h} | 0 src/{komodo_nSPV_wallet.h => hush_nSPV_wallet.h} | 0 src/{komodo_pax.h => hush_pax.h} | 0 src/main.cpp | 10 +++++----- 16 files changed, 5 insertions(+), 8 deletions(-) delete mode 100644 src/cc/rogue/rogue.777.0 delete mode 100644 src/cc/rogue/rogue.777.1 delete mode 100644 src/cc/rogue/rogue.777.2 delete mode 100644 src/cc/rogue/rogue.777.3 rename src/{komodo_cJSON.c => hush_cJSON.c} (100%) rename src/{komodo_cJSON.h => hush_cJSON.h} (100%) rename src/{komodo_ccdata.h => hush_ccdata.h} (100%) rename src/{komodo_events.h => hush_events.h} (100%) rename src/{komodo_kv.h => hush_kv.h} (100%) rename src/{komodo_nSPV.h => hush_nSPV.h} (100%) rename src/{komodo_nSPV_defs.h => hush_nSPV_defs.h} (100%) rename src/{komodo_nSPV_fullnode.h => hush_nSPV_fullnode.h} (100%) rename src/{komodo_nSPV_superlite.h => hush_nSPV_superlite.h} (100%) rename src/{komodo_nSPV_wallet.h => hush_nSPV_wallet.h} (100%) rename src/{komodo_pax.h => hush_pax.h} (100%) diff --git a/src/cc/rogue/rogue.777.0 b/src/cc/rogue/rogue.777.0 deleted file mode 100644 index e56f7b148..000000000 --- a/src/cc/rogue/rogue.777.0 +++ /dev/null @@ -1 +0,0 @@ -llllljhhl jllllllllllllllllllkkllllklllljllljjllllllllllll \ No newline at end of file diff --git a/src/cc/rogue/rogue.777.1 b/src/cc/rogue/rogue.777.1 deleted file mode 100644 index 68b8ab099..000000000 --- a/src/cc/rogue/rogue.777.1 +++ /dev/null @@ -1 +0,0 @@ -hhhhhhhhhhkkhhhhhhhhhhhhhjjhhhhhhhhjjjjjjjjjlllllllllllllk \ No newline at end of file diff --git a/src/cc/rogue/rogue.777.2 b/src/cc/rogue/rogue.777.2 deleted file mode 100644 index 93a664d1e..000000000 --- a/src/cc/rogue/rogue.777.2 +++ /dev/null @@ -1 +0,0 @@ -lllljjllllll l ll lll l lll l ll l ljjj j j jhhhhhjjllllll \ No newline at end of file diff --git a/src/cc/rogue/rogue.777.3 b/src/cc/rogue/rogue.777.3 deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/komodo_cJSON.c b/src/hush_cJSON.c similarity index 100% rename from src/komodo_cJSON.c rename to src/hush_cJSON.c diff --git a/src/komodo_cJSON.h b/src/hush_cJSON.h similarity index 100% rename from src/komodo_cJSON.h rename to src/hush_cJSON.h diff --git a/src/komodo_ccdata.h b/src/hush_ccdata.h similarity index 100% rename from src/komodo_ccdata.h rename to src/hush_ccdata.h diff --git a/src/komodo_events.h b/src/hush_events.h similarity index 100% rename from src/komodo_events.h rename to src/hush_events.h diff --git a/src/komodo_kv.h b/src/hush_kv.h similarity index 100% rename from src/komodo_kv.h rename to src/hush_kv.h diff --git a/src/komodo_nSPV.h b/src/hush_nSPV.h similarity index 100% rename from src/komodo_nSPV.h rename to src/hush_nSPV.h diff --git a/src/komodo_nSPV_defs.h b/src/hush_nSPV_defs.h similarity index 100% rename from src/komodo_nSPV_defs.h rename to src/hush_nSPV_defs.h diff --git a/src/komodo_nSPV_fullnode.h b/src/hush_nSPV_fullnode.h similarity index 100% rename from src/komodo_nSPV_fullnode.h rename to src/hush_nSPV_fullnode.h diff --git a/src/komodo_nSPV_superlite.h b/src/hush_nSPV_superlite.h similarity index 100% rename from src/komodo_nSPV_superlite.h rename to src/hush_nSPV_superlite.h diff --git a/src/komodo_nSPV_wallet.h b/src/hush_nSPV_wallet.h similarity index 100% rename from src/komodo_nSPV_wallet.h rename to src/hush_nSPV_wallet.h diff --git a/src/komodo_pax.h b/src/hush_pax.h similarity index 100% rename from src/komodo_pax.h rename to src/hush_pax.h diff --git a/src/main.cpp b/src/main.cpp index ea5e9d9b5..258c95634 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6937,11 +6937,11 @@ void static ProcessGetData(CNode* pfrom) } } -#include "komodo_nSPV_defs.h" -#include "komodo_nSPV.h" // shared defines, structs, serdes, purge functions -#include "komodo_nSPV_fullnode.h" // nSPV fullnode handling of the getnSPV request messages -#include "komodo_nSPV_superlite.h" // nSPV superlite client, issuing requests and handling nSPV responses -#include "komodo_nSPV_wallet.h" // nSPV_send and support functions, really all the rest is to support this +#include "hush_nSPV_defs.h" +#include "hush_nSPV.h" // shared defines, structs, serdes, purge functions +#include "hush_nSPV_fullnode.h" // nSPV fullnode handling of the getnSPV request messages +#include "hush_nSPV_superlite.h" // nSPV superlite client, issuing requests and handling nSPV responses +#include "hush_nSPV_wallet.h" // nSPV_send and support functions, really all the rest is to support this bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, int64_t nTimeReceived) { From 1a481f401c0498d5ce20672065def519deaffcc5 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 23:20:06 -0500 Subject: [PATCH 219/277] More cleaning and updates in prep for 3.6.0 --- src/cc/CCMarmara.h | 5 ++++- src/cc/CCinclude.h | 6 +++--- src/cc/crypto777/OS_portable.h | 0 src/cc/rogue/Makefile.in | 3 +++ src/cc/rogue/armor.c | 3 +++ src/cc/rogue/chase.c | 3 +++ src/cc/rogue/command.c | 3 +++ src/cc/rogue/cursesd.c | 3 +++ src/cc/rogue/cursesd.h | 3 +++ src/cc/rogue/daemon.c | 3 +++ src/cc/rogue/daemons.c | 3 +++ src/cc/rogue/extern.c | 3 +++ src/cc/rogue/extern.h | 3 +++ src/cc/rogue/fight.c | 3 +++ src/cc/rogue/init.c | 3 +++ src/cc/rogue/io.c | 3 +++ src/cc/rogue/list.c | 3 +++ src/cc/rogue/mach_dep.c | 3 +++ src/cc/rogue/main.c | 9 +++++---- src/cc/rogue/mdport.c | 3 +++ src/cc/rogue/misc.c | 3 +++ src/cc/rogue/monsters.c | 5 ++++- src/cc/rogue/move.c | 3 +++ src/cc/rogue/new_level.c | 3 +++ src/cc/rogue/options.c | 3 +++ src/cc/rogue/pack.c | 3 +++ src/cc/rogue/passages.c | 3 +++ src/cc/rogue/potions.c | 8 +++++--- src/cc/rogue/rings.c | 3 +++ src/cc/rogue/rip.c | 3 +++ src/cc/rogue/rogue.c | 7 +++++-- src/cc/rogue/rogue.h | 3 +++ src/cc/rogue/rogue_player.h | 3 +++ src/cc/rogue/rooms.c | 3 +++ src/cc/rogue/save.c | 3 +++ src/cc/rogue/score.h | 3 +++ src/cc/rogue/scrolls.c | 3 +++ src/cc/rogue/state.c | 3 +++ src/cc/rogue/sticks.c | 3 +++ src/cc/rogue/things.c | 3 +++ src/cc/rogue/vers.c | 5 ++++- src/cc/rogue/weapons.c | 3 +++ src/cc/rogue/wizard.c | 3 +++ src/cc/rogue/xcrypt.c | 4 ++++ src/hush.h | 14 +++++++------- src/hush_cJSON.c | 2 +- src/hush_globals.h | 2 +- src/hush_notary.h | 2 +- 48 files changed, 149 insertions(+), 25 deletions(-) mode change 100755 => 100644 src/cc/crypto777/OS_portable.h diff --git a/src/cc/CCMarmara.h b/src/cc/CCMarmara.h index 5fe03b992..85ef90fa5 100644 --- a/src/cc/CCMarmara.h +++ b/src/cc/CCMarmara.h @@ -20,8 +20,10 @@ #ifndef CC_MARMARA_H #define CC_MARMARA_H +/* + #include "CCinclude.h" -#include "../komodo_cJSON.h" +#include "../hush_cJSON.h" #define MARMARA_GROUPSIZE 60 #define MARMARA_MINLOCK (1440 * 3 * 30) @@ -46,5 +48,6 @@ bool MarmaraValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &t // CCcustom UniValue MarmaraInfo(); +*/ #endif diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index 24485d660..2eafc975c 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -69,8 +69,8 @@ Details. #include "../utlist.h" #include "../uthash.h" #include "merkleblock.h" -#include "../komodo_nSPV_defs.h" -#include "../komodo_cJSON.h" +#include "../hush_nSPV_defs.h" +#include "../hush_cJSON.h" #include "../init.h" #include "rpc/server.h" @@ -85,7 +85,7 @@ Details. #define CCDISABLEALL memset(ASSETCHAINS_CCDISABLES,1,sizeof(ASSETCHAINS_CCDISABLES)) #define CCENABLE(x) ASSETCHAINS_CCDISABLES[((uint8_t)x)] = 0 -/* moved to komodo_cJSON.h +/* moved to hush_cJSON.h #ifndef _BITS256 #define _BITS256 union _bits256 { uint8_t bytes[32]; uint16_t ushorts[16]; uint32_t uints[8]; uint64_t ulongs[4]; uint64_t txid; }; diff --git a/src/cc/crypto777/OS_portable.h b/src/cc/crypto777/OS_portable.h old mode 100755 new mode 100644 diff --git a/src/cc/rogue/Makefile.in b/src/cc/rogue/Makefile.in index 2669a2025..34bafbdd7 100644 --- a/src/cc/rogue/Makefile.in +++ b/src/cc/rogue/Makefile.in @@ -1,3 +1,6 @@ +# Copyright (c) 2016-2020 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 ############################################################################### # # Makefile for rogue diff --git a/src/cc/rogue/armor.c b/src/cc/rogue/armor.c index 20c5704a8..bf7d84566 100644 --- a/src/cc/rogue/armor.c +++ b/src/cc/rogue/armor.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * This file contains misc functions for dealing with armor * @(#)armor.c 4.14 (Berkeley) 02/05/99 diff --git a/src/cc/rogue/chase.c b/src/cc/rogue/chase.c index 059df470d..abc19e3d4 100644 --- a/src/cc/rogue/chase.c +++ b/src/cc/rogue/chase.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Code for one creature to chase another * diff --git a/src/cc/rogue/command.c b/src/cc/rogue/command.c index 568f4b8f8..65bc324ff 100644 --- a/src/cc/rogue/command.c +++ b/src/cc/rogue/command.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Read and execute the user commands * diff --git a/src/cc/rogue/cursesd.c b/src/cc/rogue/cursesd.c index 6c295fc94..27c42ce39 100644 --- a/src/cc/rogue/cursesd.c +++ b/src/cc/rogue/cursesd.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/rogue/cursesd.h b/src/cc/rogue/cursesd.h index 7dd83d435..cfaa6bbc5 100644 --- a/src/cc/rogue/cursesd.h +++ b/src/cc/rogue/cursesd.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/rogue/daemon.c b/src/cc/rogue/daemon.c index 81bdd0a73..ad931451d 100644 --- a/src/cc/rogue/daemon.c +++ b/src/cc/rogue/daemon.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Contains functions for dealing with things that happen in the * future. diff --git a/src/cc/rogue/daemons.c b/src/cc/rogue/daemons.c index c9c16448d..13d951500 100644 --- a/src/cc/rogue/daemons.c +++ b/src/cc/rogue/daemons.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * All the daemon and fuse functions are in here * diff --git a/src/cc/rogue/extern.c b/src/cc/rogue/extern.c index fdb77307c..fa7462825 100644 --- a/src/cc/rogue/extern.c +++ b/src/cc/rogue/extern.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * global variable initializaton * diff --git a/src/cc/rogue/extern.h b/src/cc/rogue/extern.h index c62646b67..92bfbcec5 100644 --- a/src/cc/rogue/extern.h +++ b/src/cc/rogue/extern.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Defines for things used in mach_dep.c * diff --git a/src/cc/rogue/fight.c b/src/cc/rogue/fight.c index 9cb4bf61e..6b5225981 100644 --- a/src/cc/rogue/fight.c +++ b/src/cc/rogue/fight.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * All the fighting gets done here * diff --git a/src/cc/rogue/init.c b/src/cc/rogue/init.c index b11cfa80c..b6e023e4b 100644 --- a/src/cc/rogue/init.c +++ b/src/cc/rogue/init.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * global variable initializaton * diff --git a/src/cc/rogue/io.c b/src/cc/rogue/io.c index ad22407f6..6d5ced070 100644 --- a/src/cc/rogue/io.c +++ b/src/cc/rogue/io.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Various input/output functions * diff --git a/src/cc/rogue/list.c b/src/cc/rogue/list.c index a021c6a8f..458ae99f5 100644 --- a/src/cc/rogue/list.c +++ b/src/cc/rogue/list.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Functions for dealing with linked lists of goodies * diff --git a/src/cc/rogue/mach_dep.c b/src/cc/rogue/mach_dep.c index 6d0e1c66f..995338766 100644 --- a/src/cc/rogue/mach_dep.c +++ b/src/cc/rogue/mach_dep.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Various installation dependent routines * diff --git a/src/cc/rogue/main.c b/src/cc/rogue/main.c index f12915fa0..792a32f59 100644 --- a/src/cc/rogue/main.c +++ b/src/cc/rogue/main.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * @@ -12,8 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - - #include #include #include @@ -254,9 +255,9 @@ int32_t safecopy(char *dest,char *src,long len) #define true 1 #define false 0 #ifdef STANDALONE -#include "../komodo/src/komodo_cJSON.c" +#include "../hush3/src/hush_cJSON.c" #else -#include "../../komodo_cJSON.c" +#include "../../hush_cJSON.c" #endif int32_t rogue_replay(uint64_t seed,int32_t sleeptime); diff --git a/src/cc/rogue/mdport.c b/src/cc/rogue/mdport.c index fd53be72c..fe7e695dc 100644 --- a/src/cc/rogue/mdport.c +++ b/src/cc/rogue/mdport.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* mdport.c - Machine Dependent Code for Porting Unix/Curses games diff --git a/src/cc/rogue/misc.c b/src/cc/rogue/misc.c index 5f9a89dcc..b9db42ed2 100644 --- a/src/cc/rogue/misc.c +++ b/src/cc/rogue/misc.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * All sorts of miscellaneous routines * diff --git a/src/cc/rogue/monsters.c b/src/cc/rogue/monsters.c index 7e1186e8d..3bf81c166 100644 --- a/src/cc/rogue/monsters.c +++ b/src/cc/rogue/monsters.c @@ -1,5 +1,8 @@ +// Copyright (c) 2016-2020 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 /* - * File with various monster functions in it + * File with various monster functions in it, none as evil as KYC * * @(#)monsters.c 4.46 (Berkeley) 02/05/99 * diff --git a/src/cc/rogue/move.c b/src/cc/rogue/move.c index c70d668ca..10156ec07 100644 --- a/src/cc/rogue/move.c +++ b/src/cc/rogue/move.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * hero movement commands * diff --git a/src/cc/rogue/new_level.c b/src/cc/rogue/new_level.c index c7f08ff28..37b9418b0 100644 --- a/src/cc/rogue/new_level.c +++ b/src/cc/rogue/new_level.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * new_level: * Dig and draw a new level diff --git a/src/cc/rogue/options.c b/src/cc/rogue/options.c index 258bd184f..17338ec0f 100644 --- a/src/cc/rogue/options.c +++ b/src/cc/rogue/options.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * This file has all the code for the option command. I would rather * this command were not necessary, but it is the only way to keep the diff --git a/src/cc/rogue/pack.c b/src/cc/rogue/pack.c index 1f2f3faaa..0671ee0e8 100644 --- a/src/cc/rogue/pack.c +++ b/src/cc/rogue/pack.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Routines to deal with the pack * diff --git a/src/cc/rogue/passages.c b/src/cc/rogue/passages.c index 606d1a658..ac13790e7 100644 --- a/src/cc/rogue/passages.c +++ b/src/cc/rogue/passages.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Draw the connecting passages * diff --git a/src/cc/rogue/potions.c b/src/cc/rogue/potions.c index 2425b051f..333a136f2 100644 --- a/src/cc/rogue/potions.c +++ b/src/cc/rogue/potions.c @@ -1,5 +1,8 @@ +// Copyright (c) 2016-2020 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 /* - * Function(s) for dealing with potions + * Function(s) for dealing with potions, mmmmmmmmmm, potionzzzzzzz * * @(#)potions.c 4.46 (Berkeley) 06/07/83 * @@ -55,8 +58,7 @@ static PACT p_actions[] = * Quaff a potion from the pack */ -void -quaff(struct rogue_state *rs) +void quaff(struct rogue_state *rs) { THING *obj, *tp, *mp; bool discardit = FALSE; diff --git a/src/cc/rogue/rings.c b/src/cc/rogue/rings.c index f9ce50795..84785f1bc 100644 --- a/src/cc/rogue/rings.c +++ b/src/cc/rogue/rings.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Routines dealing specifically with rings * diff --git a/src/cc/rogue/rip.c b/src/cc/rogue/rip.c index 123b1aaa8..5f8672525 100644 --- a/src/cc/rogue/rip.c +++ b/src/cc/rogue/rip.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * File for the fun ends * Death or a total win diff --git a/src/cc/rogue/rogue.c b/src/cc/rogue/rogue.c index c687fd019..46433c742 100644 --- a/src/cc/rogue/rogue.c +++ b/src/cc/rogue/rogue.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Rogue: Exploring the Dungeons of Doom * Copyright (C) 1980-1983, 1985, 1999 Michael Toy, Ken Arnold and Glenn Wichman @@ -16,9 +19,9 @@ #include "rogue.h" #ifdef STANDALONE -#include "../komodo/src/komodo_cJSON.h" +#include "../hush3/src/hush_cJSON.h" #else -#include "../../komodo_cJSON.h" +#include "../../hush_cJSON.h" #endif /* diff --git a/src/cc/rogue/rogue.h b/src/cc/rogue/rogue.h index 65ddf1e51..95dc99b0f 100644 --- a/src/cc/rogue/rogue.h +++ b/src/cc/rogue/rogue.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Rogue definitions and variable declarations * diff --git a/src/cc/rogue/rogue_player.h b/src/cc/rogue/rogue_player.h index e6b7a69e6..67e4ecc70 100644 --- a/src/cc/rogue/rogue_player.h +++ b/src/cc/rogue/rogue_player.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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. * * * diff --git a/src/cc/rogue/rooms.c b/src/cc/rogue/rooms.c index 67ca701d9..3419c6f2e 100644 --- a/src/cc/rogue/rooms.c +++ b/src/cc/rogue/rooms.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Create the layout for the new level * diff --git a/src/cc/rogue/save.c b/src/cc/rogue/save.c index 4df79e150..36221e228 100644 --- a/src/cc/rogue/save.c +++ b/src/cc/rogue/save.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * save and restore routines * diff --git a/src/cc/rogue/score.h b/src/cc/rogue/score.h index a5897b482..9e3ff8398 100644 --- a/src/cc/rogue/score.h +++ b/src/cc/rogue/score.h @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Score file structure * diff --git a/src/cc/rogue/scrolls.c b/src/cc/rogue/scrolls.c index 8ed6d2648..fcb17b1fc 100644 --- a/src/cc/rogue/scrolls.c +++ b/src/cc/rogue/scrolls.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Read a scroll and let it happen * diff --git a/src/cc/rogue/state.c b/src/cc/rogue/state.c index 9963bbc9e..7d838b022 100644 --- a/src/cc/rogue/state.c +++ b/src/cc/rogue/state.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* state.c - Portable Rogue Save State Code diff --git a/src/cc/rogue/sticks.c b/src/cc/rogue/sticks.c index cd559daef..d956eb7af 100644 --- a/src/cc/rogue/sticks.c +++ b/src/cc/rogue/sticks.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Functions to implement the various sticks one might find * while wandering around the dungeon. diff --git a/src/cc/rogue/things.c b/src/cc/rogue/things.c index e0cf48454..cccbc8436 100644 --- a/src/cc/rogue/things.c +++ b/src/cc/rogue/things.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Contains functions for dealing with things like potions, scrolls, * and other items. diff --git a/src/cc/rogue/vers.c b/src/cc/rogue/vers.c index 6fbf7be87..1c4350a77 100644 --- a/src/cc/rogue/vers.c +++ b/src/cc/rogue/vers.c @@ -1,5 +1,8 @@ +// Copyright (c) 2016-2020 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 /* - * Version number. Whenever a new version number is desired, use sccs + * Version number. Whenever a new version number is desired, use sccs(!) * to get vers.c. encstr is declared here to force it to be loaded * before the version number, and therefore not to be written in saved * games. diff --git a/src/cc/rogue/weapons.c b/src/cc/rogue/weapons.c index 0a8b6016c..75ca41f44 100644 --- a/src/cc/rogue/weapons.c +++ b/src/cc/rogue/weapons.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Functions for dealing with problems brought about by weapons * diff --git a/src/cc/rogue/wizard.c b/src/cc/rogue/wizard.c index 35ce9fb54..456207523 100644 --- a/src/cc/rogue/wizard.c +++ b/src/cc/rogue/wizard.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * Special wizard commands (some of which are also non-wizard commands * under strange circumstances) diff --git a/src/cc/rogue/xcrypt.c b/src/cc/rogue/xcrypt.c index 671e20718..77c8f2f86 100644 --- a/src/cc/rogue/xcrypt.c +++ b/src/cc/rogue/xcrypt.c @@ -1,3 +1,6 @@ +// Copyright (c) 2016-2020 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 /* * FreeSec: libcrypt * @@ -47,6 +50,7 @@ * This file has a static version of des_setkey() so that crypt.o exports * only the crypt() interface. This is required to make binaries linked * against crypt.o exportable or re-exportable from the USA. + * NOTE2: Math is freedom of speech. -- Duke Leto */ #include diff --git a/src/hush.h b/src/hush.h index fdad77627..06e755d1b 100644 --- a/src/hush.h +++ b/src/hush.h @@ -45,16 +45,16 @@ bool check_pprevnotarizedht(); #include "hush_globals.h" #include "hush_utils.h" #include "hush_curve25519.h" -#include "komodo_cJSON.c" +#include "hush_cJSON.c" #include "hush_bitcoind.h" -#include "komodo_pax.h" +#include "hush_pax.h" #include "hush_notary.h" int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *dest); -#include "komodo_kv.h" +#include "hush_kv.h" #include "hush_gateway.h" -#include "komodo_events.h" -#include "komodo_ccdata.h" +#include "hush_events.h" +#include "hush_ccdata.h" void hush_currentheight_set(int32_t height) { @@ -98,7 +98,7 @@ int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *de else { //printf("updated %d pubkeys at %s ht.%d\n",num,symbol,ht); - if ( (KOMODO_EXTERNAL_NOTARIES != 0 && matched != 0) || (strcmp(symbol,"KMD") == 0 && KOMODO_EXTERNAL_NOTARIES == 0) ) + if ( (HUSH_EXTERNAL_NOTARIES != 0 && matched != 0) || (strcmp(symbol,"KMD") == 0 && HUSH_EXTERNAL_NOTARIES == 0) ) komodo_eventadd_pubkeys(sp,symbol,ht,num,pubkeys); } } else printf("illegal num.%d\n",num); @@ -243,7 +243,7 @@ int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fp else { //printf("updated %d pubkeys at %s ht.%d\n",num,symbol,ht); - if ( (KOMODO_EXTERNAL_NOTARIES != 0 && matched != 0) || (strcmp(symbol,"KMD") == 0 && KOMODO_EXTERNAL_NOTARIES == 0) ) + if ( (HUSH_EXTERNAL_NOTARIES != 0 && matched != 0) || (strcmp(symbol,"KMD") == 0 && HUSH_EXTERNAL_NOTARIES == 0) ) komodo_eventadd_pubkeys(sp,symbol,ht,num,pubkeys); } } else printf("illegal num.%d\n",num); diff --git a/src/hush_cJSON.c b/src/hush_cJSON.c index 10140ad02..facf79f2a 100644 --- a/src/hush_cJSON.c +++ b/src/hush_cJSON.c @@ -26,7 +26,7 @@ #include #include "cJSON.h" -#include "komodo_cJSON.h" +#include "hush_cJSON.h" #include "cJSON.c" #ifndef DBL_EPSILON diff --git a/src/hush_globals.h b/src/hush_globals.h index a9850370b..f89157cb2 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -47,7 +47,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100; unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 HUSH_EARLYTXID; -int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,HUSH_NSPV; +int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,HUSH_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,HUSH_NSPV; int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; diff --git a/src/hush_notary.h b/src/hush_notary.h index 58f6646b7..a5792ad69 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -17,7 +17,7 @@ ******************************************************************************/ #include "hush_defs.h" -#include "komodo_cJSON.h" +#include "hush_cJSON.h" #define KOMODO_MAINNET_START 178999 #define KOMODO_NOTARIES_HEIGHT1 814000 From 01f4fae6a7a2f9dc8d76a816c637475d5858cc80 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Wed, 16 Dec 2020 23:35:28 -0500 Subject: [PATCH 220/277] Add header file that got lost in the shuffle --- src/coins.cpp | 6 +- src/coins.h | 6 +- src/hush_bitcoind.h | 2102 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2107 insertions(+), 7 deletions(-) create mode 100644 src/hush_bitcoind.h diff --git a/src/coins.cpp b/src/coins.cpp index cf963208d..30f3b5e41 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -526,10 +526,10 @@ unsigned int CCoinsViewCache::GetCacheSize() const { const CTxOut &CCoinsViewCache::GetOutputFor(const CTxIn& input) const { const CCoins* coins = AccessCoins(input.prevout.hash); - fprintf(stderr, "GetOutputFor: input=%s", input.ToString().c_str()); - fprintf(stderr, "GetOutputFor: prevout n=%d,txid=%s\n", input.prevout.n, input.prevout.hash.ToString().c_str()); + //fprintf(stderr, "GetOutputFor: input=%s", input.ToString().c_str()); + //fprintf(stderr, "GetOutputFor: prevout n=%d,txid=%s\n", input.prevout.n, input.prevout.hash.ToString().c_str()); assert(coins && coins->IsAvailable(input.prevout.n)); - fprintf(stderr, "GetOutputFor: IsAvailable\n"); + //fprintf(stderr, "GetOutputFor: IsAvailable\n"); return coins->vout[input.prevout.n]; } diff --git a/src/coins.h b/src/coins.h index 6e999d5a1..868bc63da 100644 --- a/src/coins.h +++ b/src/coins.h @@ -240,7 +240,7 @@ public: bool IsAvailable(unsigned int nPos) const { //fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li, vout[%d].IsNull()=%d", nPos, vout.size(), nPos, vout[nPos].IsNull() ); //fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li, vout[%d]=%d", nPos, vout.size(), nPos, vout[nPos] ); - fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li", nPos, vout.size() ); + //fprintf(stderr,"IsAvailable(nPos=%d), vout.size()=%li", nPos, vout.size() ); return (nPos < vout.size() && !vout[nPos].IsNull()); } @@ -569,9 +569,7 @@ private: CCoinsMap::iterator FetchCoins(const uint256 &txid); CCoinsMap::const_iterator FetchCoins(const uint256 &txid) const; - /** - * By making the copy constructor private, we prevent accidentally using it when one intends to create a cache on top of a base cache. - */ + // By making the copy constructor private, we prevent accidentally using it when one intends to create a cache on top of a base cache. CCoinsViewCache(const CCoinsViewCache &); //! Generalized interface for popping anchors diff --git a/src/hush_bitcoind.h b/src/hush_bitcoind.h new file mode 100644 index 000000000..fc0075d3a --- /dev/null +++ b/src/hush_bitcoind.h @@ -0,0 +1,2102 @@ +// Copyright 2016-2020 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. * + * * + ******************************************************************************/ +// Hush functions that interact with bitcoind C++ +#include +#include +#include "consensus/params.h" +#include "hush_defs.h" +#include "script/standard.h" +#include "cc/CCinclude.h" +#include "sietch.h" + +int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); +int32_t komodo_electednotary(int32_t *numnotariesp,uint8_t *pubkey33,int32_t height,uint32_t timestamp); +int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notaryid,uint8_t *scriptbuf,int32_t scriptlen,int32_t height,uint256 txhash,int32_t i,int32_t j,uint64_t *voutmaskp,int32_t *specialtxp,int32_t *notarizedheightp,uint64_t value,int32_t notarized,uint64_t signedmask,uint32_t timestamp); +bool EnsureWalletIsAvailable(bool avoidException); +extern bool fRequestShutdown; +extern CScript HUSH_EARLYTXID_SCRIPTPUB; + +uint8_t DecodeMaramaraCoinbaseOpRet(const CScript scriptPubKey,CPubKey &pk,int32_t &height,int32_t &unlockht); +uint32_t komodo_heightstamp(int32_t height); + +//#define issue_curl(cmdstr) bitcoind_RPC(0,(char *)"curl",(char *)"http://127.0.0.1:7776",0,0,(char *)(cmdstr)) + +struct MemoryStruct { char *memory; size_t size; }; +struct return_string { char *ptr; size_t len; }; + +// return data from the server +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_SSL (1<<0) +#define CURL_GLOBAL_WIN32 (1<<1) + + +/************************************************************************ + * + * Initialize the string handler so that it is thread safe + * + ************************************************************************/ + +void init_string(struct return_string *s) +{ + s->len = 0; + s->ptr = (char *)calloc(1,s->len+1); + if ( s->ptr == NULL ) + { + fprintf(stderr,"init_string malloc() failed\n"); + StartShutdown(); + } + s->ptr[0] = '\0'; +} + +int tx_height( const uint256 &hash ){ + int nHeight = 0; + CTransaction tx; + uint256 hashBlock; + if (!GetTransaction(hash, tx, hashBlock, true)) { + fprintf(stderr,"tx hash %s does not exist!\n", hash.ToString().c_str() ); + return nHeight; + } + + BlockMap::const_iterator it = mapBlockIndex.find(hashBlock); + if (it != mapBlockIndex.end()) { + nHeight = it->second->GetHeight(); + //fprintf(stderr,"blockHash %s height %d\n",hashBlock.ToString().c_str(), nHeight); + } else { + // Unconfirmed xtns + fprintf(stderr,"tx %s is unconfirmed\n", hash.ToString().c_str() ); + //fprintf(stderr,"block hash %s does not exist!\n", hashBlock.ToString().c_str() ); + } + return nHeight; +} + + +/************************************************************************ + * + * Use the "writer" to accumulate text until done + * + ************************************************************************/ + +size_t accumulatebytes(void *ptr,size_t size,size_t nmemb,struct return_string *s) +{ + size_t new_len = s->len + size*nmemb; + s->ptr = (char *)realloc(s->ptr,new_len+1); + if ( s->ptr == NULL ) + { + fprintf(stderr, "accumulate realloc() failed\n"); + StartShutdown(); + } + memcpy(s->ptr+s->len,ptr,size*nmemb); + s->ptr[new_len] = '\0'; + s->len = new_len; + return(size * nmemb); +} + +/************************************************************************ + * + * return the current system time in milliseconds + * + ************************************************************************/ + +#define EXTRACT_BITCOIND_RESULT // if defined, ensures error is null and returns the "result" field +#ifdef EXTRACT_BITCOIND_RESULT + +/************************************************************************ + * + * perform post processing of the results + * + ************************************************************************/ + +char *post_process_bitcoind_RPC(char *debugstr,char *command,char *rpcstr,char *params) +{ + long i,j,len; char *retstr = 0; cJSON *json,*result,*error; + //printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s.[%s]\n",debugstr,command,rpcstr); + if ( command == 0 || rpcstr == 0 || rpcstr[0] == 0 ) + { + if ( strcmp(command,"signrawtransaction") != 0 ) + printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s.[%s]\n",debugstr,command,rpcstr); + return(rpcstr); + } + json = cJSON_Parse(rpcstr); + if ( json == 0 ) + { + printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC.%s can't parse.(%s) params.(%s)\n",debugstr,command,rpcstr,params); + free(rpcstr); + return(0); + } + result = cJSON_GetObjectItem(json,"result"); + error = cJSON_GetObjectItem(json,"error"); + if ( error != 0 && result != 0 ) + { + if ( (error->type&0xff) == cJSON_NULL && (result->type&0xff) != cJSON_NULL ) + { + retstr = cJSON_Print(result); + len = strlen(retstr); + if ( retstr[0] == '"' && retstr[len-1] == '"' ) + { + for (i=1,j=0; itype&0xff) != cJSON_NULL || (result->type&0xff) != cJSON_NULL ) + { + if ( strcmp(command,"signrawtransaction") != 0 ) + printf("<<<<<<<<<<< bitcoind_RPC: %s post_process_bitcoind_RPC (%s) error.%s\n",debugstr,command,rpcstr); + } + free(rpcstr); + } else retstr = rpcstr; + free_json(json); + //fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC: postprocess returns.(%s)\n",retstr); + return(retstr); +} +#endif + +/************************************************************************ + * + * perform the query + * + ************************************************************************/ + +char *bitcoind_RPC(char **retstrp,char *debugstr,char *url,char *userpass,char *command,char *params) +{ + static int didinit,count,count2; static double elapsedsum,elapsedsum2; + struct curl_slist *headers = NULL; struct return_string s; CURLcode res; CURL *curl_handle; + char *bracket0,*bracket1,*databuf = 0; long len; int32_t specialcase,numretries; double starttime; + if ( didinit == 0 ) + { + didinit = 1; + curl_global_init(CURL_GLOBAL_ALL); //init the curl session + } + numretries = 0; + if ( debugstr != 0 && strcmp(debugstr,"BTCD") == 0 && command != 0 && strcmp(command,"SuperNET") == 0 ) + specialcase = 1; + else specialcase = 0; + if ( url[0] == 0 ) + strcpy(url,"http://127.0.0.1:7876/nxt"); + if ( specialcase != 0 && 0 ) + printf("<<<<<<<<<<< bitcoind_RPC: debug.(%s) url.(%s) command.(%s) params.(%s)\n",debugstr,url,command,params); +try_again: + if ( retstrp != 0 ) + *retstrp = 0; + starttime = OS_milliseconds(); + curl_handle = curl_easy_init(); + init_string(&s); + headers = curl_slist_append(0,"Expect:"); + + curl_easy_setopt(curl_handle,CURLOPT_USERAGENT,"mozilla/4.0");//"Mozilla/4.0 (compatible; )"); + curl_easy_setopt(curl_handle,CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(curl_handle,CURLOPT_URL, url); + curl_easy_setopt(curl_handle,CURLOPT_WRITEFUNCTION, (void *)accumulatebytes); // send all data to this function + curl_easy_setopt(curl_handle,CURLOPT_WRITEDATA, &s); // we pass our 's' struct to the callback + curl_easy_setopt(curl_handle,CURLOPT_NOSIGNAL, 1L); // supposed to fix "Alarm clock" and long jump crash + curl_easy_setopt(curl_handle,CURLOPT_NOPROGRESS, 1L); // no progress callback + //curl_easy_setopt(curl_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + //curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, 2); + + if ( strncmp(url,"https",5) == 0 ) + { + + /* printf("[ Decker ] SSL: %s\n", curl_version()); */ + curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0L); + //curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L); // this is useful for debug, but seems crash on libcurl/7.64.1 OpenSSL/1.1.1b zlib/1.2.8 librtmp/2.3 + } + if ( userpass != 0 ) + curl_easy_setopt(curl_handle,CURLOPT_USERPWD, userpass); + databuf = 0; + if ( params != 0 ) + { + if ( command != 0 && specialcase == 0 ) + { + len = strlen(params); + if ( len > 0 && params[0] == '[' && params[len-1] == ']' ) { + bracket0 = bracket1 = (char *)""; + } + else + { + bracket0 = (char *)"["; + bracket1 = (char *)"]"; + } + + databuf = (char *)malloc(256 + strlen(command) + strlen(params)); + sprintf(databuf,"{\"id\":\"jl777\",\"method\":\"%s\",\"params\":%s%s%s}",command,bracket0,params,bracket1); + //printf("url.(%s) userpass.(%s) databuf.(%s)\n",url,userpass,databuf); + // + } //else if ( specialcase != 0 ) fprintf(stderr,"databuf.(%s)\n",params); + curl_easy_setopt(curl_handle,CURLOPT_POST,1L); + if ( databuf != 0 ) + curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,databuf); + else curl_easy_setopt(curl_handle,CURLOPT_POSTFIELDS,params); + } + //laststart = milliseconds(); + res = curl_easy_perform(curl_handle); + curl_slist_free_all(headers); + curl_easy_cleanup(curl_handle); + if ( databuf != 0 ) // clean up temporary buffer + { + free(databuf); + databuf = 0; + } + if ( res != CURLE_OK ) + { + numretries++; + if ( specialcase != 0 ) + { + fprintf(stderr,"<<<<<<<<<<< bitcoind_RPC.(%s): BTCD.%s timeout params.(%s) s.ptr.(%s) err.%d\n",url,command,params,s.ptr,res); + free(s.ptr); + return(0); + } + else if ( numretries >= 1 ) + { + fprintf(stderr,"%s: Maximum number of retries exceeded!\n", __FUNCTION__); + free(s.ptr); + return(0); + } + if ( (rand() % 1000) == 0 ) + printf( "curl_easy_perform() failed: %s %s.(%s %s), retries: %d\n",curl_easy_strerror(res),debugstr,url,command,numretries); + free(s.ptr); + sleep((1< (%s)\n",params,s.ptr); + count2++; + elapsedsum2 += (OS_milliseconds() - starttime); + if ( (count2 % 10000) == 0) + printf("%d: ave %9.6f | elapsed %.3f millis | NXT calls.(%s) cmd.(%s)\n",count2,elapsedsum2/count2,(double)(OS_milliseconds() - starttime),url,command); + return(s.ptr); + } + } + printf("bitcoind_RPC: impossible case\n"); + free(s.ptr); + return(0); +} + +static size_t WriteMemoryCallback(void *ptr,size_t size,size_t nmemb,void *data) +{ + size_t realsize = (size * nmemb); + struct MemoryStruct *mem = (struct MemoryStruct *)data; + mem->memory = (char *)((ptr != 0) ? realloc(mem->memory,mem->size + realsize + 1) : malloc(mem->size + realsize + 1)); + if ( mem->memory != 0 ) + { + if ( ptr != 0 ) + memcpy(&(mem->memory[mem->size]),ptr,realsize); + mem->size += realsize; + mem->memory[mem->size] = 0; + } + //printf("got %d bytes\n",(int32_t)(size*nmemb)); + return(realsize); +} + +char *curl_post(CURL **cHandlep,char *url,char *userpass,char *postfields,char *hdr0,char *hdr1,char *hdr2,char *hdr3) +{ + struct MemoryStruct chunk; CURL *cHandle; long code; struct curl_slist *headers = 0; + if ( (cHandle= *cHandlep) == NULL ) + *cHandlep = cHandle = curl_easy_init(); + else curl_easy_reset(cHandle); + //#ifdef DEBUG + //curl_easy_setopt(cHandle,CURLOPT_VERBOSE, 1); + //#endif + curl_easy_setopt(cHandle,CURLOPT_USERAGENT,"mozilla/4.0");//"Mozilla/4.0 (compatible; )"); + curl_easy_setopt(cHandle,CURLOPT_SSL_VERIFYPEER,0); + //curl_easy_setopt(cHandle,CURLOPT_SSLVERSION,1); + curl_easy_setopt(cHandle,CURLOPT_URL,url); + curl_easy_setopt(cHandle,CURLOPT_CONNECTTIMEOUT,10); + if ( userpass != 0 && userpass[0] != 0 ) + curl_easy_setopt(cHandle,CURLOPT_USERPWD,userpass); + if ( postfields != 0 && postfields[0] != 0 ) + { + curl_easy_setopt(cHandle,CURLOPT_POST,1); + curl_easy_setopt(cHandle,CURLOPT_POSTFIELDS,postfields); + } + if ( hdr0 != NULL && hdr0[0] != 0 ) + { + //printf("HDR0.(%s) HDR1.(%s) HDR2.(%s) HDR3.(%s)\n",hdr0!=0?hdr0:"",hdr1!=0?hdr1:"",hdr2!=0?hdr2:"",hdr3!=0?hdr3:""); + headers = curl_slist_append(headers,hdr0); + if ( hdr1 != 0 && hdr1[0] != 0 ) + headers = curl_slist_append(headers,hdr1); + if ( hdr2 != 0 && hdr2[0] != 0 ) + headers = curl_slist_append(headers,hdr2); + if ( hdr3 != 0 && hdr3[0] != 0 ) + headers = curl_slist_append(headers,hdr3); + } //headers = curl_slist_append(0,"Expect:"); + if ( headers != 0 ) + curl_easy_setopt(cHandle,CURLOPT_HTTPHEADER,headers); + //res = curl_easy_perform(cHandle); + memset(&chunk,0,sizeof(chunk)); + curl_easy_setopt(cHandle,CURLOPT_WRITEFUNCTION,WriteMemoryCallback); + curl_easy_setopt(cHandle,CURLOPT_WRITEDATA,(void *)&chunk); + curl_easy_perform(cHandle); + curl_easy_getinfo(cHandle,CURLINFO_RESPONSE_CODE,&code); + if ( headers != 0 ) + curl_slist_free_all(headers); + if ( code != 200 ) + printf("(%s) server responded with code %ld (%s)\n",url,code,chunk.memory); + return(chunk.memory); +} + +char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port) +{ + //static void *cHandle; + char url[512],*retstr=0,*retstr2=0,postdata[8192]; + if ( params == 0 || params[0] == 0 ) + params = (char *)"[]"; + if ( strlen(params) < sizeof(postdata)-128 ) + { + sprintf(url,(char *)"http://127.0.0.1:%u",port); + sprintf(postdata,"{\"method\":\"%s\",\"params\":%s}",method,params); + //printf("[%s] (%s) postdata.(%s) params.(%s) USERPASS.(%s)\n",SMART_CHAIN_SYMBOL,url,postdata,params,KMDUSERPASS); + retstr2 = bitcoind_RPC(&retstr,(char *)"debug",url,userpass,method,params); + //retstr = curl_post(&cHandle,url,USERPASS,postdata,0,0,0,0); + } + return(retstr2); +} + +int32_t notarizedtxid_height(char *dest,char *txidstr,int32_t *kmdnotarized_heightp) +{ + char *jsonstr,params[256],*userpass; uint16_t port; cJSON *json,*item; int32_t height = 0,txid_height = 0,txid_confirmations = 0; + params[0] = 0; + *kmdnotarized_heightp = 0; + if ( strcmp(dest,"KMD") == 0 ) + { + port = KMD_PORT; + userpass = KMDUSERPASS; + } + else if ( strcmp(dest,"BTC") == 0 ) + { + port = 8332; + userpass = BTCUSERPASS; + } + else return(0); + if ( userpass[0] != 0 ) + { + if ( (jsonstr= komodo_issuemethod(userpass,(char *)"getinfo",params,port)) != 0 ) + { + //printf("(%s)\n",jsonstr); + if ( (json= cJSON_Parse(jsonstr)) != 0 ) + { + if ( (item= jobj(json,(char *)"result")) != 0 ) + { + height = jint(item,(char *)"blocks"); + *kmdnotarized_heightp = strcmp(dest,"KMD") == 0 ? jint(item,(char *)"notarized") : height; + } + free_json(json); + } + free(jsonstr); + } + sprintf(params,"[\"%s\", 1]",txidstr); + if ( (jsonstr= komodo_issuemethod(userpass,(char *)"getrawtransaction",params,port)) != 0 ) + { + //printf("(%s)\n",jsonstr); + if ( (json= cJSON_Parse(jsonstr)) != 0 ) + { + if ( (item= jobj(json,(char *)"result")) != 0 ) + { + txid_confirmations = jint(item,(char *)"rawconfirmations"); + if ( txid_confirmations > 0 && height > txid_confirmations ) + txid_height = height - txid_confirmations; + else txid_height = height; + //printf("height.%d tconfs.%d txid_height.%d\n",height,txid_confirmations,txid_height); + } + free_json(json); + } + free(jsonstr); + } + } + return(txid_height); +} + +int32_t komodo_verifynotarizedscript(int32_t height,uint8_t *script,int32_t len,uint256 NOTARIZED_HASH) +{ + int32_t i; uint256 hash; char params[256]; + for (i=0; i<32; i++) + ((uint8_t *)&hash)[i] = script[2+i]; + if ( hash == NOTARIZED_HASH ) + return(1); + for (i=0; i<32; i++) + printf("%02x",((uint8_t *)&NOTARIZED_HASH)[i]); + printf(" notarized, "); + for (i=0; i<32; i++) + printf("%02x",((uint8_t *)&hash)[i]); + printf(" opreturn from [%s] ht.%d MISMATCHED\n",SMART_CHAIN_SYMBOL,height); + return(-1); +} + +void komodo_reconsiderblock(uint256 blockhash) +{ + char params[256],*jsonstr,*hexstr; + sprintf(params,"[\"%s\"]",blockhash.ToString().c_str()); + if ( (jsonstr= komodo_issuemethod(ASSETCHAINS_USERPASS,(char *)"reconsiderblock",params,ASSETCHAINS_RPCPORT)) != 0 ) + { + //fprintf(stderr,"komodo_reconsiderblock.(%s) (%s %u) -> (%s)\n",params,ASSETCHAINS_USERPASS,ASSETCHAINS_RPCPORT,jsonstr); + free(jsonstr); + } + //fprintf(stderr,"komodo_reconsiderblock.(%s) (%s %u) -> NULL\n",params,ASSETCHAINS_USERPASS,ASSETCHAINS_RPCPORT); +} + +int32_t komodo_verifynotarization(char *symbol,char *dest,int32_t height,int32_t NOTARIZED_HEIGHT,uint256 NOTARIZED_HASH,uint256 NOTARIZED_DESTTXID) +{ + char params[256],*jsonstr,*hexstr; uint8_t *script,_script[8192]; int32_t n,len,retval = -1; cJSON *json,*txjson,*vouts,*vout,*skey; + script = _script; + /*params[0] = '['; + params[1] = '"'; + for (i=0; i<32; i++) + sprintf(¶ms[i*2 + 2],"%02x",((uint8_t *)&NOTARIZED_DESTTXID)[31-i]); + strcat(params,"\", 1]");*/ + sprintf(params,"[\"%s\", 1]",NOTARIZED_DESTTXID.ToString().c_str()); + if ( strcmp(symbol,SMART_CHAIN_SYMBOL[0]==0?(char *)"KMD":SMART_CHAIN_SYMBOL) != 0 ) + return(0); + if ( 0 && SMART_CHAIN_SYMBOL[0] != 0 ) + printf("[%s] src.%s dest.%s params.[%s] ht.%d notarized.%d\n",SMART_CHAIN_SYMBOL,symbol,dest,params,height,NOTARIZED_HEIGHT); + if ( strcmp(dest,"KMD") == 0 ) + { + if ( KMDUSERPASS[0] != 0 ) + { + if ( SMART_CHAIN_SYMBOL[0] != 0 ) + { + jsonstr = komodo_issuemethod(KMDUSERPASS,(char *)"getrawtransaction",params,KMD_PORT); + //printf("userpass.(%s) got (%s)\n",KMDUSERPASS,jsonstr); + } + }//else jsonstr = _dex_getrawtransaction(); + else return(0); // need universal way to issue DEX* API, since notaries mine most blocks, this ok + } + else if ( strcmp(dest,"BTC") == 0 ) + { + if ( BTCUSERPASS[0] != 0 ) + { + //printf("BTCUSERPASS.(%s)\n",BTCUSERPASS); + jsonstr = komodo_issuemethod(BTCUSERPASS,(char *)"getrawtransaction",params,8332); + } + //else jsonstr = _dex_getrawtransaction(); + else return(0); + } + else + { + printf("[%s] verifynotarization error unexpected dest.(%s)\n",SMART_CHAIN_SYMBOL,dest); + return(-1); + } + if ( jsonstr != 0 ) + { + if ( (json= cJSON_Parse(jsonstr)) != 0 ) + { + if ( (txjson= jobj(json,(char *)"result")) != 0 && (vouts= jarray(&n,txjson,(char *)"vout")) > 0 ) + { + vout = jitem(vouts,n-1); + if ( 0 && SMART_CHAIN_SYMBOL[0] != 0 ) + printf("vout.(%s)\n",jprint(vout,0)); + if ( (skey= jobj(vout,(char *)"scriptPubKey")) != 0 ) + { + if ( (hexstr= jstr(skey,(char *)"hex")) != 0 ) + { + //printf("HEX.(%s) vs hash.%s\n",hexstr,NOTARIZED_HASH.ToString().c_str()); + len = strlen(hexstr) >> 1; + decode_hex(script,len,hexstr); + if ( script[1] == 0x4c ) + { + script++; + len--; + } + else if ( script[1] == 0x4d ) + { + script += 2; + len -= 2; + } + retval = komodo_verifynotarizedscript(height,script,len,NOTARIZED_HASH); + } + } + } + free_json(txjson); + } + free(jsonstr); + } + return(retval); +} + +CScript komodo_makeopret(CBlock *pblock, bool fNew) +{ + std::vector vLeaves; + vLeaves.push_back(pblock->hashPrevBlock); + for (int32_t i = 0; i < pblock->vtx.size()-(fNew ? 0 : 1); i++) + vLeaves.push_back(pblock->vtx[i].GetHash()); + uint256 merkleroot = GetMerkleRoot(vLeaves); + CScript opret; + opret << OP_RETURN << E_MARSHAL(ss << merkleroot); + return(opret); +} + +/*uint256 komodo_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= komodo_issuemethod(KMDUSERPASS,(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("KMD hash.%d (%s) %x\n",height,jsonstr,*(uint32_t *)&hash); + free(jsonstr); + } + return(hash); + } + + uint256 _komodo_getblockhash(int32_t height);*/ + +uint64_t komodo_seed(int32_t height) +{ + uint64_t seed = 0; + /*if ( 0 ) // problem during init time, seeds are needed for loading blockindex, so null seeds... + { + uint256 hash,zero; CBlockIndex *pindex; + memset(&hash,0,sizeof(hash)); + memset(&zero,0,sizeof(zero)); + if ( height > 10 ) + height -= 10; + if ( SMART_CHAIN_SYMBOL[0] == 0 ) + hash = _komodo_getblockhash(height); + if ( memcmp(&hash,&zero,sizeof(hash)) == 0 ) + hash = komodo_getblockhash(height); + int32_t i; + for (i=0; i<32; i++) + printf("%02x",((uint8_t *)&hash)[i]); + printf(" seed.%d\n",height); + seed = arith_uint256(hash.GetHex()).GetLow64(); + } + else*/ + { + seed = (height << 13) ^ (height << 2); + seed <<= 21; + seed |= (height & 0xffffffff); + seed ^= (seed << 17) ^ (seed << 1); + } + return(seed); +} + +uint32_t komodo_txtime(CScript &opret,uint64_t *valuep,uint256 hash, int32_t n, char *destaddr) +{ + CTxDestination address; CTransaction tx; uint256 hashBlock; int32_t numvouts; + *valuep = 0; + if (!GetTransaction(hash, tx, +#ifndef HUSH_ZCASH + Params().GetConsensus(), +#endif + hashBlock, true)) + { + //fprintf(stderr,"ERROR: %s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); + return(0); + } + numvouts = tx.vout.size(); + //fprintf(stderr,"%s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); + if ( n < numvouts ) + { + *valuep = tx.vout[n].nValue; + opret = tx.vout[numvouts-1].scriptPubKey; + if (ExtractDestination(tx.vout[n].scriptPubKey, address)) + strcpy(destaddr,CBitcoinAddress(address).ToString().c_str()); + } + return(tx.nLockTime); +} + +CBlockIndex *komodo_getblockindex(uint256 hash) +{ + BlockMap::const_iterator it = mapBlockIndex.find(hash); + return((it != mapBlockIndex.end()) ? it->second : NULL); +} + +uint32_t komodo_txtime2(uint64_t *valuep,uint256 hash,int32_t n,char *destaddr) +{ + CTxDestination address; CBlockIndex *pindex; CTransaction tx; uint256 hashBlock; uint32_t txtime = 0; + *valuep = 0; + if (!GetTransaction(hash, tx, +#ifndef HUSH_ZCASH + Params().GetConsensus(), +#endif + hashBlock, true)) + { + //fprintf(stderr,"ERROR: %s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); + return(0); + } + if ( (pindex= komodo_getblockindex(hashBlock)) != 0 ) + txtime = pindex->nTime; + else txtime = tx.nLockTime; + //fprintf(stderr,"%s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); + if ( n < tx.vout.size() ) + { + *valuep = tx.vout[n].nValue; + if (ExtractDestination(tx.vout[n].scriptPubKey, address)) + strcpy(destaddr,CBitcoinAddress(address).ToString().c_str()); + } + return(txtime); +} + +int32_t komodo_WhoStaked(CBlock *pblock, CTxDestination &addressout) +{ + int32_t n,vout; uint32_t txtime; uint64_t value; char voutaddr[64],destaddr[64]; CTxDestination voutaddress; uint256 txid; CScript opret; + if ( (n= pblock->vtx.size()) > 1 && pblock->vtx[n-1].vin.size() == 1 && pblock->vtx[n-1].vout.size() == 1 ) + { + txid = pblock->vtx[n-1].vin[0].prevout.hash; + vout = pblock->vtx[n-1].vin[0].prevout.n; + txtime = komodo_txtime(opret,&value,txid,vout,destaddr); + if ( ExtractDestination(pblock->vtx[n-1].vout[0].scriptPubKey,voutaddress) ) + { + strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); + if ( strcmp(destaddr,voutaddr) == 0 && pblock->vtx[n-1].vout[0].nValue == value ) + { + //fprintf(stderr,"is PoS block!\n"); + addressout = voutaddress; + return(1); + } + } + } + return(0); +} + +bool komodo_checkopret(CBlock *pblock, CScript &merkleroot) +{ + merkleroot = pblock->vtx.back().vout.back().scriptPubKey; + return(merkleroot.IsOpReturn() && merkleroot == komodo_makeopret(pblock, false)); +} + + +extern const uint32_t nHushHardforkHeight; + +bool hush_hardfork_active(uint32_t time) +{ + //This allows simulating a different height via CLI option, with hardcoded height as default + uint32_t nHardForkHeight = GetArg("-hardfork-height", nHushHardforkHeight); + bool isactive = chainActive.Height() > nHardForkHeight; + if(fDebug) { + //fprintf(stderr, "%s: active=%d at height=%d and forkheight=%d\n", __FUNCTION__, (int)isactive, chainActive.Height(), nHardForkHeight); + } + return isactive; +} + +int32_t komodo_isPoS(CBlock *pblock,int32_t height,bool fJustCheck) +{ + return(0); +} + +void komodo_disconnect(CBlockIndex *pindex,CBlock& block) +{ + char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; struct hush_state *sp; + //fprintf(stderr,"disconnect ht.%d\n",pindex->GetHeight()); + komodo_init(pindex->GetHeight()); + if ( (sp= hush_stateptr(symbol,dest)) != 0 ) + { + //sp->rewinding = pindex->GetHeight(); + //fprintf(stderr,"-%d ",pindex->GetHeight()); + } else printf("komodo_disconnect: ht.%d cant get hush_state.(%s)\n",pindex->GetHeight(),SMART_CHAIN_SYMBOL); +} + +int32_t hush_is_notarytx(const CTransaction& tx) +{ + uint8_t *ptr; static uint8_t crypto555[33]; + if ( tx.vout.size() > 0 ) + { + ptr = (uint8_t *)&tx.vout[0].scriptPubKey[0]; + if ( ptr != 0 ) + { + if ( crypto555[0] == 0 ) + decode_hex(crypto555,33,(char *)CRYPTO555_PUBSECPSTR); + if ( memcmp(ptr+1,crypto555,33) == 0 ) + { + //printf("found notarytx\n"); + return(1); + } + } + } + return(0); +} + +int32_t hush_block2height(CBlock *block) +{ + static uint32_t match,mismatch; + int32_t i,n,height2=-1,height = 0; uint8_t *ptr; CBlockIndex *pindex = NULL; + BlockMap::const_iterator it = mapBlockIndex.find(block->GetHash()); + if ( it != mapBlockIndex.end() && (pindex = it->second) != 0 ) + { + height2 = (int32_t)pindex->GetHeight(); + if ( height2 >= 0 ) + return(height2); + } + if ( pindex && block != 0 && block->vtx[0].vin.size() > 0 ) + { + ptr = (uint8_t *)&block->vtx[0].vin[0].scriptSig[0]; + if ( ptr != 0 && block->vtx[0].vin[0].scriptSig.size() > 5 ) + { + //for (i=0; i<6; i++) + // printf("%02x",ptr[i]); + n = ptr[0]; + for (i=0; ivtx[0].vin[0].scriptSig.size(),height); + } + //komodo_init(height); + } + if ( height != height2 ) + { + //fprintf(stderr,"block2height height.%d vs height2.%d, match.%d mismatch.%d\n",height,height2,match,mismatch); + mismatch++; + if ( height2 >= 0 ) + height = height2; + } else match++; + return(height); +} + +int32_t hush_block2pubkey33(uint8_t *pubkey33,CBlock *block) +{ + int32_t n; + if ( HUSH_LOADINGBLOCKS == 0 ) + memset(pubkey33,0xff,33); + else memset(pubkey33,0,33); + if ( block->vtx[0].vout.size() > 0 ) + { + txnouttype whichType; + vector> vch = vector>(); + if (Solver(block->vtx[0].vout[0].scriptPubKey, whichType, vch) && whichType == TX_PUBKEY) + { + CPubKey pubKey(vch[0]); + if (pubKey.IsValid()) + { + memcpy(pubkey33,vch[0].data(),33); + return true; + } + else memset(pubkey33,0,33); + } + else memset(pubkey33,0,33); + } + return(0); +} + +int32_t komodo_blockload(CBlock& block,CBlockIndex *pindex) +{ + block.SetNull(); + // Open history file to read + CAutoFile filein(OpenBlockFile(pindex->GetBlockPos(),true),SER_DISK,CLIENT_VERSION); + if (filein.IsNull()) + return(-1); + // Read block + try { filein >> block; } + catch (const std::exception& e) + { + fprintf(stderr,"readblockfromdisk err B\n"); + return(-1); + } + return(0); +} + +uint32_t hush_chainactive_timestamp() +{ + if ( chainActive.LastTip() != 0 ) + return((uint32_t)chainActive.LastTip()->GetBlockTime()); + else return(0); +} + +CBlockIndex *hush_chainactive(int32_t height) +{ + if ( chainActive.LastTip() != 0 ) + { + if ( height <= chainActive.LastTip()->GetHeight() ) + return(chainActive[height]); + // else fprintf(stderr,"hush_chainactive height %d > active.%d\n",height,chainActive.LastTip()->GetHeight()); + } + //fprintf(stderr,"hush_chainactive null chainActive.LastTip() height %d\n",height); + return(0); +} + +uint32_t komodo_heightstamp(int32_t height) +{ + CBlockIndex *ptr; + if ( height > 0 && (ptr= hush_chainactive(height)) != 0 ) + return(ptr->nTime); + //else fprintf(stderr,"komodo_heightstamp null ptr for block.%d\n",height); + return(0); +} + +/*void komodo_pindex_init(CBlockIndex *pindex,int32_t height) gets data corrupted +{ + int32_t i,num; uint8_t pubkeys[64][33]; CBlock block; + if ( pindex->didinit != 0 ) + return; + //printf("pindex.%d komodo_pindex_init notary.%d from height.%d\n",pindex->GetHeight(),pindex->notaryid,height); + if ( pindex->didinit == 0 ) + { + pindex->notaryid = -1; + if ( HUSH_LOADINGBLOCKS == 0 ) + memset(pindex->pubkey33,0xff,33); + else memset(pindex->pubkey33,0,33); + if ( komodo_blockload(block,pindex) == 0 ) + { + hush_block2pubkey33(pindex->pubkey33,&block); + //for (i=0; i<33; i++) + // fprintf(stderr,"%02x",pindex->pubkey33[i]); + //fprintf(stderr," set pubkey at height %d/%d\n",pindex->GetHeight(),height); + //if ( pindex->pubkey33[0] == 2 || pindex->pubkey33[0] == 3 ) + // pindex->didinit = (HUSH_LOADINGBLOCKS == 0); + } // else fprintf(stderr,"error loading block at %d/%d",pindex->GetHeight(),height); + } + if ( pindex->didinit != 0 && pindex->GetHeight() >= 0 && (num= hush_notaries(pubkeys,(int32_t)pindex->GetHeight(),(uint32_t)pindex->nTime)) > 0 ) + { + for (i=0; ipubkey33,33) == 0 ) + { + pindex->notaryid = i; + break; + } + } + if ( 0 && i == num ) + { + for (i=0; i<33; i++) + fprintf(stderr,"%02x",pindex->pubkey33[i]); + fprintf(stderr," unmatched pubkey at height %d/%d\n",pindex->GetHeight(),height); + } + } +}*/ + +void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) +{ + int32_t num,i; CBlock block; + memset(pubkey33,0,33); + if ( pindex != 0 ) + { + if ( komodo_blockload(block,pindex) == 0 ) + hush_block2pubkey33(pubkey33,&block); + } +} + +/*int8_t komodo_minerid(int32_t height,uint8_t *destpubkey33) +{ + int32_t num,i,numnotaries; CBlockIndex *pindex; uint32_t timestamp=0; uint8_t pubkey33[33],pubkeys[64][33]; + if ( (pindex= chainActive[height]) != 0 ) + { + if ( pindex->didinit != 0 ) + { + if ( destpubkey33 != 0 ) + memcpy(destpubkey33,pindex->pubkey33,33); + return(pindex->notaryid); + } + komodo_index2pubkey33(pubkey33,pindex,height); + if ( destpubkey33 != 0 ) + memcpy(destpubkey33,pindex->pubkey33,33); + if ( pindex->didinit != 0 ) + return(pindex->notaryid); + timestamp = pindex->GetBlockTime(); + if ( (num= hush_notaries(pubkeys,height,timestamp)) > 0 ) + { + for (i=0; inTime; + if ( komodo_blockload(block,pindex) == 0 ) + { + hush_block2pubkey33(pubkeys[i],&block); + for (j=0; j= 0 && i > 0 && mids[i] == mids[0] ) + duplicate++; + } + } + if ( i == 66 && duplicate == 0 && (height > 186233 || *nonzpkeysp > 0) ) + return(1); + else return(0); +} + +int32_t komodo_minerids(uint8_t *minerids,int32_t height,int32_t width) +{ + int32_t i,j,nonz,numnotaries; CBlock block; CBlockIndex *pindex; uint8_t notarypubs33[64][33],pubkey33[33]; + numnotaries = hush_notaries(notarypubs33,height,0); + for (i=nonz=0; i 0 && nHeight > notarized_ht-depth && nHeight <= notarized_ht ) + { + *MoMp = MoM; + *notarized_heightp = notarized_ht; + *kmdtxidp = kmdtxid; + } + return(depth); +} + +CBlockIndex *hush_blockindex(uint256 hash) +{ + BlockMap::const_iterator it; CBlockIndex *pindex = 0; + if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) + pindex = it->second; + return(pindex); +} + +int32_t hush_blockheight(uint256 hash) +{ + BlockMap::const_iterator it; CBlockIndex *pindex = 0; + if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) + { + if ( (pindex= it->second) != 0 ) + return(pindex->GetHeight()); + } + return(0); +} + +uint32_t hush_blocktime(uint256 hash) +{ + BlockMap::const_iterator it; CBlockIndex *pindex = 0; + if ( (it = mapBlockIndex.find(hash)) != mapBlockIndex.end() ) + { + if ( (pindex= it->second) != 0 ) + return(pindex->nTime); + } + return(0); +} + +int32_t hush_checkpoint(int32_t *notarized_heightp,int32_t nHeight,uint256 hash) +{ + int32_t notarized_height,MoMdepth; uint256 MoM,notarized_hash,notarized_desttxid; CBlockIndex *notary,*pindex; + if ( (pindex= chainActive.LastTip()) == 0 ) + return(-1); + notarized_height = komodo_notarizeddata(pindex->GetHeight(),¬arized_hash,¬arized_desttxid); + *notarized_heightp = notarized_height; + BlockMap::const_iterator it; + if ( notarized_height >= 0 && notarized_height <= pindex->GetHeight() && (it = mapBlockIndex.find(notarized_hash)) != mapBlockIndex.end() && (notary = it->second) != NULL ) + { + //printf("nHeight.%d -> (%d %s)\n",pindex->Tip()->GetHeight(),notarized_height,notarized_hash.ToString().c_str()); + if ( notary->GetHeight() == notarized_height ) // if notarized_hash not in chain, reorg + { + if ( nHeight < notarized_height ) + { + //fprintf(stderr,"[%s] nHeight.%d < NOTARIZED_HEIGHT.%d\n",SMART_CHAIN_SYMBOL,nHeight,notarized_height); + return(-1); + } else if ( nHeight == notarized_height && memcmp(&hash,¬arized_hash,sizeof(hash)) != 0 ) { + fprintf(stderr,"[%s] nHeight.%d == NOTARIZED_HEIGHT.%d, diff hash\n",SMART_CHAIN_SYMBOL,nHeight,notarized_height); + return(-1); + } + } //else fprintf(stderr,"[%s] unexpected error notary_hash %s ht.%d at ht.%d\n",SMART_CHAIN_SYMBOL,notarized_hash.ToString().c_str(),notarized_height,notary->GetHeight()); + } + //else if ( notarized_height > 0 && notarized_height != 73880 && notarized_height >= 170000 ) + // fprintf(stderr,"[%s] couldnt find notarized.(%s %d) ht.%d\n",SMART_CHAIN_SYMBOL,notarized_hash.ToString().c_str(),notarized_height,pindex->GetHeight()); + return(0); +} + +int32_t hush_nextheight() +{ + CBlockIndex *pindex; int32_t ht; + if ( (pindex= chainActive.LastTip()) != 0 && (ht= pindex->GetHeight()) > 0 ) + return(ht+1); + else return(hush_longestchain() + 1); +} + +int32_t komodo_isrealtime(int32_t *kmdheightp) +{ + struct hush_state *sp; CBlockIndex *pindex; + if ( (sp= hush_stateptrget((char *)"KMD")) != 0 ) + *kmdheightp = sp->CURRENT_HEIGHT; + else *kmdheightp = 0; + if ( (pindex= chainActive.LastTip()) != 0 && pindex->GetHeight() >= (int32_t)hush_longestchain() ) + return(1); + else return(0); +} + +/* + komodo_checkPOW (fast) is called early in the process and should only refer to data immediately available. it is a filter to prevent bad blocks from going into the local DB. The more blocks we can filter out at this stage, the less junk in the local DB that will just get purged later on. + + komodo_checkPOW (slow) is called right before connecting blocks so all prior blocks can be assumed to be there and all checks must pass + + commission must be in coinbase.vout[1] and must be >= 10000 sats + */ + +CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams); + +// This function defines the Hush Founders Reward (AKA Dev Tax) +// 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. +// 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 +// This must be kept in sync with hush_block_subsidy() in hush_utils.h! +// Changing these functions are consensus changes! +// Here Be Dragons! -- Duke Leto +uint64_t hush_commission(int height) +{ + int32_t starting_commission = 125000000, HALVING1 = GetArg("-z2zheight",340000), + INTERVAL = GetArg("-ac_halving1",840000), TRANSITION = 129; + uint64_t commission = 0; + + //TODO: Likely a bug hiding here or at the next halving :) + //if( height >= HALVING1) { + if( height > HALVING1) { + // Block time going from 150s to 75s (half) means the interval between halvings + // must be twice as often, i.e. 840000*2=1680000 + // 840000 is ~4 years worth of 150s blocks + // With 150s blocks, we have 210,000 blocks per year + // With 75s blocks, we have 420,000 blocks per year + INTERVAL = GetArg("-ac_halving2",1680000); // ~4 years worth of 75s blocks + //fprintf(stderr,"%s: height=%d increasing interval to %d\n", __func__, height, INTERVAL); + } + + // Block 128 had a miner subsidy but no FR!!! Discovered by Denio + if (height < TRANSITION) { + commission = 0; + } else { + // Just like BTC, BRs in the far future will be slightly less than + // they should be because exact values are not integers, causing + // slightly less coins to be actually mined and small deviations + // to the ideal FR/devtax + if (height < HALVING1) { // before 1st Halving @ Block 340000 (Nov 2020) + commission = starting_commission; + } else if (height < 2020000 ) { + commission = 31250000; + } else if (height < 3700000 ) { + commission = 15625000; + } else if (height < 5380000 ) { + commission = 7812500; + } else if (height < 7060000 ) { + commission = 3906250; + } else if (height < 8740000 ) { + commission = 1953125; + } else if (height < 10420000) { + commission = 976562; // 0.5 puposhi deviation, all further BRs have deviation from ideal + } else if (height < 12100000) { + commission = 488281; + } else if (height < 15460000) { + commission = 244140; + } else if (height < 17140000) { + commission = 122070; + } else if (height < 18820000) { + commission = 61035; + } else if (height < 23860000) { + commission = 30517; + } else if (height < 23860000) { + commission = 15258; + } else if (height < 25540000) { + commission = 7629; + } else if (height < 27220000) { + commission = 3814; + } else if (height < 27220000) { + commission = 1907; + } else if (height < 28900000) { + commission = 953; + } else if (height < 30580000) { + commission = 476; + } else if (height < 32260000) { + commission = 238; + } else if (height < 33940000) { + commission = 119; + } else if (height < 35620000) { + commission = 59; + } else if (height < 37300000) { + commission = 29; + } else if (height < 38980000) { + commission = 14; + } else if (height < 40660000) { + commission = 7; + } else if (height < 42340000) { + commission = 3; + } else if (height < 44020000) { + commission = 1; + } else if (height < 45700000) { + // FR goes to zero at Halving 26 + commission = 0; + } else if (height < 47380000) { + // FR still zero at Halving 27 + commission = 0; + } else if (height < 49060000) { + // FR still zero at Halving 28 + commission = 0; + } else if (height < 50740000) { + // FR still zero at Halving 29 + commission = 0; + } else { + // enforce FR=0 for all other heights + // This over-rides the -ac_end param via HUSH3 cli args + commission = 0; + } + } + + if(fDebug) + fprintf(stderr,"%s: commission=%lu,interval=%d at height %d\n", __func__, commission, INTERVAL, height); + return commission; +} + +uint64_t the_commission(const CBlock *pblock,int32_t height) +{ + //fprintf(stderr,"%s at height=%d\n",__func__,height); + static bool didinit = false, ishush3 = false; + + if (!didinit) { + ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; + didinit = true; + fprintf(stderr,"%s: didinit ishush3=%d\n", __func__, ishush3); + } + + int32_t i,j,n=0,txn_count; int64_t nSubsidy; uint64_t commission,total = 0; + if ( ASSETCHAINS_FOUNDERS != 0 ) + { + nSubsidy = GetBlockSubsidy(height,Params().GetConsensus()); + if(fDebug) + fprintf(stderr,"ht.%d nSubsidy %.8f prod %llu\n",height,(double)nSubsidy/COIN,(long long)(nSubsidy * ASSETCHAINS_COMMISSION)); + commission = ((nSubsidy * ASSETCHAINS_COMMISSION) / COIN); + + if (ishush3) { + commission = hush_commission(height); + } + + if ( ASSETCHAINS_FOUNDERS > 1 ) + { + if ( (height % ASSETCHAINS_FOUNDERS) == 0 ) + { + if ( ASSETCHAINS_FOUNDERS_REWARD == 0 ) { + commission = commission * ASSETCHAINS_FOUNDERS; + } else { + commission = ASSETCHAINS_FOUNDERS_REWARD; + } + if(fDebug) + fprintf(stderr,"%s: set commission=%lu at height %d with\n",__func__,commission, height); + } else { + commission = 0; + } + } + } else if ( pblock != 0 ) { + txn_count = pblock->vtx.size(); + for (i=0; ivtx[i].vout.size(); + for (j=0; j 225000 && ASSETCHAINS_STAKED != 0 && txn_count > 1 && i == txn_count-1 && j == n-1 ) + break; + //fprintf(stderr,"(%d %.8f).%d ",i,dstr(pblock->vtx[i].vout[j].nValue),j); + if ( i != 0 || j != 1 ) + total += pblock->vtx[i].vout[j].nValue; + if ( total > 1000000 * COIN ) + { + total = 1000000 * COIN; + break; + } + } + } + commission = ((total / 10000) * ASSETCHAINS_COMMISSION) / 10000; + //commission = ((total * ASSETCHAINS_COMMISSION) / COIN); + } + if ( commission < 10000 ) + commission = 0; + if(fDebug) + fprintf(stderr,"%s: commission=%.8f at height=%d\n",__func__, (double)commission/COIN, height); + return(commission); +} + +uint32_t komodo_segid32(char *coinaddr) +{ + bits256 addrhash; + vcalc_sha256(0,(uint8_t *)&addrhash,(uint8_t *)coinaddr,(int32_t)strlen(coinaddr)); + return(addrhash.uints[0]); +} + +int8_t komodo_segid(int32_t nocache,int32_t height) +{ + CTxDestination voutaddress; CBlock block; CBlockIndex *pindex; uint64_t value; uint32_t txtime; char voutaddr[64],destaddr[64]; int32_t txn_count,vout; uint256 txid; CScript opret; int8_t segid = -1; + if ( height > 0 && (pindex= hush_chainactive(height)) != 0 ) + { + if ( nocache == 0 && pindex->segid >= -1 ) + return(pindex->segid); + if ( komodo_blockload(block,pindex) == 0 ) + { + txn_count = block.vtx.size(); + if ( txn_count > 1 && block.vtx[txn_count-1].vin.size() == 1 && block.vtx[txn_count-1].vout.size() == 1 ) + { + txid = block.vtx[txn_count-1].vin[0].prevout.hash; + vout = block.vtx[txn_count-1].vin[0].prevout.n; + txtime = komodo_txtime(opret,&value,txid,vout,destaddr); + if ( ExtractDestination(block.vtx[txn_count-1].vout[0].scriptPubKey,voutaddress) ) + { + strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); + if ( strcmp(destaddr,voutaddr) == 0 && block.vtx[txn_count-1].vout[0].nValue == value ) + { + segid = komodo_segid32(voutaddr) & 0x3f; + pindex->segid = segid; + //fprintf(stderr,"komodo_segid.(%d) -> %d\n",height,pindex->segid); + } + } else fprintf(stderr,"komodo_segid ht.%d couldnt extract voutaddress\n",height); + } + } + } + return(segid); +} + +void komodo_segids(uint8_t *hashbuf,int32_t height,int32_t n) +{ + static uint8_t prevhashbuf[100]; static int32_t prevheight; + int32_t i; + if ( height == prevheight && n == 100 ) + memcpy(hashbuf,prevhashbuf,100); + else + { + memset(hashbuf,0xff,n); + for (i=0; i 10 && (tipindex= hush_chainactive(height - 1)) != 0 ) // disable offchain diffchange + { + diff = (nTime - tipindex->GetMedianTimePast()); + tipdiff = (nTime - tipindex->nTime); + if ( tipdiff > 13*ASSETCHAINS_BLOCKTIME ) + diff = tipdiff; + if ( diff >= 13 * ASSETCHAINS_BLOCKTIME && (height < 30 || tipdiff > 2*ASSETCHAINS_BLOCKTIME) ) + { + mult = diff - 12 * ASSETCHAINS_BLOCKTIME; + mult = (mult / ASSETCHAINS_BLOCKTIME) * ASSETCHAINS_BLOCKTIME + ASSETCHAINS_BLOCKTIME / 2; + origtarget = bnTarget; + bnTarget = bnTarget * arith_uint256(mult * mult); + easy.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); + if ( bnTarget < origtarget || bnTarget > easy ) // deal with overflow + { + bnTarget = easy; + fprintf(stderr,"tipdiff.%d diff.%d height.%d miner overflowed mult.%lld, set to mindiff\n",tipdiff,diff,height,(long long)mult); + } else fprintf(stderr,"tipdiff.%d diff.%d height.%d miner elapsed %d, adjust by factor of %lld\n",tipdiff,diff,height,diff,(long long)mult); + } //else fprintf(stderr,"height.%d tipdiff.%d diff %d, vs %d\n",height,tipdiff,diff,13*ASSETCHAINS_BLOCKTIME); + } else fprintf(stderr,"adaptive cant find height.%d\n",height); + return(bnTarget); +} + +arith_uint256 komodo_PoWtarget(int32_t *percPoSp,arith_uint256 target,int32_t height,int32_t goalperc) +{ + int32_t oldflag = 0,dispflag = 0; + CBlockIndex *pindex; arith_uint256 easydiff,bnTarget,hashval,sum,ave; bool fNegative,fOverflow; int32_t i,n,m,ht,percPoS,diff,val; + *percPoSp = percPoS = 0; + + if ( height <= 10 || (ASSETCHAINS_STAKED == 100 && height <= 100) ) + return(target); + + sum = arith_uint256(0); + ave = sum; + easydiff.SetCompact(STAKING_MIN_DIFF,&fNegative,&fOverflow); + for (i=n=m=0; i<100; i++) + { + ht = height - 100 + i; + if ( ht <= 1 ) + continue; + if ( (pindex= hush_chainactive(ht)) != 0 ) + { + if ( komodo_segid(0,ht) >= 0 ) + { + n++; + percPoS++; + if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) + fprintf(stderr,"0"); + } + else + { + if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) + fprintf(stderr,"1"); + sum += UintToArith256(pindex->GetBlockHash()); + m++; + } + } //else fprintf(stderr, "pindex returned null ht.%i\n",ht); + if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 && (i % 10) == 9 ) + fprintf(stderr," %d, ",percPoS); + } + if ( m+n < 100 ) + { + percPoS = ((percPoS * n) + (goalperc * (100-n))) / 100; + } + if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) + fprintf(stderr," -> %d%% percPoS vs goalperc.%d ht.%d\n",percPoS,goalperc,height); + *percPoSp = percPoS; + if ( m > 0 ) + { + ave = (sum / arith_uint256(m)); + if ( ave > target ) + ave = target; + } else ave = target; //easydiff; //else return(target); + if ( percPoS == 0 ) + percPoS = 1; + if ( percPoS < goalperc ) // increase PoW diff -> lower bnTarget + { + if ( oldflag != 0 ) + bnTarget = (ave / arith_uint256(goalperc * goalperc * goalperc)) * arith_uint256(percPoS * percPoS); + else bnTarget = (ave / arith_uint256(goalperc * goalperc * goalperc * goalperc)) * arith_uint256(percPoS * percPoS); + if ( dispflag != 0 && ASSETCHAINS_STAKED < 100 ) + { + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&ave)[i]); + fprintf(stderr," increase diff -> "); + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); + fprintf(stderr," floor diff "); + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&target)[i]); + fprintf(stderr," ht.%d percPoS.%d vs goal.%d -> diff %d\n",height,percPoS,goalperc,goalperc - percPoS); + } + } + else if ( percPoS > goalperc ) // decrease PoW diff -> raise bnTarget + { + if ( oldflag != 0 ) + { + bnTarget = ((ave * arith_uint256(goalperc)) + (easydiff * arith_uint256(percPoS))) / arith_uint256(percPoS + goalperc); + bnTarget = (bnTarget / arith_uint256(goalperc * goalperc)) * arith_uint256(percPoS * percPoS * percPoS); + } + else bnTarget = (ave / arith_uint256(goalperc * goalperc)) * arith_uint256(percPoS * percPoS * percPoS); + if ( bnTarget > easydiff ) + bnTarget = easydiff; + else if ( bnTarget < ave ) // overflow + { + bnTarget = ((ave * arith_uint256(goalperc)) + (easydiff * arith_uint256(percPoS))) / arith_uint256(percPoS + goalperc); + if ( bnTarget < ave ) + bnTarget = ave; + } + if ( dispflag != 0 ) + { + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&ave)[i]); + fprintf(stderr," decrease diff -> "); + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); + fprintf(stderr," floor diff "); + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&target)[i]); + fprintf(stderr," ht.%d percPoS.%d vs goal.%d -> diff %d\n",height,percPoS,goalperc,goalperc - percPoS); + } + } + else + bnTarget = ave; // recent ave is perfect + return(bnTarget); +} + +uint32_t komodo_stake(int32_t validateflag,arith_uint256 bnTarget,int32_t nHeight,uint256 txid,int32_t vout,uint32_t blocktime,uint32_t prevtime,char *destaddr,int32_t PoSperc) +{ + bool fNegative,fOverflow; uint8_t hashbuf[256]; char address[64]; bits256 addrhash; arith_uint256 hashval,mindiff,ratio,coinage256; uint256 hash,pasthash; int32_t segid,minage,i,iter=0; int64_t diff=0; uint32_t txtime,segid32,winner = 0 ; uint64_t value,coinage; + txtime = komodo_txtime2(&value,txid,vout,address); + if ( validateflag == 0 ) + { + //fprintf(stderr,"blocktime.%u -> ",blocktime); + if ( blocktime < prevtime+3 ) + blocktime = prevtime+3; + if ( blocktime < GetTime()-60 ) + blocktime = GetTime()+30; + //fprintf(stderr,"blocktime.%u txtime.%u\n",blocktime,txtime); + } + if ( value == 0 || txtime == 0 || blocktime == 0 || prevtime == 0 ) + { + //fprintf(stderr,"komodo_stake null %.8f %u %u %u\n",dstr(value),txtime,blocktime,prevtime); + return(0); + } + if ( value < SATOSHIDEN ) + return(0); + value /= SATOSHIDEN; + mindiff.SetCompact(STAKING_MIN_DIFF,&fNegative,&fOverflow); + ratio = (mindiff / bnTarget); + if ( (minage= nHeight*3) > 6000 ) // about 100 blocks + minage = 6000; + komodo_segids(hashbuf,nHeight-101,100); + segid32 = komodo_stakehash(&hash,address,hashbuf,txid,vout); + segid = ((nHeight + segid32) & 0x3f); + for (iter=0; iter<600; iter++) + { + if ( blocktime+iter+segid*2 < txtime+minage ) + continue; + diff = (iter + blocktime - txtime - minage); + if ( diff < 0 ) + diff = 60; + else if ( diff > 3600*24*30 ) + { + //printf("diff.%d (iter.%d blocktime.%u txtime.%u minage.%d)\n",(int32_t)diff,iter,blocktime,txtime,(int32_t)minage); + diff = 3600*24*30; + } + if ( iter > 0 ) + diff += segid*2; + coinage = (value * diff); + if ( blocktime+iter+segid*2 > prevtime+480 ) + coinage *= ((blocktime+iter+segid*2) - (prevtime+400)); + coinage256 = arith_uint256(coinage+1); + hashval = ratio * (UintToArith256(hash) / coinage256); + if ( hashval <= bnTarget ) + { + winner = 1; + if ( validateflag == 0 ) + { + //fprintf(stderr,"winner blocktime.%u iter.%d segid.%d\n",blocktime,iter,segid); + blocktime += iter; + blocktime += segid * 2; + } + break; + } + if ( validateflag != 0 ) + { + /*for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&hashval)[i]); + fprintf(stderr," vs "); + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); + fprintf(stderr," segid.%d iter.%d winner.%d coinage.%llu %d ht.%d t.%u v%d diff.%d\n",segid,iter,winner,(long long)coinage,(int32_t)(blocktime - txtime),nHeight,blocktime,(int32_t)value,(int32_t)diff); */ + break; + } + } + //fprintf(stderr,"iterated until i.%d winner.%d\n",i,winner); + if ( 0 && validateflag != 0 ) + { + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&hashval)[i]); + fprintf(stderr," vs "); + for (i=31; i>=24; i--) + fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); + fprintf(stderr," segid.%d iter.%d winner.%d coinage.%llu %d ht.%d t.%u v%d diff.%d ht.%d\n",segid,iter,winner,(long long)coinage,(int32_t)(blocktime - txtime),nHeight,blocktime,(int32_t)value,(int32_t)diff,nHeight); + } + if ( nHeight < 10 ) + return(blocktime); + return(blocktime * winner); +} + +int32_t komodo_is_PeiceOfShit() { return(1); } +bool GetStakeParams(const CTransaction &stakeTx, CStakeParams &stakeParams); +bool ValidateMatchingStake(const CTransaction &ccTx, uint32_t voutNum, const CTransaction &stakeTx, bool &cheating); + +uint64_t komodo_notarypayamount(int32_t nHeight, int64_t notarycount) +{ + int8_t curEra = 0; int64_t ret = 0; + // if we have an end block in the first era, find our current era + if ( ASSETCHAINS_ENDSUBSIDY[0] > 1 ) + { + for ( curEra = 0; curEra <= ASSETCHAINS_LASTERA; curEra++ ) + { + if ( ASSETCHAINS_ENDSUBSIDY[curEra] > nHeight || ASSETCHAINS_ENDSUBSIDY[curEra] == 0 ) + break; + } + } + if ( curEra > ASSETCHAINS_LASTERA ) + return(0); + + if ( notarycount == 0 ) + { + fprintf(stderr, "komodo_notarypayamount failed num notaries is 0!\n"); + return(0); + } + // Because of reorgs we cannot use the notarized height value. + // We need to basically guess here and just pay some static amount. + // Has the unwanted effect of varying coin emission, but cannot be helped. + //fprintf(stderr, "era.%i paying total of %lu\n",curEra, ASSETCHAINS_NOTARY_PAY[curEra]); + ret = ASSETCHAINS_NOTARY_PAY[curEra] / notarycount; + return(ret); +} + +int32_t komodo_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *script, int32_t len) +{ + // Check the notarisation is valid, and extract notarised height. + uint64_t voutmask; + uint8_t scriptbuf[10001]; + int32_t isratification,specialtx,notarizedheight; + + if ( len >= sizeof(uint32_t) && len <= sizeof(scriptbuf) ) + { + memcpy(scriptbuf,script,len); + if ( komodo_voutupdate(true,&isratification,0,scriptbuf,len,height,uint256(),1,1,&voutmask,&specialtx,¬arizedheight,0,1,0,timestamp) != -2 ) + { + fprintf(stderr, "<<<<< &NotarizationNotaries, uint32_t timestamp, int32_t height, uint8_t *script, int32_t len) +{ + // fetch notary pubkey array. + uint64_t total = 0, AmountToPay = 0; + int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; + numSN = hush_notaries(notarypubkeys, height, timestamp); + + // No point going further, no notaries can be paid. + if ( notarypubkeys[0][0] == 0 ) + return(0); + + // Check the notarisation is valid. + int32_t notarizedheight = komodo_getnotarizedheight(timestamp, height, script, len); + if ( notarizedheight == 0 ) + return(0); + + // resize coinbase vouts to number of notary nodes +1 for coinbase itself. + txNew.vout.resize(NotarizationNotaries.size()+1); + + // Calcualte the amount to pay according to the current era. + AmountToPay = komodo_notarypayamount(height,NotarizationNotaries.size()); + if ( AmountToPay == 0 ) + return(0); + + // loop over notarisation vins and add transaction to coinbase. + // Commented prints here can be used to verify manually the pubkeys match. + for (int8_t n = 0; n < NotarizationNotaries.size(); n++) + { + uint8_t *ptr; + txNew.vout[n+1].scriptPubKey.resize(35); + ptr = (uint8_t *)&txNew.vout[n+1].scriptPubKey[0]; + ptr[0] = 33; + for (int8_t i=0; i<33; i++) + { + ptr[i+1] = notarypubkeys[NotarizationNotaries[n]][i]; + //fprintf(stderr,"%02x",ptr[i+1]); + } + ptr[34] = OP_CHECKSIG; + //fprintf(stderr," set notary %i PUBKEY33 into vout[%i] amount.%lu\n",NotarizationNotaries[n],n+1,AmountToPay); + txNew.vout[n+1].nValue = AmountToPay; + total += txNew.vout[n+1].nValue; + } + return(total); +} + +bool GetNotarizationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const std::vector &vin, std::vector &NotarizationNotaries) +{ + uint8_t *script; int32_t scriptlen; + if ( notarypubkeys[0][0] == 0 ) + return false; + BOOST_FOREACH(const CTxIn& txin, vin) + { + uint256 hash; CTransaction tx1; + if ( GetTransaction(txin.prevout.hash,tx1,hash,false) ) + { + for (int8_t i = 0; i < numNN; i++) + { + script = (uint8_t *)&tx1.vout[txin.prevout.n].scriptPubKey[0]; + scriptlen = (int32_t)tx1.vout[txin.prevout.n].scriptPubKey.size(); + if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[i],33) == 0 ) + NotarizationNotaries.push_back(i); + } + } else return false; + } + return true; +} + +uint64_t komodo_checknotarypay(CBlock *pblock,int32_t height) +{ + std::vector NotarizationNotaries; uint8_t *script; int32_t scriptlen; + uint64_t timestamp = pblock->nTime; + int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; + numSN = hush_notaries(notarypubkeys, height, timestamp); + if ( !GetNotarizationNotaries(notarypubkeys, numSN, pblock->vtx[1].vin, NotarizationNotaries) ) + return(0); + + // check a notary didnt sign twice (this would be an invalid notarisation later on and cause problems) + std::set checkdupes( NotarizationNotaries.begin(), NotarizationNotaries.end() ); + if ( checkdupes.size() != NotarizationNotaries.size() ) { + fprintf(stderr, "Possible notarisation is signed multiple times by same notary. It is invalid.\n"); + return(0); + } + const CChainParams& chainparams = Params(); + const Consensus::Params &consensusParams = chainparams.GetConsensus(); + uint64_t totalsats = 0; + CMutableTransaction txNew = CreateNewContextualCMutableTransaction(consensusParams, height); + if ( pblock->vtx[1].vout.size() == 2 && pblock->vtx[1].vout[1].nValue == 0 ) + { + // Get the OP_RETURN for the notarisation + uint8_t *script = (uint8_t *)&pblock->vtx[1].vout[1].scriptPubKey[0]; + int32_t scriptlen = (int32_t)pblock->vtx[1].vout[1].scriptPubKey.size(); + if ( script[0] == OP_RETURN ) + { + // Create the coinbase tx again, using the extracted data, this is the same function the miner uses, with the same data. + // This allows us to know exactly that the coinbase is correct. + totalsats = komodo_notarypay(txNew, NotarizationNotaries, pblock->nTime, height, script, scriptlen); + } + else + { + fprintf(stderr, "vout 2 of notarisation is not OP_RETURN scriptlen.%i\n", scriptlen); + return(0); + } + } else return(0); + + // if notarypay fails, because the notarisation is not valid, exit now as txNew was not created. + // This should never happen, as the notarisation is checked before this function is called. + if ( totalsats == 0 ) + { + fprintf(stderr, "notary pay returned 0!\n"); + return(0); + } + + int8_t n = 0, i = 0, matches = 0; + uint64_t total = 0, AmountToPay = 0; + + // get the pay amount from the created tx. + AmountToPay = txNew.vout[1].nValue; + + // Check the created coinbase pays the correct notaries. + BOOST_FOREACH(const CTxOut& txout, pblock->vtx[0].vout) + { + // skip the coinbase paid to the miner. + if ( n == 0 ) + { + n++; + continue; + } + // Check the pubkeys match the pubkeys in the notarisation. + script = (uint8_t *)&txout.scriptPubKey[0]; + scriptlen = (int32_t)txout.scriptPubKey.size(); + if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,notarypubkeys[NotarizationNotaries[n-1]],33) == 0 ) + { + // check the value is correct + if ( pblock->vtx[0].vout[n].nValue == AmountToPay ) + { + matches++; + total += txout.nValue; + //fprintf(stderr, "MATCHED AmountPaid.%lu notaryid.%i\n",AmountToPay,NotarizationNotaries[n-1]); + } + else fprintf(stderr, "NOT MATCHED AmountPaid.%llu AmountToPay.%llu notaryid.%i\n", (long long)pblock->vtx[0].vout[n].nValue, (long long)AmountToPay, NotarizationNotaries[n-1]); + } + n++; + } + if ( matches != 0 && matches == NotarizationNotaries.size() && totalsats == total ) + { + //fprintf(stderr, "Validated coinbase matches notarisation in tx position 1.\n" ); + return(totalsats); + } + return(0); +} + +bool komodo_appendACscriptpub() +{ + static bool didinit = false; + if ( didinit ) + return didinit; + if ( ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()] == 49 && ASSETCHAINS_SCRIPTPUB[ASSETCHAINS_SCRIPTPUB.back()-1] == 51 ) + { + CTransaction tx; uint256 blockhash; + // get transaction and check that it occured before height 100. + if ( myGetTransaction(HUSH_EARLYTXID,tx,blockhash) && mapBlockIndex[blockhash]->GetHeight() < HUSH_EARLYTXID_HEIGHT ) + { + for (int i = 0; i < tx.vout.size(); i++) + { + if ( tx.vout[i].scriptPubKey[0] == OP_RETURN ) + { + ASSETCHAINS_SCRIPTPUB.pop_back(); ASSETCHAINS_SCRIPTPUB.pop_back(); // remove last 2 chars. + // get OP_RETURN from txid and append the HexStr of it to scriptpub + ASSETCHAINS_SCRIPTPUB.append(HexStr(tx.vout[i].scriptPubKey.begin()+3, tx.vout[i].scriptPubKey.end())); + //fprintf(stderr, "ac_script.%s\n",ASSETCHAINS_SCRIPTPUB.c_str()); + didinit = true; + return true; + } + } + } + fprintf(stderr, "could not get HUSH_EARLYTXID.%s OP_RETURN data. Restart with correct txid!\n", HUSH_EARLYTXID.GetHex().c_str()); + StartShutdown(); + } + return false; +} + +void GetKomodoEarlytxidScriptPub() +{ + if ( HUSH_EARLYTXID == zeroid ) + { + fprintf(stderr, "Restart deamon with -earlytxid.\n"); + StartShutdown(); + return; + } + if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_SNAPSHOT_INTERVAL == 0 ) + { + fprintf(stderr, "Prices->paymentsCC contract must have -ac_snapshot enabled to pay out.\n"); + StartShutdown(); + return; + } + if ( chainActive.Height() < HUSH_EARLYTXID_HEIGHT ) + { + fprintf(stderr, "Cannot fetch -earlytxid before block %d.\n",HUSH_EARLYTXID_HEIGHT); + StartShutdown(); + return; + } + CTransaction tx; uint256 blockhash; int32_t i; + // get transaction and check that it occured before height 100. + if ( myGetTransaction(HUSH_EARLYTXID,tx,blockhash) && mapBlockIndex[blockhash]->GetHeight() < HUSH_EARLYTXID_HEIGHT ) + { + for (i = 0; i < tx.vout.size(); i++) + if ( tx.vout[i].scriptPubKey[0] == OP_RETURN ) + break; + if ( i < tx.vout.size() ) + { + HUSH_EARLYTXID_SCRIPTPUB = CScript(tx.vout[i].scriptPubKey.begin()+3, tx.vout[i].scriptPubKey.end()); + fprintf(stderr, "HUSH_EARLYTXID_SCRIPTPUB.%s\n", HexStr(HUSH_EARLYTXID_SCRIPTPUB.begin(),HUSH_EARLYTXID_SCRIPTPUB.end()).c_str()); + return; + } + } + fprintf(stderr, "INVALID -earlytxid, restart daemon with correct txid.\n"); + StartShutdown(); +} + +int64_t komodo_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; + if ( ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD != 0 ) + { + checktoshis = the_commission(pblock,height); + if ( checktoshis >= 10000 && pblock->vtx[0].vout.size() < 2 ) + { + fprintf(stderr,"ERROR: komodo_checkcommission vsize.%d height.%d commission %.8f has checktoshis=%lu <10000 or less than 2 vouts (vouts=%lu)\n",(int32_t)pblock->vtx[0].vout.size(),height,(double)checktoshis/COIN, checktoshis, pblock->vtx[0].vout.size() ); + return(-1); + } + else if ( checktoshis != 0 ) + { + script = (uint8_t *)&pblock->vtx[0].vout[1].scriptPubKey[0]; + scriptlen = (int32_t)pblock->vtx[0].vout[1].scriptPubKey.size(); + if ( fDebug ) + { + int32_t i; + for (i=0; ivtx[0].vout[1].nValue/COIN); + } + if ( ASSETCHAINS_SCRIPTPUB.size() > 1 ) + { + static bool didinit = false; + if ( !didinit && height > HUSH_EARLYTXID_HEIGHT && HUSH_EARLYTXID != zeroid && komodo_appendACscriptpub() ) + { + 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) ) + { + decode_hex(scripthex,scriptlen,(char *)ASSETCHAINS_SCRIPTPUB.c_str()); + if ( memcmp(scripthex,script,scriptlen) == 0 ) + matched = scriptlen; + } + } + else if ( scriptlen == 35 && script[0] == 33 && script[34] == OP_CHECKSIG && memcmp(script+1,ASSETCHAINS_OVERRIDE_PUBKEY33,33) == 0 ) + matched = 35; + else if ( scriptlen == 25 && script[0] == OP_DUP && script[1] == OP_HASH160 && script[2] == 20 && script[23] == OP_EQUALVERIFY && script[24] == OP_CHECKSIG && memcmp(script+3,ASSETCHAINS_OVERRIDE_PUBKEYHASH,20) == 0 ) + matched = 25; + if ( matched == 0 ) + { + if ( 0 && ASSETCHAINS_SCRIPTPUB.size() > 1 ) + { + int32_t i; + for (i=0; ivtx[0].vout[1].nValue != checktoshis ) + { + fprintf(stderr,"ERROR: ht.%d checktoshis %.8f vs actual vout[1] %.8f !!!\n",height,dstr(checktoshis),dstr(pblock->vtx[0].vout[1].nValue)); + return(-1); + } + } + } + if(fDebug) + fprintf(stderr,"%s checktoshis=%li at height=%d\n",__func__,checktoshis, height); + return(checktoshis); +} + +bool KOMODO_TEST_ASSETCHAIN_SKIP_POW = 0; + +int32_t komodo_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; + if ( KOMODO_TEST_ASSETCHAIN_SKIP_POW == 0 && Params().NetworkIDString() == "regtest" ) + KOMODO_TEST_ASSETCHAIN_SKIP_POW = 1; + if ( !CheckEquihashSolution(pblock, Params()) ) + { + fprintf(stderr,"komodo_checkPOW slowflag.%d ht.%d CheckEquihashSolution failed\n",slowflag,height); + return(-1); + } + hash = pblock->GetHash(); + bnTarget.SetCompact(pblock->nBits,&fNegative,&fOverflow); + bhash = UintToArith256(hash); + possible = hush_block2pubkey33(pubkey33,pblock); + if ( height == 0 ) { + if ( slowflag != 0 ) { + fprintf(stderr,"height.%d slowflag.%d possible.%d cmp.%d\n",height,slowflag,possible,bhash > bnTarget); + return(0); + } + BlockMap::const_iterator it = mapBlockIndex.find(pblock->hashPrevBlock); + if ( it != mapBlockIndex.end() && (pprev= it->second) != 0 ) + height = pprev->GetHeight() + 1; + if ( height == 0 ) + return(0); + } + + 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 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 ( memcmp(scripthex,script,scriptlen) != 0 ) + return(-1); + } else return(-1); + } else if ( ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 ) { + script = (uint8_t *)&pblock->vtx[0].vout[0].scriptPubKey[0]; + scriptlen = (int32_t)pblock->vtx[0].vout[0].scriptPubKey.size(); + if ( scriptlen != 35 || script[0] != 33 || script[34] != OP_CHECKSIG || memcmp(script+1,ASSETCHAINS_OVERRIDE_PUBKEY33,33) != 0 ) + return(-1); + } + } else { + if ( komodo_checkcommission(pblock,height) < 0 ) + return(-1); + } + } + // Consensus rule to force miners to mine the notary coinbase payment happens in ConnectBlock + // the default daemon miner, checks the actual vins so the only way this will fail, is if someone changes the miner, + // and then creates txs to the crypto address meeting min sigs and puts it in tx position 1. + // If they go through this effort, the block will still fail at connect block, and will be auto purged by the temp file fix, teh lulz + if ( failed == 0 && ASSETCHAINS_NOTARY_PAY[0] != 0 && pblock->vtx.size() > 1 ) + { + // We check the full validation in ConnectBlock directly to get the amount for coinbase. So just approx here. + if ( slowflag == 0 && pblock->vtx[0].vout.size() > 1 ) + { + // Check the notarisation tx is to the crypto address. + if ( !hush_is_notarytx(pblock->vtx[1]) == 1 ) + { + fprintf(stderr, "notarisation is not to crypto address ht.%i\n",height); + return(-1); + } + // Check min sigs. + int8_t numSN = 0; uint8_t notarypubkeys[64][33] = {0}; + numSN = hush_notaries(notarypubkeys, height, pblock->nTime); + if ( pblock->vtx[1].vin.size() < numSN/5 ) + { + fprintf(stderr, "ht.%i does not meet minsigs.%i sigs.%lld\n",height,numSN/5,(long long)pblock->vtx[1].vin.size()); + return(-1); + } + } + } + + if(fDebug) { + fprintf(stderr,"komodo_checkPOW possible.%d slowflag.%d ht.%d notaryid.%d failed.%d\n",possible,slowflag,height,notaryid,failed); + } + if ( failed != 0 && possible == 0 && notaryid < 0 ) { + return(-1); + } else { + return(0); + } +} + +int32_t komodo_acpublic(uint32_t tiptime) +{ + int32_t acpublic = ASSETCHAINS_PUBLIC; CBlockIndex *pindex; + return(acpublic); +} + +int64_t hush_newcoins(int64_t *zfundsp,int64_t *sproutfundsp,int32_t nHeight,CBlock *pblock) +{ + CTxDestination address; int32_t i,j,m,n,vout; uint8_t *script; uint256 txid,hashBlock; int64_t zfunds=0,vinsum=0,voutsum=0,sproutfunds=0; + n = pblock->vtx.size(); + for (i=0; ivtx[i]; + if ( (m= tx.vin.size()) > 0 ) + { + for (j=0; j= vintx.vout.size() ) + { + fprintf(stderr,"ERROR: %s/v%d cant find\n",txid.ToString().c_str(),vout); + return(0); + } + vinsum += vintx.vout[vout].nValue; + } + } + if ( (m= tx.vout.size()) > 0 ) + { + for (j=0; j %s\n",dstr(tx.vout[j].nValue),CBitcoinAddress(address).ToString().c_str()); + } + script = (uint8_t *)&tx.vout[j].scriptPubKey[0]; + if ( script == 0 || script[0] != 0x6a ) + { + if ( ExtractDestination(tx.vout[j].scriptPubKey,address) != 0 && strcmp("RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPVMY",CBitcoinAddress(address).ToString().c_str()) != 0 ) + voutsum += tx.vout[j].nValue; + } + } + zfunds -= tx.valueBalance; + } + *zfundsp = zfunds; + *sproutfundsp = sproutfunds; + if ( SMART_CHAIN_SYMBOL[0] == 0 && (voutsum-vinsum) == 100003*SATOSHIDEN ) // 15 times + return(3 * SATOSHIDEN); + //if ( voutsum-vinsum+zfunds > 100000*SATOSHIDEN || voutsum-vinsum+zfunds < 0 ) + //. fprintf(stderr,"ht.%d vins %.8f, vouts %.8f -> %.8f zfunds %.8f\n",nHeight,dstr(vinsum),dstr(voutsum),dstr(voutsum)-dstr(vinsum),dstr(zfunds)); + return(voutsum - vinsum); +} + +int64_t hush_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height) +{ + CBlockIndex *pindex; CBlock block; int64_t zfunds=0,sproutfunds=0,supply = 0; + //fprintf(stderr,"coinsupply %d\n",height); + *zfundsp = *sproutfundsp = 0; + if ( (pindex= hush_chainactive(height)) != 0 ) + { + while ( pindex != 0 && pindex->GetHeight() > 0 ) + { + if ( pindex->newcoins == 0 && pindex->zfunds == 0 ) + { + if ( komodo_blockload(block,pindex) == 0 ) { + pindex->newcoins = hush_newcoins(&pindex->zfunds,&pindex->sproutfunds,pindex->GetHeight(),&block); + } else { + fprintf(stderr,"error loading block.%d\n",pindex->GetHeight()); + return(0); + } + } + supply += pindex->newcoins; + zfunds += pindex->zfunds; + sproutfunds += pindex->sproutfunds; + //printf("start ht.%d new %.8f -> supply %.8f zfunds %.8f -> %.8f\n",pindex->GetHeight(),dstr(pindex->newcoins),dstr(supply),dstr(pindex->zfunds),dstr(zfunds)); + pindex = pindex->pprev; + } + } + *zfundsp = zfunds; + *sproutfundsp = sproutfunds; + return(supply); +} + From 298c99556282c9600dc27db1931418166fba890b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 01:16:40 -0500 Subject: [PATCH 221/277] The Eightfold Privacy Path --- src/hushd | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hushd b/src/hushd index d08407080..ee773e005 100755 --- a/src/hushd +++ b/src/hushd @@ -90,5 +90,9 @@ $KMD -ac_name=$NAME \ -addnode=$NODE2 \ -addnode=$NODE3 \ -addnode=$NODE4 \ + -addnode=$NODE5 \ + -addnode=$NODE6 \ + -addnode=$NODE7 \ + -addnode=$NODE8 \ -ac_cclib=$CCLIB \ -ac_script=$SCRIPT "$@" From 0e79be41cbdc48790adb5f2c6f24156e48abd97f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 01:30:10 -0500 Subject: [PATCH 222/277] Add some beef to dat relnotez --- doc/relnotes/README.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 19b30f704..f87ccdb27 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -12,22 +12,38 @@ evil organizations. # 3.6.0 - * Fixes "block 340k" sync issues! + * Fixes sync issues near block 340k caused by blocktime halving bug + * New official domain https://hush.is reflected everywhere * New Hush DPoW Notaries replace KMD Notaries (who attacked us, lulz) + * Prevent Delayed-Proof-of-Work attack from Komodo Notaries + * KMD notaries provably attacked the HUSH blockchain their pubkeys + * All trust in their service has now been lost, and all Komodo pubkeys + have been removed from Hush source code + * "Malicious Notarized Chainforks" is an attack only Komodo Notaries + can perform against chains they are supposed to protect. More details + to be released soon. + * Defense-in-depth has been implemented and an overhaul+audit of the entire + Hush source code was implemented, which is partially why this release + has so many changes. + * New -dpow-start-height CLI flag can be used to reject all DPoW transactions + (and attacks) up to a certain height, which is a general defense against + potential future DPoW attacks. Also: Fuck you, jl777. + * Hush developers will not be silenced and laugh at KMD NN ops with too much + time on their hands * More secure+private TLS 1.3 implementation from miodrag, thanks! - * We now use WolfSSL instead of OpenSSL, a huge improvement and + * We now use WolfSSL 4.5.0 instead of OpenSSL, a huge improvement and decrease in attack surface as well as allowing use to do TLS on low resource devices (like internet-of-shit light bulbs/etc) * Hush Docker scripts are now officially maintained! * Faster release binaries with -03 * Optimized and hardened memory pool code - * Updated all our error messages and things for https://hush.is , - our new official domain * getblocktemplate RPC now provides better error reporting about whether there are no peers or if it's not in sync * Increasd in-memory UTXO cache db by 100MB (25%) to increase performance of initial syncing - * Removed more Sprout code which is tightly mixed into deep internals + * Removed more Sprout code which is tightly mixed into deep internals, + which increases compile speed and reduces memory overhead + * New P2P protocol version. Peers only talk to 3.5.x nodes and newer ## Bounty From 30da960ee6b86e5ea4889761012e771dba17c5a1 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 12:01:07 -0500 Subject: [PATCH 223/277] tls deetz --- doc/relnotes/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index f87ccdb27..774bfcd2f 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -34,6 +34,8 @@ evil organizations. * We now use WolfSSL 4.5.0 instead of OpenSSL, a huge improvement and decrease in attack surface as well as allowing use to do TLS on low resource devices (like internet-of-shit light bulbs/etc) + * Nodes randomly choose between GCM-SHA384 and CHACHA20-POLY1305-SHA256 when + making connections to other nodes. * Hush Docker scripts are now officially maintained! * Faster release binaries with -03 * Optimized and hardened memory pool code From 8b55eb275ff805f36a9c76beb187b9156d51eae4 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 12:01:19 -0500 Subject: [PATCH 224/277] More checkpointz because fuck KMD --- src/chainparams.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 2f078a8b0..cd95d15cb 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -642,7 +642,12 @@ void *chainparams_commandline() { (354000, uint256S("0x00000000488c19fd232d9f524b76480d40621e475f9d07de567323e895ea2d77")) (355000, uint256S("0x00000006a09508363685c036bbf97abddf1102d7e364a82f4e74139ca185c53a")) (356000, uint256S("0x000000075259426ff06e73fc17a784d9b8a4a932b95e28a769cc51192c096299")) - (357000, uint256S("0x00000009133b5a079dac92de7371f73af077ca43ce0e435ac727cce95716bf6b")), + (357000, uint256S("0x00000009133b5a079dac92de7371f73af077ca43ce0e435ac727cce95716bf6b")) + (358000, uint256S("0x00000019790c7a510bb1368a512d2056eec1d2c84deccd9fd02fadfcd12f49c8")) + (358250, uint256S("0x00000008c3da7ef9b47fbbc3840721bb29728a266e76e3997958f3ed702def9b")) + (358500, uint256S("0x00000000feb463a7f39261cb2a011f4f0907641c8475c50963a69ec9924b44f4")) + (358750, uint256S("0x00000014d8187303fa9d01e664d8afb4b9dc4ea3fb9b726393c78d5d43d6bfcb")) + (359000, uint256S("0x0000000d1ab129167aadf79236d085d64912254559e3b349cddbd9d8e2cc9699")), (int64_t) 1608068955, // time of last checkpointed block (int64_t) 654996, // total txs (double) 584 // txs in the last day before block 357576 From 90f1c3f33321dc591487129ce7f73c05aef7c50a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 13:54:08 -0500 Subject: [PATCH 225/277] Add release details for 3.6.0 --- doc/relnotes/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 774bfcd2f..31e9dcc95 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -12,6 +12,15 @@ evil organizations. # 3.6.0 +``` +983 files changed, 7736 insertions(+), 17688 deletions(-) +``` + +:metal: This release consists of 25454 lines of change, almost 18000 lines of deletions +and just short of 1000 files changed! This is why Hush code is so fast, we delete +all that KYC/PoS/Sprout stuff from KMD internals we inherited and improve daily. + + * Fixes sync issues near block 340k caused by blocktime halving bug * New official domain https://hush.is reflected everywhere * New Hush DPoW Notaries replace KMD Notaries (who attacked us, lulz) From 1b67750a1bf43b42210fcfe2c2b45bca66e81d51 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 14:07:37 -0500 Subject: [PATCH 226/277] Mo emoji --- doc/relnotes/README.md | 46 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 31e9dcc95..015c219b8 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -16,45 +16,45 @@ evil organizations. 983 files changed, 7736 insertions(+), 17688 deletions(-) ``` -:metal: This release consists of 25454 lines of change, almost 18000 lines of deletions +:metal: :metal: :metal: +This release consists of 25454 lines of change, almost 18000 lines of deletions and just short of 1000 files changed! This is why Hush code is so fast, we delete all that KYC/PoS/Sprout stuff from KMD internals we inherited and improve daily. +:metal: :metal: :metal: - - * Fixes sync issues near block 340k caused by blocktime halving bug - * New official domain https://hush.is reflected everywhere - * New Hush DPoW Notaries replace KMD Notaries (who attacked us, lulz) - * Prevent Delayed-Proof-of-Work attack from Komodo Notaries - * KMD notaries provably attacked the HUSH blockchain their pubkeys - * All trust in their service has now been lost, and all Komodo pubkeys + * :100: Fixes sync issues near block 340k caused by blocktime halving bug + * :sweat_drops: New official domain https://hush.is reflected everywhere + * :eggplant: New Hush DPoW Notaries replace KMD Notaries (who attacked us, lulz) + * :rocket: Increasd in-memory UTXO cache db by 100MB (25%) to increase performance of initial syncing + * :dragon: Prevent Delayed-Proof-of-Work attack from Komodo Notaries + * :shit: KMD notaries provably attacked the HUSH blockchain their pubkeys + * :speak_no_evil: All trust in their service has now been lost, and all Komodo pubkeys have been removed from Hush source code - * "Malicious Notarized Chainforks" is an attack only Komodo Notaries + * :alien: "Malicious Notarized Chainforks" is an attack only Komodo Notaries can perform against chains they are supposed to protect. More details to be released soon. - * Defense-in-depth has been implemented and an overhaul+audit of the entire + * :rainbow: Defense-in-depth has been implemented and an overhaul+audit of the entire Hush source code was implemented, which is partially why this release has so many changes. - * New -dpow-start-height CLI flag can be used to reject all DPoW transactions + * :angel: New -dpow-start-height CLI flag can be used to reject all DPoW transactions (and attacks) up to a certain height, which is a general defense against potential future DPoW attacks. Also: Fuck you, jl777. - * Hush developers will not be silenced and laugh at KMD NN ops with too much + * :kiss: Hush developers will not be silenced and laugh at KMD NN ops with too much time on their hands - * More secure+private TLS 1.3 implementation from miodrag, thanks! - * We now use WolfSSL 4.5.0 instead of OpenSSL, a huge improvement and + * :close_lock_with_key: More secure+private TLS 1.3 implementation from miodrag, thanks! + * :loudspeaker: We now use WolfSSL 4.5.0 instead of OpenSSL, a huge improvement and decrease in attack surface as well as allowing use to do TLS on low resource devices (like internet-of-shit light bulbs/etc) - * Nodes randomly choose between GCM-SHA384 and CHACHA20-POLY1305-SHA256 when + * :lock: Nodes randomly choose between GCM-SHA384 and CHACHA20-POLY1305-SHA256 when making connections to other nodes. - * Hush Docker scripts are now officially maintained! - * Faster release binaries with -03 - * Optimized and hardened memory pool code - * getblocktemplate RPC now provides better error reporting about + * :tada: Hush Docker scripts are now officially maintained! + * :rabbit2: Faster release binaries with -03 + * :fork_and_knife: Optimized and hardened memory pool code + * :hammer: getblocktemplate RPC now provides better error reporting about whether there are no peers or if it's not in sync - * Increasd in-memory UTXO cache db by 100MB (25%) to increase - performance of initial syncing - * Removed more Sprout code which is tightly mixed into deep internals, + * :recycle: Removed more Sprout code which is tightly mixed into deep internals, which increases compile speed and reduces memory overhead - * New P2P protocol version. Peers only talk to 3.5.x nodes and newer + * :surfer: New P2P protocol version. Peers only talk to 3.5.x nodes and newer ## Bounty From 756611a91ed600cb8a3f33e9e034b8e379862630 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 14:09:02 -0500 Subject: [PATCH 227/277] typos equal brokenmojiz --- doc/relnotes/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 015c219b8..697f79d95 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -41,7 +41,7 @@ all that KYC/PoS/Sprout stuff from KMD internals we inherited and improve daily. potential future DPoW attacks. Also: Fuck you, jl777. * :kiss: Hush developers will not be silenced and laugh at KMD NN ops with too much time on their hands - * :close_lock_with_key: More secure+private TLS 1.3 implementation from miodrag, thanks! + * :closed_lock_with_key: More secure+private TLS 1.3 implementation from miodrag, thanks! * :loudspeaker: We now use WolfSSL 4.5.0 instead of OpenSSL, a huge improvement and decrease in attack surface as well as allowing use to do TLS on low resource devices (like internet-of-shit light bulbs/etc) From 319bc2c9345aba779eff6f93fe0f9298360738b8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 15:30:30 -0500 Subject: [PATCH 228/277] Script to automate a fresh compile, sync and initial run --- contrib/fresh_clone_compile_and_run.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 contrib/fresh_clone_compile_and_run.sh diff --git a/contrib/fresh_clone_compile_and_run.sh b/contrib/fresh_clone_compile_and_run.sh new file mode 100644 index 000000000..e1e935d03 --- /dev/null +++ b/contrib/fresh_clone_compile_and_run.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright (c) 2016-2020 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 +# OPEN BOUNTY +# Send your CPU and RAM and time it takes to sync a HUSH full node for +# 5 HUSH as thanks for decentralized performance testing +git clone https://git.hush.is/hush/hush3 +cd hush3 +# Build with 2 cores +# You need 2GB of RAM per core, don't use too many +# (GB of RAM)/2 - 1 is the optimal core count for compiling Hush +# `nproc` tells you how many cores you have +JOBS=4 +# Want to fix this parrallel-only build system bug we inherited ? you are a new hush dev +./build.sh -j$JOBS;make -j$JOBS;make -j$JOBS;make -j$JOBS +./src/hushd &> hush.log & +# You can give the entire or parts of this file to Hush developers for debugging, +# but there is a lot of metadata!!! We don't want any more than we need to fix bugz +tail -f hush.log From 3249f9187d4dbb01edbe29e4ab3c59d69878be41 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 15:33:52 -0500 Subject: [PATCH 229/277] Oopz, most people will want 2 as Hans Grueber found out --- contrib/fresh_clone_compile_and_run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/fresh_clone_compile_and_run.sh b/contrib/fresh_clone_compile_and_run.sh index e1e935d03..95c89c5fb 100644 --- a/contrib/fresh_clone_compile_and_run.sh +++ b/contrib/fresh_clone_compile_and_run.sh @@ -11,7 +11,7 @@ cd hush3 # You need 2GB of RAM per core, don't use too many # (GB of RAM)/2 - 1 is the optimal core count for compiling Hush # `nproc` tells you how many cores you have -JOBS=4 +JOBS=2 # Want to fix this parrallel-only build system bug we inherited ? you are a new hush dev ./build.sh -j$JOBS;make -j$JOBS;make -j$JOBS;make -j$JOBS ./src/hushd &> hush.log & From 4651d9629f4dc67c4744255716f13863d7508124 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 17:54:37 -0500 Subject: [PATCH 230/277] yep --- contrib/devtools/gen-linux-binary-release.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib/devtools/gen-linux-binary-release.sh b/contrib/devtools/gen-linux-binary-release.sh index 267dd7192..a8ae359cb 100755 --- a/contrib/devtools/gen-linux-binary-release.sh +++ b/contrib/devtools/gen-linux-binary-release.sh @@ -2,9 +2,8 @@ # Copyright (c) 2016-2020 The Hush developers # Released under the GPLv3 - #TODO: autodect version number, error handling -FILE="hush-3.5.0-linux-amd64.tar" +FILE="hush-3.6.0-linux-amd64.tar" mkdir build cp sapling*.params build/ From 2d99e8ec2b6f33f7055cb3503af0be6f0bb5a81f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 17 Dec 2020 18:37:54 -0500 Subject: [PATCH 231/277] Hush 3.6.0 "Decentralized Dominatrix" ... descends into the pits of privacy hell to defeat KYC traitorz and taddr cuckz alike. ~~~~~~~~~~~~~~~~~ { EXTREME PRIVACY } ~~~~~~~~~~~~~~~~~ \ ^__^ .-. \ (zz)\_______ -*- (__)\ HUSH )\/\ .z. U ||----w | z || || xKYCx zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz --- doc/relnotes/README.md | 4 +++- doc/relnotes/img/hush-3.6.0.png | Bin 0 -> 1372382 bytes 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 doc/relnotes/img/hush-3.6.0.png diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 697f79d95..377ed1bfb 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -10,12 +10,14 @@ 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. -# 3.6.0 +# Hush 3.6.0 "Decentralized Dominatrix" ``` 983 files changed, 7736 insertions(+), 17688 deletions(-) ``` + + :metal: :metal: :metal: This release consists of 25454 lines of change, almost 18000 lines of deletions and just short of 1000 files changed! This is why Hush code is so fast, we delete diff --git a/doc/relnotes/img/hush-3.6.0.png b/doc/relnotes/img/hush-3.6.0.png new file mode 100644 index 0000000000000000000000000000000000000000..502bf33bf254e70a0c7fc1750314aa9bd311b3b5 GIT binary patch literal 1372382 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�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 z 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 z

V`}zulSIn1>Fq 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

+;<@I_Lbt)K!0%OI+yAepF8RDn`mtSQvs{y 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�aiIiJZZkF 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 wXhGv-%_xSmXW`q#x!lp z#R>4Fy?Izcwk?Phb;{=fXEa?8owFx@4L7Vj4XCH7zZ+I}kCUdJ{z<;qap{G7T$u5X zqmOa=!6|-+JxzB)=i+Gx0fO~A(DJ?s+BkT5N@Rzl;X53M-e%lW=;7F^#G`5kIfsHn zr$X_L)ep~zXtdl)EUx{kJ=MphHWy8!A=n33tjEwu>L3%a>O z2`D3C4)*hszJSf~t4T0m_h8+@!TyoUB;9xHj!W*KuXmbNdPBsZwSU$$_^|RCC>B^bObmi<+ zx^!+jokb8eIpzg;a2hHDDEJW`KNr%mAq3s5Ey%>2@1~K3u_TsBoTNJ8jBCh3(t;ZB zv*YQ)+(deJagyI^y0N^OZr{AlQT2P=b+bs{pw9s3+$HjZ|3l6f0x^Mxc$|6}aMQXt zv+*-Xz@KP0WXLnOd;I8ggZ4qA?E@3jTYF<%mU{Lwrh_?^M!=}1ADkF_U4dWs@8?$! zFYonuz86(%0ja^yS$vtiXAKPy3W+MbxBT>vu0)K=Ztr-oL>KJleqAOf%hl=i6c5c^6@v?NK4$ts6Hm zD|A2Idw+)Zv=n{#q^QO?e8R}~El<;}p_Qwd2l>BM+U_{QLHmj(RzNef(>1rZidOj^ z8t3-GZS0>b#MESk3Ipr#1(IALqZc2pVE#mV)}HKBv)pki%#8r2^eIioOh7m8h)-Kl1^__jbWxGG>Z;2ozXxW5TAI(sNNM0^Cb_F%^& zZOO-G25~jFV)}7trVx1y0q8pQ5rTITDkyZrLh_C>;J67mu7V0>-q}HD&DzDwXc_&8 z3k~4qyogd0I1kn~sc-Lt;B+t?>;Z58$tjf6Xkeb27nr4&k;Hd2}_f3l7e9UK~6Qjij&U zalA}JxNFptc=U;y#m^?U!^VBR&=&&+v?r>%k=As zbo3Y=2lyFq~k>>Ycd zri&B>pFXuq=Y^bg=b-6@liDg%qgw{VUHDm!tNE)tRZKAw)?_PTM zy>}z|QE-glr8O7PaMl$Z;^Q&?m|naTSc^liaNc^n!Nn;Gv!$i+jVCS3#(?SdSF6J^ z_%4IB2XpI2%1P)h>caDK*+NA%-eoFEKK0@$)hm!X>z%oMG0LbiIReMN=3=VN!Xj*{$D-%xK2gvC zNOtAf3E-vf=er;)gmbZBgP?mRG7pct%LL2fsFj2U#1IT{7FHWg!4PrKJ{hGPBQm;- z6>4+Zw+7-S(K-T$y!YZ|w7OrPWOnmGCDRH+3c{Fw8RYowC~b0dZkD=ru><}@cJyk~ zfBfwubZn#j;-XY18T=iSrBS=?sL1s&-vdvRnhW{R&W52)2>HQHdAUxr5(8Z1)WF=% zG~@Xezr8z)X$wuuG0wmaSRWM(g?x+{X#gg)?S)}1_;;3;Df8Lt)P;2kjbhy91q16X zHX^7LVB`!tXm(yQ9uNI3;pJ(B!`^!n9~Q6f-<#&c`aUYp#|;zLqte#HOT6+tQ8{zu zFwy2_34$O676Z-&%;STMA+d?YvHQI{che3Re(x~9DU?v)5bfIW#Jp?^wz1-mS6M`L zQR=?gRvZ_yPj0&hQSRq=Fvg>N1+KO1OWLki^~NK&Vai7$&(p7r&=R9OFpnV10oL9;eY59mj_HD8lQ&t-{khi|#Ls zP=^*VH-U`x5g7W%U@`QahuVsJjE%!+PAXIxLC`Wii5=dFwRGeDYP!3+nQp!N?GQxn zf%_Qq{kQ@>1W#FXpWy|35h<>CL_Xz%G6sz@g^cRWC~Y?4HLzhH9cF$U8#o(xr>HU9 zKoc`;xL33-;B$dGU-_kE)8qZnXFXp1{h^3>l<@NG7e~L|@cMWCyrj< zLN2v(z4)(<(IwM~<1S?|y@FYv3X*peZ2AO-+RU3FT$THUR-1AaaHGHt^Hgjq2*WTH zc*=#2@^x8LSS@SvKsiPYUr$tOZcFoI8|Dw*o>KJ0h$d$CQHat0`v%=evoLC5@4@Gm z%MCZswBG@rz?IEoO@BE4IubgcIe#f|cMNNT+d3vM470vso?>kz_0)uR?2WY&IBa0{ zB-4>i2=XoTuwE4WZkUMor6p~&D+sjwDiATpIv(NF;tot`BZE#dly8lBHm}uoNXtd5 zj_;&>z|TAsTAPQsw_x%V%)0ItV!$U4!=$U<8??P0%i=i8c(R6lZQHPQV0pH8s2%Zv zZ`I7GxCQ+P6pr}WR-Eg1*Vq`4w&rQuiDJ+?Xy?*T+HA9N(0)L>=G*)or%HWfeu4I; z7B{fl2yzux%SlTgPfQd#%4clT=B%H5-$kaQ{IzghJGzmxOWV~9jB7qm3TWOaG?$|s z-je|>pnnLk3E!f>mOQM36=>|t;W~Mn3pgNc;0xqv`|>r08Ibc(L*KSeJEHt?sVN1E zz67l->)HeB$_)l+Y@gU=CW7wLTsY<-&8^3ixJT>jy%4#7gnqAvyb4v8e*lG{Tf4Li z@xkQNwKrdf0+gF_E-&4WdX$#dfm;2ydDqmHbbnNL6z=wm4S38gI*Wb&-W^VcFWrl_ zDt+yjZpe6tNYsIuL$ekqt*^5|V7=OhtPk%R@bX$Wy7u-Tu<^1I_2Y?v;!cI?g%YRF zQwp3?;5$ZvGSGkF3tvd@-+Z4z4dEaIo)>@o!5{oV`lCPkqnI%C)5#e9!Y}+n9Eozm zR|u}Q@Mk~!+4PIQ@QX1R7Qwi2f9~gg4y}wlaK~b-Ps#LGxcY~G_=h35_1j5G_wzsh z^XVu4ub&8eeEKWQpTo34!MhK*BfSp5{R!YYhzBz;5JKjk`I(;yhT$+E=BxI=i!Z&H ze((2wFXGm5@dDGO#U&;K`3zaf!`;vR?9X<}TZeIYio-(+%@k(;;xGPU2>p#+>g_N8 z@-Nd@zxvgvzXC-;`EUK!Z*|P>l+Bd?@sIx_Nr$3g?{UFTed<%`cYpVHgYJjnYI@Ur z?WhD{c^ghKA> z9hrGJg%7d^GE>8F&bDORt_z5LY#;8tdp)iH$Jf)^zx=PTr{3mL(xFAPYi7~1Sw4qA z{al*B%*))XucYaZy_hDSe?E;}xX6WRv_s6X@F((-XKD{Cs8`C2w|MB3rs&GIc$Rnl zYv0*BYc?6AgZ+=E^l4zLeV^mTBWQhV;v+ph6?U;h5=0@9HDuL1*AJAj4HE+AD;F3H zdt{Zt9mFAWsQwgu%Ck4j?}EQi%QvgY zdQreM0{1^oyBH&C1LnFx|ACM0(ox`txjL@p-Dh#)+2e-dM1e~xiok+Jb0?@7g{hj+ zh50nWvBV87&e@upNc-3T-5r2Y*ohQW>>&`@-CV`g4;oBc zw52u+S+pz}EYjZXJ8Au`x6>wkz%~nR+qvljZkfw~Q?iVwedZWvAMO_Dn8*eL(liD4 zjDvo~=L9hNMX90cSei>>`&N_y{8~5@RSiOZk8!G2dVNC>Q^l;H1YBYHQ^e%4_m0UI z;wt2Eyz`%^U$$Ko|sV6nkML~_y$cJ>X!GWiK&S!xle+8BJ5fjWY!;91D4RpJmD8-os&#w59EW3!fT z(`r7;k+DHKZM08-&sj9rFQS1d4sYIGPH)~?Os{`~Q*q1>SDv|&Ca~SBiLhbkwGfzi z-lQCSM7jC`_s$GQvOF=KxEjvJP_=o=gBubi>K3QLl0GJfiKMB`uUZx z`m-Ld4!Ao4tj%%ROhe#n8+Fa1E2msD;FF7d%-?n$V-{s7r(rXkhyNPixC+I$ z7~_jmxY>1C;9I`cxXoB*pN>$APX&kmira2=;q0T$TGkj5Uab?$d%e2gxHYiRab#JB zo!I2vLI4fw;pauFmO;0}dZFtS$YyQvh*-~$NaEtJ)(=DOQP3%ui)<3h+@5pt^r$F*U- zL2ARl;|R;`F((vaz5EBV?8L27A3%qX(ohIK*v@jh&jYw}5Av_at(C(q2!+I@J-DG% zc!3Viy!0JAY7uOMMd9tZxV2;ty$WZWHM`E!=((M{FXu?LzaRhj z$0NO(4BCb?jSR*={nI~%P`wtl@2itZ*m|o%OP-(pzE7v``@ZixkR}!*2YgQcaTMII zeeG-MbD#TM2z!r%=rO6!eC9Jz&U)Nm`?X(7Z@&3v-Rscz-~R32PM`ebCl3vOoB*}Y zfBBbxIg(mdCnKE#?Q7Sr#e4bV>4d-di@)e$_EY+szxkW=r7wM{lh*jfOpNb^hQ8Nb z*fe8Nc<1h&^w0nN&r$ye!Yf?L|X z$?nLYG6}2I!i8j;*S?(|eDlq;`n5N)hX^yW$T8Dd1i$mxrhbk~bY6Hq&3^QI((J3R zrpXtshHY@Q(+4;f+{S)j2tI&^lru9{ArZ2b!Z?IrvW^k&h5IVr<-6*B@hRU!a)ma& zW_}KsFh;{1u^i*VmT|O@chAkIy&HGZ{um3X^~{u&<+qwZYM8WPKGdL4$WEnZNsV|N z=1Nd`*5lRvGExW2gP-hDCtAE15kD4&3Lw;oY9PtLQernI+OzxEp7e-uOJN?1mO&P5 z>QZOjp$sDc_50JwunV$_L@hxDCZaslzNou$f(ziKg*+hGa>zzoU zs7hyU{EPl;9{dVE5gt*>TmNS%Pk9>au=idFhsCS=_on%XzJdJqzWnntPH{W_U-T&%0 z(gW_2P;*eBOxr#i@Z&+7pmmwKKQr)84H?l2?;O4Rx36b6a<@1cLI|r#(=VBR-T3+a zuy`WSi7Pxhi2cKV3bwT=+x9dJl2)6yEj>C>g<9!P1cXpH!^=1_R8(oIJb)+6LZd81 zrjNy#hd@st{CD%tIfDmJ`Xl4eJ{g(6n&{d~_j18+@;3_%))Ea=kkFIF3u) z5WItc*9GXW39F!uvGl-&wM~WO%z3@*z}#C-bO4RzoiFjTtc~&-h1br^zPel zhna>UFR5eGmBSy@G4Y)E>P~>V^7LJSI+xj*cg96e=4rn`Z~$bT9|!4|`{XO#)W+@W z>TpYhetspa{;bEVzt`iG_Yz*7#lQF28(#mezniZ2`#8T6zdR3%um2&=`77EwbUn~+ z4~bvAZDzX2x}Jab&dsRuH>$5CuXyT{J#(EK$98o>S75oG^1Uu#?+2p9_u0<{Dm?-H z{Cc81(x>GMJo=@oik=@O=lm>mIh;J!T~!wlwTyth*<{$gz7Kzw+#e1(+NVGK$AwnQ zs|NUR8dS}xmaO}laj1dm20hB#QJEhD=TVYAO5BodDWPdQExhwmVjcI)P@-QR8nuUt zJ)iYt^`QJ-_sKC!zpbb1eRoZ4KUW@7`a*Aw!1SPq*2OoEALi2aJ5iq1 z*c2N}BP{9Q>Z%zty1hmX3Y%a^zSJJPAPCofhR?Q-oZ_{b)l)d$KxD9 z-9E58-OXKlcg49IsVS6VLtNN-P=?`Qf#@Y44z6m1_siFT)x6b=FRmWXu-LUOfjpg@ zg!d?}4%2j&vB32?imfq)`j$iZbyrWTITVlBxs&YV;cjWs%rE6E&jMdq{U#7^Sq~VL zv7To=zd9bh?{%1_@d8yZ)hhnwX}bE(xBk+#iPo_3HQQ4(C9HSDEkoEf1g><6%UWb& zsnepd+KW#%@00DEmh^QRm}i-A3vPb*qk*tbN(XU!$T9J%fi}b@PzaTXzyUX8+|;f1 zus1PvfGxM3x4)g%-g!5z-a#@~bH&YPoe?njux}Rr5l9?0?YXNIXf7Ub)P-h} zhUkAy1pd?Dw|)IwTDiT585qh&ER+Bd6lYCFg)%KQiO{N0U>!nrY%*r&vyMdNU4Qh8 zQj(kW(Bvhcdd7oxBfWxXEQ}N!B+S47#CPo$Zrol&Gkh%#QxDVhjV2miVZYosb-en$ zABJncgwR!pkcS^fY<;KA=aUVDfM{G+iXFn{`7>$q^2M}yZKGyPuE&wl z=G{kwW;hZGr`iDMhs#NEF7f)ofT;{K0BWpbip4V6wCIvi7k(>WQc&JzoEl=oYM70I zCYvx@O4KK43oBU!FZDaklJU=z40~K;w7bF&t#!wP#y++>tuttoD;xOG&U9gpCj9-t ziG!{my>m$Z+pk=P9OmB}c2vBa!*}oRQMeryb{NKv1@?c^x}NY;7xa&@AQPLOMVO-; z^+?=2{#egwK3lbfwy+!8X0vnm{hJ8Q-%e|2rF+cVy8}kgapHv|x2xZLJKg$!5vpIm z9!J{MytInTIP92SjB+kCN3uZ7$SLak{L7b4>KD z81MYf*iaQwF2`lx&0E?!BwNzF0i4I~paFRq9-GxXGe$X`v4o+^;42#VT_IRy+lgV^ zt|K)6j|8QhhMSZ52EJ7S{dDqsuOYO~v6GGv z{SpH8%V(z2Wo((B<9!B=bQQmmXNM474gbMmw1C(Ni@aC+euko7qF^>e*x10N#xOWPZ_A3Xhzig#4lVepQFS<>~xxrFsRo!82E))RF6 zXN^V~hBaOl3><2~$HICXa;WKUzLw#U-Q#5V$eH|SPjE_v|LisN#PEyx=n)2nCzkOC z15{44xK{qa?hqO{h7?|_UmhQ%mk3uGiu~bW)*S>xxC^UN0yN73#+(7 z3(Hhb*RKqkL=nc&*uh=tdb$F)-?Jag5PrL8!%5phbMdmS>Q4J}V_c9U{{D(NALEF> z^(-#F$0h{zi3k7tGb`nIx;EL(*E%R6a@K#!RDUYNY3AzFY4)Y()8xy~ zrSVrklE$w-pN7tyQ*0t(^D%T5{b4eM#e61t7IMbox>{r*hkAIS+DpFrxABV_W2|u1 zZv=N}8WIHZ9z@G;9MdFw&s%**g{P2L&k)e6amd)B0ld5o06E9OX@e@-=W^BU`OpN{ zPGy)@vD`XA9p(Drb(mj)719iV(w-I4NES)YjuQ3D<{CEOhq?4>mLj1^r z_xSHu*F|9W^U$}$;vMEMpn6#S{m@LlO94mWc2w9A=(=B{&`>doO;a$o(P#%T(3zOI z22ahqXzMmM{7C5OlotKIwX>PF?%qlp*WTin1?szOS`BFGjZ5cN(O%z06L;_3o7mJ} z;`9ZlGJvHsKkaQQJoOSO`2>aW8*05Xr^NUdF%SMRUAM>}T;>cs^|vf_ms@ZSDe3BQ zC>`ktq0IXC&J_m$MuaZ(0w>`5r}Gmc|LFYT6}x_v+wq{_TcR^;IX*}S?dwoyA zaKpqUlJnHh`f_em$SdBaiMf)fp{Y(-2-@+_00Kn3=PB1R8(4F-&u+5Fok(RC=!s9> zZX?uj4g~S{Uk1rvX)NLu9Q~cowQua^gF~{R&fQLhrc{8gz+0Q~q3w-iyortSMr_1n z0ecA55v-q?7)_UFCel-LTnx&kqvz37pGTlR&INCpe{py=dpGa*fiE7?JIwTeym?3a zCol8VR%@85a&9qU{I{%?GeL2N@yliHdRhkW0*N6NZ|lhmRM|oYkD+vt3rugX@1%ED zxM1zQceqq>CY?EVAuVu8`4GI5xINS+yWsPicvv_xDRHe==MFb^y)z{?D{VX?$V0jg zKtpkU$eq;hp@ew!rtST%r#UL@r14G)qYlsa$4%D@r}_?_u*Q=f677Juc7CVf1LPkc zFivV4eUwZ6yii?Rz~i1AoBcf+!Jv1NnPBAN$roRS`HI9c`_=Ea*?2-qf{-5Pzpv{b%ByWH~lwrAlONAozI z#0Xo|!0qq2Ylr+a@nAW$WgTO071_&BM>*l*sZ4D~3)3=dzQi%iwXAmwZG+z+FdV;K z3mv2%Yd`8}n0_WM*2^&E)lPm^EMr`wkMG4P#eA`8e_Ua0p}CiYn!n?$bh9%{^Sl;v zoyoShVZ`%AlN+8!F`etI9q^4caHovenr0J^1{g|Qbz9e2fs0FBneSEbGR(DHn0kZ8 zqqINAv2D$lF!+pcO2{&bPngPpugw>6vav{cgO1c|JrBp9Ci%PBr!9Wt#l^F<0o#>r z!0|IohiDg@a@eloB2mif7#${afNL#_pY*q`O1*kdh)Q9e_z})P)FX9Hy=i0LGH5z1 z!@;kjO@2UA^Q_vGvI~ceFmFRyZR^fMD({$|C-4fb3K((m64j_H`he}#i%sK#T6p|& zai;Md@8go)XpbnLfVXp=cMa^Z&aAiO(g$r1c@13;ExC7}rJq}t`r5f0~4+5@!eHwH$0`e=RFSCPoecgN`G-mS2SO@Gm{4-qw7$*0V#dfM|& z-6;i5DR4@G50wHAI`x64UuFu!vp}q0=s~{%%ZbwWx^R9H6B$KFeb@w1{I$#OfGdom z`F${_$NQ2I)s<&IC=STxTNsHlK=+GV%G)oj?q|F@oceo-R~WmJfAK$Q9wold0z*Nn zwA9Hw_HzZd@-&X=i>7%=Q^z9~(3DBW^e|U;*<}`m*PFk7#T6zz+i%XR9C-iW&ir%=MLZ#pohA=*d$BGD6x7P_(mpr_k>+%~yJR2dF<;e&y`@2!jTp(V&at>Dl-VaT>x!$Y5Fv z?fD%R(3>j{(vEZmN0x{@l$JPhJ|R4NiWhVU(2n8IFl?;XnMeH1Taz9vg7(3^fu?!` z`@ch6^tS~=IxtEM=p0~_L5VWtR;a$iiHB`8@-_W|-5@*_p;QOZrPp3VOZ{5Z z^)R-g2M1VO0c?4R3+-+%r3RO4H4uh25PGIn1uw#-TW)Np$!Qiu^oLo5OA29Z58CaF z`JH@SxJG2++cN5{!_lbzP4EF1VVwxR2!u40iMQ-{IqZZ~iE`j+!aQ)05ICJocKA5T`iju}q?&h(ZZ^8(8HVww&S2n&)k;}`+IAw|XwG+7jo@3_Hnm==f$sKC@ z0Fk~C5(xK+aO(A;Q9zzmf#%HIe7b}p!&~3{db+)|nx238RTKf1(mgJ-KhM1-S1z4P z-+t?LPKbG-?rd6JzMF2|T|`hio-RLiCGD&&rn}1z*o>J==jJEVH(&dDx(A#SwwheN zDsr8V?q6_v0K(?UscD2!6S1kf$-O!w2w2B4skFSjMAN39a+&!6cWJD%!K(02f&c0Q zPUO)Z$J~^s11&R$SboR;EiM^UH$`Ei{q;WP;zVhJd|I5~@M9Zc*#H-~EBuxZe(K8Q zv~=$_0=tyP5wI(~-dI^l58$__p($eIw7B#j`1CBOrN4)8G)5kvvq{I=(mV#a&*mPN zXtTtL@x(E790B1pcONLYU*UwKc-s5d*P$&!*l`4T4La8%bKC@Tm)A1fz0XD547v&c zb&eyR)>YuXjxbSy?lfyx`5iYAnw&;aSqb&8bmz{!*bp!e*A|8c9M&2fagEIv$GJ5& zQRKxHYEMp%r)4gRUx!y58m2ArZ63~<4K^7SE?PGVIIXsCx1nk>) z@1_yzf1I_%Ci8wN=O{;o?%iAD)C^fbkI0`BIa6GgJi=hVw748=Kn0{tzE@+dnKz5p z;E9LWoXIEIxxjOM8~9D?hRa>SXAgL`I|ZZ)bw_}q5O))rtM4-gF8i?=LAj_`UaYTkw6sW;0yPQTjQUXL~?e|DS`pX2-Z;ZT~i)rIqy(%g6>z4p!5 z(lQ%?;v~$m$(i)YPkkcYdi(YC?ybc%K|8;6`AQnxT}?}y`{~>Qr`C5i(%aXz^CrpR z+4K!Lcjm3i002M$Nkln0uQ{@4feSz;Ep{UeGQ=Ap{~@AJ(ZqoqWLX z$V7VPnP;J86Gf(_^d_gvw^-A=A?HQ~#iH&o*$EssT~zwe9WJSe;L|^+6gZ{8DFq&% z0uFW#Ubk-DO8@W={}8*)1)9RoANi3VNf$0$c;vyn4E}Gv@kaXFzx~^|?9+kKg^mN> z5B$IngpjvPUM0`+6epPzh4O#(SAWI8IT-`0{{5V|7CYSi!h8L^;rvhjcM)dx zi~s$T7GB~~(pO$g-%7m!O&l zF~UjcKHgD{;qRX;7%%Y^B*>JSr&pK_BIHUe^2Wfgi6-?vj9a?TCIUruRUt)V$pGWH zjkdy`f_0cfHCYu?&B#1279fF@kQkhGUkALLIqB|!g! zSs%e>?kL)b+E{lX1j~o5cTR3Buca-`rG!vD6D0&TA}QgI=ba?OZ5r|<0#yY3OfXC zH+@`N#CknCGZFa?0bHb!*aR2>_%Ynky*+)fOC4_AzMa;uzmqnuUr!I-V$A#2TWO2M z{rI_A+DDVVhxXJu0uY2d187w?xg(;XHaf!MAr`X(X#c5sxW2iDP$>&&78ba}fiYEW zuLtD52ZEt>X#Q0G0R6{B&Ovv0;VnTHYStT0^&Wvjs?t9M*O2<`mvfES1)RuK>C7j4 zmq12xh^9cnU)Na}|B&}xc&03gf)HqY;TlhhHo_(vAT!%zQk z1`@9mr}*c<17G4;W{MCr1mg9w5FNjacIHQnl4o4Y86kx*My}v1d{c#W~M!Qys=F{g=OLhW<~>0U%S!PD>197M1_tk9kDe*wY8h3T<$20_Qz zC>pbbg;_T85p!u(o+2amaYBGR)npuE9uY4E>3k5uU&dQOT7Hk#n9EYZ1x(lZPA1Xz z%&$ss{gt-hqTM=aP=+&X06fElv4m-?Yd7x(pL+*hdKm%K?EHm{cx2E+dvnyQH*fuM zRn72HZ9Zr3p1<|PwV+2pfNW?yz4FRS2&UdhgOh`4l1-thxwGko=XcWbW-I!^$|5QbY&x#5 zZKT=r7r6_1lnwZev^hG(=?3^VHGc;X{93+~x_))jC#}NP5yo)^=$_)3c=_L*V@@dw1^kD_rt*r;4 ztT2wk$`~56ErhLVLytf&H|aJI+ImUlE&|{&7&R|mbe;(fX;ajscT12E$tMHtDKW8Kh&f> z%&CRG!$!j{=_e__bOJ}#fU6HyLNGsW8CcV}!Ju-Frwq2B%M`TSq+TaT=LX6s_9EwI zX42v|f@p-)o;cV9&tZi5o-~8lQI2(JH^xcE0rFadPM$()umLm*Z?1CGC>KLFNxuON z2B}-~XGl*gOfuW>yq>^lGX{GR>K^=tG#D`s__-;gP}}3DBaHW3Qk-hN#|K$P>oLr)e|obe~h0@++eVX+4QBPJ55j0k%0dokHkNeXFT0 zEo>jli{MU4JbmK)rB2lp^|!vc8+06>m?kZ>rmfE)^xtINk~QTAIL)_Rm2o0%()K%Z zE$}`}r`GunTIXlaE~Ib2-AF5B7Q>8l9Q|Ponoo}BlMhSqgVVF;nUiVf%?oUc_c1%mcsjs(qe-7=p>Q?9iJyhJnY6-Y$W6=>dh$ek z2Z!kIFd_Hv-%l6MpG_AxIjO*1W|QE2^WAq@r3@kynx{SNBHx1NWscUJ3e}%n-JL=@ zrNAi#dMKa6d;f{m$?H zPV5AiI_n3s*RSjtzm6TzpZckv>J9Gu?FNGF%!Th!F6hieU#~~&O?v#wul!2-_kaKQ z6VXB3o`3%N$Vynu!^oas31qC8Xxr?(w-@iG?YF-j+M4&?d@C)z{Z87tbvHE-I(xKn z2I2JVE3c&K@BdU9d;Yo9;F3ogE*jL>Yi9xvZc2m&ZXUeKqhuO)DScFVA0?~~(Y!*E z#*6PQ76OB6d&BsTz`RZ@%%y#pk-as9ri(B`bYWYTw$;^qabdCrGcyLmH)?maTFk(o z-MyX}pHIfsfJ(E5UUAWf09o{xUR2#EVnWPtI!PLN3 zAV1JUkRb#kD?tzPfsQ)Jun>gNA7Vk;K7Sr{tM+iLa<=5FDdT*&cY`NBe1K@kSbg zA>U<@&|-n3W|nsPW0WE<>7>gV!yQpx_B{Rj zS*OlN7&9B3!Wd+s8ES##xFl;>9XYSp;K^q!L zXE7Cc_de#-G zy8>DW$2AQx1|O-Ab`LFc1-1&(clY3L;Ejbb-rR>BYm?lSgHBlLy@#N~8A2=G~xGnTTG5HyWuz!*0<#R)@cL%B3v<3Q}% zeV;U=)Q>`XLM2^jQI{6vMu)SIPszl z>E!!H7QcgEQmU`dqqr;XE5N zi@_hp>DwoSx0`SeIHj^O$P?wBm#$o;IknRqN{5<6C@}LEA8K@z`Ro3nrk~^AWx^aiR@3%j6Duaniidq~PK1z4Wr23gr8_QU>YU zZ$YN5^x}enf+6#A)equ&>DUie*yO9~-Fn=k43^_CC%p~t*Y<1+(!qTDZ3381da5Cz zO?K%Jf(bH1=KvO*33(e$;-&j(>%E(4?R7LYU;9>CMPqaMz3XZ1=AD!t?545vQ)x6u1XR!ykpY<15rpYeoG@uApvES4dr=MJEUbt%3sf2QEN3iD(Ap<7i|2S8=lbE( z&+j-mmcVo@0%Y)qW;x1w1wl1T(lA;!3UpmOw9uH2I)s@TfcfSuD`+eIt=v(0_Y3Ri zS74Q%4^EIKFI?z^EO+_f1x9p`1#_Cgh9ny-lUJ{#>6e~M4_Gzrf!jVBEPF6?Z8sHZ z$FYF} ztpI%CuL~jG_qA8J$)a(K-!7X`64AY4w?O>F;gsS%61kPdPbn#EC=O=6R0hfV2q`qjpJ@21T+-$>gx zu5$tH8iG#*A`57ep>exIx?Qx#w%NEEP(aE;W%AtlG<{|^A!|t!Y*G%~yPx)f<$VD< zH^Ur{XV8Lkj`A44?Lj-j?=CK-^K3lzx?F-%211D+&H#Q9Ui@-M^|wkHbkM6?{%*A1 zINgx?TSdn3GDQa@A5u}FlfPna#Cc=@NjSqkp?+1a;Avm4pa?tkwiS#Z6b4WThsG5A zDi9Ga=@c4kGj^MCO+kxz>5EH;)#oK^S?Y(OkwKb5@uTF(QXStIb~Bby+N6qw52BHRZD#o_#ss1+j#mr zcd9%vhy-ZBHi*D$l=K86D32`)NCy@SD#!q049Z3DFF2D{!BYs-N$b3?uqSJ_SEskC zqH8ZcyIO%depL`K%cf4DwXtpGxusX}@Qf-2PdOO#S6hE}VgwuTlj$x;<=2)m>2dci z7o2mtXKo=hF$XAEuFDFJk2*Rv??-;^h12`}D0%g!?ftGJcU0I(n9o|XH^SH2k z^E%{Pp|E{>9b3x^pqG~Jp}~wTZ`$!T{K?G1bXq~+rqK5Rp=a{T`Z_0wMaIjRCVO2yjQpXCJz|PH>&8wtZ;8Gmk06-D6#r z{n1uO2pZbl2vB3~$($-K^4jLJtI(YIgRy2ai@dgxPSSb@UeyiMJ?=Ylez48V%ps6R z<9nHLB2L#pw;dHm7^XHb#i!Q3qs}_@vFYXpf@g)ZF>k}+rS!Py&+8|(G;hoX$y_vQE;AzpLYz@oXP;F2!`6MccJ|* zf>4F-YDSMEz*akd5Bziua8c7-ZF}cRZL^zywlmMB0CaBcp`p&kkF(G;ZSVnWxfaLw z#7`c4n0di`)>%W0a2i6J>z)P}(}WFXnFgC^ms5T>G$fj9Z#AN`9eC=Nu-F)4z|Kkm zp1PyxKhr0u&laWgHFV<@B2=GF@87u#J)YqBM7y_CasLS~Z3c-2?j^Z^LdOR9YWMyD?PwJR zu=<@oc9;g6Y3D9JMV$YSy*G=|EV=GGBlmr)tgLh{7NdU+GuAxuB2G|FnOS!a ztWiExg+31SxCS2Az~dS?qz0Ts1h54_gYklpNsP3ASaZ81>>9rt(=gs*jJsT*S@If8ROP|RuWn+enLHTI zy!bRf{)MC)Wi8zT_D+Cb00daGtOK0Hic*Y{Zahmi8hIk^i(R9i;#QtU zw9gL#x6n;X`a+-KEaMCF)B(uVfBF=vJMICX-NSV%j%Dhto$+RGmd%F^1xrwCxEnPM zIj^T1k^56KCEr@r^Hst%v#SL!<+k>=U~F4hgth^ycaEc4?}(4sgdi-vZNQ4T%* zL|U5|XK?`-dE*XJUPyD(*SA>w?Z9ZaurUC~PdbDlBLA_pB9GctiJO+MK8tCRuU$Wf zxs~ufi@y>-R*{51(B5_!nk-US7f@KZp6L;@d56vp5cmr|!QoF4NVnq+k3V_N>QI z_gA-X7H4rcOg+82-{PmZ7q?>H7}jqk8jVmt(T`lpvan;5%%?QJjRgh>2baq-hB!*Q zhRT=eo7@v|^8+^8CQ~bYv3J6P%jmsz!(@OX`28$wdM{r}Ll@8w z4ZZGV1310*Ml2$gM%M@cId`eo^f-NK7}aG0v*RqhGVB=5DCmR! zDZAiw_~6H9-IS2pgp0N0LumeL6qiR739Irakb8TTjpz;E$nrx5{|e0WBlbUzgM4OZT5DH$4ix!Dtvay zxg}K88FN0?f>)|#asD(ftAJk{QOGK2d6*dVOOoZQ?b;6@ev-a(svkg{$XwWV$Pe)z z66+9>F5>ONpTK=L?*X3k?gBdV9oCgJ5nhE%$A%ti14N>P)@=v>M{mPg$xOjG`G+>* zDImHTGZsm$`3suGQ{($Cu#RJ{2mR?Y*Ny%(`Ad5Z&v=Co;>$9J57Nr-_7$XB$^S6m z#KkdmNKY(;-r`C0tIu*={n+SeoB~nhMVJz`2{pc#tY}}}bEy1V_upt=_um-)VZ#|` zJ!}bA(rQdYd+mz9y1Q;AuJY7QQ}=(ETch6yT>X@Ajn5LM)jh4q-jpGMc;$R z?qD8nWw3ZL;3O&tr%?T&3ay7V2l3?1!dn#zDJ-ITCiGMb{>`ihuqnM-1)#N`E1kXr zEm&MZ!V}Qb4XkCuykR@4fjkMY3JBe< zC^?geDneF>Q!3KO=A>Y3%%{v1O5#h8J%J-#T?d>MoJOfk)T8vydDaa9C5znzab9v` z(J?8VjJAOX^)g)RPCiY(z)Q+guTt-AwBvG`$KK5xC8?b^jMsTpkXp4gu2JQI1<>s$ z0hine0wMB9uFEV zf6w5OzV6T`%)4t|yaHM;Q8fD;eS>+*U7EP~6V5vrHe;qDy*aak>Kc=7~KZo`Wq;g9f0=LR z`({S#<)yiFZ$~<^n(jhN$Bv_&V0Ma=Ja^N5R3S;P=2bzt%XiZMHdoW+EE|EGo|qWF zgL>Kb({cD&)w0c_Mreu6ow4JiX#_jf0lB%Pai#OvJg$MqHSo9wKGqs2w~7~l)TgG{ zKTP5!OrzgMdl?cL4vB0XOsIbc&HMmr11ns>RKxQWC~lh_`8ITrf5ousQ&(lFu2 zkIHN!RkO{dF>5z(rG+=%O0%!NmZo2QJ*|BAJHVWPODFnM_j#m`xrB7!^5r!ANhH)? zcpmBLi?Ilh86@Y#=Gc%e5^zNFkg9BL0h|s{x?&v6T5}$v%FTy;JQyk2BISxzz**^+ z4w+#V^qnw6?SSlD2?XcNqKEEd4DCuQ2>L2TAu|mFONB+I9!%lG=JjF1RS*Zq`&wAQ zw4rXN?Ie2eZgXU{ZzgTS^hZ^a-xkJzM_s+t$GZ17z(tbz$ns1?0%5zx)kKVaTeqrX z7Y|+Z0WTY3BqR#WiPtN(gUiXED%?{{1$jeLNZ+z1lvYq&f?yV&aW5Z2}r>0M51z*r#ZpcJC9|V^Q^I z8k)V(`TOzjM^FP*Aecs@t|@1NB4D^A;BD>zoK%t&IXL3s2|!TB5V|aPT9NFU0`#O`cXMCB5P*8;7 z3o#8-L;xHv7*ADF=_}CQ+c$5f(@421ja)XbOP?rxBu5ax@e@VT(>@QSkh$+R8#nrJ znC^Bu->YD}?b+{o2;1yX!qM-`u#cd%@D7PQYFz+B45UTSfZ|13l=pA7VS$eq^I5=o zyoQRDQ6wu}~0B?1dpK@z$E5`F*<`!GFY*o)8Ttq)BPWf=j)Iu0n2zq0U`6l{ z7RwS=d6I37SIcRqz}C()|BzwF+;5V*pr6{5r1X-FL{_D&Q-HqYOxBvrZ_|>6Ui` z;MqZ=gfqiEcycdubWD}gs)C@7LqW7S1q4mXK)>ooGU&Ad=)1LnJ#mI`l`2F?OJh8S zGv7;X%R#pUm6hC9ILWvLJsqQ+ltWP8GHe2{hIBITt@;RN0kK&XDVcTiil zwwH#$vf#VrSCZMZtt-D*;E7zn>Tde$0PH}&@$H;!e(Y9C;4h+f&5gxa1F?o%CSKhv zR~BRvBy?85771ZN;|=m79bCnKPG6~E%K=b}-_6Yh(o{erOQYMbq_g%z0bu*uI+rMK zNYgO^isRS$!1a;FcwPHhj$D51lvbxaZeE%1M$@(x9C-BK_Rvo7*fd zh~GL>Rp6`}`xt?CPp;XoOvAd8yb5Rsh^^E&VO+zR-WqvoUp4sEoUW$r4l&TNy#1@1GVZi+e=GK1<8RsB$AF23A$ZlUc}RU<&(N*!3|g6Qq^hc)WT z`0c+N>uy#!A4iLz)1A81FKKOfa)L0naco#rb?&^SUU_x)8;50yK1Vp;Ew>xaww-P3 z2@y}Ko4rptiRRcCfSBM6M7J5Ur=1g#6ZoAwcVa@fAkF-i0)|9DA*98UrqB_z*LU9z8D`)s(WCryDnKL|kT_?rn^r!! zom$b|-Gf$CWHD0r*s(P5c(QkX>)`+$T4Z)P<|vRZU`h+{j;9rX zb+Rf$yfwF&wmBlX2~#U`=|zY2XdXyg3q4qlBR%RFbEH3O(~|~()<`yWa(Pf2l1JO< zp4^q2FNdQM!8>dfAwc^E6;k^VrO+% zYl~dtd^2}Buv=JM?4TodYaW$8jO|%2p`N&UH7#+W_9&8*CoVq0j6-2L0YRDn%&+%go*=zdU`?`Wt~bJV%)qH=v11``L~x1 zycu*#J6DaMf@+>TDB-6hTn0pH1uEriOmV>OgbL)oQ*zemOnDhMvui8P;!B+)T$EiN&y;gD+%i!fBZxk z^Jjqt>8w*;O*5jyEhrk#2ot~9@nKFZvwya=Ad1xxfF5~L@4Mx)U5z^?&j_#=UMa>t z^dp^M)8rnP`%WUYy2=<_n1^02aWbv~mk9iD#$*mMhq)aV#)3DRM~SP^uiy1J8{JK- znO(`l!@4!5Q^J3QPsh5nsm`xIZ1hTZYYZFo%}U{aJ396R5LfsMo|Jy2erYQu_;mP~ zH6)z>o)=DoLB2(FCM+v?!_oAT{rc3_Ps|N?^Tv=)@wN- zR`(l(vx+qQMH$I!lRmI792C3$ZN07URZgtyc3X!s*2`s?i)rkS+Lw5hDzAA3%-$0s z!&h#b5)t(z%`Vj*8zIFF+j>0aB|v}5NR8LK74`t}G(pwmq`^1kiu#~#a1JBwa10-2 z^dmm;Vd+%FO&xfG!Vcp71{&)}sr&M78s^XX68Mig;5+CX1u-A~J*p|?GwuiJRH-4= zxgZEh9+WD_D|2|B#B+aTE=HYCJ#}ftrh0tf6*^rn(sx!Vlj)dGPkhi_V>3l}O)l-D zmf*4f$2IV{1|HYI53mMYl>h$k|9<FNfA7=i=Z~luo^6n&{aRM+cFMJKgxw1FSagI%C%+sS7%d7d~ z7r&VP&Hw&yLW2CDI8@nUUHtW5|8?X+utQ0YX2$%jE{+zF?D&LqKN1yPu0MzHN-AGF}@2Bl+3#t1gIu4PL9(eYtH2BFE zQvZvnd%1WqwGqCR%ZYXXMPofpTt+2JD^uyx-^F_i=PFg17mk*~G+nXBixwZFsdE@r zGJ^e70H7z5#Oi_sh_Dw#8Q4P5Y$8d$gf8u_>G{;NfHb%Zi{7fD!p9Ht$4X>z=&@XY z-WDb50Y)5?2!-rctMwT`2>sRzqv)Vmv4KDxSmhsyF)LL>QMDvkYNgl*!$y9$8Sky= zt!(Y$NHR>SfSJaH(59Dvs;eA5lRF%B6;QHF8iF2dN@555IM~H_OZdam0LW^QIprd$ z4y2MhJRuM#g375NBB8TH-ScWx+sjBRP0XYvr185iTuj}kS(NqD1~^914$jqMm+z+r z>g{OT^6ev^(#YRifHEO5%K~@1A_~x!v0=Y&KK)rpOLc(3se}s<6mJotM94Ej zH$<@;>+TBy>DOgMOUL((#eE;8s4kYxote;%H-PnRfOYF!BM@6MXcoejF&5wuG)k2y z-RPYi=BTyxuzeeS+pf0p>>MU2Y+fS8GGCVhn*gT%X&S|pqDhm4=lw4TB<$?muV2$_ zvuyl%MBfWTd-&_4T~x^u$Mz$?_{Ohcj5iWBTtvddSKKWx|HDr^?y3grCSAev769-z zz;9I?gmgLpxO_!yHW*i~!H~>X&#$_F{adGhDX?eVZR5`*1<(ck`?}#jI<^x^9#TJP zp;#c?$#VF2y7N6u6*k%g@}!$ithq~}vPJpCf9VmHDdM!={Kz4BW@GMSUc%lmP)PnL zH*u&he-u?8!yK>gY*|7F>?{HvH`4L57t)FImr@^_ml0n?l4CNq$L5D$1Ge>}^QD<~ z#5kZi%k#sQW;Z-9r7J&7T#oy~lgs=1o%?R{&_}s94|Ra8-T1J~l9#&q@M-VW^IpS@k8n0(W2Tz;J=`kygh#1n^IbNX3Z05H zsz}NvO&;HeWU%Ulg-dy$n;f3;ppB0~^&=|j$I012PzJ;gGvB*|u~5m~KD|ZNg4@6K zTfdbA!5_t#PU$Bvzx;Cg`Jey!-EZT0{k7N9zx-eRaOv&Gc3m1}q4`cq~ zzx>6ad8o(nGe7e)=~sXCSNBcqZUFq|Z~kTg;dQ^|-7+{aI>{@Y_=~^ziyvzDy2STk zpQUatU%s4vj=o@?nwjEng+=c4oA0FQH{MB$_s6-Yk0Y69QIm4vOd5Lf$uxwjm;O(@ zkh-6|lv)6Y1f_QXj6%n@V1+Zd;6n%Tp=}UppW#fcg%{=C;{rQC>1j)l(4hXml;lk58peE-~$2SV?^zkE1vAkpg*y^QLULpiQ9T*7t3?K(@0g?#(aFlgN$v-yk z+Q@GJ>W9T$cPsDZS(5izh9zlg!V5p#e?)aVnM^(`j=Y{hug93SH1-cZa>1mW^T5@SxLk5|H-x{nSs{wpDLK{o6iP zMvMVoO7bPU`z@UH8~l_2B2DTNI)*L4Q2{zKulTHac)s&oh7RdYZk?g{0g|KqI9dE~6d1a4z*;yp%e|P6L9o z(Svl)4gg@!3Sb{`sIH@xi?=%I6P{dXK}WQJq^B@i05=1ajE-aC9DC-W5iIpGI(6Tw ze|3P3nlq=*0;L8Aeli~s{mIJkuc|j+i#clgtOYAU z_MXIN4~)36t)dTi>(*~`Sf25cf8y79FQ;!D`PjJ~U%Qg8sHc)d*vqr10~jf5H#h-o zz0^(cR{fw-lB@@}%D`^^@KBk(w_=l@=2H_-(vbedX(|G!?>0IN84Df6xT$_csc-eW z_wwvUn$~i=8NZ2CwyFhoCFOI8cME17+%ydEnjcjSDa~yJ@>HF~)kVB*^c&0C&PKHA z1C+p5(py5|KW7+^aI3R<8EO3)RHaNqOIFyFU!hN~;XzQ{Ia~eB{ao-j*v*|YfaxQ> zooS3TNBT*#@)MVvK4jZ~}^Oyn1yFJ5z;w!iIYodqo-9yg(#A;;8$tzw6%keUx4CU!HaUbvx}3F-oI8DsO&B zbU!dB$BB}k=3UhlkImy6cw7TNS~VaUDwO`i=1k#0$N0xdr(#}&o_rie9w7t>;7i1R znwvb=Hg`M1_7Q?U2Gx(K%O3}4^*F^X)C?^pIz5-z#bPBc!$6l>=rQ~O6+~%TJGTrk zqcj*v$B_f7+-mKm7i%2vtrG&>yiBDV{fX+4TB(lzK5DiFzS@#$4~r4*$;%eT*F>RXCh7~NzljmryZjIR+~ zmDw!2q!M?*VE>e;kHsfxI9c@~RjU4Q<5Km>{$pSD94RF0kxkl)_Ac=o-hOQQhA(Lv zGA<{n>S2FO4}O*Us=KK6!g_5q_4>+XP%1VbeRAXApb5-6v+hjGe0nU*qo=CNS>)() zKN5%5QDN9k*SJc2C0+d(-Xs1;T|R2vKcMHmDp0dB*UK8}J~GJ&Ytt`zDE04!E9SSD zx;}pG=C58)lW)D3X5amQJfqX@7?*jTJ(Gs7TuDQyd+C4XO6qyy2_)1}Q^Q3z+uRl( zfO;T?q$eOsw^kZ2&_qZ%lwcPpE$RO7pX8OgZbkYOw1aYR3@!~;a&>Gffn03uAbHHQ ze_j3w=TI3|h zCKvu}0Rid94FwC-y1}N*I65_l7gNjBY}(**piLy#+W`d&5ak7f&S!fPCnfRx3@|I# zCKmYJ@B9z?%jU6utj*{G^gnB;G}~s?FWRvX{M-i670_&9p+* zwP#Mqn?;{dk9chRQ0OL45b>rz}YkQqB6eP`h3S(lsZ@g3= zyZIq!c-6ObCuqJj34hW~bJR+P)MMTwPs8!&e)z9JL3QQ?!`Or70k>C>8ef$kvW<j-aH9tcD z>uqd2-nw-=o#vu&rPkFqp>AVOEXiNyF%S#{ZZ7kyIC*<)e(*I=_~1uL*^4;6$kK}s z7g!Uo)0ee#Y3q9r>*XHC+`MWNS@XLlXr=Ehhc0eT4k7Tc#3`a}#+eszws5aaiRWSS zArCB1Egx&;KTJRKz>mToO@N!N2eW=8M9(kdp>RZ$cEkCVlzO~Rv?8X^xR;`6gR@YumI{Fp!DBr=KKaelR40*_FLegOD#Jx_;LplAdKUsATo`6xsMqCU^ z{koxP{kqQb&$YK3bqY8*q)pG4SX;v9t4bnYL7r-Qsp<05_V6U*o+?N(@37bkFRFZGQ} zv8~S_Ct^eN3#qsIwo5srNbAsO>s&0!ycyOo;wf<|iaLl5T;?77h3m5V8Z3VqtL5-4P`$2Vt!3p#o}pWqxKx!kEcKtGc9RD?>e6_430y=KBb^HP*jD6yZ}T>X zs{h)K#$o@o{PsoLK5#Vpr+AU&ZZwudT+6iUYx{lv3`iV~J$aXP`mQIttn-55lzx?U z(^J3n4a;pCXM7;vN8oy!q;|_|eRyimaJHTNaIAL;>-s(JCga`v2y7SQRd4&lw2}31 zejm0?_m#Q&kjC_Lf0B0}EOJ-Xu6}adt=nD%Dz?zM?zrz!NP-iJD=Uj^{&UX`YX$Mj zB~G!gA~eJ>e`I65nt$6T_<$;gZg7(x@la_A_W><%|3E!&deeXO!FsBU$9~k}%5Qk# z?JDa-=@4G+HepIS^{|gY^?D`#IKDH`28NHPXP&u|+SX^&_mGra*=kRhpLsD|80|@~ zf9KV7`~D2l5*b1$MYJQF) z;AndGg%{J6C(d&$)!>kHh}7c30y>l!xZA7g&DX!3-uvJ#9h5v(ozvUvFFgHRdh*mj zdi~qqO7Gv9inJqg^O|46uHJ#ey802AA3b$0z4VDsrgJBTW1{rt^tZqFdb;|-9dyiP zsgDw-45aSffi#M=)%MyF<(np-dxJ*5W#IT;Pdk7(^1si{N-h54T@PW!PgUoo(8app z*}=l`;#1G1PkrK9j?iYpJbwFndhPW$(>UrB4gwa8CQ{E?U}En`r!G95zWCpLKAjnC zOW*$H*VEU&^_?`otX{O7sok>iy_?OFAL1!BU;O7XSPqGBEkw<44o-YE=Mv@j^AyB% z;^^T5ySgc5@ae?R%|giu$w}M4y4fp7-S)xvVD=&|h_RC%Mxq@IRfBiqEb*3i^WmiC z(Or!Uka;(c5`IDZ!$5WYbufXdZl$e9#x75qE+P#tgLqi@hAi&;EcI2lbm8VkM58I? z(!P|z_fm$&`qfQS>fd)6k=ANM!Ee*C9`#c%L#aFcly{%GO}k;DBq#@)dS2_kEN`ORw#j$OKxPJQ~5Y4p=CrLL!* zOkJl=A)yY)1V}1TXkq2s!V23S(g7XMBT!Hj8~aWEAMWuZ_@(C`wlQyT4lPIz3OG2o zcu>8Jv|v2ur4%qXfEXyDW0imk2{}Y*(+{Hz&?{l|j#e0IZl&)~6$}d~?a%-obZ&*s zo~fyc)IN*a8ua6LsgqPuYWhXabVXP{O#Ro(Y&$Z?_-C8jzgk*c{Ah6GB>-pgr4(-~ z3+H&k6l%7q%XKzLSLWtYCpx9usN>dN7X{>#zHY=6mv~GlrxD-r)vOHl%ti9y^MN1p zT=HIj7LU3UeG4E`J9+UGL&qQs|I=gi{o`rzR$u6ZWO<24`i#|z9{x5ijbgbOm#V3M ze|-_!$Xx{O(1)yL+x%7I!t7TxH4@`9mzbA$_sbC^5LL>uzkK@phhm(+D`-5598Kt{ z2CB(E;g|(Oh;|iF52<1XunQBLX}g`iwz4-Ddne7_P}NvxI`Q<=Y3#XY z(y^zXNt%{@JcDefU?R*vqN2pnw2ETf6seFfZESc^c4p$WQ)9 zyT(G2%S(GZ`%;gFQu#VW_x%lL2=1`a-t<=;g4$m(wRR&5A~FH zsRjkwVZAMKk>L$=*mnXJ4|cbwvA*FXc~G6Y=b(VR}`4 zRd#|>){nrEeR7pWH*50Lfqm#!Cof8_yO|)5%S2Q~L0p6jDhWu|Pnb3Qt+OazT7!>< zZ<^#p%nTd6&RG^C_zN;5XmonGH%%eczD#;&j}4@;0m@Mk5$TzA5cixIu$s$S$fG5| zl|0Z+R%1MQkG`DS&%|=Q@kViV%62{pVu)w^OaK5t07*naRFt)92xslX&2(uu@~LF~ zNPloNf+KsN%lQ(?|(`63g*qg`rPV#eyR`H`&w$3Q0l z>WCYNVF436X4BN%ayohHbUJ@#EPZhG-L%Dq<8e-PF3nD+JDm9H zLiN^}v***={4^IA&vX6FU^>Sf{NCH&OZT|D#Eq+mHg-bHQ9QK0)y@9_E?Dmy06+s= zQ}vP?0lmW^QDk{fZlY0`U zyQ?)#v+?fcY&Yv8FURzvQ0EhebeyUpzv@ozb0dL#d)cXLDFu7H_*_ui4F=N?ME1U< zO)ga2fYx*Y^mVa$H_OI;w`$4Y&jtFRa*REIKvXczQor62}XmO$`pS!Mu~*ynkqHbc8s;VW3qCxmo@>)~2oAq2YW0ZR(+{{ep|+)r&V3{&3AJ zXFZMpMOSx!Z1xE{_6Q8SrX-#jgw1-mpF|m#N$`tSHXFN88`#_1#r-?1_3<+g$SK$= zz^Do}FOQy@o{IKxb8&-ugvtUU4$wYbX+gR|eYwsb;Nti-F3t7gRNJ5rch{u~>AAt- z#giKO*aB#J(WZ3XZq~uZxoy$OuKo1vVj7^X=p0;DNnH_kVCWcm1jMKQT@xulkT)&yQ{XEr_OgO@VNv2X<`x#j5-({ z8BBAuaTj%O{d+E0oT{DoLEp4J zjspCEHa>n5A+qka^w!&Nr&%`pa;j`nbHebGpZG+&fBl_w3pJ0n!RgcIQtSEx^YL~% zaeRoOw3@DS3ers?pz(u~YT|NO-o-C3KlM~PKGc_P-@2ZzGY+;_=xemS{ZGJOAzbgL zDVMt1Z#p<}dEvrk`aj@5boA=`AEZ@w1|E#z4>~&b8jm3 zkDNd+U=Kuu3**QaG&FVzWlL3aaQB1v($vkwPLhPEFn=)aOiEc2Kl_)6H6sz0p>N<= zx_JI<+M2zc-hA_2CT?ztp3ReKhq@{mI1Yv&vQZo8Q5-p*KK{7u|9W+t`g5oJj7onqACmf9!hVW zgy5WonR<^6h--HyA)H9>vp7)-#j@|k$z;)B1R>?_y;$ScwKvmWaa!TCpZ!!2 zHS5?3+(n*JO=V}gOo&EX-b)!Y1has+zuyi-Q>TlWM`~NNayY0($ z0JXfAr@Nq02PCPT{)?%<7rSOpfpq(T3|KKm3c4|l`ged41ZV``%{!z!KxF+lx|cNS z&l0cC629*KVc$#LJZg9+8X1IQN`05_`g6aVZQ!`0_f_pt+{?FNEoUinsUMje{nW>6 zJ)MVnH+)I&ApfOKOwTqf<4gbM$qVz^0Wl6U^EYlXSudyF=T4?!B-D?;@O&CUhk7r- z)6SVwh;^c>1G?-2*IL{HNR_G9WY8klZJ~VGlaBo9wClk857U?r=tkn=v<}pI^o*h( z`68F{a)Uc^BLL~pJl=$G)?rrH07=4eH<|cE+3e4*&4E#1sJ4A7RPL1QEHneN5lic>Da_I4Zhs-ZXoVKBVx`PEo z2dZ8=hR=rn=}qRyRTilOEGk-JJ`|)DV1mjBGHD`iXQL|PyZPU>p&@k7#%K0YY$}I% z>;}%3nU$au@AqTK4Hq!Py2GNdt#2Up)AyIrw><+-pm$)r2;__*e<5=li(&fDmJ%*3 zQa4#tZn1b2O4o#rdxQlXCt79O{rSyyRfebsOWBa?i0dEJ50zq-$!pOfQ74;x3+(Zc zO}y(?*)eac0%;RaU~6p!o#}I-OWjDiSdb52fM-AuVfd*_X#nAg9;DT~IFaC@R|r2^ zn0Jj*?>j+L*+|}Cu?jjOFR{7BA{t;rvjgxe7%<`G;_#Ll_fN$wm6)4^pM3AVcY>yL z(}zrD95pn86wZs%XHWOo)}=@hNqlMJ{8L*G z=1v6-S{?7ChPPHCP(t1H$pV5Sb4aGoKvU+CR9{7kf0KS@4cZ=2_fhBAF&L~%)zc{L zKgTA7s$kYZ)YpmHcm?p~Uu>t4`LuJAmXg5+R{GqEv7Qxxh)?{Mr%7dMqz&m~5yA%c zTX=fwGV>_Dm`{tuFKI?CIAHngb;D$^o4?+4jj#)hf%}Y`@msgJpI{Wwk4@Ov2{3$) z$G1$V59eR-^w|7})PVg%Dc2P?d5!^&jrZM1o2|X+c}_gu1DI;>JI1L6PNa;UN>6d3 zXda%c8~$ct27wz+)Go1!HhkiA8f3kFk9#jx)_2mS3ugf~;Ss9d_0UDNGd_f|?{@-L z_CO2d*9S&M(*QJn$@Iye=i~~-+10V~6t{~;l z2<3#+XpGl6c&A~&$2CsOFD|WSfAEFg|KOUn4-k1p=1B_Dke!=KvcvA!^1N>c2eZ<>My?JV<8}(4u z%O=8)D{DvwbI*xo=<%|9*0HPbw7me*kSWUChae&Jfqbt~&uc5LMU0~t0K7Y`AOzV- zI5#H-hX>RAbe6{NqyD?tsBD4P6bJCK$pygSR{E9Fz?;OiK;QG!gwok7w8uIp-PShg z7r2u>{Cb)O!6NFa69Ksq1RB?=tL3#V=$jh}y=jGwjMzva-=2CfU^kdipBpyxvCYky zxM!%d13n!i*xWyaLK>OTJHQ~~&lfy6q+c4lLv zi}qLpGx4%--#v+C{oCHI37nV2Mcf?fq0f0om~|RyGFF!4Vc~J?6H0G)lAn2`qx(?# z$&F6<>xsTD?;)O~nzj+@Ssua7aRp4>Z1TiMKiJzK^xpZakMviV%lf&HypIh5f$B~- zec=B+iQs98KKN}hi%vGNM!dIXZ8Kvx_S!>kDxW+v0U@d^4XJcVtHFh?I71aAJE;!d(=vTc^LUnxYWVT}aX0fA$8HB8V(r_5={PC}CKe{>6Wghe&hz4@|53Vv zg!tOx1R(P}X=Y(99S5*|=9y>GXn#k#^TE~h?$r-i2zRHGW20$#ZX(^AoJ&K;POy74 zn3f@~UHxOk%Y|dmugjO7NImS-&a!*BtlraohTS)gBEIv+OuF$t$AsDKJv-8tzVWrM zr+ag&NY8&F9e?@7^xR9IPUoI{5sAB{{Oj2-ZP{9Y5exhbPcHsjRb!f!278y z&!me0xIjn0XHNsxET;G0dpo_uj?p4Jun!o^?|e7C{=KUqB-z1)dHUSN zbcWrq@jExu^ul^NarRsqgsxArt2uP?6lz7-^=vtnEmE|-`%Ojbc|iP^8g4OLWx~rDakUD1Mgk? zAZ@kxrKg{HHeEP10t0-V3%1^4SKG<{K_gLdXZX&IYw5eMy`HYKA>poQ-{44k`uS&5 zPwQ%W|N1RvlKyo5-08HzgtW>TZrezLI>_X_wlJPve;vto(wJdKdWIe1J{JO}2!V4m zX5{#(^z5_Gr88qgY3lyX^wwK%hpxt9^rBv3V?s%&es$ue)%4nTzmx7vEO0SWRqmFJ z^xnH~aRT5r+jV{E(vwf7V-U=CBqTX^e3KpVxN}+3V;6dp9c(>4e5vi!0+=|edwk>aoehCCutVwA?^PB z&;OiD-lh))s-5inU?kOtE|cknoc^c(^q-6Knkr?jSRAjomRkxy)CN!vF`h7mLKgjAGYi;tf~~)QPShYD0=Qsr?y*cg50=; zUVAp-mWf+X7p8U_`mqBO3)gh?*gGh%N9A*0yEb~x-yZK2lx{~_ryDgd-GG;!fd1P` zoU(bd%^bYVJRxJqdNvl5?ewp076BQ~$<HTy>KiRYZmOfaFQsI>+9>E;TZ=$

9DehfVx6eixU6>~*iZ)!$3lAC>1} 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 qWa8iWfJxwGx_xSta&%03|#%AcMkXZq& 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

xor0py^n&r7mx(t};d_6QUoIm*z!HV#mKl`tW50 z?DBIL4R>Wot0=E%g2;Yp2RQS(injBun;Qs952DHL1@m6Ixdt8f;F`*jFPh^}F#Y0ou6ZsXg%^&mOYlssb=M*~%U}-r&e%XbIboBOZ%roZ+#FrOB+(kD z!4Bxl-Td}0D23=b>BYvh7rr{S*+^neiZtA`kT1${G~pvNJq@MJeErRPnL*NSdTpf0 zlO^ESD6hUs!V`qt;A;H!B3a9GVPQ4%<;V$X2RVV7${e!a`DyVDXuQ);`c|kL+uP;` zg(uc#B*yw|BO46Ir`qt}18y~C<=WYkDblGDgSezIr%&LkI4x`ahiSe;&?S%RgH*C| z4d$t~tK!at>X(@JxA)=h_QtKd-B(|H9y?G^I3}|7dbitjl8Uy;lP8b6ojn>2m2J9X zLcV^p`}*r|y4yFFx}SgiQ}_7kiwqLRS)gNk@X2T0=Z_wCCtM!z{SV)Fuiox;>zlW@ zSm;*w_RUKcqTAEa4@0Db#`_^o%0Dc|hhP_WataQf+M8Oz2&J9(A=)03oD-1sn|HZf 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 mj5h^R^5_6U9V9b?igXh7(j`bjhKmTCo&AQU=- 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

f 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%0Aa2EP3CTUHB^QN^UF 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%0AfLt-0^<52vA?2 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 Date: Fri, 18 Dec 2020 02:05:53 +0000 Subject: [PATCH 232/277] Update 'doc/relnotes/README.md' --- doc/relnotes/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 377ed1bfb..34267e475 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -59,6 +59,18 @@ all that KYC/PoS/Sprout stuff from KMD internals we inherited and improve daily. * :surfer: New P2P protocol version. Peers only talk to 3.5.x nodes and newer +### 3.6.0 Checksums + +``` +33cd82c51eac404796e6c296044b1d8fcc653d60b2bf26eecb5df0e374a35825 hush-3.6.0-linux-ubuntu-18.04-amd64.tar.gz +9c2f19c50fdc44af2c89494b06cda2c9e176d7ae2f038ca0fb7c0cd083dd71b9 hush-3.6.0-linux-ubuntu-18.04-noparams-amd64.tar.gz +9799aaea1503770336efc328fcd43c3a46d7bede8c485f77977423f949145d81 hush-3.6.0-amd64.deb +2f0ebbcbb9bb0bcffe95a397e7eba89c29eb4dde6191c339db88570e3f3fb0e4 sapling-output.params +8e48ffd23abb3a5fd9c5589204f32d9c31285a04b78096ba40a79b75677efc13 sapling-spend.params + +``` + + ## Bounty Would you like to transcribe old Github releases to this file for a HUSH From 7e591d81343a7c07371e57eca1ca04959c1f61a1 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 18 Dec 2020 08:11:01 -0500 Subject: [PATCH 233/277] Version bump --- src/clientversion.cpp | 4 ---- src/clientversion.h | 11 +++-------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/clientversion.cpp b/src/clientversion.cpp index f2ba82ab2..30bc7fb43 100644 --- a/src/clientversion.cpp +++ b/src/clientversion.cpp @@ -2,7 +2,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -17,12 +16,9 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "clientversion.h" - #include "tinyformat.h" #include "util.h" - #include #include diff --git a/src/clientversion.h b/src/clientversion.h index b8be6ad9d..f7aeedc3f 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef HUSH_CLIENTVERSION_H #define HUSH_CLIENTVERSION_H @@ -26,16 +24,13 @@ #include "config/bitcoin-config.h" #else -/** - * client versioning and copyright year - */ - +// client versioning and copyright year //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it // Must be kept in sync with configure.ac ! #define CLIENT_VERSION_MAJOR 3 #define CLIENT_VERSION_MINOR 6 -#define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 50 +#define CLIENT_VERSION_REVISION 1 +#define CLIENT_VERSION_BUILD 25 //! Set to true for release, false for prerelease or test build #define CLIENT_VERSION_IS_RELEASE true From df4c160d3fd710946947412420763204b32e8378 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 18 Dec 2020 08:12:19 -0500 Subject: [PATCH 234/277] Update checkpoints.pl --- contrib/checkpoints.pl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/contrib/checkpoints.pl b/contrib/checkpoints.pl index ac7165718..673c0d007 100755 --- a/contrib/checkpoints.pl +++ b/contrib/checkpoints.pl @@ -5,10 +5,9 @@ # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html use warnings; use strict; -# Generate checkpoint data for use in src/main.cpp -# TODO: update when blocktime changes to 75s -my $perday = 576; +# Generate checkpoint data for use in src/chainparams.cpp +my $perday = 1152; my $hush = "./src/hush-cli"; my $gethash = "$hush getblockhash"; my $stride = shift || 1000; From f629d1322da377d89de568cec8c5409d80c106c8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 18 Dec 2020 08:41:33 -0500 Subject: [PATCH 235/277] Fix some typoz and reorg --- doc/relnotes/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/relnotes/README.md b/doc/relnotes/README.md index 34267e475..29147066f 100644 --- a/doc/relnotes/README.md +++ b/doc/relnotes/README.md @@ -19,17 +19,18 @@ evil organizations. :metal: :metal: :metal: -This release consists of 25454 lines of change, almost 18000 lines of deletions +This release consists of 25454 lines of changes, almost 18000 lines of deletions and just short of 1000 files changed! This is why Hush code is so fast, we delete all that KYC/PoS/Sprout stuff from KMD internals we inherited and improve daily. :metal: :metal: :metal: * :100: Fixes sync issues near block 340k caused by blocktime halving bug * :sweat_drops: New official domain https://hush.is reflected everywhere + * :tada: Hush Docker scripts are now officially maintained! * :eggplant: New Hush DPoW Notaries replace KMD Notaries (who attacked us, lulz) * :rocket: Increasd in-memory UTXO cache db by 100MB (25%) to increase performance of initial syncing * :dragon: Prevent Delayed-Proof-of-Work attack from Komodo Notaries - * :shit: KMD notaries provably attacked the HUSH blockchain their pubkeys + * :shit: KMD notaries provably attacked the HUSH blockchain via their pubkeys * :speak_no_evil: All trust in their service has now been lost, and all Komodo pubkeys have been removed from Hush source code * :alien: "Malicious Notarized Chainforks" is an attack only Komodo Notaries @@ -49,7 +50,6 @@ all that KYC/PoS/Sprout stuff from KMD internals we inherited and improve daily. on low resource devices (like internet-of-shit light bulbs/etc) * :lock: Nodes randomly choose between GCM-SHA384 and CHACHA20-POLY1305-SHA256 when making connections to other nodes. - * :tada: Hush Docker scripts are now officially maintained! * :rabbit2: Faster release binaries with -03 * :fork_and_knife: Optimized and hardened memory pool code * :hammer: getblocktemplate RPC now provides better error reporting about From d49cbc01bf847b719ffd046ff8c69dc07f166347 Mon Sep 17 00:00:00 2001 From: Jane Mercer Date: Mon, 21 Dec 2020 17:45:28 -0700 Subject: [PATCH 236/277] fix download url for windows --- depends/packages/libgmp.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/depends/packages/libgmp.mk b/depends/packages/libgmp.mk index 240208e85..8e830eaff 100644 --- a/depends/packages/libgmp.mk +++ b/depends/packages/libgmp.mk @@ -1,11 +1,11 @@ package=libgmp ifeq ($(host_os),mingw32) -$(package)_download_path=https://github.com/joshuayabut/$(package)/archive +$(package)_download_path=https://github.com/radix42/$(package)/archive $(package)_file_name=$(package)-$($(package)_git_commit).tar.gz $(package)_download_file=$($(package)_git_commit).tar.gz -$(package)_sha256_hash=193836c1acc9dc00fe2521205d7bbe1ba13263f6cbef6f02584bf6f8b34b108f -$(package)_git_commit=053c03b1cab347671d936f43ef66b48ab5e380ee +$(package)_sha256_hash=67df06ed50f288bd7b1ec6907973684fb7cf1196f2cb368b59d423e42b065e40 +$(package)_git_commit=42ba95387cdfd67399f7aac52fddb8d6e1258ee6 $(package)_dependencies= $(package)_config_opts=--enable-cxx --disable-shared else ifeq ($(build_os),darwin) From 59b219fa8f54a10d0553503b15f8eebbba470f99 Mon Sep 17 00:00:00 2001 From: Jane Mercer Date: Mon, 21 Dec 2020 18:57:13 -0700 Subject: [PATCH 237/277] do not build zmq on non linux platforms --- depends/packages/packages.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 3dd823772..ef5a31f6e 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -41,6 +41,6 @@ wallet_packages=bdb ifeq ($(host_os),linux) packages := boost wolfssl libevent zeromq $(zcash_packages) googletest libcurl #googlemock else - packages := boost wolfssl libevent zeromq $(zcash_packages) libcurl googletest #googlemock + packages := boost wolfssl libevent $(zcash_packages) libcurl googletest #googlemock endif From 801e4d92665ae3cc49e8c695f44ca9a75ca6502a Mon Sep 17 00:00:00 2001 From: jahway603 Date: Sun, 3 Jan 2021 18:33:50 -0500 Subject: [PATCH 238/277] cleaned up README.md & separated old wallet restore instructions as it was confusing to a brand new user --- OLD_WALLETS.md | 71 ++++++++++++++++++++++++++++ README.md | 123 +++++++++++-------------------------------------- 2 files changed, 98 insertions(+), 96 deletions(-) create mode 100644 OLD_WALLETS.md diff --git a/OLD_WALLETS.md b/OLD_WALLETS.md new file mode 100644 index 000000000..d13f4f0ef --- /dev/null +++ b/OLD_WALLETS.md @@ -0,0 +1,71 @@ +## Claiming Funds From Old Hush Wallets + +Hush migrated to a new mainnet after Block 500,000 on the old Hush blockchain. +Funds in addresses as of Block 500,000 were transported to our new chain. About +31,000 addresses with at least 0.00000001 HUSH were transported to the new Hush +mainnet. + +To claim funds on the new chain, there are few options. + +### Funds on exchanges + +Firstly, no bueno! Not your keys, not your coins. It's best not to store coins +on exchanges. But in this case, you lucked out! There is nothing to do to claim +new coins if you have coins on an exchange that supports the new Hush chain. +The exchange will follow the instructions from the next section and you will +magically have funds on the new chain. Note that old Hush addresses started +with `t1` and now they begin with `R`. + +To see what an old HUSH v2 address looks like on the new chain, this online tool +can be used: https://dexstats.info/addressconverter.php + +or this command line tool: https://git.hush.is/hush/hush3/src/master/contrib/convert_address.py + + +### Using an old wallet.dat + +Backup your old HUSH wallet.dat, and backup any current wallet.dat that is in your + + ~/.komodo/HUSH3/ + +directory. There is no way to lose funds, as long as you have backups!!! Make sure +to make backups. Do not skip this step. + +Make sure any/all GUI wallets are stopped! Also make sure your old Hush node +and new Hush3 node are stopped: + + cd hush3 + ./src/hush-cli stop + +Do not copy wallets or move wallets while your full node is running! This could +corrupt your wallet! + +Now copy your old Hush wallet.dat to + + ~/.komodo/HUSH3/ + +with a command like + + # DO NOT RUN THIS WITHOUT MAKING BACKUPS! + cp ~/.hush/wallet.dat ~/.komodo/HUSH3/ + +The reason this works is that both old HUSH and new HUSH are still Bitcoin Protocol +coins, which both use secp256k1 public keys. Now start your HUSH3 node again, +with this special CLI argument that will clear out transactions from your wallet: + + cd hush3 + ./src/hushd -zapwallettxes + +This will cause a full history rescan, which will take some time. Once it's complete, +you can see your funds with this command: + + ./src/hush-cli getwalletinfo + +NOTE: Do not use this wallet except to send funds to a new wallet! + +### Private Keys + +You can also transport funds one address at a time via private keys. + +Agama Desktop Wallet WIF-to-WIF Tool can convert between old HUSH and new HUSH3 +private keys. \ No newline at end of file diff --git a/README.md b/README.md index 57f1de3c6..5014b8eef 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ genesis block. We are not a chain fork (copy) of another coin. We are based on Bitcoin code, with sophisticated zero-knowledge mathematics added for privacy. This keeps your transaction metadata private! -## This repository +### This repository This software is the Hush node and command-line client. It downloads and stores the entire history of Hush transactions; depending on the speed of your @@ -17,7 +17,7 @@ computer and network connection, it will likely take a few hours at least, but some people report full nodes syncing in less than 1.5 hours. A competing privacy coin takes over 24 hours to sync their full nodes because of Sprout Transactions, lulz. -## BANNED BY GITHUB +### BANNED BY GITHUB In working on this release, Duke Leto was suspended from Github, which gave Hush developers the impetus to completely leave that racist and censorship-loving platform. @@ -30,102 +30,33 @@ domains should be assumed to be backdoored. **Hush is unfinished and highly experimental.** Use at your own risk! Just like Bitcoin. -## Socials - -Please feel free to join us on Telegram for official support : - * Main group: https://hush.is/tg - * Support group: https://hush.is/telegram_support - * Mining group: https://hush.is/telegram_mining - -Other socials: - - * @MyHushTeam on Twitter - * Hush on YouTube - * Hush on Reddit - -## Official Explorer - -explorer.hush.is - -We are looking for alternate explorers to be run on Tor, i2P and other TLDs, if you are interested -please join TG and ask questions. - -## Claiming Funds From Old Hush Wallets - -Hush migrated to a new mainnet after Block 500,000 on the old Hush blockchain. -Funds in addresses as of Block 500,000 were transported to our new chain. About -31,000 addresses with at least 0.00000001 HUSH were transported to the new Hush -mainnet. - -To claim funds on the new chain, there are few options. - -### Funds on exchanges - -Firstly, no bueno! Not your keys, not your coins. It's best not to store coins -on exchanges. But in this case, you lucked out! There is nothing to do to claim -new coins if you have coins on an exchange that supports the new Hush chain. -The exchange will follow the instructions from the next section and you will -magically have funds on the new chain. Note that old Hush addresses started -with `t1` and now they begin with `R`. - -To see what an old HUSH v2 address looks like on the new chain, this online tool -can be used: https://dexstats.info/addressconverter.php - -or this command line tool: https://git.hush.is/hush/hush3/src/master/contrib/convert_address.py - - -### Using an old wallet.dat - -Backup your old HUSH wallet.dat, and backup any current wallet.dat that is in your - - ~/.komodo/HUSH3/ - -directory. There is no way to lose funds, as long as you have backups!!! Make sure -to make backups. Do not skip this step. - -Make sure any/all GUI wallets are stopped! Also make sure your old Hush node -and new Hush3 node are stopped: - - cd hush3 - ./src/hush-cli stop - -Do not copy wallets or move wallets while your full node is running! This could -corrupt your wallet! - -Now copy your old Hush wallet.dat to - - ~/.komodo/HUSH3/ - -with a command like - - # DO NOT RUN THIS WITHOUT MAKING BACKUPS! - cp ~/.hush/wallet.dat ~/.komodo/HUSH3/ - -The reason this works is that both old HUSH and new HUSH are still Bitcoin Protocol -coins, which both use secp256k1 public keys. Now start your HUSH3 node again, -with this special CLI argument that will clear out transactions from your wallet: - - cd hush3 - ./src/hushd -zapwallettxes - -This will cause a full history rescan, which will take some time. Once it's complete, -you can see your funds with this command: - - ./src/hush-cli getwalletinfo - -NOTE: Do not use this wallet except to send funds to a new wallet! - -### Private Keys - -You can also transport funds one address at a time via private keys. - -Agama Desktop Wallet WIF-to-WIF Tool can convert between old HUSH and new HUSH3 -private keys. - -# Installing +## Installing See [INSTALL.md](https://git.hush.is/hush/hush3/src/branch/master/INSTALL.md) -# License +### Claiming Funds From Old Hush Wallets + +If you have an older wallet, then refer to [OLD_WALLETS.md](OLD_WALLETS.md). + +### Official Explorer + +The link for the Official Hush explorer is: explorer.hush.is + +We are looking for alternate explorers to be run on Tor, i2P and other TLDs, if you are interested +please join Telegram and ask questions. + +## Support and Socials + +Please feel free to join us on Telegram for official support: +* Main group: https://hush.is/tg +* Support group: https://hush.is/telegram_support +* Mining group: https://hush.is/telegram_mining + +Other socials: +* Toot us @MyHushTeam on Twitter +* Follow Hush on YouTube +* Join Hush on Reddit + +## License For license information see the file [COPYING](COPYING). From 4f1fdfb14f97fcd64eb90b9db8f2a43677241101 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 7 Jan 2021 15:54:46 -0500 Subject: [PATCH 239/277] Do not speak with old and potentially malicious/misconfigured nodes --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 7f954364a..69c48d1a4 100644 --- a/src/version.h +++ b/src/version.h @@ -27,7 +27,7 @@ static const int INIT_PROTO_VERSION = 209; //! In this version, 'getheaders' was introduced. static const int GETHEADERS_VERSION = 31800; //! disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION = 170009; +static const int MIN_PEER_PROTO_VERSION = 1987420; //! nTime field added to CAddress, starting with this version; //! if possible, avoid requesting addresses nodes older than this static const int CADDR_TIME_VERSION = 31402; From d5477ab3ab2848b95177ed6ec6cf340503777d61 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 7 Jan 2021 15:57:34 -0500 Subject: [PATCH 240/277] Disable build_date for now, which causes race condition bugs in the build system --- src/rpc/misc.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 1fa60822c..0a052876b 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -37,7 +37,9 @@ #include #include #include "zcash/Address.hpp" -#include "build.h" +//#ifdef HAVE_BUILD_INFO +//#include "build.h" +//#endif using namespace std; @@ -275,7 +277,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) #endif obj.push_back(Pair("sapling", ASSETCHAINS_SAPLING)); } - obj.push_back(Pair("build_date", BUILD_DATE)); + //obj.push_back(Pair("build_date", BUILD_DATE)); obj.push_back(Pair("timeoffset", 0)); obj.push_back(Pair("connections", (int)vNodes.size())); obj.push_back(Pair("tls_connections", (int)std::count_if(vNodes.begin(), vNodes.end(), [](CNode* n) {return n->ssl != NULL;}))); From 2733101a6a3c0ced4695b19f0ddce688aed0ae2e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Thu, 7 Jan 2021 16:46:30 -0500 Subject: [PATCH 241/277] Harden p2p layer against Eclipse Attacks --- src/main.cpp | 6 +----- src/miner.cpp | 18 ++++-------------- src/net.cpp | 17 ++++------------- 3 files changed, 9 insertions(+), 32 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 258c95634..c05bbae4a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -76,7 +76,6 @@ extern uint8_t NOTARY_PUBKEY33[33]; extern int32_t HUSH_LOADINGBLOCKS,HUSH_LONGESTCHAIN,HUSH_INSYNC,HUSH_CONNECTING,HUSH_EXTRASATOSHI; int32_t HUSH_NEWBLOCKS; int32_t hush_block2pubkey33(uint8_t *pubkey33,CBlock *block); -//void komodo_broadcast(CBlock *pblock,int32_t limit); bool Getscriptaddress(char *destaddr,const CScript &scriptPubKey); void hush_setactivation(int32_t height); void hush_changeblocktime(); @@ -4002,10 +4001,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * HUSH_INSYNC = (int32_t)pindexNew->GetHeight(); else HUSH_INSYNC = 0; //fprintf(stderr,"connect.%d insync.%d ASSETCHAINS_SAPLING.%d\n",(int32_t)pindexNew->GetHeight(),HUSH_INSYNC,ASSETCHAINS_SAPLING); - /*if ( HUSH_INSYNC != 0 ) //SMART_CHAIN_SYMBOL[0] == 0 && - komodo_broadcast(pblock,8); - else if ( SMART_CHAIN_SYMBOL[0] != 0 ) - komodo_broadcast(pblock,4);*/ + if ( HUSH_NSPV_FULLNODE ) { //fprintf(stderr,"%s: HUSH_NSPV_FULLNODE\n", __FUNCTION__); diff --git a/src/miner.cpp b/src/miner.cpp index c145eac7b..81de10ba5 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -837,11 +837,8 @@ void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& } #ifdef ENABLE_WALLET -////////////////////////////////////////////////////////////////////////////// -// -// Internal miner -// +// Internal miner CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey, int32_t nHeight, int32_t gpucount, bool isStake) { CPubKey pubkey; CScript scriptPubKey; uint8_t *script,*ptr; int32_t i,len; @@ -851,25 +848,18 @@ CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey, int32_t nHeight, { pubkey = ParseHex(ASSETCHAINS_OVERRIDE_PUBKEY); scriptPubKey = CScript() << ParseHex(HexStr(pubkey)) << OP_CHECKSIG; - } - else - { + } else { 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()); } - } - else if ( USE_EXTERNAL_PUBKEY != 0 ) - { + } else if ( USE_EXTERNAL_PUBKEY != 0 ) { //fprintf(stderr,"use notary pubkey\n"); pubkey = ParseHex(NOTARY_PUBKEY); scriptPubKey = CScript() << ParseHex(HexStr(pubkey)) << OP_CHECKSIG; - } - else - { - //if ( !isStake || ASSETCHAINS_STAKED != 0 ) + } else { { if (!reservekey.GetReservedKey(pubkey)) { diff --git a/src/net.cpp b/src/net.cpp index 2e53c9491..315d49a97 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -25,7 +25,6 @@ #include "main.h" #include "net.h" - #include "addrman.h" #include "chainparams.h" #include "clientversion.h" @@ -34,16 +33,13 @@ #include "ui_interface.h" #include "crypto/common.h" #include "hush/utiltls.h" - #ifdef _WIN32 #include #else #include #endif - #include #include - #include #include #include @@ -79,8 +75,8 @@ using namespace hush; using namespace std; namespace { - const int MAX_OUTBOUND_CONNECTIONS = 16; - const int MAX_INBOUND_FROMIP = 5; + const int MAX_OUTBOUND_CONNECTIONS = 64; + const int MAX_INBOUND_FROMIP = 3; struct ListenSocket { SOCKET socket; @@ -2051,14 +2047,12 @@ void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler) #ifdef USE_TLS - if (!tlsmanager.prepareCredentials()) - { + if (!tlsmanager.prepareCredentials()) { LogPrintf("TLS: ERROR: %s: %s: Credentials weren't generated. Node can't be started.\n", __FILE__, __func__); return; } - if (!tlsmanager.initialize()) - { + if (!tlsmanager.initialize()) { LogPrintf("TLS: ERROR: %s: %s: TLS initialization failed. Node can't be started.\n", __FILE__, __func__); return; } @@ -2066,10 +2060,7 @@ void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler) LogPrintf("TLS is not used!\n"); #endif - // // Start threads - // - if (!GetBoolArg("-dnsseed", true)) LogPrintf("DNS seeding disabled\n"); else From 8fe3e238f0f9789d9e19c42065e41daddfeaf68b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 10 Jan 2021 09:54:42 -0500 Subject: [PATCH 242/277] Exclusively TLS connections at p2p layer; dump peers more often --- src/net.cpp | 275 +++++++--------------------------------------------- src/net.h | 11 ++- 2 files changed, 43 insertions(+), 243 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 315d49a97..e60fff06c 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -3,7 +3,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -18,7 +17,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #if defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" #endif @@ -45,8 +43,9 @@ #include using namespace hush; -// Dump addresses to peers.dat every 15 minutes (900s) -#define DUMP_ADDRESSES_INTERVAL 900 +// Dump addresses to peers.dat every 5 minutes (300s) +// Satoshi originally used 10 seconds(!), did he know something Peter Wuille didn't? +#define DUMP_ADDRESSES_INTERVAL 300 #if !defined(HAVE_MSG_NOSIGNAL) && !defined(MSG_NOSIGNAL) #define MSG_NOSIGNAL 0 @@ -63,20 +62,20 @@ using namespace hush; #endif #endif -#define USE_TLS +#define USE_TLS "encrypted as fuck" #if defined(USE_TLS) && !defined(TLS1_3_VERSION) // minimum secure protocol is 1.3 // TLS1_3_VERSION is defined in openssl/tls1.h - #error "ERROR: Your WolfSSL version does not support TLS v1.3" + #error "ERROR: Your WolfSSL version does not support TLS v1.3!!!" #endif - using namespace std; namespace { + //TODO: Make these CLI args const int MAX_OUTBOUND_CONNECTIONS = 64; - const int MAX_INBOUND_FROMIP = 3; + const int MAX_INBOUND_FROMIP = 3; struct ListenSocket { SOCKET socket; @@ -86,9 +85,7 @@ namespace { }; } -// // Global state variables -// extern uint16_t ASSETCHAINS_P2PPORT; extern char SMART_CHAIN_SYMBOL[65]; @@ -141,12 +138,6 @@ static bool operator==(_NODE_ADDR a, _NODE_ADDR b) return (a.ipAddr == b.ipAddr); } -static std::vector vNonTLSNodesInbound; -static CCriticalSection cs_vNonTLSNodesInbound; - -static std::vector vNonTLSNodesOutbound; -static CCriticalSection cs_vNonTLSNodesOutbound; - void AddOneShot(const std::string& strDest) { LOCK(cs_vOneShots); @@ -359,7 +350,7 @@ void AddressCurrentlyConnected(const CService& addr) } -CNode::eTlsOption CNode::tlsFallbackNonTls = CNode::eTlsOption::FALLBACK_UNSET; +CNode::eTlsOption CNode::tlsFallbackNonTls = CNode::eTlsOption::FALLBACK_FALSE; CNode::eTlsOption CNode::tlsValidate = CNode::eTlsOption::FALLBACK_UNSET; uint64_t CNode::nTotalBytesRecv = 0; @@ -418,7 +409,6 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest) } } - /// debug print LogPrint("net", "trying connection %s lastseen=%.1fhrs\n", pszDest ? pszDest : addrConnect.ToString(), pszDest ? 0.0 : (double)(GetTime() - addrConnect.nTime)/3600.0); @@ -441,67 +431,12 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest) #ifdef USE_TLS /* TCP connection is ready. Do client side SSL. */ - if (CNode::GetTlsFallbackNonTls()) - { - { - LOCK(cs_vNonTLSNodesOutbound); - - LogPrint("tls", "%s():%d - handling connection to %s\n", __func__, __LINE__, addrConnect.ToString()); - - NODE_ADDR nodeAddr(addrConnect.ToStringIP()); - - bool bUseTLS = ((GetBoolArg("-tls", true) || GetArg("-tls", "") == "only") - && find(vNonTLSNodesOutbound.begin(), - vNonTLSNodesOutbound.end(), - nodeAddr) == vNonTLSNodesOutbound.end()); - unsigned long err_code = 0; - if (bUseTLS) - { - ssl = tlsmanager.connect(hSocket, addrConnect, err_code); - if (!ssl) - { - if (err_code == TLSManager::SELECT_TIMEDOUT) - { - // can fail for timeout in select on fd, that is not a ssl error and we should not - // consider this node as non TLS - LogPrint("tls", "%s():%d - Connection to %s timedout\n", - __func__, __LINE__, addrConnect.ToStringIP()); - } - else - { - // Further reconnection will be made in non-TLS (unencrypted) mode - vNonTLSNodesOutbound.push_back(NODE_ADDR(addrConnect.ToStringIP(), GetTimeMillis())); - LogPrint("tls", "%s():%d - err_code %x, adding connection to %s vNonTLSNodesOutbound list (sz=%d)\n", - __func__, __LINE__, err_code, addrConnect.ToStringIP(), vNonTLSNodesOutbound.size()); - } - CloseSocket(hSocket); - return NULL; - } - } - else - { - LogPrintf ("Connection to %s will be unencrypted\n", addrConnect.ToString()); - - vNonTLSNodesOutbound.erase( - remove( - vNonTLSNodesOutbound.begin(), - vNonTLSNodesOutbound.end(), - nodeAddr), - vNonTLSNodesOutbound.end()); - } - } - } - else - { - unsigned long err_code = 0; - ssl = tlsmanager.connect(hSocket, addrConnect, err_code); - if(!ssl) - { - LogPrint("tls", "%s():%d - err_code %x, connection to %s failed)\n", - __func__, __LINE__, err_code, addrConnect.ToStringIP()); - CloseSocket(hSocket); - return NULL; - } + unsigned long err_code = 0; + ssl = tlsmanager.connect(hSocket, addrConnect, err_code); + if(!ssl) { + LogPrint("tls", "%s():%d - err_code %x, connection to %s failed)\n", __func__, __LINE__, err_code, addrConnect.ToStringIP()); + CloseSocket(hSocket); + return NULL; } #endif // USE_TLS @@ -547,8 +482,7 @@ void CNode::CloseSocketDisconnect() LogPrintf("(node is probably shutting down) disconnecting peer=%d\n", id); } - if (ssl) - { + if (ssl) { unsigned long err_code = 0; tlsmanager.waitFor(SSL_SHUTDOWN, hSocket, ssl, (DEFAULT_CONNECT_TIMEOUT / 1000), err_code); wolfSSL_free(ssl); @@ -590,10 +524,6 @@ void CNode::PushVersion() //fprintf(stderr,"HUSH_NSPV.%d PUSH services.%llx\n",HUSH_NSPV,(long long)nLocalServices); } - - - - std::map CNode::setBanned; CCriticalSection CNode::cs_setBanned; @@ -718,7 +648,7 @@ void CNode::copyStats(CNodeStats &stats, const std::vector &m_asmap) nPingUsecWait = GetTimeMicros() - nPingUsecStart; } - // Raw ping time is in microseconds, but show it to user as whole seconds (Bitcoin users should be well used to small numbers with many decimal places by now :) + // Raw ping time is in microseconds, but show it to user as whole seconds (Hush users should be well used to small numbers with many decimal places by now :) stats.dPingTime = (((double)nPingUsecTime) / 1e6); stats.dPingWait = (((double)nPingUsecWait) / 1e6); @@ -1174,66 +1104,14 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { SetSocketNonBlocking(hSocket, true); #ifdef USE_TLS - /* TCP connection is ready. Do server side SSL. */ - if (CNode::GetTlsFallbackNonTls()) + /* TCP connection is ready. Do server side TLS */ + unsigned long err_code = 0; + ssl = tlsmanager.accept( hSocket, addr, err_code); + if(!ssl) { - LOCK(cs_vNonTLSNodesInbound); - - LogPrint("tls", "%s():%d - handling connection from %s\n", __func__, __LINE__, addr.ToString()); - - NODE_ADDR nodeAddr(addr.ToStringIP()); - - bool bUseTLS = ((GetBoolArg("-tls", true) || GetArg("-tls", "") == "only") - && find(vNonTLSNodesInbound.begin(), - vNonTLSNodesInbound.end(), - nodeAddr) == vNonTLSNodesInbound.end()); - unsigned long err_code = 0; - if (bUseTLS) - { - ssl = tlsmanager.accept( hSocket, addr, err_code); - if(!ssl) - { - if (err_code == TLSManager::SELECT_TIMEDOUT) - { - // can fail also for timeout in select on fd, that is not a ssl error and we should not - // consider this node as non TLS - LogPrint("tls", "%s():%d - Connection from %s timedout\n", __func__, __LINE__, addr.ToStringIP()); - } - else - { - // Further reconnection will be made in non-TLS (unencrypted) mode - vNonTLSNodesInbound.push_back(NODE_ADDR(addr.ToStringIP(), GetTimeMillis())); - LogPrint("tls", "%s():%d - err_code %x, adding connection from %s vNonTLSNodesInbound list (sz=%d)\n", - __func__, __LINE__, err_code, addr.ToStringIP(), vNonTLSNodesInbound.size()); - } - CloseSocket(hSocket); - return; - } - } - else - { - LogPrintf ("TLS: Connection from %s will be unencrypted\n", addr.ToStringIP()); - - vNonTLSNodesInbound.erase( - remove( - vNonTLSNodesInbound.begin(), - vNonTLSNodesInbound.end(), - nodeAddr - ), - vNonTLSNodesInbound.end()); - } - } - else - { - unsigned long err_code = 0; - ssl = tlsmanager.accept( hSocket, addr, err_code); - if(!ssl) - { - LogPrint("tls", "%s():%d - err_code %x, failure accepting connection from %s\n", - __func__, __LINE__, err_code, addr.ToStringIP()); - CloseSocket(hSocket); - return; - } + LogPrint("tls", "%s():%d - err_code %x, failure accepting connection from %s\n", __func__, __LINE__, err_code, addr.ToStringIP()); + CloseSocket(hSocket); + return; } #endif // USE_TLS @@ -1250,28 +1128,12 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { } } -#if defined(USE_TLS) -void ThreadNonTLSPoolsCleaner() -{ - while (true) - { - tlsmanager.cleanNonTLSPool(vNonTLSNodesInbound, cs_vNonTLSNodesInbound); - tlsmanager.cleanNonTLSPool(vNonTLSNodesOutbound, cs_vNonTLSNodesOutbound); - MilliSleep(DEFAULT_CONNECT_TIMEOUT); // sleep and sleep_for are interruption points, which will throw boost::thread_interrupted - } -} - -#endif // USE_TLS - - void ThreadSocketHandler() { unsigned int nPrevNodeCount = 0; while (true) { - // // Disconnect nodes - // { LOCK(cs_vNodes); // Disconnect unused nodes @@ -1332,9 +1194,7 @@ void ThreadSocketHandler() uiInterface.NotifyNumConnectionsChanged(nPrevNodeCount); } - // // Find which sockets have data to receive - // struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 50000; // frequency to poll pnode->vSend @@ -1418,9 +1278,7 @@ void ThreadSocketHandler() MilliSleep(timeout.tv_usec/1000); } - // // Accept new connections - // BOOST_FOREACH(const ListenSocket& hListenSocket, vhListenSocket) { if (hListenSocket.socket != INVALID_SOCKET && FD_ISSET(hListenSocket.socket, &fdsetRecv)) @@ -1429,9 +1287,7 @@ void ThreadSocketHandler() } } - // // Service each socket - // vector vNodesCopy; { LOCK(cs_vNodes); @@ -1447,9 +1303,7 @@ void ThreadSocketHandler() continue; } - // // Inactivity checking - // int64_t nTime = GetTime(); if (nTime - pnode->nTimeConnected > 60) { @@ -1541,8 +1395,7 @@ void DumpAddresses() CAddrDB adb; adb.Write(addrman); - LogPrint("net", "Flushed %d addresses to peers.dat %dms\n", - addrman.size(), GetTimeMillis() - nStart); + LogPrint("net", "Flushed %d addresses to peers.dat %dms\n", addrman.size(), GetTimeMillis() - nStart); } void static ProcessOneShot() @@ -1609,12 +1462,11 @@ void ThreadOpenConnections() } - // // Choose an address to connect to based on most recently seen - // CAddress addrConnect; // Only connect out to one peer per network group (/16 for IPv4). + // Use -asmap for ASN bucketing // Do this here so we don't have to critsect vNodes inside mapAddresses critsect. int nOutbound = 0; set > setConnected; @@ -1738,16 +1590,14 @@ void ThreadOpenAddedConnections() OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant); MilliSleep(500); } - MilliSleep(120000); // Retry every 2 minutes + MilliSleep(120000); } } // if successful, this moves the passed grant to the constructed node bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound, const char *pszDest, bool fOneShot) { - // // Initiate outbound network connection - // boost::this_thread::interruption_point(); if (!pszDest) { if (IsLocal(addrConnect) || @@ -1760,30 +1610,6 @@ bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOu CNode* pnode = ConnectNode(addrConnect, pszDest); boost::this_thread::interruption_point(); -#if defined(USE_TLS) - if (CNode::GetTlsFallbackNonTls()) - { - if (!pnode) - { - string strDest; - int port; - - if (!pszDest) - strDest = addrConnect.ToStringIP(); - else - SplitHostPort(string(pszDest), port, strDest); - - if (tlsmanager.isNonTLSAddr(strDest, vNonTLSNodesOutbound, cs_vNonTLSNodesOutbound)) - { - // Attempt to reconnect in non-TLS mode - pnode = ConnectNode(addrConnect, pszDest); - boost::this_thread::interruption_point(); - } - } - } - -#endif - if (!pnode) return false; if (grantOutbound) @@ -2028,7 +1854,7 @@ void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler) { CAddrDB adb; if (!adb.Read(addrman)) - LogPrintf("Invalid or missing peers.dat; recreating\n"); + LogPrintf("Invalid or missing peers.dat! This can happen when upgrading. Whatevz, recreating\n"); } LogPrintf("Loaded %i addresses from peers.dat %dms\n", addrman.size(), GetTimeMillis() - nStart); @@ -2046,7 +1872,6 @@ void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler) Discover(threadGroup); #ifdef USE_TLS - if (!tlsmanager.prepareCredentials()) { LogPrintf("TLS: ERROR: %s: %s: Credentials weren't generated. Node can't be started.\n", __FILE__, __func__); return; @@ -2057,7 +1882,7 @@ void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler) return; } #else - LogPrintf("TLS is not used!\n"); + return; #endif // Start threads @@ -2078,14 +1903,6 @@ void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler) // Process messages threadGroup.create_thread(boost::bind(&TraceThread, "msghand", &ThreadMessageHandler)); -#if defined(USE_TLS) - if (CNode::GetTlsFallbackNonTls()) - { - // Clean pools of addresses for non-TLS connections - threadGroup.create_thread(boost::bind(&TraceThread, "poolscleaner", &ThreadNonTLSPoolsCleaner)); - } -#endif - // Dump network addresses scheduler.scheduleEvery(&DumpAddresses, DUMP_ADDRESSES_INTERVAL); } @@ -2396,40 +2213,22 @@ CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNa bool CNode::GetTlsFallbackNonTls() { - if (tlsFallbackNonTls == eTlsOption::FALLBACK_UNSET) - { - // one time only setting of static class attribute - if ( GetArg("-tls", "") != "only" ) - { - LogPrint("tls", "%s():%d - Non-TLS connections will be used in case of failure of TLS\n", - __func__, __LINE__); - tlsFallbackNonTls = eTlsOption::FALLBACK_TRUE; - } - else - { - LogPrint("tls", "%s():%d - Non-TLS connections will NOT be used in case of failure of TLS\n", - __func__, __LINE__); - tlsFallbackNonTls = eTlsOption::FALLBACK_FALSE; - } - } - return (tlsFallbackNonTls == eTlsOption::FALLBACK_TRUE); + LogPrint("tls", "%s():%d - Non-TLS connections no longer supported\n", __func__, __LINE__); + return false; } bool CNode::GetTlsValidate() { if (tlsValidate == eTlsOption::FALLBACK_UNSET) { - // one time only setting of static class attribute - if ( GetBoolArg("-tlsvalidate", false)) - { - LogPrint("tls", "%s():%d - TLS certificates will be validated\n", - __func__, __LINE__); + // This is useful for private Hush Smart Chains, that want to exist + // on a closed VPN with an internal CA or trusted cert system, or + // various other use cases + if ( GetBoolArg("-tlsvalidate", false)) { + LogPrint("tls", "%s():%d - TLS certificates will be validated\n", __func__, __LINE__); tlsValidate = eTlsOption::FALLBACK_TRUE; - } - else - { - LogPrint("tls", "%s():%d - TLS certificates will NOT be validated\n", - __func__, __LINE__); + } else { + LogPrint("tls", "%s():%d - TLS certificates will NOT be validated\n", __func__, __LINE__); tlsValidate = eTlsOption::FALLBACK_FALSE; } } diff --git a/src/net.h b/src/net.h index 54d438e42..9d8797958 100644 --- a/src/net.h +++ b/src/net.h @@ -39,11 +39,9 @@ #ifndef _WIN32 #include #endif - #include #include #include - // Enable WolfSSL Support for Hush #include #include @@ -671,7 +669,7 @@ public: // now but might be valid in a later version is also // dangerous, because it can cause a network split // between nodes running old code and nodes running - // new code. + // new code. Fun timez! static void ClearBanned(); // needed for unit testing static bool IsBanned(CNetAddr ip); static bool IsBanned(CSubNet subnet); @@ -696,7 +694,7 @@ public: // resource deallocation on cleanup, called at node shutdown static void NetCleanup(); - // returns the value of the tlsfallbacknontls and tlsvalidate flags set at zend startup (see init.cpp) + // returns the value of the tlsfallbacknontls and tlsvalidate flags set at startup (see init.cpp) static bool GetTlsFallbackNonTls(); static bool GetTlsValidate(); }; @@ -707,7 +705,10 @@ class CTransaction; void RelayTransaction(const CTransaction& tx); void RelayTransaction(const CTransaction& tx, const CDataStream& ss); -/** Access to the (IP) address database (peers.dat) */ +/** Access to the (IP) address database (peers.dat) +which now has 2 versions and soon a 3rd +(classic, asmap, bip155+asmap) + */ class CAddrDB { private: From 70f9ac87b650ca5edfcb30768f7846e1b93708bf Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 10 Jan 2021 09:56:40 -0500 Subject: [PATCH 243/277] We do not know the gender of Satoshi, and it is a dumb concept anyway --- src/net.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net.cpp b/src/net.cpp index e60fff06c..b02c9afbc 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -44,7 +44,7 @@ using namespace hush; // Dump addresses to peers.dat every 5 minutes (300s) -// Satoshi originally used 10 seconds(!), did he know something Peter Wuille didn't? +// Satoshi originally used 10 seconds(!), did they know something Peter Wuille didn't? #define DUMP_ADDRESSES_INTERVAL 300 #if !defined(HAVE_MSG_NOSIGNAL) && !defined(MSG_NOSIGNAL) From cde6d33ad13d453e4323d85cff539ee01cbc4394 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 10 Jan 2021 10:46:22 -0500 Subject: [PATCH 244/277] The term 'whitelist' is racist and so we choose to call this feature 'allowlist' --- contrib/debian/examples/HUSH3.conf | 4 +- contrib/devtools/gen-manpages.sh | 2 +- doc/man/hush-cli.1 | 6 +-- doc/man/hush-tx.1 | 14 +++--- doc/man/hushd.1 | 18 +++----- qa/pull-tester/run-bitcoind-for-test.sh.in | 2 +- qa/rpc-tests/ac_private.py | 2 +- qa/rpc-tests/bip65-cltv-p2p.py | 2 +- qa/rpc-tests/bipdersig-p2p.py | 2 +- qa/rpc-tests/cryptoconditions.py | 4 +- qa/rpc-tests/dpowconfs.py | 2 +- qa/rpc-tests/maxblocksinflight.py | 2 +- qa/rpc-tests/p2p-acceptblock.py | 32 +++++++------- qa/rpc-tests/smartfees.py | 2 +- qa/rpc-tests/test_framework/test_framework.py | 10 ++--- src/cc/CC_made_easy.md | 2 +- src/hush_defs.h | 2 +- src/hush_globals.h | 2 +- src/init.cpp | 39 ++++++++-------- src/main.cpp | 20 ++++----- src/main.h | 2 +- src/net.cpp | 44 +++++++++---------- src/net.h | 18 ++++---- src/rpc/net.cpp | 2 +- src/wallet/wallet.cpp | 35 +++++++-------- 25 files changed, 131 insertions(+), 139 deletions(-) diff --git a/contrib/debian/examples/HUSH3.conf b/contrib/debian/examples/HUSH3.conf index cefd756c6..f11e309c1 100644 --- a/contrib/debian/examples/HUSH3.conf +++ b/contrib/debian/examples/HUSH3.conf @@ -11,8 +11,8 @@ # Bind to given address and always listen on it. Use [host]:port notation for IPv6 #bind= -# Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6 -#whitebind= +# Bind to given address and allowlist peers connecting to it. Use [host]:port notation for IPv6 +#allowbind= ############################################################## ## Quick Primer on addnode vs connect ## diff --git a/contrib/devtools/gen-manpages.sh b/contrib/devtools/gen-manpages.sh index 737d3b96d..4aab1c7ab 100755 --- a/contrib/devtools/gen-manpages.sh +++ b/contrib/devtools/gen-manpages.sh @@ -12,7 +12,7 @@ HUSHTX=${HUSHTX:-$SRCDIR/hush-tx} [ ! -x $HUSHD ] && echo "$HUSHD not found or not executable." && exit 1 -HUSHVER="v3.6.0" +HUSHVER="v3.6.1" #HUSHVER=$(./src/hushd --version|head -n2|tail -n1|cut -d' ' -f4|cut -d- -f1) # Create a footer file with copyright content. diff --git a/doc/man/hush-cli.1 b/doc/man/hush-cli.1 index 9b25f051b..b68437cb9 100644 --- a/doc/man/hush-cli.1 +++ b/doc/man/hush-cli.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10. -.TH HUSH-CLI "1" "December 2020" "hush-cli v3.6.0" "User Commands" +.TH HUSH-CLI "1" "January 2021" "hush-cli v3.6.1" "User Commands" .SH NAME -hush-cli \- manual page for hush-cli v3.6.0 +hush-cli \- manual page for hush-cli v3.6.1 .SH DESCRIPTION -Hush RPC client version v3.6.0\-12fabf7fd +Hush RPC client version v3.6.0\-e05a4e473\-dirty .PP In order to ensure you are adequately protecting your privacy when using Hush, please see . diff --git a/doc/man/hush-tx.1 b/doc/man/hush-tx.1 index f7741ab40..db19304cb 100644 --- a/doc/man/hush-tx.1 +++ b/doc/man/hush-tx.1 @@ -1,16 +1,16 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10. -.TH HUSH-TX "1" "December 2020" "hush-tx v3.6.0" "User Commands" +.TH HUSH-TX "1" "January 2021" "hush-tx v3.6.1" "User Commands" .SH NAME -hush-tx \- manual page for hush-tx v3.6.0 +hush-tx \- manual page for hush-tx v3.6.1 .SH DESCRIPTION -Hush komodo\-tx utility version v3.6.0\-12fabf7fd +hush\-tx utility version v3.6.0\-e05a4e473\-dirty .SS "Usage:" .TP -komodo\-tx [options] [commands] -Update hex\-encoded zcash transaction +hush\-tx [options] [commands] +Update hex\-encoded Hush transaction .TP -komodo\-tx [options] \fB\-create\fR [commands] -Create hex\-encoded zcash transaction +hush\-tx [options] \fB\-create\fR [commands] +Create hex\-encoded Hush transaction .SH OPTIONS .HP \-? diff --git a/doc/man/hushd.1 b/doc/man/hushd.1 index 0a8be8e5c..3dd0885eb 100644 --- a/doc/man/hushd.1 +++ b/doc/man/hushd.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.10. -.TH HUSHD "1" "December 2020" "hushd v3.6.0" "User Commands" +.TH HUSHD "1" "January 2021" "hushd v3.6.1" "User Commands" .SH NAME -hushd \- manual page for hushd v3.6.0 +hushd \- manual page for hushd v3.6.1 .SH DESCRIPTION -Hush Daemon version v3.6.0\-12fabf7fd +Hush Daemon version v3.6.0\-e05a4e473\-dirty .PP In order to ensure you are adequately protecting your privacy when using Hush, please see . @@ -17,10 +17,6 @@ Start a Hush Daemon .IP This help message .HP -\fB\-alerts\fR -.IP -Receive and display P2P network alerts (default: 1) -.HP \fB\-alertnotify=\fR .IP Execute command when a relevant alert is received or we see a really @@ -343,12 +339,12 @@ Keep transactions for at least blocks (default: 10000) .HP \fB\-opretmintxfee=\fR .IP -Minimum fee (in KMD/kB) to allow for OP_RETURN transactions (default: +Minimum fee (in HUSH/kB) to allow for OP_RETURN transactions (default: 400000) .HP \fB\-paytxfee=\fR .IP -Fee (in KMD/kB) to add to transactions you send (default: 0.00) +Fee (in HUSH/kB) to add to transactions you send (default: 0.00) .HP \fB\-rescan\fR .IP @@ -378,7 +374,7 @@ mined will become invalid (default: 200) .HP \fB\-maxtxfee=\fR .IP -Maximum total fees (in KMD) to use in a single wallet transaction; +Maximum total fees (in HUSH) to use in a single wallet transaction; setting this too low may abort large transactions (default: 0.10) .HP \fB\-upgradewallet\fR @@ -462,7 +458,7 @@ Prepend debug output with timestamp (default: 1) .HP \fB\-minrelaytxfee=\fR .IP -Fees (in KMD/kB) smaller than this are considered zero fee for relaying +Fees (in HUSH/kB) smaller than this are considered zero fee for relaying (default: 0.000001) .HP \fB\-printtoconsole\fR diff --git a/qa/pull-tester/run-bitcoind-for-test.sh.in b/qa/pull-tester/run-bitcoind-for-test.sh.in index 1a7898eb2..7a621569d 100755 --- a/qa/pull-tester/run-bitcoind-for-test.sh.in +++ b/qa/pull-tester/run-bitcoind-for-test.sh.in @@ -13,7 +13,7 @@ touch "$DATADIR/regtest/debug.log" tail -q -n 1 -F "$DATADIR/regtest/debug.log" | grep -m 1 -q "Done loading" & WAITER=$! PORT=`expr 10000 + $$ % 55536` -"@abs_top_builddir@/src/hushd@EXEEXT@" -connect=0.0.0.0 -datadir="$DATADIR" -rpcuser=user -rpcpassword=pass -listen -keypool=3 -debug -debug=net -logtimestamps -checkmempool=0 -relaypriority=0 -port=$PORT -whitelist=127.0.0.1 -regtest -rpcport=`expr $PORT + 1` & +"@abs_top_builddir@/src/hushd@EXEEXT@" -connect=0.0.0.0 -datadir="$DATADIR" -rpcuser=user -rpcpassword=pass -listen -keypool=3 -debug -debug=net -logtimestamps -checkmempool=0 -relaypriority=0 -port=$PORT -allowlist=127.0.0.1 -regtest -rpcport=`expr $PORT + 1` & BITCOIND=$! #Install a watchdog. diff --git a/qa/rpc-tests/ac_private.py b/qa/rpc-tests/ac_private.py index 5c871d49c..37b7ca471 100755 --- a/qa/rpc-tests/ac_private.py +++ b/qa/rpc-tests/ac_private.py @@ -49,7 +49,7 @@ class AssetChainPrivateTest (BitcoinTestFramework): '-ac_supply=0', '-ac_reward=25600000000', '-ac_private=1', - '-whitelist=127.0.0.1', + '-allowlist=127.0.0.1', '-debug', '--daemon', '-rpcuser=rt', diff --git a/qa/rpc-tests/bip65-cltv-p2p.py b/qa/rpc-tests/bip65-cltv-p2p.py index 8aef7fe0e..68d7f7df3 100755 --- a/qa/rpc-tests/bip65-cltv-p2p.py +++ b/qa/rpc-tests/bip65-cltv-p2p.py @@ -30,7 +30,7 @@ class BIP65Test(ComparisonTestFramework): def setup_network(self): self.nodes = start_nodes(1, self.options.tmpdir, - extra_args=[['-debug', '-whitelist=127.0.0.1']], + extra_args=[['-debug', '-allowlist=127.0.0.1']], binary=[self.options.testbinary]) self.is_network_split = False diff --git a/qa/rpc-tests/bipdersig-p2p.py b/qa/rpc-tests/bipdersig-p2p.py index d03dcf004..1427a58ac 100755 --- a/qa/rpc-tests/bipdersig-p2p.py +++ b/qa/rpc-tests/bipdersig-p2p.py @@ -30,7 +30,7 @@ class BIP66Test(ComparisonTestFramework): def setup_network(self): self.nodes = start_nodes(1, self.options.tmpdir, - extra_args=[['-debug', '-whitelist=127.0.0.1']], + extra_args=[['-debug', '-allowlist=127.0.0.1']], binary=[self.options.testbinary]) self.is_network_split = False diff --git a/qa/rpc-tests/cryptoconditions.py b/qa/rpc-tests/cryptoconditions.py index 44bd89001..90b01c555 100755 --- a/qa/rpc-tests/cryptoconditions.py +++ b/qa/rpc-tests/cryptoconditions.py @@ -54,7 +54,7 @@ class CryptoConditionsTest (BitcoinTestFramework): '-ac_reward=10000000000000', '-pubkey=' + self.pubkey, '-ac_cc=2', - '-whitelist=127.0.0.1', + '-allowlist=127.0.0.1', '-debug', '--daemon', '-rpcuser=rt', @@ -71,7 +71,7 @@ class CryptoConditionsTest (BitcoinTestFramework): '-ac_reward=10000000000000', '-pubkey=' + self.pubkey1, '-ac_cc=2', - '-whitelist=127.0.0.1', + '-allowlist=127.0.0.1', '-debug', '-addnode=127.0.0.1:64367', '--daemon', diff --git a/qa/rpc-tests/dpowconfs.py b/qa/rpc-tests/dpowconfs.py index a773c70f5..33419535f 100755 --- a/qa/rpc-tests/dpowconfs.py +++ b/qa/rpc-tests/dpowconfs.py @@ -46,7 +46,7 @@ class DPoWConfsTest(BitcoinTestFramework): '-ac_reward=10000000000000', #'-pubkey=' + self.pubkey, '-ac_cc=2', - '-whitelist=127.0.0.1', + '-allowlist=127.0.0.1', '-debug', '--daemon', '-rpcuser=rt', diff --git a/qa/rpc-tests/maxblocksinflight.py b/qa/rpc-tests/maxblocksinflight.py index 04780139c..76ae7c9f4 100755 --- a/qa/rpc-tests/maxblocksinflight.py +++ b/qa/rpc-tests/maxblocksinflight.py @@ -94,7 +94,7 @@ class MaxBlocksInFlightTest(BitcoinTestFramework): def setup_network(self): self.nodes = start_nodes(1, self.options.tmpdir, - extra_args=[['-debug', '-whitelist=127.0.0.1']], + extra_args=[['-debug', '-allowlist=127.0.0.1']], binary=[self.options.testbinary]) def run_test(self): diff --git a/qa/rpc-tests/p2p-acceptblock.py b/qa/rpc-tests/p2p-acceptblock.py index 77895df7c..3fc798714 100755 --- a/qa/rpc-tests/p2p-acceptblock.py +++ b/qa/rpc-tests/p2p-acceptblock.py @@ -19,12 +19,12 @@ import time ''' AcceptBlockTest -- test processing of unrequested blocks. -Since behavior differs when receiving unrequested blocks from whitelisted peers -versus non-whitelisted peers, this tests the behavior of both (effectively two +Since behavior differs when receiving unrequested blocks from allowlisted peers +versus non-allowlisted peers, this tests the behavior of both (effectively two separate tests running in parallel). Setup: two nodes, node0 and node1, not connected to each other. Node0 does not -whitelist localhost, but node1 does. They will each be on their own chain for +allowlist localhost, but node1 does. They will each be on their own chain for this test. We have one NodeConn connection to each, test_node and white_node respectively. @@ -39,7 +39,7 @@ The test: corresponding peer. Node0 should not process this block (just accept the header), because it is unrequested and doesn't have more work than the tip. - Node1 should process because this is coming from a whitelisted peer. + Node1 should process because this is coming from a allowlisted peer. 4. Send another block that builds on the forking block. Node0 should process this block but be stuck on the shorter chain, because @@ -49,7 +49,7 @@ The test: 4b.Send 288 more blocks on the longer chain. Node0 should process all but the last block (too far ahead in height). Send all headers to Node1, and then send the last block in that chain. - Node1 should accept the block because it's coming from a whitelisted peer. + Node1 should accept the block because it's coming from a allowlisted peer. 5. Send a duplicate of the block in #3 to Node0. Node0 should not process the block because it is unrequested, and stay on @@ -124,19 +124,19 @@ class AcceptBlockTest(BitcoinTestFramework): def setup_network(self): # Node0 will be used to test behavior of processing unrequested blocks - # from peers which are not whitelisted, while Node1 will be used for - # the whitelisted case. + # from peers which are not allowlisted, while Node1 will be used for + # the allowlisted case. self.nodes = [] self.nodes.append(start_node(0, self.options.tmpdir, ["-debug"], binary=self.options.testbinary)) self.nodes.append(start_node(1, self.options.tmpdir, - ["-debug", "-whitelist=127.0.0.1"], + ["-debug", "-allowlist=127.0.0.1"], binary=self.options.testbinary)) def run_test(self): # Setup the p2p connections and start up the network thread. - test_node = TestNode() # connects to node0 (not whitelisted) - white_node = TestNode() # connects to node1 (whitelisted) + test_node = TestNode() # connects to node0 (not allowlisted) + white_node = TestNode() # connects to node1 (allowlisted) connections = [] connections.append(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], test_node)) @@ -187,7 +187,7 @@ class AcceptBlockTest(BitcoinTestFramework): if x['hash'] == blocks_h2f[1].hash: assert_equal(x['status'], "valid-headers") - print "Second height 2 block accepted only from whitelisted peer" + print "Second height 2 block accepted only from allowlisted peer" # 4. Now send another block that builds on the forking chain. blocks_h3 = [] @@ -207,13 +207,13 @@ class AcceptBlockTest(BitcoinTestFramework): # But this block should be accepted by node0 since it has more work. try: self.nodes[0].getblock(blocks_h3[0].hash) - print "Unrequested more-work block accepted from non-whitelisted peer" + print "Unrequested more-work block accepted from non-allowlisted peer" except: raise AssertionError("Unrequested more work block was not processed") # Node1 should have accepted and reorged. assert_equal(self.nodes[1].getblockcount(), 3) - print "Successfully reorged to length 3 chain from whitelisted peer" + print "Successfully reorged to length 3 chain from allowlisted peer" # 4b. Now mine 288 more blocks and deliver; all should be processed but # the last (height-too-high) on node0. Node1 should process the tip if @@ -250,9 +250,9 @@ class AcceptBlockTest(BitcoinTestFramework): try: white_node.sync_with_ping() self.nodes[1].getblock(tips[1].hash) - print "Unrequested block far ahead of tip accepted from whitelisted peer" + print "Unrequested block far ahead of tip accepted from allowlisted peer" except: - raise AssertionError("Unrequested block from whitelisted peer not accepted") + raise AssertionError("Unrequested block from allowlisted peer not accepted") # 5. Test handling of unrequested block on the node that didn't process # Should still not be processed (even though it has a child that has more @@ -289,7 +289,7 @@ class AcceptBlockTest(BitcoinTestFramework): test_node.sync_with_ping() assert_equal(self.nodes[0].getblockcount(), 290) - print "Successfully reorged to longer chain from non-whitelisted peer" + print "Successfully reorged to longer chain from non-allowlisted peer" [ c.disconnect_node() for c in connections ] diff --git a/qa/rpc-tests/smartfees.py b/qa/rpc-tests/smartfees.py index caf879564..a56c5f8c0 100755 --- a/qa/rpc-tests/smartfees.py +++ b/qa/rpc-tests/smartfees.py @@ -152,7 +152,7 @@ class EstimateFeeTest(BitcoinTestFramework): self.nodes = [] # Use node0 to mine blocks for input splitting self.nodes.append(start_node(0, self.options.tmpdir, ["-maxorphantx=1000", - "-relaypriority=0", "-whitelist=127.0.0.1"])) + "-relaypriority=0", "-allowlist=127.0.0.1"])) print("This test is time consuming, please be patient") print("Splitting inputs to small size so we can generate low priority tx's") diff --git a/qa/rpc-tests/test_framework/test_framework.py b/qa/rpc-tests/test_framework/test_framework.py index d54bb49e4..8ae2cab22 100755 --- a/qa/rpc-tests/test_framework/test_framework.py +++ b/qa/rpc-tests/test_framework/test_framework.py @@ -174,7 +174,7 @@ class ComparisonTestFramework(BitcoinTestFramework): def setup_network(self): self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, - extra_args=[['-debug', '-whitelist=127.0.0.1']] * self.num_nodes, + extra_args=[['-debug', '-allowlist=127.0.0.1']] * self.num_nodes, binary=[self.options.testbinary] + [self.options.refbinary]*(self.num_nodes-1)) @@ -209,7 +209,7 @@ class HushTestFramework(BitcoinTestFramework): '-ac_reward=10000000000000', '-pubkey=' + self.pubkey, '-ac_cc=2', - '-whitelist=127.0.0.1', + '-allowlist=127.0.0.1', '-debug', '--daemon', '-rpcuser=rt', @@ -226,7 +226,7 @@ class HushTestFramework(BitcoinTestFramework): '-ac_reward=10000000000000', '-pubkey=' + self.pubkey1, '-ac_cc=2', - '-whitelist=127.0.0.1', + '-allowlist=127.0.0.1', '-debug', '-addnode=127.0.0.1:64367', '--daemon', @@ -270,7 +270,7 @@ class CryptoconditionsTestFramework(BitcoinTestFramework): '-ac_reward=10000000000000', '-pubkey=' + self.pubkey, '-ac_cc=2', - '-whitelist=127.0.0.1', + '-allowlist=127.0.0.1', '-debug', '--daemon', '-rpcuser=rt', @@ -287,7 +287,7 @@ class CryptoconditionsTestFramework(BitcoinTestFramework): '-ac_reward=10000000000000', '-pubkey=' + self.pubkey1, '-ac_cc=2', - '-whitelist=127.0.0.1', + '-allowlist=127.0.0.1', '-debug', '-addnode=127.0.0.1:64367', '--daemon', diff --git a/src/cc/CC_made_easy.md b/src/cc/CC_made_easy.md index 2d1081003..30a45e173 100644 --- a/src/cc/CC_made_easy.md +++ b/src/cc/CC_made_easy.md @@ -638,7 +638,7 @@ vout.n-1: opreturn with oracletxid, prevbatontxid and data in proper format The oraclesdata transaction is the most complex as it needs to find and spend the baton utxo, use the correct datafee and spend funds from the locked subscription funds. With the above, the oracles CC is complete and allows the creations of massively parallel data streams from multiple vendors that uses free market feedback via payments, ie. poorly performing providers wont get renewals. -I expect that at first, the data providers will just be dapp developers deploying a working system including the required data, but its structure allows open market competition. Of course, specific dapps could restrict themselves to using only publishers from a whitelist of pubkeys. The potential usecases for oracles CC is quite varied and limited only by the imagination. +I expect that at first, the data providers will just be dapp developers deploying a working system including the required data, but its structure allows open market competition. Of course, specific dapps could restrict themselves to using only publishers from a allowlist of pubkeys. The potential usecases for oracles CC is quite varied and limited only by the imagination. Chapter 12 - limitless possibilities As can be seen, CC contracts can do a wide range of things and since they are Turing complete, we know that this is true. However, what is more important is the added security gained from using a utxo based system. While in some ways it is more complex to have to deal with utxo, as can be seen by the above examples, it is either solved and made invisible at the rpc level, or actually used as part of the solution. diff --git a/src/hush_defs.h b/src/hush_defs.h index 9f394d132..871c0bd5c 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -530,7 +530,7 @@ extern char NOTARY_ADDRESSES[NUM_HUSH_SEASONS][64][64]; extern int32_t HUSH_TESTNODE, HUSH_SNAPSHOT_INTERVAL; extern int32_t ASSETCHAINS_EARLYTXIDCONTRACT; int tx_height( const uint256 &hash ); -extern std::vector vWhiteListAddress; +extern std::vector vAllowListAddress; extern std::map mapHeightEvalActivate; void komodo_netevent(std::vector payload); int32_t getacseason(uint32_t timestamp); diff --git a/src/hush_globals.h b/src/hush_globals.h index f89157cb2..af08935b3 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -53,7 +53,7 @@ std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONAT uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; int8_t ASSETCHAINS_ADAPTIVEPOW; std::vector Mineropret; -std::vector vWhiteListAddress; +std::vector vAllowListAddress; char NOTARYADDRS[64][64]; char NOTARY_ADDRESSES[NUM_HUSH_SEASONS][64][64]; diff --git a/src/init.cpp b/src/init.cpp index d0e7e0e73..7b2627030 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -118,7 +118,7 @@ enum BindFlags { BF_NONE = 0, BF_EXPLICIT = (1U << 0), BF_REPORT_ERROR = (1U << 1), - BF_WHITELIST = (1U << 2), + BF_ALLOWLIST = (1U << 2), }; static const char* FEE_ESTIMATES_FILENAME="fee_estimates.dat"; @@ -319,7 +319,7 @@ bool static Bind(const CService &addr, unsigned int flags) { if (!(flags & BF_EXPLICIT) && IsLimited(addr)) return false; std::string strError; - if (!BindListenPort(addr, strError, (flags & BF_WHITELIST) != 0)) { + if (!BindListenPort(addr, strError, (flags & BF_ALLOWLIST) != 0)) { if (flags & BF_REPORT_ERROR) return InitError(strError); return false; @@ -425,9 +425,9 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-tlskeypwd=", _("Password for a private key encryption (default: not set, i.e. private key will be stored unencrypted)")); strUsage += HelpMessageOpt("-tlscertpath=", _("Full path to a certificate")); strUsage += HelpMessageOpt("-tlstrustdir=", _("Full path to a trusted certificates directory")); - strUsage += HelpMessageOpt("-whitebind=", _("Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6")); - strUsage += HelpMessageOpt("-whitelist=", _("Whitelist peers connecting from the given netmask or IP address. Can be specified multiple times.") + - " " + _("Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway")); + strUsage += HelpMessageOpt("-allowbind=", _("Bind to given address and allowlist peers connecting to it. Use [host]:port notation for IPv6")); + strUsage += HelpMessageOpt("-allowlist=", _("Allowlist peers connecting from the given netmask or IP address. Can be specified multiple times.") + + " " + _("Allowlisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway")); #ifdef ENABLE_WALLET strUsage += HelpMessageGroup(_("Wallet options:")); @@ -457,7 +457,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-wallet=", _("Specify wallet file absolute path or a path relative to the data directory") + " " + strprintf(_("(default: %s)"), DEFAULT_WALLET_DAT)); strUsage += HelpMessageOpt("-walletbroadcast", _("Make the wallet broadcast transactions") + " " + strprintf(_("(default: %u)"), true)); strUsage += HelpMessageOpt("-walletnotify=", _("Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)")); - strUsage += HelpMessageOpt("-whitelistaddress=", _("Enable the wallet filter for notary nodes and add one Raddress to the whitelist of the wallet filter. If -whitelistaddress= is used, then the wallet filter is automatically activated. Several Raddresses can be defined using several -whitelistaddress= (similar to -addnode). The wallet filter will filter the utxo to only ones coming from my own Raddress (derived from pubkey) and each Raddress defined using -whitelistaddress= this option is mostly for Notary Nodes).")); + strUsage += HelpMessageOpt("-allowlistaddress=", _("Enable the wallet filter for notary nodes and add one Raddress to the allowlist of the wallet filter. If -allowlistaddress= is used, then the wallet filter is automatically activated. Several Raddresses can be defined using several -allowlistaddress= (similar to -addnode). The wallet filter will filter the utxo to only ones coming from my own Raddress (derived from pubkey) and each Raddress defined using -allowlistaddress= this option is mostly for Notary Nodes).")); strUsage += HelpMessageOpt("-zapwallettxes=", _("Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup") + " " + _("(1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data)")); #endif @@ -1038,9 +1038,9 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) if (SoftSetBoolArg("-listen", true)) LogPrintf("%s: parameter interaction: -bind set -> setting -listen=1\n", __func__); } - if (mapArgs.count("-whitebind")) { + if (mapArgs.count("-allowbind")) { if (SoftSetBoolArg("-listen", true)) - LogPrintf("%s: parameter interaction: -whitebind set -> setting -listen=1\n", __func__); + LogPrintf("%s: parameter interaction: -allowbind set -> setting -listen=1\n", __func__); } //fprintf(stderr,"%s tik3\n", __FUNCTION__); @@ -1114,7 +1114,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) //fprintf(stderr,"%s tik4\n", __FUNCTION__); // Make sure enough file descriptors are available - int nBind = std::max((int)mapArgs.count("-bind") + (int)mapArgs.count("-whitebind"), 1); + int nBind = std::max((int)mapArgs.count("-bind") + (int)mapArgs.count("-allowbind"), 1); nMaxConnections = GetArg("-maxconnections", DEFAULT_MAX_PEER_CONNECTIONS); //fprintf(stderr,"nMaxConnections %d\n",nMaxConnections); nMaxConnections = std::max(std::min(nMaxConnections, (int)(FD_SETSIZE - nBind - MIN_CORE_FILEDESCRIPTORS)), 0); @@ -1533,12 +1533,12 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) } //fprintf(stderr,"%s tik19\n", __FUNCTION__); - if (mapArgs.count("-whitelist")) { - BOOST_FOREACH(const std::string& net, mapMultiArgs["-whitelist"]) { + if (mapArgs.count("-allowlist")) { + BOOST_FOREACH(const std::string& net, mapMultiArgs["-allowlist"]) { CSubNet subnet(net); if (!subnet.IsValid()) - return InitError(strprintf(_("Invalid netmask specified in -whitelist: '%s'"), net)); - CNode::AddWhitelistedRange(subnet); + return InitError(strprintf(_("Invalid netmask specified in -allowlist: '%s'"), net)); + CNode::AddAllowlistedRange(subnet); } } @@ -1584,23 +1584,22 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) //fprintf(stderr,"%s tik22\n", __FUNCTION__); bool fBound = false; if (fListen) { - if (mapArgs.count("-bind") || mapArgs.count("-whitebind")) { + if (mapArgs.count("-bind") || mapArgs.count("-allowbind")) { BOOST_FOREACH(const std::string& strBind, mapMultiArgs["-bind"]) { CService addrBind; if (!Lookup(strBind.c_str(), addrBind, GetListenPort(), false)) return InitError(strprintf(_("Cannot resolve -bind address: '%s'"), strBind)); fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR)); } - BOOST_FOREACH(const std::string& strBind, mapMultiArgs["-whitebind"]) { + BOOST_FOREACH(const std::string& strBind, mapMultiArgs["-allowbind"]) { CService addrBind; if (!Lookup(strBind.c_str(), addrBind, 0, false)) - return InitError(strprintf(_("Cannot resolve -whitebind address: '%s'"), strBind)); + return InitError(strprintf(_("Cannot resolve -allowbind address: '%s'"), strBind)); if (addrBind.GetPort() == 0) - return InitError(strprintf(_("Need to specify a port with -whitebind: '%s'"), strBind)); - fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR | BF_WHITELIST)); + return InitError(strprintf(_("Need to specify a port with -allowbind: '%s'"), strBind)); + fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR | BF_ALLOWLIST)); } - } - else { + } else { struct in_addr inaddr_any; inaddr_any.s_addr = INADDR_ANY; fBound |= Bind(CService(in6addr_any, GetListenPort()), BF_NONE); diff --git a/src/main.cpp b/src/main.cpp index c05bbae4a..9e0961e11 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -284,7 +284,7 @@ namespace { bool fCurrentlyConnected; //! Accumulated misbehaviour score for this peer. int nMisbehavior; - //! Whether this peer should be disconnected and banned (unless whitelisted). + //! Whether this peer should be disconnected and banned (unless allowlisted). bool fShouldBan; //! String name of this peer (debugging/logging purposes). std::string name; @@ -345,7 +345,7 @@ namespace { nPreferredDownload -= state->fPreferredDownload; // Whether this node should be marked as a preferred download node. - state->fPreferredDownload = (!node->fInbound || node->fWhitelisted) && !node->fOneShot && !node->fClient; + state->fPreferredDownload = (!node->fInbound || node->fAllowlisted) && !node->fOneShot && !node->fClient; nPreferredDownload += state->fPreferredDownload; } @@ -7589,8 +7589,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, assert(recentRejects); recentRejects->insert(tx.GetHash()); - if (pfrom->fWhitelisted) { - // Always relay transactions received from whitelisted peers, even + if (pfrom->fAllowlisted) { + // Always relay transactions received from allowlisted peers, even // if they were already in the mempool or rejected from it due // to policy, allowing the node to function as a gateway for // nodes hidden behind it. @@ -7600,10 +7600,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // case. int nDoS = 0; if (!state.IsInvalid(nDoS) || nDoS == 0) { - LogPrintf("Force relaying tx %s from whitelisted peer=%d\n", tx.GetHash().ToString(), pfrom->id); + LogPrintf("Force relaying tx %s from allowlisted peer=%d\n", tx.GetHash().ToString(), pfrom->id); RelayTransaction(tx); } else { - LogPrintf("Not relaying invalid transaction %s from whitelisted peer=%d (%s (code %d))\n", + LogPrintf("Not relaying invalid transaction %s from allowlisted peer=%d (%s (code %d))\n", tx.GetHash().ToString(), pfrom->id, state.GetRejectReason(), state.GetRejectCode()); } } @@ -7693,11 +7693,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, pfrom->AddInventoryKnown(inv); CValidationState state; - // Process all blocks from whitelisted peers, even if not requested, + // Process all blocks from allowlisted peers, even if not requested, // unless we're still syncing with the network. // Such an unrequested block may still be processed, subject to the // conditions in AcceptBlock(). - bool forceProcessing = pfrom->fWhitelisted && !IsInitialBlockDownload(); + bool forceProcessing = pfrom->fAllowlisted && !IsInitialBlockDownload(); ProcessNewBlock(0,0,state, pfrom, &block, forceProcessing, NULL); int nDoS; if (state.IsInvalid(nDoS)) { @@ -8039,8 +8039,8 @@ bool SendMessages(CNode* pto, bool fSendTrickle) CNodeState &state = *State(pto->GetId()); if (state.fShouldBan) { - if (pto->fWhitelisted) { - LogPrintf("Warning: not punishing whitelisted peer %s!\n", pto->addr.ToString()); + if (pto->fAllowlisted) { + LogPrintf("Warning: not punishing allowlisted peer %s!\n", pto->addr.ToString()); } else { pto->fDisconnect = true; if (pto->addr.IsLocal()) diff --git a/src/main.h b/src/main.h index f3fe057ee..62070998d 100644 --- a/src/main.h +++ b/src/main.h @@ -207,7 +207,7 @@ void UnregisterNodeSignals(CNodeSignals& nodeSignals); * @param[out] state This may be set to an Error state if any error occurred processing it, including during validation/connection/etc of otherwise unrelated blocks during reorganisation; or it may be set to an Invalid state if pblock is itself invalid (but this is not guaranteed even when the block is checked). If you want to *possibly* get feedback on whether pblock is valid, you must also install a CValidationInterface (see validationinterface.h) - this will have its BlockChecked method called whenever *any* block completes validation. * @param[in] pfrom The node which we are receiving the block from; it is added to mapBlockSource and may be penalised if the block is invalid. * @param[in] pblock The block we want to process. - * @param[in] fForceProcessing Process this block even if unrequested; used for non-network block sources and whitelisted peers. + * @param[in] fForceProcessing Process this block even if unrequested; used for non-network block sources and allowlisted peers. * @param[out] dbp If pblock is stored to disk (or already there), this will be set to its location. * @return True if state.IsValid() */ diff --git a/src/net.cpp b/src/net.cpp index b02c9afbc..0c1711dce 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -79,9 +79,9 @@ namespace { struct ListenSocket { SOCKET socket; - bool whitelisted; + bool allowlisted; - ListenSocket(SOCKET socket, bool whitelisted) : socket(socket), whitelisted(whitelisted) {} + ListenSocket(SOCKET socket, bool allowlisted) : socket(socket), allowlisted(allowlisted) {} }; } @@ -600,21 +600,21 @@ void CNode::GetBanned(std::map &banMap) } -std::vector CNode::vWhitelistedRange; -CCriticalSection CNode::cs_vWhitelistedRange; +std::vector CNode::vAllowlistedRange; +CCriticalSection CNode::cs_vAllowlistedRange; -bool CNode::IsWhitelistedRange(const CNetAddr &addr) { - LOCK(cs_vWhitelistedRange); - BOOST_FOREACH(const CSubNet& subnet, vWhitelistedRange) { +bool CNode::IsAllowlistedRange(const CNetAddr &addr) { + LOCK(cs_vAllowlistedRange); + BOOST_FOREACH(const CSubNet& subnet, vAllowlistedRange) { if (subnet.Match(addr)) return true; } return false; } -void CNode::AddWhitelistedRange(const CSubNet &subnet) { - LOCK(cs_vWhitelistedRange); - vWhitelistedRange.push_back(subnet); +void CNode::AddAllowlistedRange(const CSubNet &subnet) { + LOCK(cs_vAllowlistedRange); + vAllowlistedRange.push_back(subnet); } void CNode::copyStats(CNodeStats &stats, const std::vector &m_asmap) @@ -635,7 +635,7 @@ void CNode::copyStats(CNodeStats &stats, const std::vector &m_asmap) stats.nStartingHeight = nStartingHeight; stats.nSendBytes = nSendBytes; stats.nRecvBytes = nRecvBytes; - stats.fWhitelisted = fWhitelisted; + stats.fAllowlisted = fAllowlisted; // It is common for nodes with good ping times to suddenly become lagged, // due to a new block arriving or other large transfer. @@ -919,7 +919,7 @@ static bool AttemptToEvictConnection(bool fPreferNewConnection) { LOCK(cs_vNodes); BOOST_FOREACH(CNode *node, vNodes) { - if (node->fWhitelisted) + if (node->fAllowlisted) continue; if (!node->fInbound) continue; @@ -1010,7 +1010,7 @@ static bool AttemptToEvictConnection(bool fPreferNewConnection) { // Do not disconnect peers if there is only one unprotected connection from their network group. if (vEvictionCandidates.size() <= 1) - // unless we prefer the new connection (for whitelisted peers) + // unless we prefer the new connection (for allowlisted peers) if (!fPreferNewConnection) return false; @@ -1032,7 +1032,7 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { if (!addr.SetSockAddr((const struct sockaddr*)&sockaddr)) LogPrintf("Warning: Unknown socket family\n"); - bool whitelisted = hListenSocket.whitelisted || CNode::IsWhitelistedRange(addr); + bool allowlisted = hListenSocket.allowlisted || CNode::IsAllowlistedRange(addr); int nInboundThisIP = 0; { @@ -1065,7 +1065,7 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { return; } - if (CNode::IsBanned(addr) && !whitelisted) + if (CNode::IsBanned(addr) && !allowlisted) { LogPrintf("connection from %s dropped (banned)\n", addr.ToString()); CloseSocket(hSocket); @@ -1074,7 +1074,7 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { if (nInbound >= nMaxInbound) { - if (!AttemptToEvictConnection(whitelisted)) { + if (!AttemptToEvictConnection(allowlisted)) { // No connection to evict, disconnect the new connection LogPrint("net", "failed to find an eviction candidate - connection dropped (full)\n"); CloseSocket(hSocket); @@ -1118,7 +1118,7 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { CNode* pnode = new CNode(hSocket, addr, "", true, ssl); pnode->AddRef(); - pnode->fWhitelisted = whitelisted; + pnode->fAllowlisted = allowlisted; LogPrint("net", "connection from %s accepted\n", addr.ToString()); @@ -1674,7 +1674,7 @@ void ThreadMessageHandler() { TRY_LOCK(pnode->cs_vSend, lockSend); if (lockSend) - g_signals.SendMessages(pnode, pnode == pnodeTrickle || pnode->fWhitelisted); + g_signals.SendMessages(pnode, pnode == pnodeTrickle || pnode->fAllowlisted); } boost::this_thread::interruption_point(); } @@ -1691,7 +1691,7 @@ void ThreadMessageHandler() } -bool BindListenPort(const CService &addrBind, string& strError, bool fWhitelisted) +bool BindListenPort(const CService &addrBind, string& strError, bool fAllowlisted) { strError = ""; int nOne = 1; @@ -1787,9 +1787,9 @@ bool BindListenPort(const CService &addrBind, string& strError, bool fWhiteliste return false; } - vhListenSocket.push_back(ListenSocket(hListenSocket, fWhitelisted)); + vhListenSocket.push_back(ListenSocket(hListenSocket, fAllowlisted)); - if (addrBind.IsRoutable() && fDiscover && !fWhitelisted) + if (addrBind.IsRoutable() && fDiscover && !fAllowlisted) AddLocal(addrBind, LOCAL_BIND); return true; @@ -2172,7 +2172,7 @@ CNode::CNode(SOCKET hSocketIn, const CAddress& addrIn, const std::string& addrNa addrName = addrNameIn == "" ? addr.ToStringIPPort() : addrNameIn; nVersion = 0; strSubVer = ""; - fWhitelisted = false; + fAllowlisted = false; fOneShot = false; fClient = false; // set by version message fInbound = fInboundIn; diff --git a/src/net.h b/src/net.h index 9d8797958..8fa29d8cc 100644 --- a/src/net.h +++ b/src/net.h @@ -90,7 +90,7 @@ CNode* FindNode(const CService& ip); CNode* ConnectNode(CAddress addrConnect, const char *pszDest = NULL); bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false); unsigned short GetListenPort(); -bool BindListenPort(const CService &bindAddr, std::string& strError, bool fWhitelisted = false); +bool BindListenPort(const CService &bindAddr, std::string& strError, bool fAllowlisted = false); void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler); bool StopNode(); void SocketSendData(CNode *pnode); @@ -214,7 +214,7 @@ public: int nStartingHeight; uint64_t nSendBytes; uint64_t nRecvBytes; - bool fWhitelisted; + bool fAllowlisted; double dPingTime; double dPingWait; std::string addrLocal; @@ -312,7 +312,7 @@ public: // store the sanitized version in cleanSubVer. The original should be used when dealing with // the network or wire types and the cleaned string used when displayed or logged. std::string strSubVer, cleanSubVer; - bool fWhitelisted; // This peer can bypass DoS banning. + bool fAllowlisted; // This peer can bypass DoS banning. bool fOneShot; bool fClient; bool fInbound; @@ -340,10 +340,10 @@ protected: static std::map setBanned; static CCriticalSection cs_setBanned; - // Whitelisted ranges. Any node connecting from these is automatically - // whitelisted (as well as those connecting to whitelisted binds). - static std::vector vWhitelistedRange; - static CCriticalSection cs_vWhitelistedRange; + // Allowlisted ranges. Any node connecting from these is automatically + // allowlisted (as well as those connecting to allowlisted binds). + static std::vector vAllowlistedRange; + static CCriticalSection cs_vAllowlistedRange; // Basic fuzz-testing void Fuzz(int nChance); // modifies ssSend @@ -681,8 +681,8 @@ public: void copyStats(CNodeStats &stats, const std::vector &m_asmap); - static bool IsWhitelistedRange(const CNetAddr &ip); - static void AddWhitelistedRange(const CSubNet &subnet); + static bool IsAllowlistedRange(const CNetAddr &ip); + static void AddAllowlistedRange(const CSubNet &subnet); // Network stats static void RecordBytesRecv(uint64_t bytes); diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index b98508796..b32db9118 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -165,7 +165,7 @@ UniValue getpeerinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) } obj.push_back(Pair("inflight", heights)); } - obj.push_back(Pair("whitelisted", stats.fWhitelisted)); + obj.push_back(Pair("allowlisted", stats.fAllowlisted)); ret.push_back(obj); } diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 14e1898a4..354a8c3f9 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1539,34 +1539,31 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pbl bool fExisted = mapWallet.count(tx.GetHash()) != 0; if (fExisted && !fUpdate) return false; auto saplingNoteDataAndAddressesToAdd = FindMySaplingNotes(tx); - auto saplingNoteData = saplingNoteDataAndAddressesToAdd.first; - auto addressesToAdd = saplingNoteDataAndAddressesToAdd.second; + auto saplingNoteData = saplingNoteDataAndAddressesToAdd.first; + auto addressesToAdd = saplingNoteDataAndAddressesToAdd.second; for (const auto &addressToAdd : addressesToAdd) { if (!AddSaplingIncomingViewingKey(addressToAdd.second, addressToAdd.first)) { return false; } } static std::string NotaryAddress; static bool didinit; - if ( !didinit && NotaryAddress.empty() && NOTARY_PUBKEY33[0] != 0 ) - { + if ( !didinit && NotaryAddress.empty() && NOTARY_PUBKEY33[0] != 0 ) { didinit = true; char Raddress[64]; pubkey2addr((char *)Raddress,(uint8_t *)NOTARY_PUBKEY33); NotaryAddress.assign(Raddress); - vWhiteListAddress = mapMultiArgs["-whitelistaddress"]; - if ( !vWhiteListAddress.empty() ) + vAllowListAddress = mapMultiArgs["-allowlistaddress"]; + if ( !vAllowListAddress.empty() ) { - fprintf(stderr, "Activated Wallet Filter \n Notary Address: %s \n Adding whitelist address's:\n", NotaryAddress.c_str()); - for ( auto wladdr : vWhiteListAddress ) + fprintf(stderr, "Activated Wallet Filter \n Notary Address: %s \n Adding allowlist address's:\n", NotaryAddress.c_str()); + for ( auto wladdr : vAllowListAddress ) fprintf(stderr, " %s\n", wladdr.c_str()); } } - if (fExisted || IsMine(tx) || IsFromMe(tx) || saplingNoteData.size() > 0) - { - // wallet filter for notary nodes. Enables by setting -whitelistaddress= as startup param or in conf file (works same as -addnode byut with R-address's) - if ( !tx.IsCoinBase() && !vWhiteListAddress.empty() && !NotaryAddress.empty() ) - { - int numvinIsOurs = 0, numvinIsWhiteList = 0; + if (fExisted || IsMine(tx) || IsFromMe(tx) || saplingNoteData.size() > 0) { + // wallet filter for notary nodes. Enables by setting -allowlistaddress= as startup param or in conf file (works same as -addnode but with taddr) + if ( !tx.IsCoinBase() && !vAllowListAddress.empty() && !NotaryAddress.empty() ) { + int numvinIsOurs = 0, numvinIsAllowList = 0; for (size_t i = 0; i < tx.vin.size(); i++) { uint256 hash; CTransaction txin; CTxDestination address; @@ -1574,20 +1571,20 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pbl { if ( CBitcoinAddress(address).ToString() == NotaryAddress ) numvinIsOurs++; - for ( auto wladdr : vWhiteListAddress ) + for ( auto wladdr : vAllowListAddress ) { if ( CBitcoinAddress(address).ToString() == wladdr ) { - //fprintf(stderr, "We received from whitelisted address.%s\n", wladdr.c_str()); - numvinIsWhiteList++; + //fprintf(stderr, "We received from allowlisted address.%s\n", wladdr.c_str()); + numvinIsAllowList++; } } } } - // Now we know if it was a tx sent to us, by either a whitelisted address, or ourself. + // Now we know if it was a tx sent to us, by either a allowlisted address, or ourself. if ( numvinIsOurs != 0 ) fprintf(stderr, "We sent from address: %s vins: %d\n",NotaryAddress.c_str(),numvinIsOurs); - if ( numvinIsOurs == 0 && numvinIsWhiteList == 0 ) + if ( numvinIsOurs == 0 && numvinIsAllowList == 0 ) return false; } From a9477ea5a19e7c1012950965a45b8a7c622ba099 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 10 Jan 2021 12:49:58 -0500 Subject: [PATCH 245/277] Port Bitcoin PR#13131 to fig Windows SIGTERM bug --- src/init.cpp | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 7b2627030..ab3b5e778 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -56,7 +56,6 @@ #include "wallet/wallet.h" #include "wallet/walletdb.h" #include "wallet/asyncrpcoperation_saplingconsolidation.h" - #endif #include #include @@ -291,6 +290,7 @@ void Shutdown() } // Signal handlers are very limited in what they are allowed to do, so: +#ifndef WIN32 void HandleSIGTERM(int) { fprintf(stderr,"%s\n",__FUNCTION__); @@ -302,6 +302,26 @@ void HandleSIGHUP(int) fprintf(stderr,"%s\n",__FUNCTION__); fReopenDebugLog = true; } +#else +static BOOL WINAPI consoleCtrlHandler(DWORD dwCtrlType) +{ + fRequestShutdown = true; + // This signal now sleeps with the fishes + Sleep(INFINITE); + return true; +} +#endif + +#ifndef WIN32 +static void registerSignalHandler(int signal, void(*handler)(int)) +{ + struct sigaction sa; + sa.sa_handler = handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(signal, &sa, nullptr); +} +#endif bool static InitError(const std::string &str) { @@ -356,7 +376,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-checkblocks=", strprintf(_("How many blocks to check at startup (default: %u, 0 = all)"), 288)); strUsage += HelpMessageOpt("-checklevel=", strprintf(_("How thorough the block verification of -checkblocks is (0-4, default: %u)"), 3)); strUsage += HelpMessageOpt("-clientname=", _("Full node client name, default 'MagicBean'")); - strUsage += HelpMessageOpt("-conf=", strprintf(_("Specify configuration file (default: %s)"), "komodo.conf")); + strUsage += HelpMessageOpt("-conf=", strprintf(_("Specify configuration file (default: %s)"), "HUSH3.conf")); if (mode == HMM_BITCOIND) { #if !defined(WIN32) @@ -979,21 +999,13 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) umask(077); } - //fprintf(stderr,"%s tik1\n", __FUNCTION__); // Clean shutdown on SIGTERM - struct sigaction sa; - sa.sa_handler = HandleSIGTERM; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - sigaction(SIGTERM, &sa, NULL); - sigaction(SIGINT, &sa, NULL); + registerSignalHandler(SIGTERM, HandleSIGTERM); + registerSignalHandler(SIGINT, HandleSIGTERM); // Reopen debug.log on SIGHUP - struct sigaction sa_hup; - sa_hup.sa_handler = HandleSIGHUP; - sigemptyset(&sa_hup.sa_mask); - sa_hup.sa_flags = 0; - sigaction(SIGHUP, &sa_hup, NULL); + registerSignalHandler(SIGHUP, HandleSIGHUP); + // Ignore SIGPIPE, otherwise it will bring the daemon down if the client closes unexpectedly signal(SIGPIPE, SIG_IGN); @@ -1487,8 +1499,10 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) std::string warningString; std::string errorString; - if (!CWallet::Verify(strWalletFile, warningString, errorString)) + if (!CWallet::Verify(strWalletFile, warningString, errorString)) { + uiInterface.InitMessage(_("Verification failed!")); return false; + } if (!warningString.empty()) InitWarning(warningString); @@ -1510,7 +1524,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","MagicBean"), CLIENT_VERSION, uacomments); + strSubVersion = FormatSubVersion(GetArg("-clientname","jl777sRemorse"), 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)); From 0eb6887cd78a4c072c6cc817666e5cdfe6dda9e8 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 20:45:35 -0500 Subject: [PATCH 246/277] Do not create _7776 files --- src/hush_utils.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hush_utils.h b/src/hush_utils.h index 6776c300b..ad444538f 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -2371,6 +2371,7 @@ void hush_args(char *argv0) sprintf(&magicstr[i<<1],"%02x",magic[i]); magicstr[8] = 0; #ifndef FROM_CLI + /* sprintf(fname,"%s_7776",SMART_CHAIN_SYMBOL); // TODO: why are we doing this again? Most users do not need this if ( (fp= fopen(fname,"wb")) != 0 ) @@ -2382,6 +2383,7 @@ void hush_args(char *argv0) fclose(fp); //printf("created (%s)\n",fname); } else printf("error creating (%s)\n",fname); + */ #endif if ( ASSETCHAINS_CC < 2 ) { @@ -2389,9 +2391,7 @@ void hush_args(char *argv0) { ASSETCHAINS_CC = 2; fprintf(stderr,"smart utxo CC contracts will activate at height.%d\n",KOMODO_CCACTIVATE); - } - else if ( ccEnablesHeight[0] != 0 ) - { + } else if ( ccEnablesHeight[0] != 0 ) { ASSETCHAINS_CC = 2; fprintf(stderr,"smart utxo CC contract %d will activate at height.%d\n",(int32_t)ccEnablesHeight[0],(int32_t)ccEnablesHeight[1]); } From 8f70c5c356794039989d2b083f2ac6d9e977f623 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 20:47:44 -0500 Subject: [PATCH 247/277] HUSHCC --- src/cc/CCutils.cpp | 6 +++--- src/cc/eval.cpp | 6 +++--- src/hush.h | 2 +- src/hush_ccdata.h | 16 ++++++++-------- src/hush_defs.h | 2 +- src/hush_globals.h | 4 ++-- src/hush_utils.h | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index d0e085c85..852c2e4ee 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -826,7 +826,7 @@ bool ProcessCC(struct CCcontract_info *cp,Eval* eval, std::vector param height = HUSH_CONNECTING; if ( HUSH_CONNECTING < 0 ) // always comes back with > 0 for final confirmation return(true); - if ( ASSETCHAINS_CC == 0 || (height & ~(1<<30)) < KOMODO_CCACTIVATE ) + if ( ASSETCHAINS_CC == 0 || (height & ~(1<<30)) < HUSH_CCACTIVATE ) return eval->Invalid("CC are disabled or not active yet"); if ( (HUSH_CONNECTING & (1<<30)) != 0 ) { @@ -836,7 +836,7 @@ bool ProcessCC(struct CCcontract_info *cp,Eval* eval, std::vector param if (cp->validate == NULL) return eval->Invalid("validation not supported for eval code"); - //fprintf(stderr,"HUSH_CONNECTING.%d mempool.%d vs CCactive.%d\n",height,from_mempool,KOMODO_CCACTIVATE); + //fprintf(stderr,"HUSH_CONNECTING.%d mempool.%d vs CCactive.%d\n",height,from_mempool,HUSH_CCACTIVATE); // there is a chance CC tx is valid in mempool, but invalid when in block, so we cant filter duplicate requests. if any of the vins are spent, for example //txid = ctx.GetHash(); //if ( txid == cp->prevtxid ) @@ -872,7 +872,7 @@ bool CClib_Dispatch(const CC *cond,Eval *eval,std::vector paramsNull,co height = HUSH_CONNECTING; if ( HUSH_CONNECTING < 0 ) // always comes back with > 0 for final confirmation return(true); - if ( ASSETCHAINS_CC == 0 || (height & ~(1<<30)) < KOMODO_CCACTIVATE ) + if ( ASSETCHAINS_CC == 0 || (height & ~(1<<30)) < HUSH_CCACTIVATE ) return eval->Invalid("CC are disabled or not active yet"); if ( (HUSH_CONNECTING & (1<<30)) != 0 ) { diff --git a/src/cc/eval.cpp b/src/cc/eval.cpp index 1c4812727..c24bc612f 100644 --- a/src/cc/eval.cpp +++ b/src/cc/eval.cpp @@ -33,14 +33,14 @@ char *CClib_name(); Eval* EVAL_TEST = 0; struct CCcontract_info CCinfos[0x100]; -extern pthread_mutex_t KOMODO_CC_mutex; +extern pthread_mutex_t HUSH_CC_mutex; bool RunCCEval(const CC *cond, const CTransaction &tx, unsigned int nIn) { EvalRef eval; - pthread_mutex_lock(&KOMODO_CC_mutex); + pthread_mutex_lock(&HUSH_CC_mutex); bool out = eval->Dispatch(cond, tx, nIn); - pthread_mutex_unlock(&KOMODO_CC_mutex); + pthread_mutex_unlock(&HUSH_CC_mutex); if ( eval->state.IsValid() != out) fprintf(stderr,"out %d vs %d isValid\n",(int32_t)out,(int32_t)eval->state.IsValid()); //assert(eval->state.IsValid() == out); diff --git a/src/hush.h b/src/hush.h index 06e755d1b..650cb4379 100644 --- a/src/hush.h +++ b/src/hush.h @@ -360,7 +360,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie if ( didinit == 0 ) { portable_mutex_init(&HUSH_KV_mutex); - portable_mutex_init(&KOMODO_CC_mutex); + portable_mutex_init(&HUSH_CC_mutex); didinit = 1; } if ( (sp= hush_stateptr(symbol,dest)) == 0 ) diff --git a/src/hush_ccdata.h b/src/hush_ccdata.h index aa64da448..b38062f22 100644 --- a/src/hush_ccdata.h +++ b/src/hush_ccdata.h @@ -46,7 +46,7 @@ struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t struct komodo_ccdata_entry *allMoMs=0; struct komodo_ccdata *ccdata,*tmpptr; int32_t i,num,max; bool fMutated; std::vector tree, leaves; num = max = 0; - portable_mutex_lock(&KOMODO_CC_mutex); + portable_mutex_lock(&HUSH_CC_mutex); DL_FOREACH_SAFE(CC_data,ccdata,tmpptr) { if ( ccdata->MoMdata.height <= kmdendi && ccdata->MoMdata.height >= kmdstarti ) @@ -66,7 +66,7 @@ struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t if ( ccdata->MoMdata.height < kmdstarti ) break; } - portable_mutex_unlock(&KOMODO_CC_mutex); + portable_mutex_unlock(&HUSH_CC_mutex); if ( (*nump= num) > 0 ) { for (i=0; iMoMdata.height < kmdheight ) @@ -135,7 +135,7 @@ int32_t hush_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *m starti = ccdata->MoMdata.height; } } - portable_mutex_unlock(&KOMODO_CC_mutex); + portable_mutex_unlock(&HUSH_CC_mutex); mdata->kmdstarti = starti; mdata->kmdendi = endi; if ( starti != 0 && endi != 0 && endi >= starti ) @@ -184,7 +184,7 @@ void komodo_purge_ccdata(int32_t height) struct komodo_ccdata *ccdata,*tmpptr; if ( SMART_CHAIN_SYMBOL[0] == 0 ) { - portable_mutex_lock(&KOMODO_CC_mutex); + portable_mutex_lock(&HUSH_CC_mutex); DL_FOREACH_SAFE(CC_data,ccdata,tmpptr) { if ( ccdata->MoMdata.height >= height ) @@ -194,7 +194,7 @@ void komodo_purge_ccdata(int32_t height) free(ccdata); } else break; } - portable_mutex_unlock(&KOMODO_CC_mutex); + portable_mutex_unlock(&HUSH_CC_mutex); } else { @@ -236,9 +236,9 @@ int32_t komodo_rwccdata(char *thischain,int32_t rwflag,struct komodo_ccdata *ccd { ptr = (struct komodo_ccdata *)calloc(1,sizeof(*ptr)); *ptr = *ccdata; - portable_mutex_lock(&KOMODO_CC_mutex); + portable_mutex_lock(&HUSH_CC_mutex); DL_PREPEND(CC_data,ptr); - portable_mutex_unlock(&KOMODO_CC_mutex); + portable_mutex_unlock(&HUSH_CC_mutex); } } else diff --git a/src/hush_defs.h b/src/hush_defs.h index 871c0bd5c..bdcba7296 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -515,7 +515,7 @@ extern std::vector ASSETCHAINS_PRICES,ASSETCHAINS_STOCKS; extern uint256 HUSH_EARLYTXID; -extern int32_t HUSH_CONNECTING,KOMODO_CCACTIVATE,KOMODO_DEALERNODE; +extern int32_t HUSH_CONNECTING,HUSH_CCACTIVATE,KOMODO_DEALERNODE; extern uint32_t ASSETCHAINS_CC; extern std::string CCerror,ASSETCHAINS_CCLIB; extern uint8_t ASSETCHAINS_CCDISABLES[256]; diff --git a/src/hush_globals.h b/src/hush_globals.h index af08935b3..ee442c7e7 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -48,7 +48,7 @@ unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 HUSH_EARLYTXID; int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,HUSH_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,HUSH_NSPV; -int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,KOMODO_CCACTIVATE,JUMBLR_PAUSE = 1; +int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,HUSH_CCACTIVATE,JUMBLR_PAUSE = 1; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; int8_t ASSETCHAINS_ADAPTIVEPOW; @@ -105,7 +105,7 @@ CScript HUSH_EARLYTXID_SCRIPTPUB; int32_t ASSETCHAINS_EARLYTXIDCONTRACT; std::map mapHeightEvalActivate; struct komodo_kv *HUSH_KV; -pthread_mutex_t HUSH_KV_mutex,KOMODO_CC_mutex; +pthread_mutex_t HUSH_KV_mutex,HUSH_CC_mutex; #define MAX_CURRENCIES 32 char CURRENCIES[][8] = { "USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "NZD", // major currencies diff --git a/src/hush_utils.h b/src/hush_utils.h index ad444538f..1de2e0ae8 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1825,7 +1825,7 @@ void hush_args(char *argv0) MAX_REORG_LENGTH = GetArg("-maxreorg",MAX_REORG_LENGTH); WITNESS_CACHE_SIZE = MAX_REORG_LENGTH+10; ASSETCHAINS_CC = GetArg("-ac_cc",0); - KOMODO_CCACTIVATE = GetArg("-ac_ccactivate",0); + HUSH_CCACTIVATE = GetArg("-ac_ccactivate",0); ASSETCHAINS_BLOCKTIME = GetArg("-ac_blocktime",60); ASSETCHAINS_PUBLIC = GetArg("-ac_public",0); ASSETCHAINS_PRIVATE = GetArg("-ac_private",0); @@ -2387,10 +2387,10 @@ void hush_args(char *argv0) #endif if ( ASSETCHAINS_CC < 2 ) { - if ( KOMODO_CCACTIVATE != 0 ) + if ( HUSH_CCACTIVATE != 0 ) { ASSETCHAINS_CC = 2; - fprintf(stderr,"smart utxo CC contracts will activate at height.%d\n",KOMODO_CCACTIVATE); + fprintf(stderr,"smart utxo CC contracts will activate at height.%d\n",HUSH_CCACTIVATE); } else if ( ccEnablesHeight[0] != 0 ) { ASSETCHAINS_CC = 2; fprintf(stderr,"smart utxo CC contract %d will activate at height.%d\n",(int32_t)ccEnablesHeight[0],(int32_t)ccEnablesHeight[1]); From fe95a524faca698248d266c8ca7a9e0be7fec9a2 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 20:51:11 -0500 Subject: [PATCH 248/277] Hush dat mempool --- src/hush_defs.h | 2 +- src/wallet/wallet.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hush_defs.h b/src/hush_defs.h index bdcba7296..4d0beb09d 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -28,7 +28,7 @@ #define HUSH_SMART_CHAIN_MAXLEN 65 #define KOMODO_LIMITED_NETWORKSIZE 4 #define DRAGON_MAXSCRIPTSIZE 10001 -#define KOMODO_MAXMEMPOOLTIME 3600 // affects consensus +#define HUSH_MAXMEMPOOLTIME 3600 // affects consensus #define CRYPTO555_PUBSECPSTR "038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac" #define CRYPTO555_HUSHADDR "RFetqf8WUfWnwNeXdknkm8ojk7EXnYFzrv" #define CRYPTO555_RMD160STR "deadbeefbadcaca748c4986b240ff7d7bc3fffb0" diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 354a8c3f9..d2ea2b3a2 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3048,7 +3048,7 @@ std::vector CWallet::ResendWalletTransactionsBefore(int64_t nTime) if (wtx.nTimeReceived > nTime) continue; - if ( (wtx.nLockTime >= LOCKTIME_THRESHOLD && wtx.nLockTime < now-KOMODO_MAXMEMPOOLTIME) ) + if ( (wtx.nLockTime >= LOCKTIME_THRESHOLD && wtx.nLockTime < now-HUSH_MAXMEMPOOLTIME) ) { //LogPrintf("skip Relaying wtx %s nLockTime %u vs now.%u\n", wtx.GetHash().ToString(),(uint32_t)wtx.nLockTime,now); //vwtxh.push_back(wtx.GetHash()); From ed7ed6d193ff6243e1b326d5b07e2762c221a236 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 20:55:36 -0500 Subject: [PATCH 249/277] Hush hush hush --- src/cc/CCPrices.h | 20 ++++++++++---------- src/cc/prices.cpp | 16 ++++++++-------- src/hush_gateway.h | 28 ++++++++++++++-------------- src/hush_notary.h | 18 +++++++++--------- src/hush_structs.h | 5 +---- 5 files changed, 42 insertions(+), 45 deletions(-) diff --git a/src/cc/CCPrices.h b/src/cc/CCPrices.h index bb413cabc..97fd7e50e 100644 --- a/src/cc/CCPrices.h +++ b/src/cc/CCPrices.h @@ -31,16 +31,16 @@ extern CScript HUSH_EARLYTXID_SCRIPTPUB; #define PRICES_TXFEE 10000 #define PRICES_MAXLEVERAGE 777 #define PRICES_SMOOTHWIDTH 1 -#define KOMODO_MAXPRICES 2048 // must be power of 2 and less than 8192 -#define KOMODO_PRICEMASK (~(KOMODO_MAXPRICES - 1)) // actually 1111 1000 0000 0000 -#define PRICES_WEIGHT (KOMODO_MAXPRICES * 1) // 0000 1000 0000 0000 -#define PRICES_MULT (KOMODO_MAXPRICES * 2) // 0001 0000 0000 0000 -#define PRICES_DIV (KOMODO_MAXPRICES * 3) // 0001 1000 0000 0000 -#define PRICES_INV (KOMODO_MAXPRICES * 4) // 0010 0000 0000 0000 -#define PRICES_MDD (KOMODO_MAXPRICES * 5) // 0010 1000 0000 0000 -#define PRICES_MMD (KOMODO_MAXPRICES * 6) // 0011 0000 0000 0000 -#define PRICES_MMM (KOMODO_MAXPRICES * 7) // 0011 1000 0000 0000 -#define PRICES_DDD (KOMODO_MAXPRICES * 8) // 0100 0000 0000 0000 +#define HUSH_MAXPRICES 2048 // must be power of 2 and less than 8192 +#define KOMODO_PRICEMASK (~(HUSH_MAXPRICES - 1)) // actually 1111 1000 0000 0000 +#define PRICES_WEIGHT (HUSH_MAXPRICES * 1) // 0000 1000 0000 0000 +#define PRICES_MULT (HUSH_MAXPRICES * 2) // 0001 0000 0000 0000 +#define PRICES_DIV (HUSH_MAXPRICES * 3) // 0001 1000 0000 0000 +#define PRICES_INV (HUSH_MAXPRICES * 4) // 0010 0000 0000 0000 +#define PRICES_MDD (HUSH_MAXPRICES * 5) // 0010 1000 0000 0000 +#define PRICES_MMD (HUSH_MAXPRICES * 6) // 0011 0000 0000 0000 +#define PRICES_MMM (HUSH_MAXPRICES * 7) // 0011 1000 0000 0000 +#define PRICES_DDD (HUSH_MAXPRICES * 8) // 0100 0000 0000 0000 //#define PRICES_NORMFACTOR (int64_t)(SATOSHIDEN) //#define PRICES_POINTFACTOR (int64_t)10000 diff --git a/src/cc/prices.cpp b/src/cc/prices.cpp index b42b489d3..c182419e1 100644 --- a/src/cc/prices.cpp +++ b/src/cc/prices.cpp @@ -657,7 +657,7 @@ static std::string prices_getsourceexpression(const std::vector &vec) char name[65]; std::string operand; uint16_t opcode = vec[i]; - int32_t value = (opcode & (KOMODO_MAXPRICES - 1)); // index or weight + int32_t value = (opcode & (HUSH_MAXPRICES - 1)); // index or weight switch (opcode & KOMODO_PRICEMASK) { @@ -934,7 +934,7 @@ int32_t prices_syntheticvec(std::vector &vec, std::vector opcode = PRICES_DDD, need = 3; else if (!is_weight_str(opstr) && (ind = komodo_priceind(opstr.c_str())) >= 0) opcode = ind, need = 0; - else if ((weight = atoi(opstr.c_str())) > 0 && weight < KOMODO_MAXPRICES) + else if ((weight = atoi(opstr.c_str())) > 0 && weight < HUSH_MAXPRICES) { opcode = PRICES_WEIGHT | weight; need = 1; @@ -993,7 +993,7 @@ int64_t prices_syntheticprice(std::vector vec, int32_t height, int32_t for (i = 0; i < vec.size(); i++) { opcode = vec[i]; - value = (opcode & (KOMODO_MAXPRICES - 1)); // index or weight + value = (opcode & (HUSH_MAXPRICES - 1)); // index or weight mpz_set_ui(mpzResult, 0); // clear result to test overflow (see below) @@ -2228,7 +2228,7 @@ static bool prices_ispositionup(const std::vector &vecparsed, int16_t if (vecparsed.size() > 1 && vecparsed.size() <= 3) { uint16_t opcode = vecparsed[0]; - int32_t value = (opcode & (KOMODO_MAXPRICES - 1)); // filter index or weight = opcode & (2048-1) + int32_t value = (opcode & (HUSH_MAXPRICES - 1)); // filter index or weight = opcode & (2048-1) if ((opcode & KOMODO_PRICEMASK) == 0) { char name[65]; @@ -2277,8 +2277,8 @@ static bool prices_isopposite(BetInfo p1, BetInfo p2) { uint16_t opcode1 = p1.vecparsed[0]; uint16_t opcode2 = p2.vecparsed[0]; - int32_t value1 = (opcode1 & (KOMODO_MAXPRICES - 1)); // index or weight - int32_t value2 = (opcode2 & (KOMODO_MAXPRICES - 1)); // index or weight + int32_t value1 = (opcode1 & (HUSH_MAXPRICES - 1)); // index or weight + int32_t value2 = (opcode2 & (HUSH_MAXPRICES - 1)); // index or weight if ( (opcode1 & KOMODO_PRICEMASK) == 0 && (opcode2 & KOMODO_PRICEMASK) == 0 ) { char name1[65]; @@ -2311,7 +2311,7 @@ static std::string findMatchedBook(const std::vector &vecparsed, const if (vecparsed.size() > 1 && vecparsed.size() <= 3) { uint16_t opcode = vecparsed[0]; - int32_t value = (opcode & (KOMODO_MAXPRICES - 1)); // filter index or weight = opcode & (2048-1) + int32_t value = (opcode & (HUSH_MAXPRICES - 1)); // filter index or weight = opcode & (2048-1) if ((opcode & KOMODO_PRICEMASK) == 0) { char name[65]; @@ -2370,7 +2370,7 @@ void prices_getorderbook(std::map > & bookmatc if (book[0].vecparsed.size() <= 3) { // only short expr check for match: "BTC_USD,1" or "BTC_USD,!,1" char name[65]; - komodo_pricename(name, (book[0].vecparsed[0] & (KOMODO_MAXPRICES - 1))); + komodo_pricename(name, (book[0].vecparsed[0] & (HUSH_MAXPRICES - 1))); std::string sname = name; bookmatched[sname].push_back(book[0]); diff --git a/src/hush_gateway.h b/src/hush_gateway.h index 4b8a9ce06..7799ac09d 100644 --- a/src/hush_gateway.h +++ b/src/hush_gateway.h @@ -1569,7 +1569,7 @@ extern std::vector Mineropret; // opreturn data set by the data gatheri #define PRICES_ERRORRATE (COIN / 100) // maximum acceptable change, set at 1% #define PRICES_SIZEBIT0 (sizeof(uint32_t) * 4) // 4 uint32_t unixtimestamp, BTCUSD, BTCGBP and BTCEUR #define KOMODO_LOCALPRICE_CACHESIZE 13 -#define KOMODO_MAXPRICES 2048 +#define HUSH_MAXPRICES 2048 #define PRICES_SMOOTHWIDTH 1 #define issue_curl(cmdstr) bitcoind_RPC(0,(char *)"CBCOINBASE",cmdstr,0,0,0) @@ -1592,10 +1592,10 @@ struct komodo_priceinfo { FILE *fp; char symbol[64]; -} PRICES[KOMODO_MAXPRICES]; +} PRICES[HUSH_MAXPRICES]; -uint32_t PriceCache[KOMODO_LOCALPRICE_CACHESIZE][KOMODO_MAXPRICES];//4+sizeof(Cryptos)/sizeof(*Cryptos)+sizeof(Forex)/sizeof(*Forex)]; -int64_t PriceMult[KOMODO_MAXPRICES]; +uint32_t PriceCache[KOMODO_LOCALPRICE_CACHESIZE][HUSH_MAXPRICES];//4+sizeof(Cryptos)/sizeof(*Cryptos)+sizeof(Forex)/sizeof(*Forex)]; +int64_t PriceMult[HUSH_MAXPRICES]; int32_t komodo_cbopretsize(uint64_t flags); void komodo_PriceCache_shift() @@ -1694,7 +1694,7 @@ int32_t komodo_pricecmp(int32_t nHeight,int32_t n,char *maxflags,uint32_t *price // komodo_priceclamp() clamps any price that is beyond tolerance int32_t komodo_priceclamp(int32_t n,uint32_t *pricebits,uint32_t *refprices,int64_t tolerance) { - int32_t i; uint32_t newprice; char maxflags[KOMODO_MAXPRICES]; + int32_t i; uint32_t newprice; char maxflags[HUSH_MAXPRICES]; memset(maxflags,0,sizeof(maxflags)); for (i=1; i= PRICES_SIZEBIT0 ) { n = (int32_t)(Mineropret.size() / sizeof(uint32_t)); @@ -1775,7 +1775,7 @@ void komodo_queuelocalprice(int32_t dir,int32_t height,uint32_t timestamp,uint25 int32_t komodo_opretvalidate(const CBlock *block,CBlockIndex * const previndex,int32_t nHeight,CScript scriptPubKey) { int32_t testchain_exemption = 0; - std::vector vopret; char maxflags[KOMODO_MAXPRICES]; uint256 bhash; double btcusd,btcgbp,btceur; uint32_t localbits[KOMODO_MAXPRICES],pricebits[KOMODO_MAXPRICES],prevbits[KOMODO_MAXPRICES],newprice; int32_t i,j,prevtime,maxflag,lag,lag2,lag3,n,errflag,iter; uint32_t now; + std::vector vopret; char maxflags[HUSH_MAXPRICES]; uint256 bhash; double btcusd,btcgbp,btceur; uint32_t localbits[HUSH_MAXPRICES],pricebits[HUSH_MAXPRICES],prevbits[HUSH_MAXPRICES],newprice; int32_t i,j,prevtime,maxflag,lag,lag2,lag3,n,errflag,iter; uint32_t now; now = (uint32_t)time(NULL); if ( ASSETCHAINS_CBOPRET != 0 && nHeight > 0 ) { @@ -2223,7 +2223,7 @@ extern uint256 Queued_reconsiderblock; void komodo_cbopretupdate(int32_t forceflag) { static uint32_t lasttime,lastbtc,pending; - static uint32_t pricebits[4],pricebuf[KOMODO_MAXPRICES],forexprices[sizeof(Forex)/sizeof(*Forex)]; + static uint32_t pricebits[4],pricebuf[HUSH_MAXPRICES],forexprices[sizeof(Forex)/sizeof(*Forex)]; int32_t size; uint32_t flags=0,now; CBlockIndex *pindex; if ( Queued_reconsiderblock != zeroid ) { @@ -2325,7 +2325,7 @@ void komodo_cbopretupdate(int32_t forceflag) int64_t komodo_pricemult(int32_t ind) { int32_t i,j; - if ( (ASSETCHAINS_CBOPRET & 1) != 0 && ind < KOMODO_MAXPRICES ) + if ( (ASSETCHAINS_CBOPRET & 1) != 0 && ind < HUSH_MAXPRICES ) { if ( PriceMult[0] == 0 ) { @@ -2355,7 +2355,7 @@ int64_t komodo_pricemult(int32_t ind) char *komodo_pricename(char *name,int32_t ind) { strcpy(name,"error"); - if ( (ASSETCHAINS_CBOPRET & 1) != 0 && ind < KOMODO_MAXPRICES ) + if ( (ASSETCHAINS_CBOPRET & 1) != 0 && ind < HUSH_MAXPRICES ) { if ( ind < 4 ) { @@ -2431,7 +2431,7 @@ int32_t komodo_priceind(const char *symbol) int64_t komodo_pricecorrelated(uint64_t seed,int32_t ind,uint32_t *rawprices,int32_t rawskip,uint32_t *nonzprices,int32_t smoothwidth) { int32_t i,j,k,n,iter,correlation,maxcorrelation=0; int64_t firstprice,price,sum,den,mult,refprice,lowprice,highprice; - if ( PRICES_DAYWINDOW < 2 || ind >= KOMODO_MAXPRICES ) + if ( PRICES_DAYWINDOW < 2 || ind >= HUSH_MAXPRICES ) return(-1); mult = komodo_pricemult(ind); if ( nonzprices != 0 ) @@ -2683,7 +2683,7 @@ int32_t komodo_pricesinit() fprintf(stderr,"pricesinit (%s)\n",pricesdir.string().c_str()); if (!boost::filesystem::exists(pricesdir)) boost::filesystem::create_directories(pricesdir), createflag = 1; - for (i=0; i= KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP ) - htind = (KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP) - 1; + if ( htind >= HUSH_MAXBLOCKS / KOMODO_ELECTION_GAP ) + htind = (HUSH_MAXBLOCKS / KOMODO_ELECTION_GAP) - 1; numnotaries = Pubkeys[htind].numnotaries; for (i=0; i 0 ) { @@ -162,8 +162,8 @@ void komodo_notarysinit(int32_t origheight,uint8_t pubkeys[64][33],int32_t num) height /= KOMODO_ELECTION_GAP; height = ((height + 1) * KOMODO_ELECTION_GAP); htind = (height / KOMODO_ELECTION_GAP); - if ( htind >= KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP ) - htind = (KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP) - 1; + if ( htind >= HUSH_MAXBLOCKS / KOMODO_ELECTION_GAP ) + htind = (HUSH_MAXBLOCKS / KOMODO_ELECTION_GAP) - 1; //printf("htind.%d activation %d from %d vs %d | hwmheight.%d %s\n",htind,height,origheight,(((origheight+KOMODO_ELECTION_GAP/2)/KOMODO_ELECTION_GAP)+1)*KOMODO_ELECTION_GAP,hwmheight,SMART_CHAIN_SYMBOL); } else htind = 0; pthread_mutex_lock(&komodo_mutex); @@ -181,7 +181,7 @@ void komodo_notarysinit(int32_t origheight,uint8_t pubkeys[64][33],int32_t num) } } N.numnotaries = num; - for (i=htind; i= KOMODO_MAXBLOCKS ) + if ( height < 0 )//|| height >= HUSH_MAXBLOCKS ) { printf("hush_chosennotary ht.%d illegal\n",height); return(-1); @@ -219,8 +219,8 @@ int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,ui if ( Pubkeys == 0 ) komodo_init(0); htind = height / KOMODO_ELECTION_GAP; - if ( htind >= KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP ) - htind = (KOMODO_MAXBLOCKS / KOMODO_ELECTION_GAP) - 1; + if ( htind >= HUSH_MAXBLOCKS / KOMODO_ELECTION_GAP ) + htind = (HUSH_MAXBLOCKS / KOMODO_ELECTION_GAP) - 1; pthread_mutex_lock(&komodo_mutex); HASH_FIND(hh,Pubkeys[htind].Notaries,pubkey33,33,kp); pthread_mutex_unlock(&komodo_mutex); diff --git a/src/hush_structs.h b/src/hush_structs.h index c47eabbd9..30e6c1dbb 100644 --- a/src/hush_structs.h +++ b/src/hush_structs.h @@ -15,7 +15,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "hush_defs.h" #include "uthash.h" #include "utlist.h" @@ -28,12 +27,10 @@ #ifndef KOMODO_STRUCTS_H #define KOMODO_STRUCTS_H - #define GENESIS_NBITS 0x1f00ffff #define KOMODO_MINRATIFY ((height < 90000) ? 7 : 11) #define KOMODO_NOTARIES_HARDCODED 180000 // DONT CHANGE -#define KOMODO_MAXBLOCKS 250000 // DONT CHANGE - +#define HUSH_MAXBLOCKS 250000 // DONT CHANGE #define KOMODO_EVENT_RATIFY 'P' #define KOMODO_EVENT_NOTARIZED 'N' #define KOMODO_EVENT_KMDHEIGHT 'K' From 2e31b7d2dcb99572acbf397e0ef7fd26ea792d09 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 22:18:57 -0500 Subject: [PATCH 250/277] lol --- src/bitcoin-cli-res.rc | 10 ++-- src/cc/README.md | 3 +- src/cc/dapps/dappstd.c | 18 ++---- src/fs.h | 6 +- src/hush.h | 46 +++++++------- src/hush_ccdata.h | 24 ++++---- src/hush_defs.h | 8 +-- src/hush_events.h | 64 ++++++++++---------- src/hush_gateway.h | 2 +- src/hush_globals.h | 9 ++- src/hush_nSPV_wallet.h | 2 +- src/hush_notary.h | 4 +- src/hush_structs.h | 58 +++++++++--------- src/hush_utils.h | 2 +- src/main.cpp | 16 ++--- src/miner.cpp | 20 ++----- src/pow.cpp | 2 +- src/rpc/crosschain.cpp | 4 +- src/rpc/misc.cpp | 15 +---- src/wallet/rpcwallet.cpp | 125 +++++++++++++++++++-------------------- 20 files changed, 205 insertions(+), 233 deletions(-) diff --git a/src/bitcoin-cli-res.rc b/src/bitcoin-cli-res.rc index c2149ad24..e0d948fd3 100644 --- a/src/bitcoin-cli-res.rc +++ b/src/bitcoin-cli-res.rc @@ -17,13 +17,13 @@ BEGIN BLOCK "040904E4" // U.S. English - multilingual (hex) BEGIN VALUE "CompanyName", "Hush" - VALUE "FileDescription", "komodo-cli (JSON-RPC client for Hush-flavored Komodo)" + VALUE "FileDescription", "hush-cli (JSON-RPC client for Hush full node)" VALUE "FileVersion", VER_FILEVERSION_STR - VALUE "InternalName", "komodo-cli" + VALUE "InternalName", "hush-cli" VALUE "LegalCopyright", COPYRIGHT_STR - VALUE "LegalTrademarks1", "Distributed under the GPLv3 software license, see the accompanying file COPYING or https://www.opensource.org/licenses/mit-license.php" - VALUE "OriginalFilename", "komodo-cli.exe" - VALUE "ProductName", "komodo-cli" + VALUE "LegalTrademarks1", "Distributed under the GPLv3 software license" + VALUE "OriginalFilename", "hush-cli.exe" + VALUE "ProductName", "hush-cli" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END diff --git a/src/cc/README.md b/src/cc/README.md index d12a75c43..bb358aca4 100644 --- a/src/cc/README.md +++ b/src/cc/README.md @@ -1,5 +1,6 @@ ## CCLIB -Please follow the below instructions to build the cryptoconditions library into the Komodo source directory `komodo/src` - supported operating systems are Linux, OSX and Windows (mingw crossbuild): + +Please follow the below instructions to build the cryptoconditions library ``` make clean diff --git a/src/cc/dapps/dappstd.c b/src/cc/dapps/dappstd.c index b202b3373..2d288e142 100644 --- a/src/cc/dapps/dappstd.c +++ b/src/cc/dapps/dappstd.c @@ -612,7 +612,7 @@ char *curl_post(CURL **cHandlep,char *url,char *userpass,char *postfields,char * return(chunk.memory); } -uint16_t _komodo_userpass(char *username, char *password, FILE *fp) +uint16_t _hush_userpass(char *username, char *password, FILE *fp) { char *rpcuser,*rpcpassword,*str,*ipaddress,line[8192]; uint16_t port = 0; rpcuser = rpcpassword = 0; @@ -650,23 +650,15 @@ uint16_t _komodo_userpass(char *username, char *password, FILE *fp) return(port); } -uint16_t komodo_userpass(char *userpass,char *symbol) +uint16_t hush_userpass(char *userpass,char *symbol) { FILE *fp; uint16_t port = 0; char fname[512],username[512],password[512],confname[HUSH_SMART_CHAIN_MAXLEN]; userpass[0] = 0; - if ( strcmp("KMD",symbol) == 0 ) - { -#ifdef __APPLE__ - sprintf(confname,"Komodo.conf"); -#else - sprintf(confname,"komodo.conf"); -#endif - } - else sprintf(confname,"%s.conf",symbol); + sprintf(confname,"%s.conf",symbol); //hush_statefname(fname,symbol,confname); if ( (fp= fopen(confname,"rb")) != 0 ) { - port = _komodo_userpass(username,password,fp); + port = _hush_userpass(username,password,fp); sprintf(userpass,"%s:%s",username,password); if ( strcmp(symbol,ASSETCHAINS_SYMBOL) == 0 ) strcpy(USERPASS,userpass); @@ -1085,7 +1077,7 @@ int main(int argc, char **argv) #endif strcpy(ASSETCHAINS_SYMBOL,CHAINNAME); - GAMES_PORT = komodo_userpass(userpass,ASSETCHAINS_SYMBOL); + GAMES_PORT = hush_userpass(userpass,ASSETCHAINS_SYMBOL); if ( IPADDRESS[0] == 0 ) strcpy(IPADDRESS,"127.0.0.1"); printf("ASSETCHAINS_SYMBOL.(%s) port.%u (%s) IPADDRESS.%s \n",ASSETCHAINS_SYMBOL,GAMES_PORT,USERPASS,IPADDRESS); sleep(1); diff --git a/src/fs.h b/src/fs.h index dcfc8ae9f..a0326946a 100644 --- a/src/fs.h +++ b/src/fs.h @@ -3,8 +3,8 @@ // Distributed under the GPLv3 software license, see the accompanying // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -#ifndef KOMODO_FS_H -#define KOMODO_FS_H +#ifndef HUSH_FS_H +#define HUSH_FS_H #include #include @@ -22,4 +22,4 @@ namespace fsbridge { FILE *freopen(const fs::path& p, const char *mode, FILE *stream); }; -#endif // KOMODO_FS_H +#endif // HUSH_FS_H diff --git a/src/hush.h b/src/hush.h index 650cb4379..f013f2f5e 100644 --- a/src/hush.h +++ b/src/hush.h @@ -37,7 +37,7 @@ uint256 NOTARIZED_HASH,NOTARIZED_DESTTXID; #include "utlist.h" int32_t gettxout_scriptPubKey(uint8_t *scriptPubkey,int32_t maxsize,uint256 txid,int32_t n); -void komodo_event_rewind(struct hush_state *sp,char *symbol,int32_t height); +void hush_event_rewind(struct hush_state *sp,char *symbol,int32_t height); int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block); bool check_pprevnotarizedht(); @@ -99,7 +99,7 @@ int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *de { //printf("updated %d pubkeys at %s ht.%d\n",num,symbol,ht); if ( (HUSH_EXTERNAL_NOTARIES != 0 && matched != 0) || (strcmp(symbol,"KMD") == 0 && HUSH_EXTERNAL_NOTARIES == 0) ) - komodo_eventadd_pubkeys(sp,symbol,ht,num,pubkeys); + hush_eventadd_pubkeys(sp,symbol,ht,num,pubkeys); } } else printf("illegal num.%d\n",num); } @@ -126,7 +126,7 @@ int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *de MoMdepth = 0; } //if ( matched != 0 ) global independent states -> inside *sp - komodo_eventadd_notarized(sp,symbol,ht,dest,notarized_hash,notarized_desttxid,notarized_height,MoM,MoMdepth); + hush_eventadd_notarized(sp,symbol,ht,dest,notarized_hash,notarized_desttxid,notarized_height,MoM,MoMdepth); } else if ( func == 'U' ) // deprecated { @@ -139,7 +139,7 @@ int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *de if ( fread(&hash,1,sizeof(hash),fp) != sizeof(hash) ) errs++; //if ( matched != 0 ) - // komodo_eventadd_utxo(sp,symbol,ht,nid,hash,mask,n); + // hush_eventadd_utxo(sp,symbol,ht,nid,hash,mask,n); } else if ( func == 'K' ) { @@ -148,7 +148,7 @@ int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *de errs++; //if ( matched != 0 ) global independent states -> inside *sp //printf("%s.%d load[%s] ht.%d\n",SMART_CHAIN_SYMBOL,ht,symbol,kheight); - komodo_eventadd_kmdheight(sp,symbol,ht,kheight,0); + hush_eventadd_kmdheight(sp,symbol,ht,kheight,0); } else if ( func == 'T' ) { @@ -159,7 +159,7 @@ int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *de errs++; //if ( matched != 0 ) global independent states -> inside *sp //printf("%s.%d load[%s] ht.%d t.%u\n",SMART_CHAIN_SYMBOL,ht,symbol,kheight,ktimestamp); - komodo_eventadd_kmdheight(sp,symbol,ht,kheight,ktimestamp); + hush_eventadd_kmdheight(sp,symbol,ht,kheight,ktimestamp); } else if ( func == 'R' ) { @@ -182,7 +182,7 @@ int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *de printf("%02x",opret[i]); printf(" %s.%d load[%s] opret[%c] len.%d %.8f\n",SMART_CHAIN_SYMBOL,ht,symbol,opret[0],olen,(double)ovalue/COIN); } - komodo_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); // global shared state -> global PAX + hush_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); // global shared state -> global PAX } else { int32_t i; @@ -203,7 +203,7 @@ int32_t hush_parsestatefile(struct hush_state *sp,FILE *fp,char *symbol,char *de { //if ( matched != 0 ) global shared state -> global PVALS //printf("%s load[%s] prices %d\n",SMART_CHAIN_SYMBOL,symbol,ht); - komodo_eventadd_pricefeed(sp,symbol,ht,pvals,numpvals); + hush_eventadd_pricefeed(sp,symbol,ht,pvals,numpvals); //printf("load pvals ht.%d numpvals.%d\n",ht,numpvals); } else printf("error loading pvals[%d]\n",numpvals); } // else printf("[%s] %s illegal func.(%d %c)\n",SMART_CHAIN_SYMBOL,symbol,func,func); @@ -244,7 +244,7 @@ int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fp { //printf("updated %d pubkeys at %s ht.%d\n",num,symbol,ht); if ( (HUSH_EXTERNAL_NOTARIES != 0 && matched != 0) || (strcmp(symbol,"KMD") == 0 && HUSH_EXTERNAL_NOTARIES == 0) ) - komodo_eventadd_pubkeys(sp,symbol,ht,num,pubkeys); + hush_eventadd_pubkeys(sp,symbol,ht,num,pubkeys); } } else printf("illegal num.%d\n",num); } @@ -270,7 +270,7 @@ int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fp memset(&MoM,0,sizeof(MoM)); MoMdepth = 0; } - komodo_eventadd_notarized(sp,symbol,ht,dest,notarized_hash,notarized_desttxid,notarized_height,MoM,MoMdepth); + hush_eventadd_notarized(sp,symbol,ht,dest,notarized_hash,notarized_desttxid,notarized_height,MoM,MoMdepth); } else if ( func == 'U' ) // deprecated { @@ -288,7 +288,7 @@ int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fp int32_t kheight; if ( memread(&kheight,sizeof(kheight),filedata,&fpos,datalen) != sizeof(kheight) ) errs++; - komodo_eventadd_kmdheight(sp,symbol,ht,kheight,0); + hush_eventadd_kmdheight(sp,symbol,ht,kheight,0); } else if ( func == 'T' ) { @@ -299,7 +299,7 @@ int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fp errs++; //if ( matched != 0 ) global independent states -> inside *sp //printf("%s.%d load[%s] ht.%d t.%u\n",SMART_CHAIN_SYMBOL,ht,symbol,kheight,ktimestamp); - komodo_eventadd_kmdheight(sp,symbol,ht,kheight,ktimestamp); + hush_eventadd_kmdheight(sp,symbol,ht,kheight,ktimestamp); } else if ( func == 'R' ) { @@ -322,7 +322,7 @@ int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fp printf("%02x",opret[i]); printf(" %s.%d load[%s] opret[%c] len.%d %.8f\n",SMART_CHAIN_SYMBOL,ht,symbol,opret[0],olen,(double)ovalue/COIN); } - komodo_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); // global shared state -> global PAX + hush_eventadd_opreturn(sp,symbol,ht,txid,ovalue,v,opret,olen); // global shared state -> global PAX } else { int32_t i; @@ -343,7 +343,7 @@ int32_t hush_parsestatefiledata(struct hush_state *sp,uint8_t *filedata,long *fp { //if ( matched != 0 ) global shared state -> global PVALS //printf("%s load[%s] prices %d\n",SMART_CHAIN_SYMBOL,symbol,ht); - komodo_eventadd_pricefeed(sp,symbol,ht,pvals,numpvals); + hush_eventadd_pricefeed(sp,symbol,ht,pvals,numpvals); //printf("load pvals ht.%d numpvals.%d\n",ht,numpvals); } else printf("error loading pvals[%d]\n",numpvals); } // else printf("[%s] %s illegal func.(%d %c)\n",SMART_CHAIN_SYMBOL,symbol,func,func); @@ -414,7 +414,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie if ( fwrite(&KMDheight,1,sizeof(KMDheight),fp) != sizeof(KMDheight) ) errs++; } - komodo_eventadd_kmdheight(sp,symbol,height,KMDheight,KMDtimestamp); + hush_eventadd_kmdheight(sp,symbol,height,KMDheight,KMDtimestamp); } else if ( opretbuf != 0 && opretlen > 0 ) { @@ -434,7 +434,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie errs++; //printf("create ht.%d R opret[%d] sp.%p\n",height,olen,sp); //komodo_opreturn(height,opretvalue,opretbuf,olen,txhash,vout); - komodo_eventadd_opreturn(sp,symbol,height,txhash,opretvalue,vout,opretbuf,olen); + hush_eventadd_opreturn(sp,symbol,height,txhash,opretvalue,vout,opretbuf,olen); } else if ( notarypubs != 0 && numnotaries > 0 ) { @@ -445,7 +445,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie fputc(numnotaries,fp); if ( fwrite(notarypubs,33,numnotaries,fp) != numnotaries ) errs++; - komodo_eventadd_pubkeys(sp,symbol,height,numnotaries,notarypubs); + hush_eventadd_pubkeys(sp,symbol,height,numnotaries,notarypubs); } else if ( voutmask != 0 && numvouts > 0 ) { @@ -459,7 +459,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie errs++; if ( fwrite(&txhash,1,sizeof(txhash),fp) != sizeof(txhash) ) errs++; - //komodo_eventadd_utxo(sp,symbol,height,notaryid,txhash,voutmask,numvouts); + //hush_eventadd_utxo(sp,symbol,height,notaryid,txhash,voutmask,numvouts); } else if ( pvals != 0 && numpvals > 0 ) { @@ -475,7 +475,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie fputc(numpvals,fp); if ( fwrite(pvals,sizeof(uint32_t),numpvals,fp) != numpvals ) errs++; - komodo_eventadd_pricefeed(sp,symbol,height,pvals,numpvals); + hush_eventadd_pricefeed(sp,symbol,height,pvals,numpvals); //printf("ht.%d V numpvals[%d]\n",height,numpvals); } //printf("save pvals height.%d numpvals.%d\n",height,numpvals); @@ -503,7 +503,7 @@ void hush_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotarie if ( fwrite(&sp->MoMdepth,1,sizeof(sp->MoMdepth),fp) != sizeof(sp->MoMdepth) ) errs++; } - komodo_eventadd_notarized(sp,symbol,height,dest,sp->NOTARIZED_HASH,sp->NOTARIZED_DESTTXID,sp->NOTARIZED_HEIGHT,sp->MoM,sp->MoMdepth); + hush_eventadd_notarized(sp,symbol,height,dest,sp->NOTARIZED_HASH,sp->NOTARIZED_DESTTXID,sp->NOTARIZED_HEIGHT,sp->MoM,sp->MoMdepth); } } fflush(fp); @@ -585,7 +585,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar } if ( scriptbuf[len++] == 0x6a ) { - struct komodo_ccdata ccdata; struct komodo_ccdataMoMoM MoMoMdata; + struct hush_ccdata ccdata; struct hush_ccdataMoMoM MoMoMdata; int32_t validated = 0,nameoffset,opoffset = 0; if ( (opretlen= scriptbuf[len++]) == 0x4c ) opretlen = scriptbuf[len++]; @@ -673,7 +673,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar MoMoMdata.len += sizeof(MoMoMdata.MoMoM) + sizeof(uint32_t)*4; if ( len+MoMoMdata.numpairs*8-opoffset == opretlen ) { - MoMoMdata.pairs = (struct komodo_ccdatapair *)calloc(MoMoMdata.numpairs,sizeof(*MoMoMdata.pairs)); + MoMoMdata.pairs = (struct hush_ccdatapair *)calloc(MoMoMdata.numpairs,sizeof(*MoMoMdata.pairs)); for (k=0; kGetHeight()); + hush_event_rewind(sp,symbol,pindex->GetHeight()); hush_stateupdate(pindex->GetHeight(),0,0,0,zero,0,0,0,0,-pindex->GetHeight(),pindex->nTime,0,0,0,0,zero,0); } } diff --git a/src/hush_ccdata.h b/src/hush_ccdata.h index b38062f22..b7941f61e 100644 --- a/src/hush_ccdata.h +++ b/src/hush_ccdata.h @@ -19,7 +19,7 @@ #ifndef H_HUSHCCDATA_H #define H_HUSHCCDATA_H -struct komodo_ccdata *CC_data; +struct hush_ccdata *CC_data; int32_t CC_firstheight; uint256 BuildMerkleTree(bool* fMutated, const std::vector leaves, std::vector &vMerkleTree); @@ -41,9 +41,9 @@ uint256 komodo_calcMoM(int32_t height,int32_t MoMdepth) return BuildMerkleTree(&fMutated, leaves, tree); } -struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t kmdstarti,int32_t kmdendi) +struct hush_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t kmdstarti,int32_t kmdendi) { - struct komodo_ccdata_entry *allMoMs=0; struct komodo_ccdata *ccdata,*tmpptr; int32_t i,num,max; + struct hush_ccdata_entry *allMoMs=0; struct hush_ccdata *ccdata,*tmpptr; int32_t i,num,max; bool fMutated; std::vector tree, leaves; num = max = 0; portable_mutex_lock(&HUSH_CC_mutex); @@ -54,7 +54,7 @@ struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t if ( num >= max ) { max += 100; - allMoMs = (struct komodo_ccdata_entry *)realloc(allMoMs,max * sizeof(*allMoMs)); + allMoMs = (struct hush_ccdata_entry *)realloc(allMoMs,max * sizeof(*allMoMs)); } allMoMs[num].MoM = ccdata->MoMdata.MoM; allMoMs[num].notarized_height = ccdata->MoMdata.notarized_height; @@ -81,13 +81,13 @@ struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t return(allMoMs); } -int32_t komodo_addpair(struct komodo_ccdataMoMoM *mdata,int32_t notarized_height,int32_t offset,int32_t maxpairs) +int32_t komodo_addpair(struct hush_ccdataMoMoM *mdata,int32_t notarized_height,int32_t offset,int32_t maxpairs) { if ( maxpairs >= 0) { if ( mdata->numpairs >= maxpairs ) { maxpairs += 100; - mdata->pairs = (struct komodo_ccdatapair *)realloc(mdata->pairs,sizeof(*mdata->pairs)*maxpairs); + mdata->pairs = (struct hush_ccdatapair *)realloc(mdata->pairs,sizeof(*mdata->pairs)*maxpairs); //fprintf(stderr,"pairs reallocated to %p num.%d\n",mdata->pairs,mdata->numpairs); } } else { @@ -100,9 +100,9 @@ int32_t komodo_addpair(struct komodo_ccdataMoMoM *mdata,int32_t notarized_height return(maxpairs); } -int32_t hush_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height) +int32_t hush_MoMoMdata(char *hexstr,int32_t hexsize,struct hush_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height) { - uint8_t hexdata[8192]; struct komodo_ccdata *ccdata,*tmpptr; int32_t len,maxpairs,i,retval=-1,depth,starti,endi,CCid=0; struct komodo_ccdata_entry *allMoMs; + uint8_t hexdata[8192]; struct hush_ccdata *ccdata,*tmpptr; int32_t len,maxpairs,i,retval=-1,depth,starti,endi,CCid=0; struct hush_ccdata_entry *allMoMs; starti = endi = depth = len = maxpairs = 0; hexstr[0] = 0; if ( sizeof(hexdata)*2+1 > hexsize ) @@ -181,7 +181,7 @@ int32_t hush_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *m void komodo_purge_ccdata(int32_t height) { - struct komodo_ccdata *ccdata,*tmpptr; + struct hush_ccdata *ccdata,*tmpptr; if ( SMART_CHAIN_SYMBOL[0] == 0 ) { portable_mutex_lock(&HUSH_CC_mutex); @@ -203,9 +203,9 @@ void komodo_purge_ccdata(int32_t height) } // this is just a demo of ccdata processing to create example data for the MoMoM and allMoMs calls -int32_t komodo_rwccdata(char *thischain,int32_t rwflag,struct komodo_ccdata *ccdata,struct komodo_ccdataMoMoM *MoMoMdata) +int32_t komodo_rwccdata(char *thischain,int32_t rwflag,struct hush_ccdata *ccdata,struct hush_ccdataMoMoM *MoMoMdata) { - uint256 hash,zero; bits256 tmp; int32_t i,nonz; struct komodo_ccdata *ptr; struct notarized_checkpoint *np; + uint256 hash,zero; bits256 tmp; int32_t i,nonz; struct hush_ccdata *ptr; struct notarized_checkpoint *np; return(0); // disable this path as libscott method is much better if ( rwflag == 0 ) { @@ -234,7 +234,7 @@ int32_t komodo_rwccdata(char *thischain,int32_t rwflag,struct komodo_ccdata *ccd } else { - ptr = (struct komodo_ccdata *)calloc(1,sizeof(*ptr)); + ptr = (struct hush_ccdata *)calloc(1,sizeof(*ptr)); *ptr = *ccdata; portable_mutex_lock(&HUSH_CC_mutex); DL_PREPEND(CC_data,ptr); diff --git a/src/hush_defs.h b/src/hush_defs.h index 4d0beb09d..7ad109699 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -33,8 +33,8 @@ #define CRYPTO555_HUSHADDR "RFetqf8WUfWnwNeXdknkm8ojk7EXnYFzrv" #define CRYPTO555_RMD160STR "deadbeefbadcaca748c4986b240ff7d7bc3fffb0" #define HUSH_FIRSTFUNGIBLEID 100 -#define KOMODO_SAPLING_ACTIVATION 1544832000 // Dec 15th, 2018 -#define KOMODO_SAPLING_DEADLINE 1550188800 // Feb 15th, 2019 +#define HUSH_SAPING_ACTIVATION 1544832000 // Dec 15th, 2018 +#define HUSH_SAPING_DEADLINE 1550188800 // Feb 15th, 2019 #define _COINBASE_MATURITY 100 // Notary Seasons: To add seasons, change NUM_HUSH_SEASONS, and add timestamp and height of activation to these arrays. @@ -479,7 +479,7 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = #define GETBIT(bits,bitoffset) (((uint8_t *)bits)[(bitoffset) >> 3] & (1 << ((bitoffset) & 7))) #define CLEARBIT(bits,bitoffset) (((uint8_t *)bits)[(bitoffset) >> 3] &= ~(1 << ((bitoffset) & 7))) -#define KOMODO_MAXNVALUE (((uint64_t)1 << 63) - 1) +#define HUSH_MAXNVALUE (((uint64_t)1 << 63) - 1) #define KOMODO_BIT63SET(x) ((x) & ((uint64_t)1 << 63)) #define KOMODO_VALUETOOBIG(x) ((x) > (uint64_t)10000000001*COIN) @@ -504,7 +504,7 @@ extern int32_t KOMODO_BLOCK_POSUNITS, KOMODO_CONSECUTIVE_POS_THRESHOLD, KOMODO_N extern uint64_t ASSETCHAINS_TIMELOCKGTE; extern uint32_t ASSETCHAINS_ALGO,ASSETCHAINS_EQUIHASH,HUSH_INITDONE; -extern int32_t HUSH_MININGTHREADS,HUSH_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,HUSH_NSPV; +extern int32_t HUSH_MININGTHREADS,HUSH_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,HUSH_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,HUSH_NSPV; extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET; extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2]; extern const char *ASSETCHAINS_ALGORITHMS[]; diff --git a/src/hush_events.h b/src/hush_events.h index 6d41ab227..8ecbf0a64 100644 --- a/src/hush_events.h +++ b/src/hush_events.h @@ -20,29 +20,29 @@ #define H_HUSHEVENTS_H #include "hush_defs.h" -struct komodo_event *komodo_eventadd(struct hush_state *sp,int32_t height,char *symbol,uint8_t type,uint8_t *data,uint16_t datalen) +struct hush_event *hush_eventadd(struct hush_state *sp,int32_t height,char *symbol,uint8_t type,uint8_t *data,uint16_t datalen) { - struct komodo_event *ep=0; uint16_t len = (uint16_t)(sizeof(*ep) + datalen); + struct hush_event *ep=0; uint16_t len = (uint16_t)(sizeof(*ep) + datalen); if ( sp != 0 && SMART_CHAIN_SYMBOL[0] != 0 ) { portable_mutex_lock(&komodo_mutex); - ep = (struct komodo_event *)calloc(1,len); + ep = (struct hush_event *)calloc(1,len); ep->len = len; ep->height = height; ep->type = type; strcpy(ep->symbol,symbol); if ( datalen != 0 ) memcpy(ep->space,data,datalen); - sp->Komodo_events = (struct komodo_event **)realloc(sp->Komodo_events,(1 + sp->Komodo_numevents) * sizeof(*sp->Komodo_events)); - sp->Komodo_events[sp->Komodo_numevents++] = ep; + sp->Hush_events = (struct hush_event **)realloc(sp->Hush_events,(1 + sp->Komodo_numevents) * sizeof(*sp->Hush_events)); + sp->Hush_events[sp->Komodo_numevents++] = ep; portable_mutex_unlock(&komodo_mutex); } return(ep); } -void komodo_eventadd_notarized(struct hush_state *sp,char *symbol,int32_t height,char *dest,uint256 notarized_hash,uint256 notarized_desttxid,int32_t notarizedheight,uint256 MoM,int32_t MoMdepth) +void hush_eventadd_notarized(struct hush_state *sp,char *symbol,int32_t height,char *dest,uint256 notarized_hash,uint256 notarized_desttxid,int32_t notarizedheight,uint256 MoM,int32_t MoMdepth) { - static uint32_t counter; int32_t verified=0; char *coin; struct komodo_event_notarized N; + static uint32_t counter; int32_t verified=0; char *coin; struct hush_event_notarized N; coin = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"KMD" : SMART_CHAIN_SYMBOL; if ( IS_HUSH_NOTARY != 0 && (verified= komodo_verifynotarization(symbol,dest,height,notarizedheight,notarized_hash,notarized_desttxid)) < 0 ) { @@ -60,41 +60,41 @@ void komodo_eventadd_notarized(struct hush_state *sp,char *symbol,int32_t height N.MoM = MoM; N.MoMdepth = MoMdepth; strncpy(N.dest,dest,sizeof(N.dest)-1); - komodo_eventadd(sp,height,symbol,KOMODO_EVENT_NOTARIZED,(uint8_t *)&N,sizeof(N)); + hush_eventadd(sp,height,symbol,HUSH_EVENT_NOTARIZED,(uint8_t *)&N,sizeof(N)); if ( sp != 0 ) komodo_notarized_update(sp,height,notarizedheight,notarized_hash,notarized_desttxid,MoM,MoMdepth); } } -void komodo_eventadd_pubkeys(struct hush_state *sp,char *symbol,int32_t height,uint8_t num,uint8_t pubkeys[64][33]) +void hush_eventadd_pubkeys(struct hush_state *sp,char *symbol,int32_t height,uint8_t num,uint8_t pubkeys[64][33]) { - struct komodo_event_pubkeys P; + struct hush_event_pubkeys P; //printf("eventadd pubkeys ht.%d\n",height); memset(&P,0,sizeof(P)); P.num = num; memcpy(P.pubkeys,pubkeys,33 * num); - komodo_eventadd(sp,height,symbol,KOMODO_EVENT_RATIFY,(uint8_t *)&P,(int32_t)(sizeof(P.num) + 33 * num)); + hush_eventadd(sp,height,symbol,HUSH_EVENT_RATIFY,(uint8_t *)&P,(int32_t)(sizeof(P.num) + 33 * num)); if ( sp != 0 ) komodo_notarysinit(height,pubkeys,num); } -void komodo_eventadd_pricefeed(struct hush_state *sp,char *symbol,int32_t height,uint32_t *prices,uint8_t num) +void hush_eventadd_pricefeed(struct hush_state *sp,char *symbol,int32_t height,uint32_t *prices,uint8_t num) { - struct komodo_event_pricefeed F; + struct hush_event_pricefeed F; if ( num == sizeof(F.prices)/sizeof(*F.prices) ) { memset(&F,0,sizeof(F)); F.num = num; memcpy(F.prices,prices,sizeof(*F.prices) * num); - komodo_eventadd(sp,height,symbol,KOMODO_EVENT_PRICEFEED,(uint8_t *)&F,(int32_t)(sizeof(F.num) + sizeof(*F.prices) * num)); + hush_eventadd(sp,height,symbol,HUSH_EVENT_PRICEFEED,(uint8_t *)&F,(int32_t)(sizeof(F.num) + sizeof(*F.prices) * num)); if ( sp != 0 ) komodo_pvals(height,prices,num); } //else fprintf(stderr,"skip pricefeed[%d]\n",num); } -void komodo_eventadd_opreturn(struct hush_state *sp,char *symbol,int32_t height,uint256 txid,uint64_t value,uint16_t vout,uint8_t *buf,uint16_t opretlen) +void hush_eventadd_opreturn(struct hush_state *sp,char *symbol,int32_t height,uint256 txid,uint64_t value,uint16_t vout,uint8_t *buf,uint16_t opretlen) { - struct komodo_event_opreturn O; uint8_t *opret; + struct hush_event_opreturn O; uint8_t *opret; if ( SMART_CHAIN_SYMBOL[0] != 0 ) { opret = (uint8_t *)calloc(1,sizeof(O) + opretlen + 16); @@ -104,35 +104,35 @@ void komodo_eventadd_opreturn(struct hush_state *sp,char *symbol,int32_t height, memcpy(opret,&O,sizeof(O)); memcpy(&opret[sizeof(O)],buf,opretlen); O.oplen = (int32_t)(opretlen + sizeof(O)); - komodo_eventadd(sp,height,symbol,KOMODO_EVENT_OPRETURN,opret,O.oplen); + hush_eventadd(sp,height,symbol,HUSH_EVENT_OPRETURN,opret,O.oplen); free(opret); if ( sp != 0 ) komodo_opreturn(height,value,buf,opretlen,txid,vout,symbol); } } -void komodo_event_undo(struct hush_state *sp,struct komodo_event *ep) +void hush_event_undo(struct hush_state *sp,struct hush_event *ep) { switch ( ep->type ) { - case KOMODO_EVENT_RATIFY: printf("rewind of ratify, needs to be coded.%d\n",ep->height); break; - case KOMODO_EVENT_NOTARIZED: break; - case KOMODO_EVENT_KMDHEIGHT: + case HUSH_EVENT_RATIFY: printf("rewind of ratify, needs to be coded.%d\n",ep->height); break; + case HUSH_EVENT_NOTARIZED: break; + case HUSH_EVENT_KMDHEIGHT: if ( ep->height <= sp->SAVEDHEIGHT ) sp->SAVEDHEIGHT = ep->height; break; - case KOMODO_EVENT_PRICEFEED: + case HUSH_EVENT_PRICEFEED: // backtrack prices; break; - case KOMODO_EVENT_OPRETURN: + case HUSH_EVENT_OPRETURN: // backtrack opreturns break; } } -void komodo_event_rewind(struct hush_state *sp,char *symbol,int32_t height) +void hush_event_rewind(struct hush_state *sp,char *symbol,int32_t height) { - struct komodo_event *ep; + struct hush_event *ep; if ( sp != 0 ) { if ( SMART_CHAIN_SYMBOL[0] == 0 && height <= KOMODO_LASTMINED && prevKOMODO_LASTMINED != 0 ) @@ -141,14 +141,14 @@ void komodo_event_rewind(struct hush_state *sp,char *symbol,int32_t height) KOMODO_LASTMINED = prevKOMODO_LASTMINED; prevKOMODO_LASTMINED = 0; } - while ( sp->Komodo_events != 0 && sp->Komodo_numevents > 0 ) + while ( sp->Hush_events != 0 && sp->Komodo_numevents > 0 ) { - if ( (ep= sp->Komodo_events[sp->Komodo_numevents-1]) != 0 ) + if ( (ep= sp->Hush_events[sp->Komodo_numevents-1]) != 0 ) { if ( ep->height < height ) break; //printf("[%s] undo %s event.%c ht.%d for rewind.%d\n",SMART_CHAIN_SYMBOL,symbol,ep->type,ep->height,height); - komodo_event_undo(sp,ep); + hush_event_undo(sp,ep); sp->Komodo_numevents--; } } @@ -169,21 +169,21 @@ void komodo_setkmdheight(struct hush_state *sp,int32_t kmdheight,uint32_t timest } } -void komodo_eventadd_kmdheight(struct hush_state *sp,char *symbol,int32_t height,int32_t kmdheight,uint32_t timestamp) +void hush_eventadd_kmdheight(struct hush_state *sp,char *symbol,int32_t height,int32_t kmdheight,uint32_t timestamp) { uint32_t buf[2]; if ( kmdheight > 0 ) { buf[0] = (uint32_t)kmdheight; buf[1] = timestamp; - komodo_eventadd(sp,height,symbol,KOMODO_EVENT_KMDHEIGHT,(uint8_t *)buf,sizeof(buf)); + hush_eventadd(sp,height,symbol,HUSH_EVENT_KMDHEIGHT,(uint8_t *)buf,sizeof(buf)); if ( sp != 0 ) komodo_setkmdheight(sp,kmdheight,timestamp); } else { //fprintf(stderr,"REWIND kmdheight.%d\n",kmdheight); kmdheight = -kmdheight; - komodo_eventadd(sp,height,symbol,KOMODO_EVENT_REWIND,(uint8_t *)&height,sizeof(height)); + hush_eventadd(sp,height,symbol,HUSH_EVENT_REWIND,(uint8_t *)&height,sizeof(height)); if ( sp != 0 ) - komodo_event_rewind(sp,symbol,height); + hush_event_rewind(sp,symbol,height); } } diff --git a/src/hush_gateway.h b/src/hush_gateway.h index 7799ac09d..d1c245535 100644 --- a/src/hush_gateway.h +++ b/src/hush_gateway.h @@ -778,7 +778,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block,uint32_t prevtim else if ( block.nBits == HUSH_MINDIFF_NBITS && total > 0 ) // to deal with fee stealing { fprintf(stderr,"notary mined ht.%d with extra %.8f\n",height,dstr(total)); - if ( height > KOMODO_NOTARIES_HEIGHT1 ) + if ( height > HUSH_NOTARIES_HEIGHT1 ) return(-1); } if ( strangeout != 0 || notmatched != 0 ) diff --git a/src/hush_globals.h b/src/hush_globals.h index ee442c7e7..4377c9ac4 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -47,7 +47,7 @@ int COINBASE_MATURITY = _COINBASE_MATURITY;//100; unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 HUSH_EARLYTXID; -int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,HUSH_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,HUSH_NSPV; +int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,HUSH_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,HUSH_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,HUSH_NSPV; int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,HUSH_CCACTIVATE,JUMBLR_PAUSE = 1; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; @@ -92,7 +92,6 @@ uint32_t ASSETCHAINS_MINDIFF[] = {537857807}; int32_t ASSETCHAINS_LWMAPOS = 0; // percentage of blocks should be PoS int32_t ASSETCHAINS_SAPLING = -1; int32_t ASSETCHAINS_OVERWINTER = -1; -uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE; int32_t ASSETCHAINS_STAKED; uint64_t ASSETCHAINS_COMMISSION,ASSETCHAINS_SUPPLY = 10,ASSETCHAINS_FOUNDERS_REWARD; uint32_t HUSH_INITDONE; @@ -266,13 +265,13 @@ uint64_t hush_current_supply(uint32_t nHeight) } } if ( KOMODO_BIT63SET(cur_money) != 0 ) - return(KOMODO_MAXNVALUE); + return(HUSH_MAXNVALUE); if ( ASSETCHAINS_COMMISSION != 0 ) { uint64_t newval = (cur_money + (cur_money/COIN * ASSETCHAINS_COMMISSION)); if ( KOMODO_BIT63SET(newval) != 0 ) - return(KOMODO_MAXNVALUE); + return(HUSH_MAXNVALUE); else if ( newval < cur_money ) // check for underflow - return(KOMODO_MAXNVALUE); + return(HUSH_MAXNVALUE); return(newval); } //fprintf(stderr,"cur_money %.8f\n",(double)cur_money/COIN); diff --git a/src/hush_nSPV_wallet.h b/src/hush_nSPV_wallet.h index 8a5f7fe2b..a4fa01765 100644 --- a/src/hush_nSPV_wallet.h +++ b/src/hush_nSPV_wallet.h @@ -240,7 +240,7 @@ bool NSPV_SignTx(CMutableTransaction &mtx,int32_t vini,int64_t utxovalue,const C return false; } keystore.AddKey(NSPV_key); - if ( nTime != 0 && nTime < KOMODO_SAPLING_ACTIVATION ) + if ( nTime != 0 && nTime < HUSH_SAPING_ACTIVATION ) { fprintf(stderr,"use legacy sig validation\n"); branchid = 0; diff --git a/src/hush_notary.h b/src/hush_notary.h index 1f8b1ffe1..b9501452c 100644 --- a/src/hush_notary.h +++ b/src/hush_notary.h @@ -20,7 +20,7 @@ #include "hush_cJSON.h" #define KOMODO_MAINNET_START 178999 -#define KOMODO_NOTARIES_HEIGHT1 814000 +#define HUSH_NOTARIES_HEIGHT1 814000 const char *Notaries_genesis[][2] = { @@ -206,7 +206,7 @@ int32_t hush_chosennotary(int32_t *notaryidp,int32_t height,uint8_t *pubkey33,ui printf("hush_chosennotary ht.%d illegal\n",height); return(-1); } - if ( height >= KOMODO_NOTARIES_HARDCODED || SMART_CHAIN_SYMBOL[0] != 0 ) + if ( height >= HUSH_NOTARIES_HARDCODED || SMART_CHAIN_SYMBOL[0] != 0 ) { if ( (*notaryidp= komodo_electednotary(&numnotaries,pubkey33,height,timestamp)) >= 0 && numnotaries != 0 ) { diff --git a/src/hush_structs.h b/src/hush_structs.h index 30e6c1dbb..866b960f2 100644 --- a/src/hush_structs.h +++ b/src/hush_structs.h @@ -25,22 +25,22 @@ #define PACKED __attribute__((packed)) #endif*/ -#ifndef KOMODO_STRUCTS_H -#define KOMODO_STRUCTS_H +#ifndef HUSH_STRUCTS_H +#define HUSH_STRUCTS_H #define GENESIS_NBITS 0x1f00ffff #define KOMODO_MINRATIFY ((height < 90000) ? 7 : 11) -#define KOMODO_NOTARIES_HARDCODED 180000 // DONT CHANGE +#define HUSH_NOTARIES_HARDCODED 180000 // DONT CHANGE #define HUSH_MAXBLOCKS 250000 // DONT CHANGE -#define KOMODO_EVENT_RATIFY 'P' -#define KOMODO_EVENT_NOTARIZED 'N' -#define KOMODO_EVENT_KMDHEIGHT 'K' -#define KOMODO_EVENT_REWIND 'B' -#define KOMODO_EVENT_PRICEFEED 'V' -#define KOMODO_EVENT_OPRETURN 'R' -#define KOMODO_OPRETURN_DEPOSIT 'D' -#define KOMODO_OPRETURN_ISSUED 'I' // assetchain -#define KOMODO_OPRETURN_WITHDRAW 'W' // assetchain -#define KOMODO_OPRETURN_REDEEMED 'X' +#define HUSH_EVENT_RATIFY 'P' +#define HUSH_EVENT_NOTARIZED 'N' +#define HUSH_EVENT_KMDHEIGHT 'K' +#define HUSH_EVENT_REWIND 'B' +#define HUSH_EVENT_PRICEFEED 'V' +#define HUSH_EVENT_OPRETURN 'R' +#define HUSH_OPRETURN_DEPOSIT 'D' +#define HUSH_OPRETURN_ISSUED 'I' // assetchain +#define HUSH_OPRETURN_WITHDRAW 'W' // assetchain +#define HUSH_OPRETURN_REDEEMED 'X' #define HUSH_KVPROTECTED 1 #define HUSH_KVBINARY 2 @@ -58,14 +58,14 @@ typedef union _bits320 bits320; struct komodo_kv { UT_hash_handle hh; bits256 pubkey; uint8_t *key,*value; int32_t height; uint32_t flags; uint16_t keylen,valuesize; }; -struct komodo_event_notarized { uint256 blockhash,desttxid,MoM; int32_t notarizedheight,MoMdepth; char dest[16]; }; -struct komodo_event_pubkeys { uint8_t num; uint8_t pubkeys[64][33]; }; -struct komodo_event_opreturn { uint256 txid; uint64_t value; uint16_t vout,oplen; uint8_t opret[]; }; -struct komodo_event_pricefeed { uint8_t num; uint32_t prices[35]; }; +struct hush_event_notarized { uint256 blockhash,desttxid,MoM; int32_t notarizedheight,MoMdepth; char dest[16]; }; +struct hush_event_pubkeys { uint8_t num; uint8_t pubkeys[64][33]; }; +struct hush_event_opreturn { uint256 txid; uint64_t value; uint16_t vout,oplen; uint8_t opret[]; }; +struct hush_event_pricefeed { uint8_t num; uint32_t prices[35]; }; -struct komodo_event +struct hush_event { - struct komodo_event *related; + struct hush_event *related; uint16_t len; int32_t height; uint8_t type,reorged; @@ -91,26 +91,26 @@ struct notarized_checkpoint int32_t nHeight,notarized_height,MoMdepth,MoMoMdepth,MoMoMoffset,kmdstarti,kmdendi; }; -struct komodo_ccdataMoM +struct hush_ccdataMoM { uint256 MoM; int32_t MoMdepth,notarized_height,height,txi; }; -struct komodo_ccdata_entry { uint256 MoM; int32_t notarized_height,kmdheight,txi; char symbol[65]; }; -struct komodo_ccdatapair { int32_t notarized_height,MoMoMoffset; }; +struct hush_ccdata_entry { uint256 MoM; int32_t notarized_height,kmdheight,txi; char symbol[65]; }; +struct hush_ccdatapair { int32_t notarized_height,MoMoMoffset; }; -struct komodo_ccdataMoMoM +struct hush_ccdataMoMoM { uint256 MoMoM; int32_t kmdstarti,kmdendi,MoMoMoffset,MoMoMdepth,numpairs,len; - struct komodo_ccdatapair *pairs; + struct hush_ccdatapair *pairs; }; -struct komodo_ccdata +struct hush_ccdata { - struct komodo_ccdata *next,*prev; - struct komodo_ccdataMoM MoMdata; + struct hush_ccdata *next,*prev; + struct hush_ccdataMoM MoMdata; uint32_t CCid,len; char symbol[65]; }; @@ -122,8 +122,8 @@ struct hush_state uint32_t SAVEDTIMESTAMP; uint64_t deposited,issued,withdrawn,approved,redeemed,shorted; struct notarized_checkpoint *NPOINTS; int32_t NUM_NPOINTS,last_NPOINTSi; - struct komodo_event **Komodo_events; int32_t Komodo_numevents; + struct hush_event **Hush_events; int32_t Komodo_numevents; uint32_t RTbufs[64][3]; uint64_t RTmask; }; -#endif /* KOMODO_STRUCTS_H */ +#endif /* HUSH_STRUCT_H */ diff --git a/src/hush_utils.h b/src/hush_utils.h index 1de2e0ae8..39a8e6a88 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -2317,7 +2317,7 @@ void hush_args(char *argv0) if ( ASSETCHAINS_CC >= HUSH_FIRSTFUNGIBLEID && MAX_MONEY < 1000000LL*SATOSHIDEN ) MAX_MONEY = 1000000LL*SATOSHIDEN; if ( KOMODO_BIT63SET(MAX_MONEY) != 0 ) - MAX_MONEY = KOMODO_MAXNVALUE; + MAX_MONEY = HUSH_MAXNVALUE; if(fDebug) fprintf(stderr,"MAX_MONEY %llu %.8f\n",(long long)MAX_MONEY,(double)MAX_MONEY/SATOSHIDEN); //printf("baseid.%d MAX_MONEY.%s %.8f\n",baseid,SMART_CHAIN_SYMBOL,(double)MAX_MONEY/SATOSHIDEN); diff --git a/src/main.cpp b/src/main.cpp index 9e0961e11..085cec395 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3484,7 +3484,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin } if ( block.vtx[0].GetValueOut() > blockReward+HUSH_EXTRASATOSHI ) { - if ( SMART_CHAIN_SYMBOL[0] != 0 || pindex->GetHeight() >= KOMODO_NOTARIES_HEIGHT1 || block.vtx[0].vout[0].nValue > blockReward ) + if ( SMART_CHAIN_SYMBOL[0] != 0 || pindex->GetHeight() >= HUSH_NOTARIES_HEIGHT1 || block.vtx[0].vout[0].nValue > blockReward ) { //fprintf(stderr, "coinbase pays too much\n"); //sleepflag = true; @@ -3851,7 +3851,7 @@ int32_t komodo_activate_sapling(CBlockIndex *pindex) } height = pindex->GetHeight(); blocktime = (uint32_t)pindex->nTime; - //fprintf(stderr,"komodo_activate_sapling.%d starting blocktime %u cmp.%d\n",height,blocktime,blocktime > KOMODO_SAPLING_ACTIVATION); + //fprintf(stderr,"komodo_activate_sapling.%d starting blocktime %u cmp.%d\n",height,blocktime,blocktime > HUSH_SAPING_ACTIVATION); // avoid trying unless we have at least 30 blocks if (height < 30) @@ -3870,25 +3870,25 @@ int32_t komodo_activate_sapling(CBlockIndex *pindex) } height = pindex->GetHeight(); blocktime = (uint32_t)pindex->nTime; - //fprintf(stderr,"starting blocktime %u cmp.%d\n",blocktime,blocktime > KOMODO_SAPLING_ACTIVATION); - if ( blocktime > KOMODO_SAPLING_ACTIVATION ) // find the earliest transition + //fprintf(stderr,"starting blocktime %u cmp.%d\n",blocktime,blocktime > HUSH_SAPING_ACTIVATION); + if ( blocktime > HUSH_SAPING_ACTIVATION ) // find the earliest transition { while ( (prev= pindex->pprev) != 0 ) { prevht = prev->GetHeight(); prevtime = (uint32_t)prev->nTime; - //fprintf(stderr,"(%d, %u).%d -> (%d, %u).%d\n",prevht,prevtime,prevtime > KOMODO_SAPLING_ACTIVATION,height,blocktime,blocktime > KOMODO_SAPLING_ACTIVATION); + //fprintf(stderr,"(%d, %u).%d -> (%d, %u).%d\n",prevht,prevtime,prevtime > HUSH_SAPING_ACTIVATION,height,blocktime,blocktime > HUSH_SAPING_ACTIVATION); if ( prevht+1 != height ) { fprintf(stderr,"komodo_activate_sapling: unexpected non-contiguous ht %d vs %d\n",prevht,height); return(0); } - if ( prevtime <= KOMODO_SAPLING_ACTIVATION && blocktime > KOMODO_SAPLING_ACTIVATION ) + if ( prevtime <= HUSH_SAPING_ACTIVATION && blocktime > HUSH_SAPING_ACTIVATION ) { activation = height + 60; fprintf(stderr,"%s transition at %d (%d, %u) -> (%d, %u)\n",SMART_CHAIN_SYMBOL,height,prevht,prevtime,height,blocktime); } - if ( prevtime < KOMODO_SAPLING_ACTIVATION-3600*24 ) + if ( prevtime < HUSH_SAPING_ACTIVATION-3600*24 ) break; pindex = prev; height = prevht; @@ -4007,7 +4007,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock * //fprintf(stderr,"%s: HUSH_NSPV_FULLNODE\n", __FUNCTION__); if ( ASSETCHAINS_CBOPRET != 0 ) komodo_pricesupdate(pindexNew->GetHeight(),pblock); - if ( ASSETCHAINS_SAPLING <= 0 && pindexNew->nTime > KOMODO_SAPLING_ACTIVATION - 24*3600 ) + if ( ASSETCHAINS_SAPLING <= 0 && pindexNew->nTime > HUSH_SAPING_ACTIVATION - 24*3600 ) komodo_activate_sapling(pindexNew); if ( ASSETCHAINS_CC != 0 && HUSH_SNAPSHOT_INTERVAL != 0 && (pindexNew->GetHeight() % HUSH_SNAPSHOT_INTERVAL) == 0 && pindexNew->GetHeight() >= HUSH_SNAPSHOT_INTERVAL ) { diff --git a/src/miner.cpp b/src/miner.cpp index 81de10ba5..658db53ad 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -1107,8 +1107,7 @@ void static BitcoinMiner() fprintf(stderr,"try %s Mining with %s\n",SMART_CHAIN_SYMBOL,solver.c_str()); while (true) { - if (chainparams.MiningRequiresPeers()) //chainActive.LastTip()->GetHeight() != 235300 && - { + if (chainparams.MiningRequiresPeers()) { //if ( ASSETCHAINS_SEED != 0 && chainActive.LastTip()->GetHeight() < 100 ) // break; // Busy-wait for the network to come online so we don't waste time mining @@ -1196,9 +1195,8 @@ void static BitcoinMiner() IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); //fprintf(stderr,"Running HushMiner.%s with %u transactions in block\n",solver.c_str(),(int32_t)pblock->vtx.size()); 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(); pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, Params().GetConsensus()); savebits = pblock->nBits; @@ -1260,14 +1258,6 @@ void static BitcoinMiner() } else Mining_start = 0; } else Mining_start = 0; - if ( ASSETCHAINS_STAKED > 0 ) - { - int32_t percPoS,z; bool fNegative,fOverflow; - HASHTarget_POW = komodo_PoWtarget(&percPoS,HASHTarget,Mining_height,ASSETCHAINS_STAKED); - HASHTarget.SetCompact(HUSH_MINDIFF_NBITS,&fNegative,&fOverflow); - if ( ASSETCHAINS_STAKED < 100 ) - LogPrintf("Block %d : PoS %d%% vs target %d%% \n",Mining_height,percPoS,(int32_t)ASSETCHAINS_STAKED); - } //else if ( ASSETCHAINS_ADAPTIVEPOW > 0 ) // HASHTarget_POW = komodo_adaptivepow_target(Mining_height,HASHTarget,pblock->nTime); gotinvalid = 0; @@ -1278,7 +1268,7 @@ void static BitcoinMiner() break; hush_longestchain(); // Hash state - KOMODO_CHOSEN_ONE = 0; + HUSH_CHOSEN_ONE = 0; crypto_generichash_blake2b_state state; EhInitialiseState(n, k, state); @@ -1368,7 +1358,7 @@ void static BitcoinMiner() gotinvalid = 1; return(false); } - KOMODO_CHOSEN_ONE = 1; + HUSH_CHOSEN_ONE = 1; // Found a solution SetThreadPriority(THREAD_PRIORITY_NORMAL); LogPrintf("HushMiner:\n"); @@ -1382,7 +1372,7 @@ void static BitcoinMiner() std::lock_guard lock{m_cs}; cancelSolver = false; } - KOMODO_CHOSEN_ONE = 0; + HUSH_CHOSEN_ONE = 0; SetThreadPriority(THREAD_PRIORITY_LOWEST); // In regression test mode, stop mining after a block is found. if (chainparams.MineBlocksOnDemand()) { diff --git a/src/pow.cpp b/src/pow.cpp index 0eb73d397..204a805bd 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -678,7 +678,7 @@ int32_t hush_currentheight(); void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height); bool komodo_checkopret(CBlock *pblock, CScript &merkleroot); CScript komodo_makeopret(CBlock *pblock, bool fNew); -extern int32_t KOMODO_CHOSEN_ONE; +extern int32_t HUSH_CHOSEN_ONE; extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; #define KOMODO_ELECTION_GAP 2000 diff --git a/src/rpc/crosschain.cpp b/src/rpc/crosschain.cpp index 2155c4d58..4112e54cf 100644 --- a/src/rpc/crosschain.cpp +++ b/src/rpc/crosschain.cpp @@ -57,8 +57,8 @@ bool EnsureWalletIsAvailable(bool avoidException); int32_t hush_MoM(int32_t *notarized_htp,uint256 *MoMp,uint256 *kmdtxidp,int32_t nHeight,uint256 *MoMoMp,int32_t *MoMoMoffsetp,int32_t *MoMoMdepthp,int32_t *kmdstartip,int32_t *kmdendip); -int32_t hush_MoMoMdata(char *hexstr,int32_t hexsize,struct komodo_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height); -struct komodo_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t kmdstarti,int32_t kmdendi); +int32_t hush_MoMoMdata(char *hexstr,int32_t hexsize,struct hush_ccdataMoMoM *mdata,char *symbol,int32_t kmdheight,int32_t notarized_height); +struct hush_ccdata_entry *komodo_allMoMs(int32_t *nump,uint256 *MoMoMp,int32_t kmdstarti,int32_t kmdendi); uint256 komodo_calcMoM(int32_t height,int32_t MoMdepth); int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); extern std::string ASSETCHAINS_SELFIMPORT; diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 0a052876b..33cafad4d 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -62,7 +62,6 @@ int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *tx bool komodo_txnotarizedconfirmed(uint256 txid); uint32_t hush_chainactive_timestamp(); int32_t hush_whoami(char *pubkeystr,int32_t height,uint32_t timestamp); -extern uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE; extern int32_t KOMODO_LASTMINED,JUMBLR_PAUSE,HUSH_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; uint32_t komodo_segid32(char *coinaddr); @@ -246,15 +245,7 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) #ifdef ENABLE_WALLET if (pwalletMain) { obj.push_back(Pair("walletversion", pwalletMain->GetVersion())); - if ( SMART_CHAIN_SYMBOL[0] == 0 ) - { - obj.push_back(Pair("interest", ValueFromAmount(KOMODO_INTERESTSUM))); - obj.push_back(Pair("balance", ValueFromAmount(KOMODO_WALLETBALANCE))); //pwalletMain->GetBalance() - } - else - { - obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); // - } + obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); } #endif //fprintf(stderr,"after wallet %u\n",(uint32_t)time(NULL)); @@ -1201,8 +1192,8 @@ UniValue getnotarypayinfo(const UniValue& params, bool fHelp, const CPubKey& myp balance = checkburnaddress(received, TotalNotaryPay, height, "REDVp3ox1pbcWYCzySadfHhk8UU3HM4k5x"); notarycount = hush_notaries(notarypubkeys, height, chainActive[height]->GetBlockTime()); - NotaryPay = komodo_notarypayamount(height, notarycount)*notarycount; - bool spent = (received != balance); + NotaryPay = komodo_notarypayamount(height, notarycount)*notarycount; + bool spent = (received != balance); if ( !spent ) { notaleft = ((int64_t)balance - TotalNotaryPay) / NotaryPay; diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index d79990b4b..a8029feaf 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -165,9 +165,9 @@ string AccountFromValue(const UniValue& value) return strAccount; } -char *komodo_chainname() +char *hush_chainname() { - return(SMART_CHAIN_SYMBOL[0] == 0 ? (char *)"KMD" : SMART_CHAIN_SYMBOL); + return(SMART_CHAIN_SYMBOL); } void OS_randombytes(unsigned char *x,long xlen); @@ -180,11 +180,11 @@ UniValue getnewaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) if (fHelp || params.size() > 1) throw runtime_error( "getnewaddress ( \"account\" )\n" - "\nReturns a new " + strprintf("%s",komodo_chainname()) + " address for receiving payments.\n" + "\nReturns a new " + strprintf("%s",hush_chainname()) + " address for receiving payments.\n" "\nArguments:\n" "1. \"account\" (string, optional) DEPRECATED. If provided, it MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nResult:\n" - "\"" + strprintf("%s",komodo_chainname()) + "_address\" (string) The new " + strprintf("%s",komodo_chainname()) + " address\n" + "\"" + strprintf("%s",hush_chainname()) + "_address\" (string) The new " + strprintf("%s",hush_chainname()) + " address\n" "\nExamples:\n" + HelpExampleCli("getnewaddress", "") + HelpExampleRpc("getnewaddress", "") @@ -274,11 +274,11 @@ UniValue getaccountaddress(const UniValue& params, bool fHelp, const CPubKey& my if (fHelp || params.size() != 1) throw runtime_error( "getaccountaddress \"account\"\n" - "\nDEPRECATED. Returns the current " + strprintf("%s",komodo_chainname()) + " address for receiving payments to this account.\n" + "\nDEPRECATED. Returns the current " + strprintf("%s",hush_chainname()) + " address for receiving payments to this account.\n" "\nArguments:\n" "1. \"account\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nResult:\n" - "\"" + strprintf("%s",komodo_chainname()) + "_address\" (string) The account " + strprintf("%s",komodo_chainname()) + " address\n" + "\"" + strprintf("%s",hush_chainname()) + "_address\" (string) The account " + strprintf("%s",hush_chainname()) + " address\n" "\nExamples:\n" + HelpExampleCli("getaccountaddress", "") + HelpExampleCli("getaccountaddress", "\"\"") @@ -306,7 +306,7 @@ UniValue getrawchangeaddress(const UniValue& params, bool fHelp, const CPubKey& if (fHelp || params.size() > 1) throw runtime_error( "getrawchangeaddress\n" - "\nReturns a new " + strprintf("%s",komodo_chainname()) + " address, for receiving change.\n" + "\nReturns a new " + strprintf("%s",hush_chainname()) + " address, for receiving change.\n" "This is for use with raw transactions, NOT normal use.\n" "\nResult:\n" "\"address\" (string) The address\n" @@ -340,10 +340,10 @@ UniValue setaccount(const UniValue& params, bool fHelp, const CPubKey& mypk) if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "setaccount \"" + strprintf("%s",komodo_chainname()) + "_address\" \"account\"\n" + "setaccount \"" + strprintf("%s",hush_chainname()) + "_address\" \"account\"\n" "\nDEPRECATED. Sets the account associated with the given address.\n" "\nArguments:\n" - "1. \"" + strprintf("%s",komodo_chainname()) + "_address\" (string, required) The " + strprintf("%s",komodo_chainname()) + " address to be associated with an account.\n" + "1. \"" + strprintf("%s",hush_chainname()) + "_address\" (string, required) The " + strprintf("%s",hush_chainname()) + " address to be associated with an account.\n" "2. \"account\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nExamples:\n" + HelpExampleCli("setaccount", "\"RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPV\" \"tabby\"") @@ -386,10 +386,10 @@ UniValue getaccount(const UniValue& params, bool fHelp, const CPubKey& mypk) if (fHelp || params.size() != 1) throw runtime_error( - "getaccount \"" + strprintf("%s",komodo_chainname()) + "_address\"\n" + "getaccount \"" + strprintf("%s",hush_chainname()) + "_address\"\n" "\nDEPRECATED. Returns the account associated with the given address.\n" "\nArguments:\n" - "1. \"" + strprintf("%s",komodo_chainname()) + "_address\" (string, required) The " + strprintf("%s",komodo_chainname()) + " address for account lookup.\n" + "1. \"" + strprintf("%s",hush_chainname()) + "_address\" (string, required) The " + strprintf("%s",hush_chainname()) + " address for account lookup.\n" "\nResult:\n" "\"accountname\" (string) the account address\n" "\nExamples:\n" @@ -426,7 +426,7 @@ UniValue getaddressesbyaccount(const UniValue& params, bool fHelp, const CPubKey "1. \"account\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nResult:\n" "[ (json array of string)\n" - " \"" + strprintf("%s",komodo_chainname()) + "_address\" (string) a " + strprintf("%s",komodo_chainname()) + " address associated with the given account\n" + " \"" + strprintf("%s",hush_chainname()) + "_address\" (string) a " + strprintf("%s",hush_chainname()) + " address associated with the given account\n" " ,...\n" "]\n" "\nExamples:\n" @@ -502,19 +502,19 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) if (fHelp || params.size() < 2 || params.size() > 5) throw runtime_error( - "sendtoaddress \"" + strprintf("%s",komodo_chainname()) + "_address\" amount ( \"comment\" \"comment-to\" subtractfeefromamount )\n" + "sendtoaddress \"" + strprintf("%s",hush_chainname()) + "_address\" amount ( \"comment\" \"comment-to\" subtractfeefromamount )\n" "\nSend an amount to a given address. The amount is a real and is rounded to the nearest 0.00000001\n" + HelpRequiringPassphrase() + "\nArguments:\n" - "1. \"" + strprintf("%s",komodo_chainname()) + "_address\" (string, required) The " + strprintf("%s",komodo_chainname()) + " address to send to.\n" - "2. \"amount\" (numeric, required) The amount in " + strprintf("%s",komodo_chainname()) + " to send. eg 0.1\n" + "1. \"" + strprintf("%s",hush_chainname()) + "_address\" (string, required) The " + strprintf("%s",hush_chainname()) + " address to send to.\n" + "2. \"amount\" (numeric, required) The amount in " + strprintf("%s",hush_chainname()) + " to send. eg 0.1\n" "3. \"comment\" (string, optional) A comment used to store what the transaction is for. \n" " This is not part of the transaction, just kept in your wallet.\n" "4. \"comment-to\" (string, optional) A comment to store the name of the person or organization \n" " to which you're sending the transaction. This is not part of the \n" " transaction, just kept in your wallet.\n" "5. subtractfeefromamount (boolean, optional, default=false) The fee will be deducted from the amount being sent.\n" - " The recipient will receive less " + strprintf("%s",komodo_chainname()) + " than you enter in the amount field.\n" + " The recipient will receive less " + strprintf("%s",hush_chainname()) + " than you enter in the amount field.\n" "\nResult:\n" "\"transactionid\" (string) The transaction id.\n" "\nExamples:\n" @@ -528,7 +528,7 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) { if ( hush_isnotaryvout((char *)params[0].get_str().c_str(),chainActive.LastTip()->nTime) == 0 ) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid " + strprintf("%s",komodo_chainname()) + " address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid " + strprintf("%s",hush_chainname()) + " address"); } } LOCK2(cs_main, pwalletMain->cs_wallet); @@ -570,7 +570,6 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) uint64_t PAX_fiatdest(uint64_t *seedp,int32_t tokomodo,char *destaddr,uint8_t pubkey37[37],char *coinaddr,int32_t height,char *base,int64_t fiatoshis); int32_t komodo_opreturnscript(uint8_t *script,uint8_t type,uint8_t *opret,int32_t opretlen); extern int32_t KOMODO_PAX; -extern uint64_t KOMODO_INTERESTSUM,KOMODO_WALLETBALANCE; int32_t komodo_is_issuer(); int32_t dragon_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp); int32_t komodo_isrealtime(int32_t *kmdheightp); @@ -734,7 +733,7 @@ UniValue paxdeposit(const UniValue& params, bool fHelp, const CPubKey& mypk) throw runtime_error("paxdeposit disabled without -pax"); } if ( komodo_is_issuer() != 0 ) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "paxdeposit only from KMD"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "paxdeposit only from KYC"); if (!EnsureWalletIsAvailable(fHelp)) throw runtime_error("paxdeposit needs wallet"); //return Value::null; if (fHelp || params.size() != 3) @@ -821,8 +820,8 @@ UniValue listaddressgroupings(const UniValue& params, bool fHelp, const CPubKey& "[\n" " [\n" " [\n" - " \"" + strprintf("%s",komodo_chainname()) + " address\", (string) The " + strprintf("%s",komodo_chainname()) + " address\n" - " amount, (numeric) The amount in " + strprintf("%s",komodo_chainname()) + "\n" + " \"" + strprintf("%s",hush_chainname()) + " address\", (string) The " + strprintf("%s",hush_chainname()) + " address\n" + " amount, (numeric) The amount in " + strprintf("%s",hush_chainname()) + "\n" " \"account\" (string, optional) The account (DEPRECATED)\n" " ]\n" " ,...\n" @@ -923,13 +922,13 @@ UniValue getreceivedbyaddress(const UniValue& params, bool fHelp, const CPubKey& if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getreceivedbyaddress \"" + strprintf("%s",komodo_chainname()) + "_address\" ( minconf )\n" - "\nReturns the total amount received by the given " + strprintf("%s",komodo_chainname()) + " address in transactions with at least minconf confirmations.\n" + "getreceivedbyaddress \"" + strprintf("%s",hush_chainname()) + "_address\" ( minconf )\n" + "\nReturns the total amount received by the given " + strprintf("%s",hush_chainname()) + " address in transactions with at least minconf confirmations.\n" "\nArguments:\n" - "1. \"" + strprintf("%s",komodo_chainname()) + "_address\" (string, required) The " + strprintf("%s",komodo_chainname()) + " address for transactions.\n" + "1. \"" + strprintf("%s",hush_chainname()) + "_address\" (string, required) The " + strprintf("%s",hush_chainname()) + " address for transactions.\n" "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" "\nResult:\n" - "amount (numeric) The total amount in " + strprintf("%s",komodo_chainname()) + " received at this address.\n" + "amount (numeric) The total amount in " + strprintf("%s",hush_chainname()) + " received at this address.\n" "\nExamples:\n" "\nThe amount from transactions with at least 1 confirmation\n" + HelpExampleCli("getreceivedbyaddress", "\"RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPV\"") + @@ -1000,7 +999,7 @@ UniValue getreceivedbyaccount(const UniValue& params, bool fHelp, const CPubKey& "1. \"account\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" "\nResult:\n" - "amount (numeric) The total amount in " + strprintf("%s",komodo_chainname()) + " received for this account.\n" + "amount (numeric) The total amount in " + strprintf("%s",hush_chainname()) + " received for this account.\n" "\nExamples:\n" "\nAmount received by the default account with at least 1 confirmation\n" + HelpExampleCli("getreceivedbyaccount", "\"\"") + @@ -1099,7 +1098,7 @@ UniValue cleanwallettransactions(const UniValue& params, bool fHelp, const CPubK "1. \"txid\" (string, optional) The transaction id to keep.\n" "\nResult:\n" "{\n" - " \"total_transactions\" : n, (numeric) Transactions in wallet of " + strprintf("%s",komodo_chainname()) + "\n" + " \"total_transactions\" : n, (numeric) Transactions in wallet of " + strprintf("%s",hush_chainname()) + "\n" " \"remaining_transactions\" : n, (numeric) Transactions in wallet after clean.\n" " \"removed_transactions\" : n, (numeric) The number of transactions removed.\n" "}\n" @@ -1202,7 +1201,7 @@ UniValue getbalance(const UniValue& params, bool fHelp, const CPubKey& mypk) "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" "3. includeWatchonly (bool, optional, default=false) Also include balance in watchonly addresses (see 'importaddress')\n" "\nResult:\n" - "amount (numeric) The total amount in " + strprintf("%s",komodo_chainname()) + " received for this account.\n" + "amount (numeric) The total amount in " + strprintf("%s",hush_chainname()) + " received for this account.\n" "\nExamples:\n" "\nThe total amount in the wallet\n" + HelpExampleCli("getbalance", "") + @@ -1298,15 +1297,15 @@ UniValue movecmd(const UniValue& params, bool fHelp, const CPubKey& mypk) "\nArguments:\n" "1. \"fromaccount\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "2. \"toaccount\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" - "3. amount (numeric) Quantity of " + strprintf("%s",komodo_chainname()) + " to move between accounts.\n" + "3. amount (numeric) Quantity of " + strprintf("%s",hush_chainname()) + " to move between accounts.\n" "4. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n" "5. \"comment\" (string, optional) An optional comment, stored in the wallet only.\n" "\nResult:\n" "true|false (boolean) true if successful.\n" "\nExamples:\n" - "\nMove 0.01 " + strprintf("%s",komodo_chainname()) + " from the default account to the account named tabby\n" + "\nMove 0.01 " + strprintf("%s",hush_chainname()) + " from the default account to the account named tabby\n" + HelpExampleCli("move", "\"\" \"tabby\" 0.01") + - "\nMove 0.01 " + strprintf("%s",komodo_chainname()) + " timotei to akiko with a comment and funds have 6 confirmations\n" + "\nMove 0.01 " + strprintf("%s",hush_chainname()) + " timotei to akiko with a comment and funds have 6 confirmations\n" + HelpExampleCli("move", "\"timotei\" \"akiko\" 0.01 6 \"happy birthday!\"") + "\nAs a json rpc call\n" + HelpExampleRpc("move", "\"timotei\", \"akiko\", 0.01, 6, \"happy birthday!\"") @@ -1368,14 +1367,14 @@ UniValue sendfrom(const UniValue& params, bool fHelp, const CPubKey& mypk) if (fHelp || params.size() < 3 || params.size() > 6) throw runtime_error( - "sendfrom \"fromaccount\" \"to" + strprintf("%s",komodo_chainname()) + "address\" amount ( minconf \"comment\" \"comment-to\" )\n" - "\nDEPRECATED (use sendtoaddress). Sent an amount from an account to a " + strprintf("%s",komodo_chainname()) + " address.\n" + "sendfrom \"fromaccount\" \"to" + strprintf("%s",hush_chainname()) + "address\" amount ( minconf \"comment\" \"comment-to\" )\n" + "\nDEPRECATED (use sendtoaddress). Sent an amount from an account to a " + strprintf("%s",hush_chainname()) + " address.\n" "The amount is a real and is rounded to the nearest 0.00000001." + HelpRequiringPassphrase() + "\n" "\nArguments:\n" "1. \"fromaccount\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" - "2. \"to" + strprintf("%s",komodo_chainname()) + "address\" (string, required) The " + strprintf("%s",komodo_chainname()) + " address to send funds to.\n" - "3. amount (numeric, required) The amount in " + strprintf("%s",komodo_chainname()) + " (transaction fee is added on top).\n" + "2. \"to" + strprintf("%s",hush_chainname()) + "address\" (string, required) The " + strprintf("%s",hush_chainname()) + " address to send funds to.\n" + "3. amount (numeric, required) The amount in " + strprintf("%s",hush_chainname()) + " (transaction fee is added on top).\n" "4. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n" "5. \"comment\" (string, optional) A comment used to store what the transaction is for. \n" " This is not part of the transaction, just kept in your wallet.\n" @@ -1385,7 +1384,7 @@ UniValue sendfrom(const UniValue& params, bool fHelp, const CPubKey& mypk) "\nResult:\n" "\"transactionid\" (string) The transaction id.\n" "\nExamples:\n" - "\nSend 0.01 " + strprintf("%s",komodo_chainname()) + " from the default account to the address, must have at least 1 confirmation\n" + "\nSend 0.01 " + strprintf("%s",hush_chainname()) + " from the default account to the address, must have at least 1 confirmation\n" + HelpExampleCli("sendfrom", "\"\" \"RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPV\" 0.01") + "\nSend 0.01 from the tabby account to the given address, funds must have at least 6 confirmations\n" + HelpExampleCli("sendfrom", "\"tabby\" \"RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPV\" 0.01 6 \"donation\" \"seans outpost\"") + @@ -1443,14 +1442,14 @@ UniValue sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk) "1. \"fromaccount\" (string, required) MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "2. \"amounts\" (string, required) A json object with addresses and amounts\n" " {\n" - " \"address\":amount (numeric) The " + strprintf("%s",komodo_chainname()) + " address is the key, the numeric amount in " + strprintf("%s",komodo_chainname()) + " is the value\n" + " \"address\":amount (numeric) The " + strprintf("%s",hush_chainname()) + " address is the key, the numeric amount in " + strprintf("%s",hush_chainname()) + " is the value\n" " ,...\n" " }\n" "3. minconf (numeric, optional, default=1) Only use the balance confirmed at least this many times.\n" "4. \"comment\" (string, optional) A comment\n" "5. subtractfeefromamount (string, optional) A json array with addresses.\n" " The fee will be equally deducted from the amount of each selected address.\n" - " Those recipients will receive less " + strprintf("%s",komodo_chainname()) + " than you enter in their corresponding amount field.\n" + " Those recipients will receive less " + strprintf("%s",hush_chainname()) + " than you enter in their corresponding amount field.\n" " If no addresses are specified here, the sender pays the fee.\n" " [\n" " \"address\" (string) Subtract fee from this address\n" @@ -1554,20 +1553,20 @@ UniValue addmultisigaddress(const UniValue& params, bool fHelp, const CPubKey& m { string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" )\n" "\nAdd a nrequired-to-sign multisignature address to the wallet.\n" - "Each key is a " + strprintf("%s",komodo_chainname()) + " address or hex-encoded public key.\n" + "Each key is a " + strprintf("%s",hush_chainname()) + " address or hex-encoded public key.\n" "If 'account' is specified (DEPRECATED), assign address to that account.\n" "\nArguments:\n" "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n" - "2. \"keysobject\" (string, required) A json array of " + strprintf("%s",komodo_chainname()) + " addresses or hex-encoded public keys\n" + "2. \"keysobject\" (string, required) A json array of " + strprintf("%s",hush_chainname()) + " addresses or hex-encoded public keys\n" " [\n" - " \"address\" (string) " + strprintf("%s",komodo_chainname()) + " address or hex-encoded public key\n" + " \"address\" (string) " + strprintf("%s",hush_chainname()) + " address or hex-encoded public key\n" " ...,\n" " ]\n" "3. \"account\" (string, optional) DEPRECATED. If provided, MUST be set to the empty string \"\" to represent the default account. Passing any other string will result in an error.\n" "\nResult:\n" - "\"" + strprintf("%s",komodo_chainname()) + "_address\" (string) A " + strprintf("%s",komodo_chainname()) + " address associated with the keys.\n" + "\"" + strprintf("%s",hush_chainname()) + "_address\" (string) A " + strprintf("%s",hush_chainname()) + " address associated with the keys.\n" "\nExamples:\n" "\nAdd a multisig address from 2 addresses\n" @@ -1760,7 +1759,7 @@ UniValue listreceivedbyaddress(const UniValue& params, bool fHelp, const CPubKey " \"involvesWatchonly\" : true, (bool) Only returned if imported addresses were involved in transaction\n" " \"address\" : \"receivingaddress\", (string) The receiving address\n" " \"account\" : \"accountname\", (string) DEPRECATED. The account of the receiving address. The default account is \"\".\n" - " \"amount\" : x.xxx, (numeric) The total amount in " + strprintf("%s",komodo_chainname()) + " received by the address\n" + " \"amount\" : x.xxx, (numeric) The total amount in " + strprintf("%s",hush_chainname()) + " received by the address\n" " \"confirmations\" : n (numeric) The number of confirmations of the most recent transaction included\n" " }\n" " ,...\n" @@ -1939,17 +1938,17 @@ UniValue listtransactions(const UniValue& params, bool fHelp, const CPubKey& myp " {\n" " \"account\":\"accountname\", (string) DEPRECATED. The account name associated with the transaction. \n" " It will be \"\" for the default account.\n" - " \"address\":\"" + strprintf("%s",komodo_chainname()) + "_address\", (string) The " + strprintf("%s",komodo_chainname()) + " address of the transaction. Not present for \n" + " \"address\":\"" + strprintf("%s",hush_chainname()) + "_address\", (string) The " + strprintf("%s",hush_chainname()) + " address of the transaction. Not present for \n" " move transactions (category = move).\n" " \"category\":\"send|receive|move\", (string) The transaction category. 'move' is a local (off blockchain)\n" " transaction between accounts, and not associated with an address,\n" " transaction id or block. 'send' and 'receive' transactions are \n" " associated with an address, transaction id and block details\n" - " \"amount\": x.xxx, (numeric) The amount in " + strprintf("%s",komodo_chainname()) + ". This is negative for the 'send' category, and for the\n" + " \"amount\": x.xxx, (numeric) The amount in " + strprintf("%s",hush_chainname()) + ". This is negative for the 'send' category, and for the\n" " 'move' category for moves outbound. It is positive for the 'receive' category,\n" " and for the 'move' category for inbound funds.\n" " \"vout\" : n, (numeric) the vout value\n" - " \"fee\": x.xxx, (numeric) The amount of the fee in " + strprintf("%s",komodo_chainname()) + ". This is negative and only available for the \n" + " \"fee\": x.xxx, (numeric) The amount of the fee in " + strprintf("%s",hush_chainname()) + ". This is negative and only available for the \n" " 'send' category of transactions.\n" " \"confirmations\": n, (numeric) The number of confirmations for the transaction. Available for 'send' and \n" " 'receive' category of transactions.\n" @@ -2142,12 +2141,12 @@ UniValue listsinceblock(const UniValue& params, bool fHelp, const CPubKey& mypk) "{\n" " \"transactions\": [\n" " \"account\":\"accountname\", (string) DEPRECATED. The account name associated with the transaction. Will be \"\" for the default account.\n" - " \"address\":\"" + strprintf("%s",komodo_chainname()) + "_address\", (string) The " + strprintf("%s",komodo_chainname()) + " address of the transaction. Not present for move transactions (category = move).\n" + " \"address\":\"" + strprintf("%s",hush_chainname()) + "_address\", (string) The " + strprintf("%s",hush_chainname()) + " address of the transaction. Not present for move transactions (category = move).\n" " \"category\":\"send|receive\", (string) The transaction category. 'send' has negative amounts, 'receive' has positive amounts.\n" - " \"amount\": x.xxx, (numeric) The amount in " + strprintf("%s",komodo_chainname()) + ". This is negative for the 'send' category, and for the 'move' category for moves \n" + " \"amount\": x.xxx, (numeric) The amount in " + strprintf("%s",hush_chainname()) + ". This is negative for the 'send' category, and for the 'move' category for moves \n" " outbound. It is positive for the 'receive' category, and for the 'move' category for inbound funds.\n" " \"vout\" : n, (numeric) the vout value\n" - " \"fee\": x.xxx, (numeric) The amount of the fee in " + strprintf("%s",komodo_chainname()) + ". This is negative and only available for the 'send' category of transactions.\n" + " \"fee\": x.xxx, (numeric) The amount of the fee in " + strprintf("%s",hush_chainname()) + ". This is negative and only available for the 'send' category of transactions.\n" " \"confirmations\": n, (numeric) The number of confirmations for the transaction. Available for 'send' and 'receive' category of transactions.\n" " \"blockhash\": \"hashvalue\", (string) The block hash containing the transaction. Available for 'send' and 'receive' category of transactions.\n" " \"blockindex\": n, (numeric) The block index containing the transaction. Available for 'send' and 'receive' category of transactions.\n" @@ -2230,7 +2229,7 @@ UniValue gettransaction(const UniValue& params, bool fHelp, const CPubKey& mypk) "2. \"includeWatchonly\" (bool, optional, default=false) Whether to include watchonly addresses in balance calculation and details[]\n" "\nResult:\n" "{\n" - " \"amount\" : x.xxx, (numeric) The transaction amount in " + strprintf("%s",komodo_chainname()) + "\n" + " \"amount\" : x.xxx, (numeric) The transaction amount in " + strprintf("%s",hush_chainname()) + "\n" " \"confirmations\" : n, (numeric) The number of confirmations\n" " \"blockhash\" : \"hash\", (string) The block hash\n" " \"blockindex\" : xx, (numeric) The block index\n" @@ -2241,9 +2240,9 @@ UniValue gettransaction(const UniValue& params, bool fHelp, const CPubKey& mypk) " \"details\" : [\n" " {\n" " \"account\" : \"accountname\", (string) DEPRECATED. The account name involved in the transaction, can be \"\" for the default account.\n" - " \"address\" : \"" + strprintf("%s",komodo_chainname()) + "_address\", (string) The " + strprintf("%s",komodo_chainname()) + " address involved in the transaction\n" + " \"address\" : \"" + strprintf("%s",hush_chainname()) + "_address\", (string) The " + strprintf("%s",hush_chainname()) + " address involved in the transaction\n" " \"category\" : \"send|receive\", (string) The category, either 'send' or 'receive'\n" - " \"amount\" : x.xxx (numeric) The amount in " + strprintf("%s",komodo_chainname()) + "\n" + " \"amount\" : x.xxx (numeric) The amount in " + strprintf("%s",hush_chainname()) + "\n" " \"vout\" : n, (numeric) the vout value\n" " }\n" " ,...\n" @@ -2401,7 +2400,7 @@ UniValue walletpassphrase(const UniValue& params, bool fHelp, const CPubKey& myp throw runtime_error( "walletpassphrase \"passphrase\" timeout\n" "\nStores the wallet decryption key in memory for 'timeout' seconds.\n" - "This is needed prior to performing transactions related to private keys such as sending " + strprintf("%s",komodo_chainname()) + "\n" + "This is needed prior to performing transactions related to private keys such as sending " + strprintf("%s",hush_chainname()) + "\n" "\nArguments:\n" "1. \"passphrase\" (string, required) The wallet passphrase\n" "2. timeout (numeric, required) The time to keep the decryption key in seconds.\n" @@ -2569,10 +2568,10 @@ UniValue encryptwallet(const UniValue& params, bool fHelp, const CPubKey& mypk) "\nExamples:\n" "\nEncrypt you wallet\n" + HelpExampleCli("encryptwallet", "\"my pass phrase\"") + - "\nNow set the passphrase to use the wallet, such as for signing or sending " + strprintf("%s",komodo_chainname()) + "\n" + "\nNow set the passphrase to use the wallet, such as for signing or sending " + strprintf("%s",hush_chainname()) + "\n" + HelpExampleCli("walletpassphrase", "\"my pass phrase\"") + "\nNow we can so something like sign\n" - + HelpExampleCli("signmessage", "\"" + strprintf("%s",komodo_chainname()) + "_address\" \"test message\"") + + + HelpExampleCli("signmessage", "\"" + strprintf("%s",hush_chainname()) + "_address\" \"test message\"") + "\nNow lock the wallet again by removing the passphrase\n" + HelpExampleCli("walletlock", "") + "\nAs a json rpc call\n" @@ -2620,7 +2619,7 @@ UniValue lockunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) "lockunspent unlock [{\"txid\":\"txid\",\"vout\":n},...]\n" "\nUpdates list of temporarily unspendable outputs.\n" "Temporarily lock (unlock=false) or unlock (unlock=true) specified transaction outputs.\n" - "A locked transaction output will not be chosen by automatic coin selection, when spending " + strprintf("%s",komodo_chainname()) + ".\n" + "A locked transaction output will not be chosen by automatic coin selection, when spending " + strprintf("%s",hush_chainname()) + ".\n" "Locks are stored in memory only. Nodes start with zero locked outputs, and the locked output list\n" "is always cleared (by virtue of process exit) when a node stops or fails.\n" "Also see the listunspent call\n" @@ -2753,7 +2752,7 @@ UniValue settxfee(const UniValue& params, bool fHelp, const CPubKey& mypk) "settxfee amount\n" "\nSet the transaction fee per kB.\n" "\nArguments:\n" - "1. amount (numeric, required) The transaction fee in " + strprintf("%s",komodo_chainname()) + "/kB rounded to the nearest 0.00000001\n" + "1. amount (numeric, required) The transaction fee in " + strprintf("%s",hush_chainname()) + "/kB rounded to the nearest 0.00000001\n" "\nResult\n" "true|false (boolean) Returns true if successful\n" "\nExamples:\n" @@ -2782,9 +2781,9 @@ UniValue getwalletinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) "\nResult:\n" "{\n" " \"walletversion\": xxxxx, (numeric) the wallet version\n" - " \"balance\": xxxxxxx, (numeric) the total confirmed balance of the wallet in " + strprintf("%s",komodo_chainname()) + "\n" - " \"unconfirmed_balance\": xxx, (numeric) the total unconfirmed balance of the wallet in " + strprintf("%s",komodo_chainname()) + "\n" - " \"immature_balance\": xxxxxx, (numeric) the total immature balance of the wallet in " + strprintf("%s",komodo_chainname()) + "\n" + " \"balance\": xxxxxxx, (numeric) the total confirmed balance of the wallet in " + strprintf("%s",hush_chainname()) + "\n" + " \"unconfirmed_balance\": xxx, (numeric) the total unconfirmed balance of the wallet in " + strprintf("%s",hush_chainname()) + "\n" + " \"immature_balance\": xxxxxx, (numeric) the total immature balance of the wallet in " + strprintf("%s",hush_chainname()) + "\n" " \"txcount\": xxxxxxx, (numeric) the total number of transactions in the wallet\n" " \"keypoololdest\": xxxxxx, (numeric) the timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool\n" " \"keypoolsize\": xxxx, (numeric) how many new keys are pre-generated\n" @@ -2861,9 +2860,9 @@ UniValue listunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) "\nArguments:\n" "1. minconf (numeric, optional, default=1) The minimum confirmations to filter\n" "2. maxconf (numeric, optional, default=9999999) The maximum confirmations to filter\n" - "3. \"addresses\" (string) A json array of " + strprintf("%s",komodo_chainname()) + " addresses to filter\n" + "3. \"addresses\" (string) A json array of " + strprintf("%s",hush_chainname()) + " addresses to filter\n" " [\n" - " \"address\" (string) " + strprintf("%s",komodo_chainname()) + " address\n" + " \"address\" (string) " + strprintf("%s",hush_chainname()) + " address\n" " ,...\n" " ]\n" "\nResult\n" @@ -3841,7 +3840,7 @@ UniValue z_getnewaddress(const UniValue& params, bool fHelp, const CPubKey& mypk "\nArguments:\n" "1. \"type\" (string, optional, default=\"" + defaultType + "\") The type of address. Either "+ ADDR_TYPE_SAPLING + " or " + ADDR_TYPE_AMNESIA + " .\n" "\nResult:\n" - "\"" + strprintf("%s",komodo_chainname()) + "_address\" (string) The new shielded address.\n" + "\"" + strprintf("%s",hush_chainname()) + "_address\" (string) The new shielded address.\n" "\nExamples:\n" + HelpExampleCli("z_getnewaddress", "") + HelpExampleCli("z_getnewaddress", ADDR_TYPE_SAPLING) From 482990936f4d7dcf095d44f497aff5ab6fda221f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 22:30:56 -0500 Subject: [PATCH 251/277] Cleanup --- ISSUE_TEMPLATE.md | 5 ++--- src/cc/CCPrices.h | 2 +- src/cc/prices.cpp | 10 +++++----- src/hush_bitcoind.h | 2 +- src/hush_defs.h | 2 +- src/hush_events.h | 10 +++++----- src/hush_globals.h | 4 ++-- src/hush_structs.h | 2 +- src/hush_utils.h | 6 +++--- src/main.cpp | 6 +++--- src/miner.cpp | 6 +++--- src/miner.h | 2 +- src/rpc/mining.cpp | 4 ++-- src/rpc/misc.cpp | 2 +- 14 files changed, 31 insertions(+), 32 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index c3bdf6474..d2df1792c 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -23,7 +23,7 @@ Tell us what should happen Tell us what happens instead including any noticable error output (any messages displayed on-screen when e.g. a crash occurred) -### The version of Komodo you were using: +### The version of Hush you were using: Run `hushd --version` to find out @@ -41,5 +41,4 @@ Run `hushd --version` to find out This includes the relevant contents of `~/.komodo/HUSH3/debug.log`. You can paste raw text, attach the file directly in the issue or link to the text via a pastebin type site. Please also include any non-standard things you did during compilation (extra flags, dependency version changes etc.) if applicable. -Beware that usernames and IP addresses and other metadata may be in this log file. - +Beware that usernames and IP addresses and other metadata is definitely in this log file! diff --git a/src/cc/CCPrices.h b/src/cc/CCPrices.h index 97fd7e50e..bb3a4563d 100644 --- a/src/cc/CCPrices.h +++ b/src/cc/CCPrices.h @@ -24,7 +24,7 @@ #include "CCinclude.h" int32_t komodo_priceget(int64_t *buf64,int32_t ind,int32_t height,int32_t numblocks); -extern void GetKomodoEarlytxidScriptPub(); +extern void GetHushEarlytxidScriptPub(); extern CScript HUSH_EARLYTXID_SCRIPTPUB; // #define PRICES_DAYWINDOW ((3600*24/ASSETCHAINS_BLOCKTIME) + 1) // defined in hush_defs.h diff --git a/src/cc/prices.cpp b/src/cc/prices.cpp index c182419e1..6a9779050 100644 --- a/src/cc/prices.cpp +++ b/src/cc/prices.cpp @@ -65,7 +65,7 @@ mine the chain past block 100, preventing anyone else, creating another payments We call the following in Validation and RPC where the address is needed. if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0 ) - GetKomodoEarlytxidScriptPub(); + GetHushEarlytxidScriptPub(); This will fetch the op_return, calculate the scriptPubKey and save it to the global. On daemon restart as soon as validation for BETTX happens the global will be filled, after this the transaction never needs to be looked up again. @@ -245,7 +245,7 @@ static bool ValidateBetTx(struct CCcontract_info *cp, Eval *eval, const CTransac // check payment cc config: if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0 ) - GetKomodoEarlytxidScriptPub(); + GetHushEarlytxidScriptPub(); if (bettx.vout.size() < 6 || bettx.vout.size() > 7) return eval->Invalid("incorrect vout number for bet tx"); @@ -298,7 +298,7 @@ static bool ValidateAddFundingTx(struct CCcontract_info *cp, Eval *eval, const C // check payment cc config: if (ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0) - GetKomodoEarlytxidScriptPub(); + GetHushEarlytxidScriptPub(); if (addfundingtx.vout.size() < 4 || addfundingtx.vout.size() > 5) return eval->Invalid("incorrect vout number for add funding tx"); @@ -1510,7 +1510,7 @@ UniValue PricesBet(int64_t txfee, int64_t amount, int16_t leverage, std::vector< // Lock here, as in validation we cannot call lock in the function itself. // may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here. LOCK(cs_main); - GetKomodoEarlytxidScriptPub(); + GetHushEarlytxidScriptPub(); } mtx.vout.push_back(CTxOut(amount-betamount, HUSH_EARLYTXID_SCRIPTPUB)); //test: mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); // vout4 test revshare fee @@ -1581,7 +1581,7 @@ UniValue PricesAddFunding(int64_t txfee, uint256 bettxid, int64_t amount) // Lock here, as in validation we cannot call lock in the function itself. // may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here. LOCK(cs_main); - GetKomodoEarlytxidScriptPub(); + GetHushEarlytxidScriptPub(); } mtx.vout.push_back(CTxOut(amount - betamount, HUSH_EARLYTXID_SCRIPTPUB)); // test: mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); //vout2 test revshare fee diff --git a/src/hush_bitcoind.h b/src/hush_bitcoind.h index fc0075d3a..375942951 100644 --- a/src/hush_bitcoind.h +++ b/src/hush_bitcoind.h @@ -1803,7 +1803,7 @@ bool komodo_appendACscriptpub() return false; } -void GetKomodoEarlytxidScriptPub() +void GetHushEarlytxidScriptPub() { if ( HUSH_EARLYTXID == zeroid ) { diff --git a/src/hush_defs.h b/src/hush_defs.h index 7ad109699..3c5191ea8 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -481,7 +481,7 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = #define HUSH_MAXNVALUE (((uint64_t)1 << 63) - 1) #define KOMODO_BIT63SET(x) ((x) & ((uint64_t)1 << 63)) -#define KOMODO_VALUETOOBIG(x) ((x) > (uint64_t)10000000001*COIN) +#define HUSH_VALUETOOBIG(x) ((x) > (uint64_t)10000000001*COIN) //#ifndef TESTMODE #define PRICES_DAYWINDOW ((3600*24/ASSETCHAINS_BLOCKTIME) + 1) diff --git a/src/hush_events.h b/src/hush_events.h index 8ecbf0a64..31655109a 100644 --- a/src/hush_events.h +++ b/src/hush_events.h @@ -33,8 +33,8 @@ struct hush_event *hush_eventadd(struct hush_state *sp,int32_t height,char *symb strcpy(ep->symbol,symbol); if ( datalen != 0 ) memcpy(ep->space,data,datalen); - sp->Hush_events = (struct hush_event **)realloc(sp->Hush_events,(1 + sp->Komodo_numevents) * sizeof(*sp->Hush_events)); - sp->Hush_events[sp->Komodo_numevents++] = ep; + sp->Hush_events = (struct hush_event **)realloc(sp->Hush_events,(1 + sp->Hush_numeventss) * sizeof(*sp->Hush_events)); + sp->Hush_events[sp->Hush_numeventss++] = ep; portable_mutex_unlock(&komodo_mutex); } return(ep); @@ -141,15 +141,15 @@ void hush_event_rewind(struct hush_state *sp,char *symbol,int32_t height) KOMODO_LASTMINED = prevKOMODO_LASTMINED; prevKOMODO_LASTMINED = 0; } - while ( sp->Hush_events != 0 && sp->Komodo_numevents > 0 ) + while ( sp->Hush_events != 0 && sp->Hush_numeventss > 0 ) { - if ( (ep= sp->Hush_events[sp->Komodo_numevents-1]) != 0 ) + if ( (ep= sp->Hush_events[sp->Hush_numeventss-1]) != 0 ) { if ( ep->height < height ) break; //printf("[%s] undo %s event.%c ht.%d for rewind.%d\n",SMART_CHAIN_SYMBOL,symbol,ep->type,ep->height,height); hush_event_undo(sp,ep); - sp->Komodo_numevents--; + sp->Hush_numeventss--; } } } diff --git a/src/hush_globals.h b/src/hush_globals.h index 4377c9ac4..c4f95ca68 100644 --- a/src/hush_globals.h +++ b/src/hush_globals.h @@ -40,7 +40,7 @@ pthread_mutex_t komodo_mutex,staked_mutex; struct pax_transaction *PAX; int32_t NUM_PRICES; uint32_t *PVALS; struct knotaries_entry *Pubkeys; -struct hush_state KOMODO_STATES[34]; +struct hush_state HUSH_STATES[34]; #define _COINBASE_MATURITY 100 int COINBASE_MATURITY = _COINBASE_MATURITY;//100; @@ -48,7 +48,7 @@ unsigned int WITNESS_CACHE_SIZE = _COINBASE_MATURITY+10; uint256 HUSH_EARLYTXID; int32_t HUSH_MININGTHREADS = -1,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,HUSH_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,HUSH_EXTERNAL_NOTARIES,HUSH_PASSPORT_INITDONE,KOMODO_PAX,HUSH_EXCHANGEWALLET,HUSH_REWIND,HUSH_CONNECTING = -1,KOMODO_DEALERNODE,HUSH_EXTRASATOSHI,ASSETCHAINS_FOUNDERS,ASSETCHAINS_CBMATURITY,HUSH_NSPV; -int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,HUSH_CCACTIVATE,JUMBLR_PAUSE = 1; +int32_t HUSH_INSYNC,KOMODO_LASTMINED,prevKOMODO_LASTMINED,HUSH_CCACTIVATE; std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES,ASSETCHAINS_OVERRIDE_PUBKEY,DONATION_PUBKEY,ASSETCHAINS_SCRIPTPUB,NOTARY_ADDRESS,ASSETCHAINS_SELFIMPORT,ASSETCHAINS_CCLIB; uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEYHASH[20],ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE,ASSETCHAINS_TXPOW,ASSETCHAINS_MARMARA; int8_t ASSETCHAINS_ADAPTIVEPOW; diff --git a/src/hush_structs.h b/src/hush_structs.h index 866b960f2..64a7689f3 100644 --- a/src/hush_structs.h +++ b/src/hush_structs.h @@ -122,7 +122,7 @@ struct hush_state uint32_t SAVEDTIMESTAMP; uint64_t deposited,issued,withdrawn,approved,redeemed,shorted; struct notarized_checkpoint *NPOINTS; int32_t NUM_NPOINTS,last_NPOINTSi; - struct hush_event **Hush_events; int32_t Komodo_numevents; + struct hush_event **Hush_events; int32_t Hush_numeventss; uint32_t RTbufs[64][3]; uint64_t RTmask; }; diff --git a/src/hush_utils.h b/src/hush_utils.h index 39a8e6a88..edc55a47c 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -2467,10 +2467,10 @@ struct hush_state *hush_stateptrget(char *base) { int32_t baseid; if ( base == 0 || base[0] == 0 || strcmp(base,(char *)"KYCSELLOUTS") == 0 ) - return(&KOMODO_STATES[33]); + return(&HUSH_STATES[33]); else if ( (baseid= komodo_baseid(base)) >= 0 ) - return(&KOMODO_STATES[baseid+1]); - else return(&KOMODO_STATES[0]); + return(&HUSH_STATES[baseid+1]); + else return(&HUSH_STATES[0]); } struct hush_state *hush_stateptr(char *symbol,char *dest) diff --git a/src/main.cpp b/src/main.cpp index 085cec395..bb480990e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1817,7 +1817,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa CAmount nValueOut = tx.GetValueOut(); CAmount nFees = nValueIn-nValueOut; double dPriority = view.GetPriority(tx, chainActive.Height()); - if ( nValueOut > 777777*COIN && KOMODO_VALUETOOBIG(nValueOut - 777777*COIN) != 0 ) // some room for blockreward and txfees + if ( nValueOut > 777777*COIN && HUSH_VALUETOOBIG(nValueOut - 777777*COIN) != 0 ) // some room for blockreward and txfees return state.DoS(100, error("AcceptToMemoryPool: GetValueOut too big"),REJECT_INVALID,"tx valueout is too big"); // Keep track of transactions that spend a coinbase, which we re-scan @@ -3380,14 +3380,14 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin txdata.emplace_back(tx); valueout = tx.GetValueOut(); - if ( KOMODO_VALUETOOBIG(valueout) != 0 ) + if ( HUSH_VALUETOOBIG(valueout) != 0 ) { fprintf(stderr,"valueout %.8f too big\n",(double)valueout/COIN); return state.DoS(100, error("ConnectBlock(): GetValueOut too big"),REJECT_INVALID,"tx valueout is too big"); } //prevsum = voutsum; //voutsum += valueout; - /*if ( KOMODO_VALUETOOBIG(voutsum) != 0 ) + /*if ( HUSH_VALUETOOBIG(voutsum) != 0 ) { fprintf(stderr,"voutsum %.8f too big\n",(double)voutsum/COIN); return state.DoS(100, error("ConnectBlock(): voutsum too big"),REJECT_INVALID,"tx valueout is too big"); diff --git a/src/miner.cpp b/src/miner.cpp index 658db53ad..80ec249d8 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -174,7 +174,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 //fprintf(stderr,"create new block\n"); // Create new block if ( gpucount < 0 ) - gpucount = KOMODO_MAXGPUCOUNT; + gpucount = HUSH_MAXGPUCOUNT; std::unique_ptr pblocktemplate(new CBlockTemplate()); if(!pblocktemplate.get()) { @@ -286,7 +286,7 @@ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& _scriptPubKeyIn, int32 continue; } txvalue = tx.GetValueOut(); - if ( KOMODO_VALUETOOBIG(txvalue) != 0 ) + if ( HUSH_VALUETOOBIG(txvalue) != 0 ) continue; COrphan* porphan = NULL; @@ -1072,7 +1072,7 @@ void static BitcoinMiner() unsigned int n = chainparams.EquihashN(); unsigned int k = chainparams.EquihashK(); - uint8_t *script; uint64_t total; int32_t i,j,gpucount=KOMODO_MAXGPUCOUNT,notaryid = -1; + uint8_t *script; uint64_t total; int32_t i,j,gpucount=HUSH_MAXGPUCOUNT,notaryid = -1; while ( (ASSETCHAIN_INIT == 0 || HUSH_INITDONE == 0) ) { sleep(1); diff --git a/src/miner.h b/src/miner.h index 6e7b587b7..5fc515dab 100644 --- a/src/miner.h +++ b/src/miner.h @@ -39,7 +39,7 @@ struct CBlockTemplate std::vector vTxFees; std::vector vTxSigOps; }; -#define KOMODO_MAXGPUCOUNT 65 +#define HUSH_MAXGPUCOUNT 65 /** Generate a new block, without valid proof-of-work */ CBlockTemplate* CreateNewBlock(CPubKey _pk,const CScript& scriptPubKeyIn, int32_t gpucount, bool isStake = false); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 5e9120491..d7417f960 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -255,7 +255,7 @@ UniValue generate(const UniValue& params, bool fHelp, const CPubKey& mypk) lastTime = GetTime(); #ifdef ENABLE_WALLET - std::unique_ptr pblocktemplate(CreateNewBlockWithKey(reservekey,nHeight,KOMODO_MAXGPUCOUNT)); + std::unique_ptr pblocktemplate(CreateNewBlockWithKey(reservekey,nHeight,HUSH_MAXGPUCOUNT)); #else std::unique_ptr pblocktemplate(CreateNewBlockWithKey()); #endif @@ -753,7 +753,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp, const CPubKey& myp #ifdef ENABLE_WALLET CReserveKey reservekey(pwalletMain); LEAVE_CRITICAL_SECTION(cs_main); - pblocktemplate = CreateNewBlockWithKey(reservekey,pindexPrevNew->GetHeight()+1,KOMODO_MAXGPUCOUNT,false); + pblocktemplate = CreateNewBlockWithKey(reservekey,pindexPrevNew->GetHeight()+1,HUSH_MAXGPUCOUNT,false); #else pblocktemplate = CreateNewBlockWithKey(); #endif diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 33cafad4d..0d6ad53e1 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -62,7 +62,7 @@ int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *tx bool komodo_txnotarizedconfirmed(uint256 txid); uint32_t hush_chainactive_timestamp(); int32_t hush_whoami(char *pubkeystr,int32_t height,uint32_t timestamp); -extern int32_t KOMODO_LASTMINED,JUMBLR_PAUSE,HUSH_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; +extern int32_t KOMODO_LASTMINED,HUSH_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; uint32_t komodo_segid32(char *coinaddr); int64_t hush_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height); From 60108cf1050c8b3beb34e948d45d7ed4066d7bfd Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 22:42:03 -0500 Subject: [PATCH 252/277] Fix ALIGN16 build warning and remove more joinsplit dingleberriez --- doc/security-warnings.md | 4 ++-- src/main.cpp | 2 ++ .../asyncrpcoperation_shieldcoinbase.cpp | 4 ---- src/wallet/asyncrpcoperation_shieldcoinbase.h | 21 ------------------- 4 files changed, 4 insertions(+), 27 deletions(-) diff --git a/doc/security-warnings.md b/doc/security-warnings.md index bedaf4474..4baf1fad6 100644 --- a/doc/security-warnings.md +++ b/doc/security-warnings.md @@ -28,7 +28,7 @@ Wallet encryption is disabled, for several reasons: deducting the spent amount. - While encrypted wallets prevent spending of funds, they do not maintain the - shielding properties of JoinSplits (due to the need to detect spends). That + shielding properties of ShieldedOutputs (due to the need to detect spends). That is, someone with access to an encrypted wallet.dat has full visibility of your entire transaction graph (other than newly-detected spends, which suffer from the earlier issue). @@ -51,7 +51,7 @@ are physically near the hardware, that your `hushd` process is running on will be able to: - Determine the values of your secret spending keys, as well as which notes you - are spending, by observing cache side-channels as you perform a JoinSplit + are spending, by observing cache side-channels as you perform a SheildedSpend operation. This is due to probable side-channel leakage in C++. - Determine which notes you own by observing cache side-channel information diff --git a/src/main.cpp b/src/main.cpp index bb480990e..60fefb404 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -55,6 +55,8 @@ #include #include #include +// boost and wolfSSL fight over defining this macro +#undef ALIGN16 #include #include #include diff --git a/src/wallet/asyncrpcoperation_shieldcoinbase.cpp b/src/wallet/asyncrpcoperation_shieldcoinbase.cpp index 9a56db96e..1261d2ec7 100644 --- a/src/wallet/asyncrpcoperation_shieldcoinbase.cpp +++ b/src/wallet/asyncrpcoperation_shieldcoinbase.cpp @@ -2,7 +2,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -17,7 +16,6 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #include "asyncrpcqueue.h" #include "amount.h" #include "consensus/upgrades.h" @@ -39,13 +37,11 @@ #include "zcash/IncrementalMerkleTree.hpp" #include "sodium.h" #include "miner.h" - #include #include #include #include #include - #include "asyncrpcoperation_shieldcoinbase.h" using namespace libzcash; diff --git a/src/wallet/asyncrpcoperation_shieldcoinbase.h b/src/wallet/asyncrpcoperation_shieldcoinbase.h index 3e91b73b7..83b24694b 100644 --- a/src/wallet/asyncrpcoperation_shieldcoinbase.h +++ b/src/wallet/asyncrpcoperation_shieldcoinbase.h @@ -2,7 +2,6 @@ // Copyright (c) 2016-2020 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. * * * @@ -17,10 +16,8 @@ * Removal or modification of this copyright notice is prohibited. * * * ******************************************************************************/ - #ifndef ASYNCRPCOPERATION_SHIELDCOINBASE_H #define ASYNCRPCOPERATION_SHIELDCOINBASE_H - #include "asyncrpcoperation.h" #include "amount.h" #include "primitives/transaction.h" @@ -28,10 +25,8 @@ #include "zcash/JoinSplit.hpp" #include "zcash/Address.hpp" #include "wallet.h" - #include #include - #include // Default transaction fee if caller does not specify one. @@ -46,15 +41,6 @@ struct ShieldCoinbaseUTXO { CAmount amount; }; -// Package of info which is passed to perform_joinsplit methods. -struct ShieldCoinbaseJSInfo -{ - std::vector vjsin; - std::vector vjsout; - CAmount vpub_old = 0; - CAmount vpub_new = 0; -}; - class AsyncRPCOperation_shieldcoinbase : public AsyncRPCOperation { public: AsyncRPCOperation_shieldcoinbase( @@ -98,9 +84,6 @@ private: bool main_impl(); - // JoinSplit without any input notes to spend - UniValue perform_joinsplit(ShieldCoinbaseJSInfo &); - void sign_send_raw_transaction(UniValue obj); // throws exception if there was an error void lock_utxos(); @@ -143,10 +126,6 @@ public: return delegate->main_impl(); } - UniValue perform_joinsplit(ShieldCoinbaseJSInfo &info) { - return delegate->perform_joinsplit(info); - } - void sign_send_raw_transaction(UniValue obj) { delegate->sign_send_raw_transaction(obj); } From 0a99c801506186a997710978844d9e5f94ff1635 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 22:51:57 -0500 Subject: [PATCH 253/277] Optimize mempool by removing unnecessary sprout checks --- src/txmempool.cpp | 67 ++++------------------------------------------- 1 file changed, 5 insertions(+), 62 deletions(-) diff --git a/src/txmempool.cpp b/src/txmempool.cpp index e3c68dd42..0cc945b0c 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -127,11 +127,6 @@ bool CTxMemPool::addUnchecked(const uint256& hash, const CTxMemPoolEntry &entry, mapNextTx[tx.vin[i].prevout] = CInPoint(&tx, i); } } - BOOST_FOREACH(const JSDescription &joinsplit, tx.vjoinsplit) { - BOOST_FOREACH(const uint256 &nf, joinsplit.nullifiers) { - mapSproutNullifiers[nf] = &tx; - } - } for (const SpendDescription &spendDescription : tx.vShieldedSpend) { mapSaplingNullifiers[spendDescription.nullifier] = &tx; } @@ -332,9 +327,8 @@ bool CTxMemPool::removeSpentIndex(const uint256 txhash) return true; } -void CTxMemPool::remove(const CTransaction &origTx, std::list& removed, bool fRecursive) -{ - // Remove transaction from memory pool +// Remove transaction from memory pool +void CTxMemPool::remove(const CTransaction &origTx, std::list& removed, bool fRecursive) { { LOCK(cs); std::deque txToRemove; @@ -369,11 +363,8 @@ void CTxMemPool::remove(const CTransaction &origTx, std::list& rem mapRecentlyAddedTx.erase(hash); BOOST_FOREACH(const CTxIn& txin, tx.vin) mapNextTx.erase(txin.prevout); - BOOST_FOREACH(const JSDescription& joinsplit, tx.vjoinsplit) { - BOOST_FOREACH(const uint256& nf, joinsplit.nullifiers) { - mapSproutNullifiers.erase(nf); - } - } + + // remove each Sapling nullifier associated with this shielded spend for (const SpendDescription &spendDescription : tx.vShieldedSpend) { mapSaplingNullifiers.erase(spendDescription.nullifier); } @@ -440,14 +431,6 @@ void CTxMemPool::removeWithAnchor(const uint256 &invalidRoot, ShieldedType type) for (indexed_transaction_set::const_iterator it = mapTx.begin(); it != mapTx.end(); it++) { const CTransaction& tx = it->GetTx(); switch (type) { - case SPROUT: - BOOST_FOREACH(const JSDescription& joinsplit, tx.vjoinsplit) { - if (joinsplit.anchor == invalidRoot) { - transactionsToRemove.push_back(tx); - break; - } - } - break; case SAPLING: BOOST_FOREACH(const SpendDescription& spendDescription, tx.vShieldedSpend) { if (spendDescription.anchor == invalidRoot) { @@ -484,17 +467,7 @@ void CTxMemPool::removeConflicts(const CTransaction &tx, std::list } } - BOOST_FOREACH(const JSDescription &joinsplit, tx.vjoinsplit) { - BOOST_FOREACH(const uint256 &nf, joinsplit.nullifiers) { - std::map::iterator it = mapSproutNullifiers.find(nf); - if (it != mapSproutNullifiers.end()) { - const CTransaction &txConflict = *it->second; - if (txConflict != tx) { - remove(txConflict, removed, true); - } - } - } - } + // remove conflicting Sapling z2z tx's for (const SpendDescription &spendDescription : tx.vShieldedSpend) { std::map::iterator it = mapSaplingNullifiers.find(spendDescription.nullifier); if (it != mapSaplingNullifiers.end()) { @@ -639,30 +612,6 @@ void CTxMemPool::check(const CCoinsViewCache *pcoins) const i++; } - - /* - boost::unordered_map intermediates; - BOOST_FOREACH(const JSDescription &joinsplit, tx.vjoinsplit) { - BOOST_FOREACH(const uint256 &nf, joinsplit.nullifiers) { - assert(!pcoins->GetNullifier(nf, SPROUT)); - } - - SproutMerkleTree tree; - auto it = intermediates.find(joinsplit.anchor); - if (it != intermediates.end()) { - tree = it->second; - } else { - assert(pcoins->GetSproutAnchorAt(joinsplit.anchor, tree)); - } - - BOOST_FOREACH(const uint256& commitment, joinsplit.commitments) - { - tree.append(commitment); - } - - intermediates.insert(std::make_pair(tree.root(), tree)); - } - */ for (const SpendDescription &spendDescription : tx.vShieldedSpend) { SaplingMerkleTree tree; @@ -706,7 +655,6 @@ void CTxMemPool::check(const CCoinsViewCache *pcoins) const assert(it->first == it->second.ptx->vin[it->second.n].prevout); } - checkNullifiers(SPROUT); checkNullifiers(SAPLING); assert(totalTxSize == checkTotal); @@ -717,9 +665,6 @@ void CTxMemPool::checkNullifiers(ShieldedType type) const { const std::map* mapToUse; switch (type) { - case SPROUT: - mapToUse = &mapSproutNullifiers; - break; case SAPLING: mapToUse = &mapSaplingNullifiers; break; @@ -839,8 +784,6 @@ bool CTxMemPool::HasNoInputsOf(const CTransaction &tx) const bool CTxMemPool::nullifierExists(const uint256& nullifier, ShieldedType type) const { switch (type) { - case SPROUT: - return mapSproutNullifiers.count(nullifier); case SAPLING: return mapSaplingNullifiers.count(nullifier); default: From 11892087794963f33f9ebc237a6e508667c8322c Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sat, 23 Jan 2021 22:53:32 -0500 Subject: [PATCH 254/277] Remove some sprout tests --- src/test/coins_tests.cpp | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/test/coins_tests.cpp b/src/test/coins_tests.cpp index bb7d84c54..bafb87290 100644 --- a/src/test/coins_tests.cpp +++ b/src/test/coins_tests.cpp @@ -60,9 +60,6 @@ public: { const std::map* mapToUse; switch (type) { - case SPROUT: - mapToUse = &mapSproutNullifiers_; - break; case SAPLING: mapToUse = &mapSaplingNullifiers_; break; @@ -81,9 +78,6 @@ public: uint256 GetBestAnchor(ShieldedType type) const { switch (type) { - case SPROUT: - return hashBestSproutAnchor_; - break; case SAPLING: return hashBestSaplingAnchor_; break; @@ -246,9 +240,7 @@ BOOST_FIXTURE_TEST_SUITE(coins_tests, BasicTestingSetup) void checkNullifierCache(const CCoinsViewCacheTest &cache, const TxWithNullifiers &txWithNullifiers, bool shouldBeInCache) { // Make sure the nullifiers have not gotten mixed up BOOST_CHECK(!cache.GetNullifier(txWithNullifiers.sproutNullifier, SAPLING)); - BOOST_CHECK(!cache.GetNullifier(txWithNullifiers.saplingNullifier, SPROUT)); // Check if the nullifiers either are or are not in the cache - bool containsSproutNullifier = cache.GetNullifier(txWithNullifiers.sproutNullifier, SPROUT); bool containsSaplingNullifier = cache.GetNullifier(txWithNullifiers.saplingNullifier, SAPLING); BOOST_CHECK(containsSproutNullifier == shouldBeInCache); BOOST_CHECK(containsSaplingNullifier == shouldBeInCache); @@ -417,9 +409,6 @@ template void anchorPopRegressionTestImpl(ShieldedType type) BOOST_AUTO_TEST_CASE(anchor_pop_regression_test) { - BOOST_TEST_CONTEXT("Sprout") { - anchorPopRegressionTestImpl(SPROUT); - } BOOST_TEST_CONTEXT("Sapling") { anchorPopRegressionTestImpl(SAPLING); } @@ -509,9 +498,6 @@ template void anchorRegressionTestImpl(ShieldedType type) BOOST_AUTO_TEST_CASE(anchor_regression_test) { - BOOST_TEST_CONTEXT("Sprout") { - anchorRegressionTestImpl(SPROUT); - } BOOST_TEST_CONTEXT("Sapling") { anchorRegressionTestImpl(SAPLING); } @@ -572,9 +558,6 @@ template void anchorsFlushImpl(ShieldedType type) BOOST_AUTO_TEST_CASE(anchors_flush_test) { - BOOST_TEST_CONTEXT("Sprout") { - anchorsFlushImpl(SPROUT); - } BOOST_TEST_CONTEXT("Sapling") { anchorsFlushImpl(SAPLING); } @@ -730,9 +713,6 @@ template void anchorsTestImpl(ShieldedType type) BOOST_AUTO_TEST_CASE(anchors_test) { - BOOST_TEST_CONTEXT("Sprout") { - anchorsTestImpl(SPROUT); - } BOOST_TEST_CONTEXT("Sapling") { anchorsTestImpl(SAPLING); } From 5554b760f42b747d93e5c2017e82fb5f489be310 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 04:47:10 -0500 Subject: [PATCH 255/277] Delete the kmd bash completion scripts which I originally wrote, lol --- contrib/komodo-cli.bash-completion | 160 ----------------------------- contrib/komodo-tx.bash-completion | 57 ---------- contrib/komodod.bash-completion | 57 ---------- 3 files changed, 274 deletions(-) delete mode 100644 contrib/komodo-cli.bash-completion delete mode 100644 contrib/komodo-tx.bash-completion delete mode 100644 contrib/komodod.bash-completion diff --git a/contrib/komodo-cli.bash-completion b/contrib/komodo-cli.bash-completion deleted file mode 100644 index f190872e2..000000000 --- a/contrib/komodo-cli.bash-completion +++ /dev/null @@ -1,160 +0,0 @@ -# bash programmable completion for komodo-cli(1) -# Copyright (c) 2012-2016 The Bitcoin Core developers -# Distributed under the GPLv3 software license, see the accompanying -# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - -# call $komodo-cli for RPC -_komodo_rpc() { - # determine already specified args necessary for RPC - local rpcargs=() - for i in ${COMP_LINE}; do - case "$i" in - -conf=*|-datadir=*|-regtest|-rpc*|-testnet) - rpcargs=( "${rpcargs[@]}" "$i" ) - ;; - esac - done - $komodo_cli "${rpcargs[@]}" "$@" -} - -# Add wallet accounts to COMPREPLY -_komodo_accounts() { - local accounts - # Accounts are deprecated in komodo - #accounts=$(_komodo_rpc listaccounts | awk -F '"' '{ print $2 }') - accounts="\\\"\\\"" - COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "$accounts" -- "$cur" ) ) -} - -_komodo_cli() { - local cur prev words=() cword - local komodo_cli - - # save and use original argument to invoke komodo-cli for -help, help and RPC - # as komodo-cli might not be in $PATH - komodo_cli="$1" - - COMPREPLY=() - _get_comp_words_by_ref -n = cur prev words cword - - if ((cword > 5)); then - case ${words[cword-5]} in - sendtoaddress) - COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) - return 0 - ;; - esac - fi - - if ((cword > 4)); then - case ${words[cword-4]} in - importaddress|listtransactions|setban) - COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) - return 0 - ;; - signrawtransaction) - COMPREPLY=( $( compgen -W "ALL NONE SINGLE ALL|ANYONECANPAY NONE|ANYONECANPAY SINGLE|ANYONECANPAY" -- "$cur" ) ) - return 0 - ;; - esac - fi - - if ((cword > 3)); then - case ${words[cword-3]} in - addmultisigaddress) - _komodo_accounts - return 0 - ;; - getbalance|gettxout|importaddress|importpubkey|importprivkey|listreceivedbyaccount|listreceivedbyaddress|listsinceblock) - COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) - return 0 - ;; - esac - fi - - if ((cword > 2)); then - case ${words[cword-2]} in - addnode) - COMPREPLY=( $( compgen -W "add remove onetry" -- "$cur" ) ) - return 0 - ;; - setban) - COMPREPLY=( $( compgen -W "add remove" -- "$cur" ) ) - return 0 - ;; - fundrawtransaction|getblock|getblockheader|getmempoolancestors|getmempooldescendants|getrawtransaction|gettransaction|listaccounts|listreceivedbyaccount|listreceivedbyaddress|sendrawtransaction) - COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) - return 0 - ;; - z_importkey|z_importviewingkey) - COMPREPLY=( $( compgen -W "yes no whenkeyisnew" -- "$cur" ) ) - return 0 - ;; - move|setaccount) - _komodo_accounts - return 0 - ;; - esac - fi - - case "$prev" in - backupwallet|dumpwallet|importwallet|z_exportwallet|z_importwallet) - _filedir - return 0 - ;; - getaddednodeinfo|getrawmempool|lockunspent|setgenerate) - COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) - return 0 - ;; - getaccountaddress|getaddressesbyaccount|getbalance|getnewaddress|getreceivedbyaccount|listtransactions|move|sendfrom|sendmany) - _komodo_accounts - return 0 - ;; - esac - - case "$cur" in - -conf=*) - cur="${cur#*=}" - _filedir - return 0 - ;; - -datadir=*) - cur="${cur#*=}" - _filedir -d - return 0 - ;; - -*=*) # prevent nonsense completions - return 0 - ;; - *) - local helpopts commands - - # only parse -help if senseful - if [[ -z "$cur" || "$cur" =~ ^- ]]; then - helpopts=$($komodo_cli -help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' ) - fi - - # only parse help if senseful - if [[ -z "$cur" || "$cur" =~ ^[a-z] ]]; then - commands=$(_komodo_rpc help 2>/dev/null | awk '$1 ~ /^[a-z]/ { print $1; }') - fi - - COMPREPLY=( $( compgen -W "$helpopts $commands" -- "$cur" ) ) - - # Prevent space if an argument is desired - if [[ $COMPREPLY == *= ]]; then - compopt -o nospace - fi - return 0 - ;; - esac -} && -complete -F _komodo_cli komodo-cli - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/komodo-tx.bash-completion b/contrib/komodo-tx.bash-completion deleted file mode 100644 index 897a63206..000000000 --- a/contrib/komodo-tx.bash-completion +++ /dev/null @@ -1,57 +0,0 @@ -# bash programmable completion for komodo-tx(1) -# Copyright (c) 2016 The Bitcoin Core developers -# Distributed under the GPLv3 software license, see the accompanying -# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - -_komodo_tx() { - local cur prev words=() cword - local komodo_tx - - # save and use original argument to invoke komodo-tx for -help - # it might not be in $PATH - komodo_tx="$1" - - COMPREPLY=() - _get_comp_words_by_ref -n =: cur prev words cword - - case "$cur" in - load=*:*) - cur="${cur#load=*:}" - _filedir - return 0 - ;; - *=*) # prevent attempts to complete other arguments - return 0 - ;; - esac - - if [[ "$cword" == 1 || ( "$prev" != "-create" && "$prev" == -* ) ]]; then - # only options (or an uncompletable hex-string) allowed - # parse komodo-tx -help for options - local helpopts - helpopts=$($komodo_tx -help | sed -e '/^ -/ p' -e d ) - COMPREPLY=( $( compgen -W "$helpopts" -- "$cur" ) ) - else - # only commands are allowed - # parse -help for commands - local helpcmds - helpcmds=$($komodo_tx -help | sed -e '1,/Commands:/d' -e 's/=.*/=/' -e '/^ [a-z]/ p' -e d ) - COMPREPLY=( $( compgen -W "$helpcmds" -- "$cur" ) ) - fi - - # Prevent space if an argument is desired - if [[ $COMPREPLY == *= ]]; then - compopt -o nospace - fi - - return 0 -} && -complete -F _komodo_tx komodo-tx - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/komodod.bash-completion b/contrib/komodod.bash-completion deleted file mode 100644 index 85c6b7e39..000000000 --- a/contrib/komodod.bash-completion +++ /dev/null @@ -1,57 +0,0 @@ -# bash programmable completion for komodod(1) -# Copyright (c) 2012-2017 The Bitcoin Core developers -# Copyright (c) 2016-2017 The komodo developers -# Distributed under the GPLv3 software license, see the accompanying -# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html - -_komodod() { - local cur prev words=() cword - local komodod - - # save and use original argument to invoke komodod for -help - # it might not be in $PATH - komodod="$1" - - COMPREPLY=() - _get_comp_words_by_ref -n = cur prev words cword - - case "$cur" in - -conf=*|-pid=*|-loadblock=*|-rpccookiefile=*|-wallet=*) - cur="${cur#*=}" - _filedir - return 0 - ;; - -datadir=*|-exportdir=*) - cur="${cur#*=}" - _filedir -d - return 0 - ;; - -*=*) # prevent nonsense completions - return 0 - ;; - *) - - # only parse -help if senseful - if [[ -z "$cur" || "$cur" =~ ^- ]]; then - local helpopts - helpopts=$($komodod -help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' ) - COMPREPLY=( $( compgen -W "$helpopts" -- "$cur" ) ) - fi - - # Prevent space if an argument is desired - if [[ $COMPREPLY == *= ]]; then - compopt -o nospace - fi - return 0 - ;; - esac -} && -complete -F _komodod komodod - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh From cf2ce8cde025b069c41e8403768bd835551d0ce0 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 05:08:01 -0500 Subject: [PATCH 256/277] Checkpointz --- src/chainparams.cpp | 51 ++- src/komodo_port.c | 901 -------------------------------------------- 2 files changed, 47 insertions(+), 905 deletions(-) delete mode 100644 src/komodo_port.c diff --git a/src/chainparams.cpp b/src/chainparams.cpp index cd95d15cb..b956ec17f 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -647,10 +647,53 @@ void *chainparams_commandline() { (358250, uint256S("0x00000008c3da7ef9b47fbbc3840721bb29728a266e76e3997958f3ed702def9b")) (358500, uint256S("0x00000000feb463a7f39261cb2a011f4f0907641c8475c50963a69ec9924b44f4")) (358750, uint256S("0x00000014d8187303fa9d01e664d8afb4b9dc4ea3fb9b726393c78d5d43d6bfcb")) - (359000, uint256S("0x0000000d1ab129167aadf79236d085d64912254559e3b349cddbd9d8e2cc9699")), - (int64_t) 1608068955, // time of last checkpointed block - (int64_t) 654996, // total txs - (double) 584 // txs in the last day before block 357576 + (359000, uint256S("0x0000000d1ab129167aadf79236d085d64912254559e3b349cddbd9d8e2cc9699")) + (360000, uint256S("0x00000007f1fbbe7b1e4061d92c3d4823bf82fe1340e7c833ca18c385d08759b9")) + (361000, uint256S("0x00000009b104e5910e4cd859de917fbc5824d77cda00a8f369afdfcb654bc6ac")) + (362000, uint256S("0x00000007307665b04c003201896cb81ee03a987e9bf5f1ec1caf1d1d2ce0877f")) + (363000, uint256S("0x0000000ad4a8891fd8b2566190b6620fb70249ea5dd4d8d72a10c819fb258968")) + (364000, uint256S("0x00000006da9c8a55b102b0a83dbae0e638fab460e9a4a97a67ca16ed7680da6e")) + (365000, uint256S("0x000000118670f8e8f170505c8104650af36ecbb23d19f4a7fc32c4d575934f17")) + (366000, uint256S("0x000000040e90d9092d349ce587c8754e6388737f40db566d9f2075eb9965f534")) + (367000, uint256S("0x00000008c5ca790b031aaf386041aa51948c8b9ef8817b1e4e650bd59d52a8ff")) + (368000, uint256S("0x00000011af9b5aacf71f6e1327a3b90c80b6fb30bf8a028c7f1f10d0e10afaab")) + (369000, uint256S("0x00000008b7e4fec7bc9b367a33dbc80d5614df739519484f39fd9b87bc416241")) + (370000, uint256S("0x0000000a06b9be5e3e785e56246388c8c0f391ee6982d365a626297059eca778")) + (371000, uint256S("0x000000074f03656add0838c5e1f0c2083e0adf7c098029427b80d594f6385d07")) + (372000, uint256S("0x00000003622ee0f44cf93129fcd8754ef503e0301605096776e7cd8746df7a05")) + (373000, uint256S("0x000000016118cb7aac144c8793d5a8c65df545555af3f853e8324b9e225601b2")) + (374000, uint256S("0x00000008dbef76003738a42febb77ca76d72a3315595cf97be686df8fbf93b15")) + (375000, uint256S("0x000000094b84c9ed3eeeceda2840547916793452639d40234b6c8aeb1d4faf3d")) + (376000, uint256S("0x0000000d4e4fb6f7677e71dd7f978043e5db359e008d4c87581735ae537e6f68")) + (377000, uint256S("0x00000002dc382acb83c6da3bc2d5f70e5202a25117936cd451d71897da3e52a3")) + (378000, uint256S("0x0000001047390953f5175e4b159452a7647ccb064997bf296e4577fac8fd44eb")) + (379000, uint256S("0x00000018708d63c2f52a97a579b079a54781583c8f736d07cb6ba47db8e67bad")) + (380000, uint256S("0x00000028e72f85dfcfd618bf2bd518b7325fa55e4c1fd677a165bd02e1552b8e")) + (381000, uint256S("0x0000001cfc4942f776071bcd6ef48ad683c17cef58d64c1a9467cac1caef2c24")) + (382000, uint256S("0x0000001af4337bac1fc8ab2d0ecc05d7d481b7319eac30c8863d983862afe32f")) + (383000, uint256S("0x00000011eb9b3489a3e6c2f8a486de851bfab897b1fbc0141a4e256ac8538015")) + (384000, uint256S("0x0000000963e41b5f9dfd1fec9567bbaa9507302f27fedbe17b6280ea7355bc82")) + (385000, uint256S("0x0000000c95a14770005748f0687448c76d0ff1b91b40626b4177d5340d226742")) + (386000, uint256S("0x000000066f6624e8f14e064726fe05a4dd4534409ce587a9d7df436203cda601")) + (387000, uint256S("0x000000203caf0d35efc4fef301ffe8cf8af5d2524208d7a2127192ebadd9963e")) + (388000, uint256S("0x00000015e49a4d84c5aaed6ba9c59b5dc4f1a8e33c1aad8cbe41bd67472914a6")) + (389000, uint256S("0x00000004470951a99fb556ab07ecb8524ce919435d89d2a8db5616db739a2858")) + (390000, uint256S("0x000000033d0c2ec3165c652756d63eabf60a036be6c5f80d0e5c9d8a24ddc168")) + (391000, uint256S("0x00000006a019c2e6519f93a5c00cb22c1e9e7ef6148241842a707a167c12f9ec")) + (392000, uint256S("0x000000121954ff00030e57b202505b9ed02f14008f9057704054e06fbdeb2c79")) + (393000, uint256S("0x00000008bc99e86d3a9176c251c05f1eb40418f45b6a66cca75db802b2502273")) + (394000, uint256S("0x000000062025be624a42799c0695dcd3b592a61782d66d5ba2f7bd7810ad6cdf")) + (395000, uint256S("0x0000001f0c7abbad99e9cf466c9a75c3ba257ab71148def483ae5a0b1624f081")) + (396000, uint256S("0x0000000789e9fa74b4d8a2b808da7a38b403cc0c4f92c473c5a1ab0ab9b36e1a")) + (397000, uint256S("0x00000016de2b464bc51780358f295da676e46510df4305bf932ff6817231ccc0")) + (398000, uint256S("0x000000146bd7a6a6798698c7239117fdfd8b5a819e37a7f9adfa79cbc9e17996")) + (399000, uint256S("0x0000000d6741914a85e696364cda252340747a3b47f955b99c29e8163192c4cb")) + (400000, uint256S("0x00000004956ccd26d7532b6bf229777675f326523b904f4e1f40b9535a124641")) + (401000, uint256S("0x0000000a974824aa14a61c3b442a15d6bdf0aaa75f5c280d94e43898ef143463")) + (402000, uint256S("0x0000000c071f67605a6764573fd6524fd90628f9ea339ff55c7a20567093251e")), + (int64_t) 1611465410, // time of last checkpointed block + (int64_t) 708317, // total txs + (double) 1540 // txs in the last day before block 402232 }; } else { checkpointData = //(Checkpoints::CCheckpointData) diff --git a/src/komodo_port.c b/src/komodo_port.c deleted file mode 100644 index 3881748b6..000000000 --- a/src/komodo_port.c +++ /dev/null @@ -1,901 +0,0 @@ -// Copyright (c) 2016-2020 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 -#include -#include -#include - -uint64_t ASSETCHAINS_COMMISSION; -uint32_t ASSETCHAINS_MAGIC = 2387029918; -uint8_t ASSETCHAINS_OVERRIDE_PUBKEY33[33]; - -struct sha256_vstate { uint64_t length; uint32_t state[8],curlen; uint8_t buf[64]; }; -struct rmd160_vstate { uint64_t length; uint8_t buf[64]; uint32_t curlen, state[5]; }; -union _bits256 { uint8_t bytes[32]; uint16_t ushorts[16]; uint32_t uints[8]; uint64_t ulongs[4]; uint64_t txid; }; -typedef union _bits256 bits256; - -// following is ported from libtom - -#define STORE32L(x, y) \ -{ (y)[3] = (uint8_t)(((x)>>24)&255); (y)[2] = (uint8_t)(((x)>>16)&255); \ -(y)[1] = (uint8_t)(((x)>>8)&255); (y)[0] = (uint8_t)((x)&255); } - -#define LOAD32L(x, y) \ -{ x = (uint32_t)(((uint64_t)((y)[3] & 255)<<24) | \ -((uint32_t)((y)[2] & 255)<<16) | \ -((uint32_t)((y)[1] & 255)<<8) | \ -((uint32_t)((y)[0] & 255))); } - -#define STORE64L(x, y) \ -{ (y)[7] = (uint8_t)(((x)>>56)&255); (y)[6] = (uint8_t)(((x)>>48)&255); \ -(y)[5] = (uint8_t)(((x)>>40)&255); (y)[4] = (uint8_t)(((x)>>32)&255); \ -(y)[3] = (uint8_t)(((x)>>24)&255); (y)[2] = (uint8_t)(((x)>>16)&255); \ -(y)[1] = (uint8_t)(((x)>>8)&255); (y)[0] = (uint8_t)((x)&255); } - -#define LOAD64L(x, y) \ -{ x = (((uint64_t)((y)[7] & 255))<<56)|(((uint64_t)((y)[6] & 255))<<48)| \ -(((uint64_t)((y)[5] & 255))<<40)|(((uint64_t)((y)[4] & 255))<<32)| \ -(((uint64_t)((y)[3] & 255))<<24)|(((uint64_t)((y)[2] & 255))<<16)| \ -(((uint64_t)((y)[1] & 255))<<8)|(((uint64_t)((y)[0] & 255))); } - -#define STORE32H(x, y) \ -{ (y)[0] = (uint8_t)(((x)>>24)&255); (y)[1] = (uint8_t)(((x)>>16)&255); \ -(y)[2] = (uint8_t)(((x)>>8)&255); (y)[3] = (uint8_t)((x)&255); } - -#define LOAD32H(x, y) \ -{ x = (uint32_t)(((uint64_t)((y)[0] & 255)<<24) | \ -((uint32_t)((y)[1] & 255)<<16) | \ -((uint32_t)((y)[2] & 255)<<8) | \ -((uint32_t)((y)[3] & 255))); } - -#define STORE64H(x, y) \ -{ (y)[0] = (uint8_t)(((x)>>56)&255); (y)[1] = (uint8_t)(((x)>>48)&255); \ -(y)[2] = (uint8_t)(((x)>>40)&255); (y)[3] = (uint8_t)(((x)>>32)&255); \ -(y)[4] = (uint8_t)(((x)>>24)&255); (y)[5] = (uint8_t)(((x)>>16)&255); \ -(y)[6] = (uint8_t)(((x)>>8)&255); (y)[7] = (uint8_t)((x)&255); } - -#define LOAD64H(x, y) \ -{ x = (((uint64_t)((y)[0] & 255))<<56)|(((uint64_t)((y)[1] & 255))<<48) | \ -(((uint64_t)((y)[2] & 255))<<40)|(((uint64_t)((y)[3] & 255))<<32) | \ -(((uint64_t)((y)[4] & 255))<<24)|(((uint64_t)((y)[5] & 255))<<16) | \ -(((uint64_t)((y)[6] & 255))<<8)|(((uint64_t)((y)[7] & 255))); } - -// Various logical functions -#define RORc(x, y) ( ((((uint32_t)(x)&0xFFFFFFFFUL)>>(uint32_t)((y)&31)) | ((uint32_t)(x)<<(uint32_t)(32-((y)&31)))) & 0xFFFFFFFFUL) -#define Ch(x,y,z) (z ^ (x & (y ^ z))) -#define Maj(x,y,z) (((x | y) & z) | (x & y)) -#define S(x, n) RORc((x),(n)) -#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) -#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) -#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) -#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) -#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) -#define MIN(x, y) ( ((x)<(y))?(x):(y) ) - -static inline int32_t sha256_vcompress(struct sha256_vstate * md,uint8_t *buf) -{ - uint32_t S[8],W[64],t0,t1,i; - for (i=0; i<8; i++) // copy state into S - S[i] = md->state[i]; - for (i=0; i<16; i++) // copy the state into 512-bits into W[0..15] - LOAD32H(W[i],buf + (4*i)); - for (i=16; i<64; i++) // fill W[16..63] - W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; - -#define RND(a,b,c,d,e,f,g,h,i,ki) \ -t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i]; \ -t1 = Sigma0(a) + Maj(a, b, c); \ -d += t0; \ -h = t0 + t1; - - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x71374491); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcf); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba5); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25b); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b01); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a7); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c1); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc6); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dc); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c8); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf3); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x14292967); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a85); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b2138); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d13); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a7354); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c85); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a1); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664b); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a3); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd6990624); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e3585); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa070); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c08); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774c); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4a); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc70208); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506ceb); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2); -#undef RND - for (i=0; i<8; i++) // feedback - md->state[i] = md->state[i] + S[i]; - return(0); -} - -#undef RORc -#undef Ch -#undef Maj -#undef S -#undef R -#undef Sigma0 -#undef Sigma1 -#undef Gamma0 -#undef Gamma1 - -static inline void sha256_vinit(struct sha256_vstate * md) -{ - md->curlen = 0; - md->length = 0; - md->state[0] = 0x6A09E667UL; - md->state[1] = 0xBB67AE85UL; - md->state[2] = 0x3C6EF372UL; - md->state[3] = 0xA54FF53AUL; - md->state[4] = 0x510E527FUL; - md->state[5] = 0x9B05688CUL; - md->state[6] = 0x1F83D9ABUL; - md->state[7] = 0x5BE0CD19UL; -} - -static inline int32_t sha256_vprocess(struct sha256_vstate *md,const uint8_t *in,uint64_t inlen) -{ - uint64_t n; int32_t err; - if ( md->curlen > sizeof(md->buf) ) - return(-1); - while ( inlen > 0 ) - { - if ( md->curlen == 0 && inlen >= 64 ) - { - if ( (err= sha256_vcompress(md,(uint8_t *)in)) != 0 ) - return(err); - md->length += 64 * 8, in += 64, inlen -= 64; - } - else - { - n = MIN(inlen,64 - md->curlen); - memcpy(md->buf + md->curlen,in,(size_t)n); - md->curlen += n, in += n, inlen -= n; - if ( md->curlen == 64 ) - { - if ( (err= sha256_vcompress(md,md->buf)) != 0 ) - return(err); - md->length += 8*64; - md->curlen = 0; - } - } - } - return(0); -} - -static inline int32_t sha256_vdone(struct sha256_vstate *md,uint8_t *out) -{ - int32_t i; - if ( md->curlen >= sizeof(md->buf) ) - return(-1); - md->length += md->curlen * 8; // increase the length of the message - md->buf[md->curlen++] = (uint8_t)0x80; // append the '1' bit - // if len > 56 bytes we append zeros then compress. Then we can fall back to padding zeros and length encoding like normal. - if ( md->curlen > 56 ) - { - while ( md->curlen < 64 ) - md->buf[md->curlen++] = (uint8_t)0; - sha256_vcompress(md,md->buf); - md->curlen = 0; - } - while ( md->curlen < 56 ) // pad upto 56 bytes of zeroes - md->buf[md->curlen++] = (uint8_t)0; - STORE64H(md->length,md->buf+56); // store length - sha256_vcompress(md,md->buf); - for (i=0; i<8; i++) // copy output - STORE32H(md->state[i],out+(4*i)); - return(0); -} - -void vcalc_sha256(char deprecated[(256 >> 3) * 2 + 1],uint8_t hash[256 >> 3],uint8_t *src,int32_t len) -{ - struct sha256_vstate md; - sha256_vinit(&md); - sha256_vprocess(&md,src,len); - sha256_vdone(&md,hash); -} - -bits256 bits256_doublesha256(char *deprecated,uint8_t *data,int32_t datalen) -{ - bits256 hash,hash2; int32_t i; - vcalc_sha256(0,hash.bytes,data,datalen); - vcalc_sha256(0,hash2.bytes,hash.bytes,sizeof(hash)); - for (i=0; i>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) - -/* the ten basic operations FF() through III() */ -#define FF(a, b, c, d, e, x, s) \ -(a) += F((b), (c), (d)) + (x);\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define GG(a, b, c, d, e, x, s) \ -(a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define HH(a, b, c, d, e, x, s) \ -(a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define II(a, b, c, d, e, x, s) \ -(a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define JJ(a, b, c, d, e, x, s) \ -(a) += J((b), (c), (d)) + (x) + 0xa953fd4eUL;\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define FFF(a, b, c, d, e, x, s) \ -(a) += F((b), (c), (d)) + (x);\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define GGG(a, b, c, d, e, x, s) \ -(a) += G((b), (c), (d)) + (x) + 0x7a6d76e9UL;\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define HHH(a, b, c, d, e, x, s) \ -(a) += H((b), (c), (d)) + (x) + 0x6d703ef3UL;\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define III(a, b, c, d, e, x, s) \ -(a) += I((b), (c), (d)) + (x) + 0x5c4dd124UL;\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -#define JJJ(a, b, c, d, e, x, s) \ -(a) += J((b), (c), (d)) + (x) + 0x50a28be6UL;\ -(a) = ROLc((a), (s)) + (e);\ -(c) = ROLc((c), 10); - -static int32_t rmd160_vcompress(struct rmd160_vstate *md,uint8_t *buf) -{ - uint32_t aa,bb,cc,dd,ee,aaa,bbb,ccc,ddd,eee,X[16]; - int i; - - /* load words X */ - for (i = 0; i < 16; i++){ - LOAD32L(X[i], buf + (4 * i)); - } - - /* load state */ - aa = aaa = md->state[0]; - bb = bbb = md->state[1]; - cc = ccc = md->state[2]; - dd = ddd = md->state[3]; - ee = eee = md->state[4]; - - /* round 1 */ - FF(aa, bb, cc, dd, ee, X[ 0], 11); - FF(ee, aa, bb, cc, dd, X[ 1], 14); - FF(dd, ee, aa, bb, cc, X[ 2], 15); - FF(cc, dd, ee, aa, bb, X[ 3], 12); - FF(bb, cc, dd, ee, aa, X[ 4], 5); - FF(aa, bb, cc, dd, ee, X[ 5], 8); - FF(ee, aa, bb, cc, dd, X[ 6], 7); - FF(dd, ee, aa, bb, cc, X[ 7], 9); - FF(cc, dd, ee, aa, bb, X[ 8], 11); - FF(bb, cc, dd, ee, aa, X[ 9], 13); - FF(aa, bb, cc, dd, ee, X[10], 14); - FF(ee, aa, bb, cc, dd, X[11], 15); - FF(dd, ee, aa, bb, cc, X[12], 6); - FF(cc, dd, ee, aa, bb, X[13], 7); - FF(bb, cc, dd, ee, aa, X[14], 9); - FF(aa, bb, cc, dd, ee, X[15], 8); - - /* round 2 */ - GG(ee, aa, bb, cc, dd, X[ 7], 7); - GG(dd, ee, aa, bb, cc, X[ 4], 6); - GG(cc, dd, ee, aa, bb, X[13], 8); - GG(bb, cc, dd, ee, aa, X[ 1], 13); - GG(aa, bb, cc, dd, ee, X[10], 11); - GG(ee, aa, bb, cc, dd, X[ 6], 9); - GG(dd, ee, aa, bb, cc, X[15], 7); - GG(cc, dd, ee, aa, bb, X[ 3], 15); - GG(bb, cc, dd, ee, aa, X[12], 7); - GG(aa, bb, cc, dd, ee, X[ 0], 12); - GG(ee, aa, bb, cc, dd, X[ 9], 15); - GG(dd, ee, aa, bb, cc, X[ 5], 9); - GG(cc, dd, ee, aa, bb, X[ 2], 11); - GG(bb, cc, dd, ee, aa, X[14], 7); - GG(aa, bb, cc, dd, ee, X[11], 13); - GG(ee, aa, bb, cc, dd, X[ 8], 12); - - /* round 3 */ - HH(dd, ee, aa, bb, cc, X[ 3], 11); - HH(cc, dd, ee, aa, bb, X[10], 13); - HH(bb, cc, dd, ee, aa, X[14], 6); - HH(aa, bb, cc, dd, ee, X[ 4], 7); - HH(ee, aa, bb, cc, dd, X[ 9], 14); - HH(dd, ee, aa, bb, cc, X[15], 9); - HH(cc, dd, ee, aa, bb, X[ 8], 13); - HH(bb, cc, dd, ee, aa, X[ 1], 15); - HH(aa, bb, cc, dd, ee, X[ 2], 14); - HH(ee, aa, bb, cc, dd, X[ 7], 8); - HH(dd, ee, aa, bb, cc, X[ 0], 13); - HH(cc, dd, ee, aa, bb, X[ 6], 6); - HH(bb, cc, dd, ee, aa, X[13], 5); - HH(aa, bb, cc, dd, ee, X[11], 12); - HH(ee, aa, bb, cc, dd, X[ 5], 7); - HH(dd, ee, aa, bb, cc, X[12], 5); - - /* round 4 */ - II(cc, dd, ee, aa, bb, X[ 1], 11); - II(bb, cc, dd, ee, aa, X[ 9], 12); - II(aa, bb, cc, dd, ee, X[11], 14); - II(ee, aa, bb, cc, dd, X[10], 15); - II(dd, ee, aa, bb, cc, X[ 0], 14); - II(cc, dd, ee, aa, bb, X[ 8], 15); - II(bb, cc, dd, ee, aa, X[12], 9); - II(aa, bb, cc, dd, ee, X[ 4], 8); - II(ee, aa, bb, cc, dd, X[13], 9); - II(dd, ee, aa, bb, cc, X[ 3], 14); - II(cc, dd, ee, aa, bb, X[ 7], 5); - II(bb, cc, dd, ee, aa, X[15], 6); - II(aa, bb, cc, dd, ee, X[14], 8); - II(ee, aa, bb, cc, dd, X[ 5], 6); - II(dd, ee, aa, bb, cc, X[ 6], 5); - II(cc, dd, ee, aa, bb, X[ 2], 12); - - /* round 5 */ - JJ(bb, cc, dd, ee, aa, X[ 4], 9); - JJ(aa, bb, cc, dd, ee, X[ 0], 15); - JJ(ee, aa, bb, cc, dd, X[ 5], 5); - JJ(dd, ee, aa, bb, cc, X[ 9], 11); - JJ(cc, dd, ee, aa, bb, X[ 7], 6); - JJ(bb, cc, dd, ee, aa, X[12], 8); - JJ(aa, bb, cc, dd, ee, X[ 2], 13); - JJ(ee, aa, bb, cc, dd, X[10], 12); - JJ(dd, ee, aa, bb, cc, X[14], 5); - JJ(cc, dd, ee, aa, bb, X[ 1], 12); - JJ(bb, cc, dd, ee, aa, X[ 3], 13); - JJ(aa, bb, cc, dd, ee, X[ 8], 14); - JJ(ee, aa, bb, cc, dd, X[11], 11); - JJ(dd, ee, aa, bb, cc, X[ 6], 8); - JJ(cc, dd, ee, aa, bb, X[15], 5); - JJ(bb, cc, dd, ee, aa, X[13], 6); - - /* parallel round 1 */ - JJJ(aaa, bbb, ccc, ddd, eee, X[ 5], 8); - JJJ(eee, aaa, bbb, ccc, ddd, X[14], 9); - JJJ(ddd, eee, aaa, bbb, ccc, X[ 7], 9); - JJJ(ccc, ddd, eee, aaa, bbb, X[ 0], 11); - JJJ(bbb, ccc, ddd, eee, aaa, X[ 9], 13); - JJJ(aaa, bbb, ccc, ddd, eee, X[ 2], 15); - JJJ(eee, aaa, bbb, ccc, ddd, X[11], 15); - JJJ(ddd, eee, aaa, bbb, ccc, X[ 4], 5); - JJJ(ccc, ddd, eee, aaa, bbb, X[13], 7); - JJJ(bbb, ccc, ddd, eee, aaa, X[ 6], 7); - JJJ(aaa, bbb, ccc, ddd, eee, X[15], 8); - JJJ(eee, aaa, bbb, ccc, ddd, X[ 8], 11); - JJJ(ddd, eee, aaa, bbb, ccc, X[ 1], 14); - JJJ(ccc, ddd, eee, aaa, bbb, X[10], 14); - JJJ(bbb, ccc, ddd, eee, aaa, X[ 3], 12); - JJJ(aaa, bbb, ccc, ddd, eee, X[12], 6); - - /* parallel round 2 */ - III(eee, aaa, bbb, ccc, ddd, X[ 6], 9); - III(ddd, eee, aaa, bbb, ccc, X[11], 13); - III(ccc, ddd, eee, aaa, bbb, X[ 3], 15); - III(bbb, ccc, ddd, eee, aaa, X[ 7], 7); - III(aaa, bbb, ccc, ddd, eee, X[ 0], 12); - III(eee, aaa, bbb, ccc, ddd, X[13], 8); - III(ddd, eee, aaa, bbb, ccc, X[ 5], 9); - III(ccc, ddd, eee, aaa, bbb, X[10], 11); - III(bbb, ccc, ddd, eee, aaa, X[14], 7); - III(aaa, bbb, ccc, ddd, eee, X[15], 7); - III(eee, aaa, bbb, ccc, ddd, X[ 8], 12); - III(ddd, eee, aaa, bbb, ccc, X[12], 7); - III(ccc, ddd, eee, aaa, bbb, X[ 4], 6); - III(bbb, ccc, ddd, eee, aaa, X[ 9], 15); - III(aaa, bbb, ccc, ddd, eee, X[ 1], 13); - III(eee, aaa, bbb, ccc, ddd, X[ 2], 11); - - /* parallel round 3 */ - HHH(ddd, eee, aaa, bbb, ccc, X[15], 9); - HHH(ccc, ddd, eee, aaa, bbb, X[ 5], 7); - HHH(bbb, ccc, ddd, eee, aaa, X[ 1], 15); - HHH(aaa, bbb, ccc, ddd, eee, X[ 3], 11); - HHH(eee, aaa, bbb, ccc, ddd, X[ 7], 8); - HHH(ddd, eee, aaa, bbb, ccc, X[14], 6); - HHH(ccc, ddd, eee, aaa, bbb, X[ 6], 6); - HHH(bbb, ccc, ddd, eee, aaa, X[ 9], 14); - HHH(aaa, bbb, ccc, ddd, eee, X[11], 12); - HHH(eee, aaa, bbb, ccc, ddd, X[ 8], 13); - HHH(ddd, eee, aaa, bbb, ccc, X[12], 5); - HHH(ccc, ddd, eee, aaa, bbb, X[ 2], 14); - HHH(bbb, ccc, ddd, eee, aaa, X[10], 13); - HHH(aaa, bbb, ccc, ddd, eee, X[ 0], 13); - HHH(eee, aaa, bbb, ccc, ddd, X[ 4], 7); - HHH(ddd, eee, aaa, bbb, ccc, X[13], 5); - - /* parallel round 4 */ - GGG(ccc, ddd, eee, aaa, bbb, X[ 8], 15); - GGG(bbb, ccc, ddd, eee, aaa, X[ 6], 5); - GGG(aaa, bbb, ccc, ddd, eee, X[ 4], 8); - GGG(eee, aaa, bbb, ccc, ddd, X[ 1], 11); - GGG(ddd, eee, aaa, bbb, ccc, X[ 3], 14); - GGG(ccc, ddd, eee, aaa, bbb, X[11], 14); - GGG(bbb, ccc, ddd, eee, aaa, X[15], 6); - GGG(aaa, bbb, ccc, ddd, eee, X[ 0], 14); - GGG(eee, aaa, bbb, ccc, ddd, X[ 5], 6); - GGG(ddd, eee, aaa, bbb, ccc, X[12], 9); - GGG(ccc, ddd, eee, aaa, bbb, X[ 2], 12); - GGG(bbb, ccc, ddd, eee, aaa, X[13], 9); - GGG(aaa, bbb, ccc, ddd, eee, X[ 9], 12); - GGG(eee, aaa, bbb, ccc, ddd, X[ 7], 5); - GGG(ddd, eee, aaa, bbb, ccc, X[10], 15); - GGG(ccc, ddd, eee, aaa, bbb, X[14], 8); - - /* parallel round 5 */ - FFF(bbb, ccc, ddd, eee, aaa, X[12] , 8); - FFF(aaa, bbb, ccc, ddd, eee, X[15] , 5); - FFF(eee, aaa, bbb, ccc, ddd, X[10] , 12); - FFF(ddd, eee, aaa, bbb, ccc, X[ 4] , 9); - FFF(ccc, ddd, eee, aaa, bbb, X[ 1] , 12); - FFF(bbb, ccc, ddd, eee, aaa, X[ 5] , 5); - FFF(aaa, bbb, ccc, ddd, eee, X[ 8] , 14); - FFF(eee, aaa, bbb, ccc, ddd, X[ 7] , 6); - FFF(ddd, eee, aaa, bbb, ccc, X[ 6] , 8); - FFF(ccc, ddd, eee, aaa, bbb, X[ 2] , 13); - FFF(bbb, ccc, ddd, eee, aaa, X[13] , 6); - FFF(aaa, bbb, ccc, ddd, eee, X[14] , 5); - FFF(eee, aaa, bbb, ccc, ddd, X[ 0] , 15); - FFF(ddd, eee, aaa, bbb, ccc, X[ 3] , 13); - FFF(ccc, ddd, eee, aaa, bbb, X[ 9] , 11); - FFF(bbb, ccc, ddd, eee, aaa, X[11] , 11); - - /* combine results */ - ddd += cc + md->state[1]; /* final result for md->state[0] */ - md->state[1] = md->state[2] + dd + eee; - md->state[2] = md->state[3] + ee + aaa; - md->state[3] = md->state[4] + aa + bbb; - md->state[4] = md->state[0] + bb + ccc; - md->state[0] = ddd; - - return 0; -} - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return 0 if successful - */ -int rmd160_vinit(struct rmd160_vstate * md) -{ - md->state[0] = 0x67452301UL; - md->state[1] = 0xefcdab89UL; - md->state[2] = 0x98badcfeUL; - md->state[3] = 0x10325476UL; - md->state[4] = 0xc3d2e1f0UL; - md->curlen = 0; - md->length = 0; - return 0; -} -#define HASH_PROCESS(func_name, compress_name, state_var, block_size) \ -int func_name (struct rmd160_vstate * md, const unsigned char *in, unsigned long inlen) \ -{ \ -unsigned long n; \ -int err; \ -if (md->curlen > sizeof(md->buf)) { \ -return -1; \ -} \ -while (inlen > 0) { \ -if (md->curlen == 0 && inlen >= block_size) { \ -if ((err = compress_name (md, (unsigned char *)in)) != 0) { \ -return err; \ -} \ -md->length += block_size * 8; \ -in += block_size; \ -inlen -= block_size; \ -} else { \ -n = MIN(inlen, (block_size - md->curlen)); \ -memcpy(md->buf + md->curlen, in, (size_t)n); \ -md->curlen += n; \ -in += n; \ -inlen -= n; \ -if (md->curlen == block_size) { \ -if ((err = compress_name (md, md->buf)) != 0) { \ -return err; \ -} \ -md->length += 8*block_size; \ -md->curlen = 0; \ -} \ -} \ -} \ -return 0; \ -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return 0 if successful - */ -HASH_PROCESS(rmd160_vprocess, rmd160_vcompress, rmd160, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (20 bytes) - @return 0 if successful - */ -int rmd160_vdone(struct rmd160_vstate * md, unsigned char *out) -{ - int i; - if (md->curlen >= sizeof(md->buf)) { - return -1; - } - /* increase the length of the message */ - md->length += md->curlen * 8; - - /* append the '1' bit */ - md->buf[md->curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->curlen > 56) { - while (md->curlen < 64) { - md->buf[md->curlen++] = (unsigned char)0; - } - rmd160_vcompress(md, md->buf); - md->curlen = 0; - } - /* pad upto 56 bytes of zeroes */ - while (md->curlen < 56) { - md->buf[md->curlen++] = (unsigned char)0; - } - /* store length */ - STORE64L(md->length, md->buf+56); - rmd160_vcompress(md, md->buf); - /* copy output */ - for (i = 0; i < 5; i++) { - STORE32L(md->state[i], out+(4*i)); - } - return 0; -} - -void calc_rmd160(char deprecated[41],uint8_t buf[20],uint8_t *msg,int32_t len) -{ - struct rmd160_vstate md; - rmd160_vinit(&md); - rmd160_vprocess(&md,msg,len); - rmd160_vdone(&md, buf); -} -#undef F -#undef G -#undef H -#undef I -#undef J -#undef ROLc -#undef FF -#undef GG -#undef HH -#undef II -#undef JJ -#undef FFF -#undef GGG -#undef HHH -#undef III -#undef JJJ - -static const uint32_t crc32_tab[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d -}; - -uint32_t calc_crc32(uint32_t crc,const void *buf,size_t size) -{ - const uint8_t *p; - - p = (const uint8_t *)buf; - crc = crc ^ ~0U; - - while (size--) - crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8); - - return crc ^ ~0U; -} - -void calc_rmd160_sha256(uint8_t rmd160[20],uint8_t *data,int32_t datalen) -{ - bits256 hash; - vcalc_sha256(0,hash.bytes,data,datalen); - calc_rmd160(0,rmd160,hash.bytes,sizeof(hash)); -} - -int32_t dragon_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp) -{ - int32_t i; uint64_t x; - if ( rwflag == 0 ) - { - x = 0; - for (i=len-1; i>=0; i--) - { - x <<= 8; - x |= serialized[i]; - } - switch ( len ) - { - case 1: *(uint8_t *)endianedp = (uint8_t)x; break; - case 2: *(uint16_t *)endianedp = (uint16_t)x; break; - case 4: *(uint32_t *)endianedp = (uint32_t)x; break; - case 8: *(uint64_t *)endianedp = (uint64_t)x; break; - } - } - else - { - x = 0; - switch ( len ) - { - case 1: x = *(uint8_t *)endianedp; break; - case 2: x = *(uint16_t *)endianedp; break; - case 4: x = *(uint32_t *)endianedp; break; - case 8: x = *(uint64_t *)endianedp; break; - } - for (i=0; i>= 8) - serialized[i] = (uint8_t)(x & 0xff); - } - return(len); -} - -uint32_t hush_smartmagic(char *symbol,uint64_t supply,uint8_t *extraptr,int32_t extralen) -{ - uint8_t buf[512]; uint32_t crc0=0; int32_t len = 0; bits256 hash; - if ( strcmp(symbol,"KMD") == 0 ) - return(0x8de4eef9); - len = dragon_rwnum(1,&buf[len],sizeof(supply),(void *)&supply); - strcpy((char *)&buf[len],symbol); - len += strlen(symbol); - if ( extraptr != 0 && extralen != 0 ) - { - vcalc_sha256(0,hash.bytes,extraptr,extralen); - crc0 = hash.uints[0]; - } - return(calc_crc32(crc0,buf,len)); -} - -uint16_t komodo_assetport(uint32_t magic,int32_t extralen) -{ - if ( magic == 0x8de4eef9 ) - return(7770); - else if ( extralen == 0 ) - return(8000 + (magic % 7777)); - else return(16000 + (magic % 49500)); -} - -uint16_t hush_port(char *symbol,uint64_t supply,uint32_t *magicp,uint8_t *extraptr,int32_t extralen) -{ - if ( symbol == 0 || symbol[0] == 0 || strcmp("KMD",symbol) == 0 ) - { - *magicp = 0x8de4eef9; - return(7770); - } - *magicp = hush_smartmagic(symbol,supply,extraptr,extralen); - return(komodo_assetport(*magicp,extralen)); -} - -uint16_t komodo_calcport(char *name,uint64_t supply,uint64_t endsubsidy,uint64_t reward,uint64_t halving,uint64_t decay,uint64_t commission,uint8_t staked,int32_t cc) -{ - uint8_t extrabuf[4096],*extraptr=0; int32_t extralen=0; uint64_t val; - if ( halving != 0 && halving < 1440 ) - { - halving = 1440; - printf("halving must be at least 1440 blocks\n"); - } - if ( decay == 100000000 && endsubsidy == 0 ) - { - decay = 0; - printf("decay of 100000000 means linear and that needs endsubsidy\n"); - } - else if ( decay > 100000000 ) - { - decay = 0; - printf("decay cant be more than 100000000\n"); - } - if ( endsubsidy != 0 || reward != 0 || halving != 0 || decay != 0 || commission != 0 || cc != 0 || staked != 0 || ASSETCHAINS_OVERRIDE_PUBKEY33[0] != 0 ) - { - //printf("end.%llu reward.%llu halving.%llu decay.%llu perc.%llu\n",(long long)endsubsidy,(long long)reward,(long long)halving,(long long)decay,(long long)commission); - extraptr = extrabuf; - memcpy(extraptr,ASSETCHAINS_OVERRIDE_PUBKEY33,33), extralen = 33; - extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(endsubsidy),(void *)&endsubsidy); - extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(reward),(void *)&reward); - extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(halving),(void *)&halving); - extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(decay),(void *)&decay); - val = commission | (((uint64_t)staked & 0xff) << 32) | (((uint64_t)cc & 0xffffff) << 40); - extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(val),(void *)&val); - } - return(hush_port(name,supply,&ASSETCHAINS_MAGIC,extraptr,extralen)); -} - -int main(int argc, char * argv[]) -{ - uint16_t rpcport; int32_t i,j,offset=0,jsonflag=0,num = 1; uint64_t supply=10,commission=0,endsubsidy,reward,halving,decay; uint8_t *allocated=0,staked=0; uint32_t cc = 3; - endsubsidy = reward = halving = decay = 0; - if ( argc < 2 ) - { - // staked, commission and cc hardcoded - printf("%s name supply endsubsidy reward halving decay\n",argv[0]); - printf("%s -gen num name supply endsubsidy reward halving decay\n",argv[0]); - return(-1); - } - if ( strncmp(argv[1],"-gen",3) == 0 ) - { - num = atoi(argv[2]); - if ( strcmp(argv[1],"-genjson") == 0 ) - jsonflag = 1; - offset = 2; - allocated = calloc(1,1 << 16); - } - if ( argc > offset + 2 ) - supply = (long long)atof(argv[offset + 2]); - if ( argc > offset + 3 ) - endsubsidy = (long long)atof(argv[offset + 3]); - if ( argc > offset + 4 ) - reward = (long long)atof(argv[offset + 4]); - if ( argc > offset + 5 ) - halving = (long long)atof(argv[offset + 5]); - if ( argc > offset + 6 ) - decay = (long long)atof(argv[offset + 6]); - rpcport = 1 + komodo_calcport(argv[offset + 1],supply,endsubsidy,reward,halving,decay,commission,staked,cc); - printf("./komodod -ac_name=%s -ac_cc=%u -ac_supply=%llu -ac_end=%llu -ac_reward=%llu -ac_halving=%llu -ac_decay=%llu & # rpcport %u\n[",argv[offset + 1],cc,(long long)supply,(long long)endsubsidy,(long long)reward,(long long)halving,(long long)decay,rpcport); - if ( allocated != 0 ) - { - char name[64],newname[64]; - strcpy(name,argv[offset + 1]); - allocated[rpcport] = 1; - allocated[rpcport-1] = 1; - for (i=0; i Date: Sun, 24 Jan 2021 08:51:17 -0500 Subject: [PATCH 257/277] Refactoring --- src/cc/CCPrices.h | 2 +- src/cc/CCutils.cpp | 2 +- src/cc/oracles.cpp | 2 +- src/cc/prices.cpp | 24 +++--- src/compat.h | 4 +- src/hush.h | 20 ++--- src/hush_bitcoind.h | 153 +++++---------------------------------- src/hush_defs.h | 13 +--- src/hush_events.h | 8 +- src/hush_gateway.h | 30 ++++---- src/hush_globals.h | 6 +- src/hush_nk.h | 4 +- src/hush_notary.h | 2 +- src/hush_pax.h | 4 +- src/hush_structs.h | 2 +- src/main.cpp | 2 - src/miner.cpp | 6 +- src/net.h | 3 +- src/rpc/blockchain.cpp | 14 ++-- src/rpc/misc.cpp | 13 ++-- src/txdb.cpp | 4 +- src/wallet-utility.cpp | 12 ++- src/wallet/rpcwallet.cpp | 12 +-- 23 files changed, 105 insertions(+), 237 deletions(-) diff --git a/src/cc/CCPrices.h b/src/cc/CCPrices.h index bb3a4563d..cf55dc22b 100644 --- a/src/cc/CCPrices.h +++ b/src/cc/CCPrices.h @@ -32,7 +32,7 @@ extern CScript HUSH_EARLYTXID_SCRIPTPUB; #define PRICES_MAXLEVERAGE 777 #define PRICES_SMOOTHWIDTH 1 #define HUSH_MAXPRICES 2048 // must be power of 2 and less than 8192 -#define KOMODO_PRICEMASK (~(HUSH_MAXPRICES - 1)) // actually 1111 1000 0000 0000 +#define HUSH_PRICEMASK (~(HUSH_MAXPRICES - 1)) // actually 1111 1000 0000 0000 #define PRICES_WEIGHT (HUSH_MAXPRICES * 1) // 0000 1000 0000 0000 #define PRICES_MULT (HUSH_MAXPRICES * 2) // 0001 0000 0000 0000 #define PRICES_DIV (HUSH_MAXPRICES * 3) // 0001 1000 0000 0000 diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index 852c2e4ee..f6e244e1c 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -173,7 +173,7 @@ bool CheckTxFee(const CTransaction &tx, uint64_t txfee, uint32_t height, uint64_ uint32_t GetLatestTimestamp(int32_t height) { if ( HUSH_NSPV_SUPERLITE ) return ((uint32_t)NSPV_blocktime(height)); - return(komodo_heightstamp(height)); + return(hush_heightstamp(height)); } // :P void CCaddr2set(struct CCcontract_info *cp,uint8_t evalcode,CPubKey pk,uint8_t *priv,char *coinaddr) diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index f7635c03e..21e7cbb82 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -645,7 +645,7 @@ bool OraclesDataValidate(struct CCcontract_info *cp,Eval* eval,const CTransactio /*nt32_t GetLatestTimestamp(int32_t height) { if ( HUSH_NSPV_SUPERLITE ) return (NSPV_blocktime(height)); - return(komodo_heightstamp(height)); + return(hush_heightstamp(height)); } */ bool OraclesValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx, uint32_t nIn) diff --git a/src/cc/prices.cpp b/src/cc/prices.cpp index 6a9779050..e449f207f 100644 --- a/src/cc/prices.cpp +++ b/src/cc/prices.cpp @@ -659,7 +659,7 @@ static std::string prices_getsourceexpression(const std::vector &vec) uint16_t opcode = vec[i]; int32_t value = (opcode & (HUSH_MAXPRICES - 1)); // index or weight - switch (opcode & KOMODO_PRICEMASK) + switch (opcode & HUSH_PRICEMASK) { case 0: // indices komodo_pricename(name, value); @@ -949,7 +949,7 @@ int32_t prices_syntheticvec(std::vector &vec, std::vector } depth -= need; ///std::cerr << "prices_syntheticvec() opcode=" << opcode << " opstr=" << opstr << " need=" << need << " depth=" << depth << std::endl; - if ((opcode & KOMODO_PRICEMASK) != PRICES_WEIGHT) { // skip weight + if ((opcode & HUSH_PRICEMASK) != PRICES_WEIGHT) { // skip weight depth++; // increase operands count ///std::cerr << "depth++=" << depth << std::endl; } @@ -997,8 +997,8 @@ int64_t prices_syntheticprice(std::vector vec, int32_t height, int32_t mpz_set_ui(mpzResult, 0); // clear result to test overflow (see below) - //std::cerr << "prices_syntheticprice" << " i=" << i << " mpzTotalPrice=" << mpz_get_si(mpzTotalPrice) << " value=" << value << " depth=" << depth << " opcode&KOMODO_PRICEMASK=" << (opcode & KOMODO_PRICEMASK) < 0 && !isInverted || leverage < 0 && isInverted) || @@ -2280,7 +2280,7 @@ static bool prices_isopposite(BetInfo p1, BetInfo p2) { int32_t value1 = (opcode1 & (HUSH_MAXPRICES - 1)); // index or weight int32_t value2 = (opcode2 & (HUSH_MAXPRICES - 1)); // index or weight - if ( (opcode1 & KOMODO_PRICEMASK) == 0 && (opcode2 & KOMODO_PRICEMASK) == 0 ) { + if ( (opcode1 & HUSH_PRICEMASK) == 0 && (opcode2 & HUSH_PRICEMASK) == 0 ) { char name1[65]; char name2[65]; if (komodo_pricename(name1, value1) && komodo_pricename(name2, value2)) { @@ -2292,10 +2292,10 @@ static bool prices_isopposite(BetInfo p1, BetInfo p2) { prices_splitpair(std::string(name1), upperquote1, bottomquote1); prices_splitpair(std::string(name2), upperquote2, bottomquote2); - bool isInverted1 = ((opcode1 & KOMODO_PRICEMASK) != PRICES_INV); - bool isInverted2 = ((opcode2 & KOMODO_PRICEMASK) != PRICES_INV); + bool isInverted1 = ((opcode1 & HUSH_PRICEMASK) != PRICES_INV); + bool isInverted2 = ((opcode2 & HUSH_PRICEMASK) != PRICES_INV); - if (/*upperquote1 == bottomquote2 && bottomquote1 == upperquote2 && (p1.leverage > 0 == p2.leverage > 0 || (opcode1 & KOMODO_PRICEMASK) == PRICES_INV == (opcode2 & KOMODO_PRICEMASK) == PRICES_INV) ||*/ + if (/*upperquote1 == bottomquote2 && bottomquote1 == upperquote2 && (p1.leverage > 0 == p2.leverage > 0 || (opcode1 & HUSH_PRICEMASK) == PRICES_INV == (opcode2 & HUSH_PRICEMASK) == PRICES_INV) ||*/ upperquote1 == upperquote2 && bottomquote1 == bottomquote2 && ((p1.leverage > 0) != (p2.leverage > 0) || isInverted1 != isInverted2) ) return true; } @@ -2313,7 +2313,7 @@ static std::string findMatchedBook(const std::vector &vecparsed, const int32_t value = (opcode & (HUSH_MAXPRICES - 1)); // filter index or weight = opcode & (2048-1) - if ((opcode & KOMODO_PRICEMASK) == 0) { + if ((opcode & HUSH_PRICEMASK) == 0) { char name[65]; if (komodo_pricename(name, value)) { auto it = bookmatched.find(std::string(name)); diff --git a/src/compat.h b/src/compat.h index 61ac03dd4..af902e705 100644 --- a/src/compat.h +++ b/src/compat.h @@ -2,7 +2,6 @@ // Copyright (c) 2009-2014 The Bitcoin Core 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. * * * @@ -42,7 +41,6 @@ #define FD_SETSIZE 1024 // max number of fds in fd_set #include // Must be included before mswsock.h and windows.h - #include #include #include @@ -85,10 +83,12 @@ typedef u_int SOCKET; #define S_IWUSR 0200 #endif #else +#undef MAX_PATH #define MAX_PATH 1024 #endif // As Solaris does not have the MSG_NOSIGNAL flag for send(2) syscall, it is defined as 0 +// Should we add support for PDP-11's too? - Duke #if !defined(HAVE_MSG_NOSIGNAL) && !defined(MSG_NOSIGNAL) #define MSG_NOSIGNAL 0 #endif diff --git a/src/hush.h b/src/hush.h index f013f2f5e..225f46259 100644 --- a/src/hush.h +++ b/src/hush.h @@ -25,7 +25,7 @@ // Todo: verify: reorgs, lollerskates #define HUSH_SMART_CHAINS_WAITNOTARIZE -#define KOMODO_PAXMAX (10000 * COIN) +#define HUSH_PAXMAX (10000 * COIN) extern int32_t NOTARIZED_HEIGHT; uint256 NOTARIZED_HASH,NOTARIZED_DESTTXID; @@ -545,9 +545,9 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar { if ( i == 0 && j == 0 && memcmp(NOTARY_PUBKEY33,scriptbuf+1,33) == 0 && IS_HUSH_NOTARY != 0 ) { - printf("%s KOMODO_LASTMINED.%d -> %d\n",SMART_CHAIN_SYMBOL,KOMODO_LASTMINED,height); - prevKOMODO_LASTMINED = KOMODO_LASTMINED; - KOMODO_LASTMINED = height; + printf("%s HUSH_LASTMINED.%d -> %d\n",SMART_CHAIN_SYMBOL,HUSH_LASTMINED,height); + prevHUSH_LASTMINED = HUSH_LASTMINED; + HUSH_LASTMINED = height; } decode_hex(crypto555,33,(char *)CRYPTO555_PUBSECPSTR); /*for (k=0; k<33; k++) @@ -620,7 +620,7 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar if ( j == 1 && opretlen >= len+offset-opoffset ) { memset(&MoMoMdata,0,sizeof(MoMoMdata)); - if ( matched == 0 && signedmask != 0 && bitweight(signedmask) >= KOMODO_MINRATIFY ) + if ( matched == 0 && signedmask != 0 && bitweight(signedmask) >= HUSH_MINRATIFY ) notarized = 1; if ( strcmp("PIZZA",ccdata.symbol) == 0 || strncmp("TXSCL",ccdata.symbol,5) == 0 || strcmp("BEER",ccdata.symbol) == 0) notarized = 1; @@ -777,13 +777,13 @@ int32_t komodo_voutupdate(bool fJustCheck,int32_t *isratificationp,int32_t notar /*int32_t komodo_isratify(int32_t isspecial,int32_t numvalid) { - if ( isspecial != 0 && numvalid >= KOMODO_MINRATIFY ) + if ( isspecial != 0 && numvalid >= HUSH_MINRATIFY ) return(1); else return(0); }*/ // Special tx have vout[0] -> CRYPTO555 address -// with more than KOMODO_MINRATIFY pay2pubkey outputs -> ratify +// with more than HUSH_MINRATIFY pay2pubkey outputs -> ratify // if all outputs to notary -> notary utxo // if txi == 0 && 2 outputs and 2nd OP_RETURN, len == 32*2+4 -> notarized, 1st byte 'P' -> pricefeed // OP_RETURN: 'D' -> deposit, 'W' -> withdraw @@ -880,8 +880,8 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) } //else printf("cant get scriptPubKey for ht.%d txi.%d vin.%d\n",height,i,j); } numvalid = bitweight(signedmask); - if ( ((height < 90000 || (signedmask & 1) != 0) && numvalid >= KOMODO_MINRATIFY) || - (numvalid >= KOMODO_MINRATIFY && SMART_CHAIN_SYMBOL[0] != 0) || + if ( ((height < 90000 || (signedmask & 1) != 0) && numvalid >= HUSH_MINRATIFY) || + (numvalid >= HUSH_MINRATIFY && SMART_CHAIN_SYMBOL[0] != 0) || numvalid > (numnotaries/5) ) { if ( !fJustCheck && SMART_CHAIN_SYMBOL[0] != 0) @@ -984,7 +984,7 @@ int32_t hush_connectblock(bool fJustCheck, CBlockIndex *pindex,CBlock& block) } if ( SMART_CHAIN_SYMBOL[0] != 0 || height < 100000 ) { - if ( ((signedmask & 1) != 0 && numvalid >= KOMODO_MINRATIFY) || bitweight(signedmask) > (numnotaries/3) ) + if ( ((signedmask & 1) != 0 && numvalid >= HUSH_MINRATIFY) || bitweight(signedmask) > (numnotaries/3) ) { memset(&txhash,0,sizeof(txhash)); hush_stateupdate(height,pubkeys,numvalid,0,txhash,0,0,0,0,0,0,0,0,0,0,zero,0); diff --git a/src/hush_bitcoind.h b/src/hush_bitcoind.h index 375942951..f3be69c98 100644 --- a/src/hush_bitcoind.h +++ b/src/hush_bitcoind.h @@ -31,8 +31,7 @@ bool EnsureWalletIsAvailable(bool avoidException); extern bool fRequestShutdown; extern CScript HUSH_EARLYTXID_SCRIPTPUB; -uint8_t DecodeMaramaraCoinbaseOpRet(const CScript scriptPubKey,CPubKey &pk,int32_t &height,int32_t &unlockht); -uint32_t komodo_heightstamp(int32_t height); +uint32_t hush_heightstamp(int32_t height); //#define issue_curl(cmdstr) bitcoind_RPC(0,(char *)"curl",(char *)"http://127.0.0.1:7776",0,0,(char *)(cmdstr)) @@ -672,28 +671,6 @@ uint32_t komodo_txtime2(uint64_t *valuep,uint256 hash,int32_t n,char *destaddr) return(txtime); } -int32_t komodo_WhoStaked(CBlock *pblock, CTxDestination &addressout) -{ - int32_t n,vout; uint32_t txtime; uint64_t value; char voutaddr[64],destaddr[64]; CTxDestination voutaddress; uint256 txid; CScript opret; - if ( (n= pblock->vtx.size()) > 1 && pblock->vtx[n-1].vin.size() == 1 && pblock->vtx[n-1].vout.size() == 1 ) - { - txid = pblock->vtx[n-1].vin[0].prevout.hash; - vout = pblock->vtx[n-1].vin[0].prevout.n; - txtime = komodo_txtime(opret,&value,txid,vout,destaddr); - if ( ExtractDestination(pblock->vtx[n-1].vout[0].scriptPubKey,voutaddress) ) - { - strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); - if ( strcmp(destaddr,voutaddr) == 0 && pblock->vtx[n-1].vout[0].nValue == value ) - { - //fprintf(stderr,"is PoS block!\n"); - addressout = voutaddress; - return(1); - } - } - } - return(0); -} - bool komodo_checkopret(CBlock *pblock, CScript &merkleroot) { merkleroot = pblock->vtx.back().vout.back().scriptPubKey; @@ -728,7 +705,7 @@ void komodo_disconnect(CBlockIndex *pindex,CBlock& block) { //sp->rewinding = pindex->GetHeight(); //fprintf(stderr,"-%d ",pindex->GetHeight()); - } else printf("komodo_disconnect: ht.%d cant get hush_state.(%s)\n",pindex->GetHeight(),SMART_CHAIN_SYMBOL); + } else printf("hush_disconnect: ht.%d cant get hush_state.(%s)\n",pindex->GetHeight(),SMART_CHAIN_SYMBOL); } int32_t hush_is_notarytx(const CTransaction& tx) @@ -851,12 +828,12 @@ CBlockIndex *hush_chainactive(int32_t height) return(0); } -uint32_t komodo_heightstamp(int32_t height) +uint32_t hush_heightstamp(int32_t height) { CBlockIndex *ptr; if ( height > 0 && (ptr= hush_chainactive(height)) != 0 ) return(ptr->nTime); - //else fprintf(stderr,"komodo_heightstamp null ptr for block.%d\n",height); + //else fprintf(stderr,"hush_heightstamp null ptr for block.%d\n",height); return(0); } @@ -1285,14 +1262,14 @@ uint64_t the_commission(const CBlock *pblock,int32_t height) return(commission); } -uint32_t komodo_segid32(char *coinaddr) +uint32_t hush_segid32(char *coinaddr) { bits256 addrhash; vcalc_sha256(0,(uint8_t *)&addrhash,(uint8_t *)coinaddr,(int32_t)strlen(coinaddr)); return(addrhash.uints[0]); } -int8_t komodo_segid(int32_t nocache,int32_t height) +int8_t hush_segid(int32_t nocache,int32_t height) { CTxDestination voutaddress; CBlock block; CBlockIndex *pindex; uint64_t value; uint32_t txtime; char voutaddr[64],destaddr[64]; int32_t txn_count,vout; uint256 txid; CScript opret; int8_t segid = -1; if ( height > 0 && (pindex= hush_chainactive(height)) != 0 ) @@ -1312,18 +1289,18 @@ int8_t komodo_segid(int32_t nocache,int32_t height) strcpy(voutaddr,CBitcoinAddress(voutaddress).ToString().c_str()); if ( strcmp(destaddr,voutaddr) == 0 && block.vtx[txn_count-1].vout[0].nValue == value ) { - segid = komodo_segid32(voutaddr) & 0x3f; + segid = hush_segid32(voutaddr) & 0x3f; pindex->segid = segid; - //fprintf(stderr,"komodo_segid.(%d) -> %d\n",height,pindex->segid); + //fprintf(stderr,"hush_segid.(%d) -> %d\n",height,pindex->segid); } - } else fprintf(stderr,"komodo_segid ht.%d couldnt extract voutaddress\n",height); + } else fprintf(stderr,"hush_segid ht.%d couldnt extract voutaddress\n",height); } } } return(segid); } -void komodo_segids(uint8_t *hashbuf,int32_t height,int32_t n) +void hush_segids(uint8_t *hashbuf,int32_t height,int32_t n) { static uint8_t prevhashbuf[100]; static int32_t prevheight; int32_t i; @@ -1334,7 +1311,7 @@ void komodo_segids(uint8_t *hashbuf,int32_t height,int32_t n) memset(hashbuf,0xff,n); for (i=0; i= 0 ) + if ( hush_segid(0,ht) >= 0 ) { n++; percPoS++; @@ -1487,93 +1453,8 @@ arith_uint256 komodo_PoWtarget(int32_t *percPoSp,arith_uint256 target,int32_t he return(bnTarget); } -uint32_t komodo_stake(int32_t validateflag,arith_uint256 bnTarget,int32_t nHeight,uint256 txid,int32_t vout,uint32_t blocktime,uint32_t prevtime,char *destaddr,int32_t PoSperc) -{ - bool fNegative,fOverflow; uint8_t hashbuf[256]; char address[64]; bits256 addrhash; arith_uint256 hashval,mindiff,ratio,coinage256; uint256 hash,pasthash; int32_t segid,minage,i,iter=0; int64_t diff=0; uint32_t txtime,segid32,winner = 0 ; uint64_t value,coinage; - txtime = komodo_txtime2(&value,txid,vout,address); - if ( validateflag == 0 ) - { - //fprintf(stderr,"blocktime.%u -> ",blocktime); - if ( blocktime < prevtime+3 ) - blocktime = prevtime+3; - if ( blocktime < GetTime()-60 ) - blocktime = GetTime()+30; - //fprintf(stderr,"blocktime.%u txtime.%u\n",blocktime,txtime); - } - if ( value == 0 || txtime == 0 || blocktime == 0 || prevtime == 0 ) - { - //fprintf(stderr,"komodo_stake null %.8f %u %u %u\n",dstr(value),txtime,blocktime,prevtime); - return(0); - } - if ( value < SATOSHIDEN ) - return(0); - value /= SATOSHIDEN; - mindiff.SetCompact(STAKING_MIN_DIFF,&fNegative,&fOverflow); - ratio = (mindiff / bnTarget); - if ( (minage= nHeight*3) > 6000 ) // about 100 blocks - minage = 6000; - komodo_segids(hashbuf,nHeight-101,100); - segid32 = komodo_stakehash(&hash,address,hashbuf,txid,vout); - segid = ((nHeight + segid32) & 0x3f); - for (iter=0; iter<600; iter++) - { - if ( blocktime+iter+segid*2 < txtime+minage ) - continue; - diff = (iter + blocktime - txtime - minage); - if ( diff < 0 ) - diff = 60; - else if ( diff > 3600*24*30 ) - { - //printf("diff.%d (iter.%d blocktime.%u txtime.%u minage.%d)\n",(int32_t)diff,iter,blocktime,txtime,(int32_t)minage); - diff = 3600*24*30; - } - if ( iter > 0 ) - diff += segid*2; - coinage = (value * diff); - if ( blocktime+iter+segid*2 > prevtime+480 ) - coinage *= ((blocktime+iter+segid*2) - (prevtime+400)); - coinage256 = arith_uint256(coinage+1); - hashval = ratio * (UintToArith256(hash) / coinage256); - if ( hashval <= bnTarget ) - { - winner = 1; - if ( validateflag == 0 ) - { - //fprintf(stderr,"winner blocktime.%u iter.%d segid.%d\n",blocktime,iter,segid); - blocktime += iter; - blocktime += segid * 2; - } - break; - } - if ( validateflag != 0 ) - { - /*for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&hashval)[i]); - fprintf(stderr," vs "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," segid.%d iter.%d winner.%d coinage.%llu %d ht.%d t.%u v%d diff.%d\n",segid,iter,winner,(long long)coinage,(int32_t)(blocktime - txtime),nHeight,blocktime,(int32_t)value,(int32_t)diff); */ - break; - } - } - //fprintf(stderr,"iterated until i.%d winner.%d\n",i,winner); - if ( 0 && validateflag != 0 ) - { - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&hashval)[i]); - fprintf(stderr," vs "); - for (i=31; i>=24; i--) - fprintf(stderr,"%02x",((uint8_t *)&bnTarget)[i]); - fprintf(stderr," segid.%d iter.%d winner.%d coinage.%llu %d ht.%d t.%u v%d diff.%d ht.%d\n",segid,iter,winner,(long long)coinage,(int32_t)(blocktime - txtime),nHeight,blocktime,(int32_t)value,(int32_t)diff,nHeight); - } - if ( nHeight < 10 ) - return(blocktime); - return(blocktime * winner); -} - +// lulz int32_t komodo_is_PeiceOfShit() { return(1); } -bool GetStakeParams(const CTransaction &stakeTx, CStakeParams &stakeParams); -bool ValidateMatchingStake(const CTransaction &ccTx, uint32_t voutNum, const CTransaction &stakeTx, bool &cheating); uint64_t komodo_notarypayamount(int32_t nHeight, int64_t notarycount) { @@ -1908,13 +1789,13 @@ int64_t komodo_checkcommission(CBlock *pblock,int32_t height) return(checktoshis); } -bool KOMODO_TEST_ASSETCHAIN_SKIP_POW = 0; +bool HUSH_TEST_ASSETCHAIN_SKIP_POW = 0; int32_t komodo_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; - if ( KOMODO_TEST_ASSETCHAIN_SKIP_POW == 0 && Params().NetworkIDString() == "regtest" ) - KOMODO_TEST_ASSETCHAIN_SKIP_POW = 1; + if ( HUSH_TEST_ASSETCHAIN_SKIP_POW == 0 && Params().NetworkIDString() == "regtest" ) + HUSH_TEST_ASSETCHAIN_SKIP_POW = 1; if ( !CheckEquihashSolution(pblock, Params()) ) { fprintf(stderr,"komodo_checkPOW slowflag.%d ht.%d CheckEquihashSolution failed\n",slowflag,height); @@ -1950,7 +1831,7 @@ int32_t komodo_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height) } } } else if ( possible == 0 || SMART_CHAIN_SYMBOL[0] != 0 ) { - if ( KOMODO_TEST_ASSETCHAIN_SKIP_POW ) + if ( HUSH_TEST_ASSETCHAIN_SKIP_POW ) return(0); if ( ASSETCHAINS_STAKED == 0 ) return(-1); diff --git a/src/hush_defs.h b/src/hush_defs.h index 3c5191ea8..7bf98cff7 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -497,13 +497,9 @@ extern uint16_t ASSETCHAINS_P2PPORT,ASSETCHAINS_RPCPORT; extern uint32_t ASSETCHAIN_INIT, ASSETCHAINS_MAGIC; extern int32_t ASSETCHAINS_LWMAPOS, ASSETCHAINS_SAPLING, ASSETCHAINS_OVERWINTER,ASSETCHAINS_BLOCKTIME; extern uint64_t ASSETCHAINS_SUPPLY, ASSETCHAINS_FOUNDERS_REWARD; - extern int32_t ASSETCHAINS_LWMAPOS, ASSETCHAINS_SAPLING, ASSETCHAINS_OVERWINTER,ASSETCHAINS_BLOCKTIME; -extern int32_t KOMODO_BLOCK_POSUNITS, KOMODO_CONSECUTIVE_POS_THRESHOLD, KOMODO_NOPOS_THRESHHOLD; - extern uint64_t ASSETCHAINS_TIMELOCKGTE; extern uint32_t ASSETCHAINS_ALGO,ASSETCHAINS_EQUIHASH,HUSH_INITDONE; - extern int32_t HUSH_MININGTHREADS,HUSH_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,HUSH_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,HUSH_NSPV; extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET; extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2]; @@ -512,14 +508,11 @@ extern uint32_t ASSETCHAINS_NONCESHIFT[], ASSETCHAINS_HASHESPERROUND[]; extern std::string NOTARY_PUBKEY,ASSETCHAINS_OVERRIDE_PUBKEY,ASSETCHAINS_SCRIPTPUB; extern uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_MARMARA; extern std::vector ASSETCHAINS_PRICES,ASSETCHAINS_STOCKS; - extern uint256 HUSH_EARLYTXID; - extern int32_t HUSH_CONNECTING,HUSH_CCACTIVATE,KOMODO_DEALERNODE; extern uint32_t ASSETCHAINS_CC; extern std::string CCerror,ASSETCHAINS_CCLIB; extern uint8_t ASSETCHAINS_CCDISABLES[256]; - extern int32_t USE_EXTERNAL_PUBKEY; extern std::string NOTARY_PUBKEY,NOTARY_ADDRESS; extern std::string DONATION_PUBKEY; @@ -551,15 +544,15 @@ int32_t komodo_kvsearch(uint256 *refpubkeyp,int32_t current_height,uint32_t *fla uint32_t hush_blocktime(uint256 hash); int32_t hush_longestchain(); int32_t hush_dpowconfs(int32_t height,int32_t numconfs); -int8_t komodo_segid(int32_t nocache,int32_t height); -int32_t komodo_heightpricebits(uint64_t *seedp,uint32_t *heightbits,int32_t nHeight); +int8_t hush_segid(int32_t nocache,int32_t height); +int32_t hush_heightpricebits(uint64_t *seedp,uint32_t *heightbits,int32_t nHeight); char *komodo_pricename(char *name,int32_t ind); int32_t komodo_priceind(const char *symbol); int32_t komodo_pricesinit(); int64_t komodo_priceave(int64_t *tmpbuf,int64_t *correlated,int32_t cskip); int64_t komodo_pricecorrelated(uint64_t seed,int32_t ind,uint32_t *rawprices,int32_t rawskip,uint32_t *nonzprices,int32_t smoothwidth); int32_t hush_nextheight(); -uint32_t komodo_heightstamp(int32_t height); +uint32_t hush_heightstamp(int32_t height); int64_t komodo_pricemult(int32_t ind); int32_t komodo_priceget(int64_t *buf64,int32_t ind,int32_t height,int32_t numblocks); int32_t hush_currentheight(); diff --git a/src/hush_events.h b/src/hush_events.h index 31655109a..a1c7c3513 100644 --- a/src/hush_events.h +++ b/src/hush_events.h @@ -135,11 +135,11 @@ void hush_event_rewind(struct hush_state *sp,char *symbol,int32_t height) struct hush_event *ep; if ( sp != 0 ) { - if ( SMART_CHAIN_SYMBOL[0] == 0 && height <= KOMODO_LASTMINED && prevKOMODO_LASTMINED != 0 ) + if ( SMART_CHAIN_SYMBOL[0] == 0 && height <= HUSH_LASTMINED && prevHUSH_LASTMINED != 0 ) { - printf("undo KOMODO_LASTMINED %d <- %d\n",KOMODO_LASTMINED,prevKOMODO_LASTMINED); - KOMODO_LASTMINED = prevKOMODO_LASTMINED; - prevKOMODO_LASTMINED = 0; + printf("undo HUSH_LASTMINED %d <- %d\n",HUSH_LASTMINED,prevHUSH_LASTMINED); + HUSH_LASTMINED = prevHUSH_LASTMINED; + prevHUSH_LASTMINED = 0; } while ( sp->Hush_events != 0 && sp->Hush_numeventss > 0 ) { diff --git a/src/hush_gateway.h b/src/hush_gateway.h index d1c245535..1db0cb454 100644 --- a/src/hush_gateway.h +++ b/src/hush_gateway.h @@ -119,7 +119,7 @@ void komodo_paxdelete(struct pax_transaction *pax) void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t fiatoshis,uint8_t *rmd160,uint256 txid,uint16_t vout,uint8_t type,int32_t height,int32_t otherheight,char *source,int32_t approved) // assetchain context { struct pax_transaction *pax; uint8_t buf[35]; int32_t addflag = 0; struct hush_state *sp; char str[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN],*s; - //if ( KOMODO_PAX == 0 ) + //if ( HUSH_PAX == 0 ) // return; //if ( strcmp(symbol,SMART_CHAIN_SYMBOL) != 0 ) // return; @@ -211,7 +211,7 @@ int32_t komodo_rwapproval(int32_t rwflag,uint8_t *opretbuf,struct pax_transactio int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int64_t *srcvalues,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *rmd160s,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo) { struct pax_transaction p,*pax; int32_t i,n=0,j,len=0,incr,height,otherheight; uint8_t type,rmd160[20]; uint64_t fiatoshis; char symbol[HUSH_SMART_CHAIN_MAXLEN]; - //if ( KOMODO_PAX == 0 ) + //if ( HUSH_PAX == 0 ) // return(0); incr = 34 + (iskomodo * (2*sizeof(fiatoshis) + 2*sizeof(height) + 20 + 4)); //41e77b91cb68dc2aa02fa88550eae6b6d44db676a7e935337b6d1392d9718f03cb0200305c90660400000000fbcbeb1f000000bde801006201000058e7945ad08ddba1eac9c9b6c8e1e97e8016a2d152 @@ -304,7 +304,7 @@ int32_t komodo_paxcmp(char *symbol,int32_t kmdheight,uint64_t value,uint64_t che uint64_t komodo_paxtotal() { struct pax_transaction *pax,*pax2,*tmp,*tmp2; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN],*str; int32_t i,ht; int64_t checktoshis; uint64_t seed,total = 0; struct hush_state *basesp; - if ( HUSH_PASSPORT_INITDONE == 0 ) //KOMODO_PAX == 0 || + if ( HUSH_PASSPORT_INITDONE == 0 ) //HUSH_PAX == 0 || return(0); if ( komodo_isrealtime(&ht) == 0 ) return(0); @@ -429,7 +429,7 @@ static int _paxorder(const void *a,const void *b) int32_t komodo_pending_withdraws(char *opretstr) // todo: enforce deterministic order { struct pax_transaction *pax,*pax2,*tmp,*paxes[64]; uint8_t opretbuf[16384*4]; int32_t i,n,ht,len=0; uint64_t total = 0; - if ( KOMODO_PAX == 0 || HUSH_PASSPORT_INITDONE == 0 ) + if ( HUSH_PAX == 0 || HUSH_PASSPORT_INITDONE == 0 ) return(0); if ( komodo_isrealtime(&ht) == 0 || SMART_CHAIN_SYMBOL[0] != 0 ) return(0); @@ -478,7 +478,7 @@ int32_t komodo_pending_withdraws(char *opretstr) // todo: enforce deterministic int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo) { struct pax_transaction *pax,*tmp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; uint8_t *script,opcode,opret[16384*4],data[16384*4]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct hush_state *sp; uint64_t available,deposited,issued,withdrawn,approved,redeemed,mask,sum = 0; - if ( HUSH_PASSPORT_INITDONE == 0 )//KOMODO_PAX == 0 || + if ( HUSH_PASSPORT_INITDONE == 0 )//HUSH_PAX == 0 || return(0); struct hush_state *kmdsp = hush_stateptrget((char *)"KMD"); sp = hush_stateptr(symbol,dest); @@ -849,7 +849,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 komodo_kvupdate(opretbuf,opretlen,value); return("kv"); } - else if ( SMART_CHAIN_SYMBOL[0] == 0 && KOMODO_PAX == 0 ) + else if ( SMART_CHAIN_SYMBOL[0] == 0 && HUSH_PAX == 0 ) return("nopax"); if ( opretbuf[0] == 'D' ) { @@ -1223,7 +1223,7 @@ void hush_stateind_set(struct hush_state *sp,uint32_t *inds,int32_t n,uint8_t *f } else if ( func == 'V' ) { - if ( KOMODO_PAX != 0 && numv > numV-1440 ) + if ( HUSH_PAX != 0 && numv > numV-1440 ) doissue = 1; numv++; } @@ -1524,7 +1524,7 @@ void hush_passport_iteration() RTmask |= (1LL << baseid); memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1])); } - else if ( KOMODO_PAX != 0 && (time(NULL)-buf[2]) > 60 && SMART_CHAIN_SYMBOL[0] != 0 ) + else if ( HUSH_PAX != 0 && (time(NULL)-buf[2]) > 60 && SMART_CHAIN_SYMBOL[0] != 0 ) fprintf(stderr,"[%s]: %s not RT %u %u %d\n",SMART_CHAIN_SYMBOL,base,buf[0],buf[1],(int32_t)(time(NULL)-buf[2])); } //else fprintf(stderr,"%s size error RT\n",base); fclose(fp); @@ -1606,7 +1606,7 @@ void komodo_PriceCache_shift() memcpy(PriceCache[0],Mineropret.data(),Mineropret.size()); } -int32_t _komodo_heightpricebits(uint64_t *seedp,uint32_t *heightbits,CBlock *block) +int32_t _hush_heightpricebits(uint64_t *seedp,uint32_t *heightbits,CBlock *block) { CTransaction tx; int32_t numvouts; std::vector vopret; tx = block->vtx[0]; @@ -1622,8 +1622,8 @@ int32_t _komodo_heightpricebits(uint64_t *seedp,uint32_t *heightbits,CBlock *blo return(-1); } -// komodo_heightpricebits() extracts the price data in the coinbase for nHeight -int32_t komodo_heightpricebits(uint64_t *seedp,uint32_t *heightbits,int32_t nHeight) +// hush_heightpricebits() extracts the price data in the coinbase for nHeight +int32_t hush_heightpricebits(uint64_t *seedp,uint32_t *heightbits,int32_t nHeight) { CBlockIndex *pindex; CBlock block; if ( seedp != 0 ) @@ -1632,7 +1632,7 @@ int32_t komodo_heightpricebits(uint64_t *seedp,uint32_t *heightbits,int32_t nHei { if ( komodo_blockload(block,pindex) == 0 ) { - return(_komodo_heightpricebits(seedp,heightbits,&block)); + return(_hush_heightpricebits(seedp,heightbits,&block)); } } fprintf(stderr,"couldnt get pricebits for %d\n",nHeight); @@ -1731,7 +1731,7 @@ CScript komodo_mineropret(int32_t nHeight) sleep(61); } } - if ( komodo_heightpricebits(0,prevbits,nHeight-1) > 0 ) + if ( hush_heightpricebits(0,prevbits,nHeight-1) > 0 ) { memcpy(pricebits,Mineropret.data(),Mineropret.size()); memset(maxflags,0,sizeof(maxflags)); @@ -1813,7 +1813,7 @@ int32_t komodo_opretvalidate(const CBlock *block,CBlockIndex * const previndex,i btcgbp = (double)pricebits[2]/10000; btceur = (double)pricebits[3]/10000; fprintf(stderr,"ht.%d: lag.%d %.4f USD, %.4f GBP, %.4f EUR, GBPUSD %.6f, EURUSD %.6f, EURGBP %.6f [%d]\n",nHeight,lag,btcusd,btcgbp,btceur,btcusd/btcgbp,btcusd/btceur,btcgbp/btceur,lag2); - if ( komodo_heightpricebits(0,prevbits,nHeight-1) > 0 ) + if ( hush_heightpricebits(0,prevbits,nHeight-1) > 0 ) { if ( nHeight < testchain_exemption ) { @@ -2743,7 +2743,7 @@ void komodo_pricesupdate(int32_t height,CBlock *pblock) tmpbuf = (int64_t *)calloc(sizeof(int64_t),2*PRICES_DAYWINDOW); fprintf(stderr,"prices update: numprices.%d %p %p\n",numprices,ptr32,ptr64); } - if ( _komodo_heightpricebits(&seed,rawprices,pblock) == numprices ) + if ( _hush_heightpricebits(&seed,rawprices,pblock) == numprices ) { //for (ind=0; ind KOMODO_PAXMAX ) + if ( basevolume > HUSH_PAXMAX ) { printf("paxcalc overflow %.8f\n",dstr(basevolume)); return(0); @@ -559,7 +559,7 @@ int32_t komodo_kmdbtcusd(int32_t rwflag,uint64_t *kmdbtcp,uint64_t *btcusdp,int3 uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint64_t basevolume) { int32_t i,j,k,ind,zeroes,numvotes,wt,nonz; int64_t delta; uint64_t lastprice,tolerance,den,densum,sum=0,votes[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],btcusds[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtcs[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtc,btcusd; - if ( basevolume > KOMODO_PAXMAX ) + if ( basevolume > HUSH_PAXMAX ) { printf("komodo_paxprice overflow %.8f\n",dstr(basevolume)); return(0); diff --git a/src/hush_structs.h b/src/hush_structs.h index 64a7689f3..6d872a7d1 100644 --- a/src/hush_structs.h +++ b/src/hush_structs.h @@ -28,7 +28,7 @@ #ifndef HUSH_STRUCTS_H #define HUSH_STRUCTS_H #define GENESIS_NBITS 0x1f00ffff -#define KOMODO_MINRATIFY ((height < 90000) ? 7 : 11) +#define HUSH_MINRATIFY ((height < 90000) ? 7 : 11) #define HUSH_NOTARIES_HARDCODED 180000 // DONT CHANGE #define HUSH_MAXBLOCKS 250000 // DONT CHANGE #define HUSH_EVENT_RATIFY 'P' diff --git a/src/main.cpp b/src/main.cpp index 60fefb404..beab6356a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3247,8 +3247,6 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin } bool fScriptChecks = (!fCheckpointsEnabled || pindex->GetHeight() >= Checkpoints::GetTotalBlocksEstimate(chainparams.Checkpoints())); - //if ( KOMODO_TESTNET_EXPIRATION != 0 && pindex->GetHeight() > KOMODO_TESTNET_EXPIRATION ) // "testnet" - // return(false); // Do not allow blocks that contain transactions which 'overwrite' older transactions, // unless those are already completely spent. BOOST_FOREACH(const CTransaction& tx, block.vtx) { diff --git a/src/miner.cpp b/src/miner.cpp index 80ec249d8..99b90cad9 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -980,7 +980,7 @@ int32_t komodo_baseid(char *origbase); int32_t komodo_eligiblenotary(uint8_t pubkeys[66][33],int32_t *mids,uint32_t *blocktimes,int32_t *nonzpkeysp,int32_t height); arith_uint256 komodo_PoWtarget(int32_t *percPoSp,arith_uint256 target,int32_t height,int32_t goalperc); int32_t FOUND_BLOCK,KOMODO_MAYBEMINED; -extern int32_t KOMODO_LASTMINED,HUSH_INSYNC; +extern int32_t HUSH_LASTMINED,HUSH_INSYNC; int32_t roundrobin_delay; arith_uint256 HASHTarget,HASHTarget_POW; @@ -1248,9 +1248,9 @@ void static BitcoinMiner() if ( mids[j] == notaryid ) break; if ( j == 65 ) - KOMODO_LASTMINED = 0; + HUSH_LASTMINED = 0; } else fprintf(stderr,"no nonz pubkeys\n"); - if ( (Mining_height >= 235300 && Mining_height < 236000) || (j == 65 && Mining_height > KOMODO_MAYBEMINED+1 && Mining_height > KOMODO_LASTMINED+64) ) + if ( (Mining_height >= 235300 && Mining_height < 236000) || (j == 65 && Mining_height > KOMODO_MAYBEMINED+1 && Mining_height > HUSH_LASTMINED+64) ) { HASHTarget = arith_uint256().SetCompact(HUSH_MINDIFF_NBITS); fprintf(stderr,"I am the chosen one for %s ht.%d\n",SMART_CHAIN_SYMBOL,pindexPrev->GetHeight()+1); diff --git a/src/net.h b/src/net.h index 8fa29d8cc..f9da3a9ff 100644 --- a/src/net.h +++ b/src/net.h @@ -42,7 +42,8 @@ #include #include #include -// Enable WolfSSL Support for Hush +// Enable side-channel resistant WolfSSL Support for Hush +#define ECC_TIMING_RESISTANT 420 #include #include diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 8c3330d9d..5e4d5c024 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -151,7 +151,7 @@ UniValue blockheaderToJSON(const CBlockIndex* blockindex) result.push_back(Pair("bits", strprintf("%08x", blockindex->nBits))); result.push_back(Pair("difficulty", GetDifficulty(blockindex))); result.push_back(Pair("chainwork", blockindex->chainPower.chainWork.GetHex())); - result.push_back(Pair("segid", (int)komodo_segid(0,blockindex->GetHeight()))); + result.push_back(Pair("segid", (int)hush_segid(0,blockindex->GetHeight()))); if (blockindex->pprev) result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); @@ -178,7 +178,7 @@ UniValue blockToDeltasJSON(const CBlock& block, const CBlockIndex* blockindex) result.push_back(Pair("height", blockindex->GetHeight())); result.push_back(Pair("version", block.nVersion)); result.push_back(Pair("merkleroot", block.hashMerkleRoot.GetHex())); - result.push_back(Pair("segid", (int)komodo_segid(0,blockindex->GetHeight()))); + result.push_back(Pair("segid", (int)hush_segid(0,blockindex->GetHeight()))); UniValue deltas(UniValue::VARR); @@ -299,7 +299,7 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool tx result.push_back(Pair("height", blockindex->GetHeight())); result.push_back(Pair("version", block.nVersion)); result.push_back(Pair("merkleroot", block.hashMerkleRoot.GetHex())); - result.push_back(Pair("segid", (int)komodo_segid(0,blockindex->GetHeight()))); + result.push_back(Pair("segid", (int)hush_segid(0,blockindex->GetHeight()))); result.push_back(Pair("finalsaplingroot", block.hashFinalSaplingRoot.GetHex())); UniValue txs(UniValue::VARR); BOOST_FOREACH(const CTransaction&tx, block.vtx) @@ -1105,12 +1105,12 @@ UniValue paxprice(const UniValue& params, bool fHelp, const CPubKey& mypk) { int32_t height,i,n,width,numpricefeeds = -1; uint64_t seed,ignore,rngval; uint32_t rawprices[1440*6],*ptr; int64_t *tmpbuf; width = numblocks+PRICES_DAYWINDOW*2+PRICES_SMOOTHWIDTH; // need 2*PRICES_DAYWINDOW previous raw price points to calc PRICES_DAYWINDOW correlated points to calc, in turn, smoothed point - komodo_heightpricebits(&seed,rawprices,firstheight + numblocks - 1); + hush_heightpricebits(&seed,rawprices,firstheight + numblocks - 1); if ( firstheight < width ) return(-1); for (i=0; i 0 ) + if ( (n= hush_heightpricebits(0,rawprices,ht)) > 0 ) { if ( n != numpricefeeds ) throw JSONRPCError(RPC_INVALID_PARAMETER, "numprices != first numprices"); diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 0d6ad53e1..1a65565b7 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -62,17 +62,14 @@ int32_t hush_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *tx bool komodo_txnotarizedconfirmed(uint256 txid); uint32_t hush_chainactive_timestamp(); int32_t hush_whoami(char *pubkeystr,int32_t height,uint32_t timestamp); -extern int32_t KOMODO_LASTMINED,HUSH_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; +extern int32_t HUSH_LASTMINED,HUSH_LONGESTCHAIN,IS_HUSH_NOTARY,HUSH_INSYNC; extern char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; -uint32_t komodo_segid32(char *coinaddr); +uint32_t hush_segid32(char *coinaddr); int64_t hush_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height); int32_t notarizedtxid_height(char *dest,char *txidstr,int32_t *hushnotarized_heightp); uint64_t komodo_notarypayamount(int32_t nHeight, int64_t notarycount); int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp); -// This is the last version of upstream that was merged in -// We only cherry-pick since then -#define KOMODO_VERSION "0.5.0" extern uint16_t ASSETCHAINS_P2PPORT,ASSETCHAINS_RPCPORT; extern uint32_t ASSETCHAINS_CC; extern uint32_t ASSETCHAINS_MAGIC,ASSETCHAINS_ALGO; @@ -280,8 +277,8 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) char pubkeystr[65]; int32_t notaryid; std::string notaryname; if( (notaryid= hush_whoami(pubkeystr,(int32_t)chainActive.LastTip()->GetHeight(),hush_chainactive_timestamp())) >= 0 ) { obj.push_back(Pair("notaryid", notaryid)); - if ( KOMODO_LASTMINED != 0 ) - obj.push_back(Pair("lastmined", KOMODO_LASTMINED)); + if ( HUSH_LASTMINED != 0 ) + obj.push_back(Pair("lastmined", HUSH_LASTMINED)); } obj.push_back(Pair("pubkey", NOTARY_PUBKEY)); } @@ -496,7 +493,7 @@ UniValue validateaddress(const UniValue& params, bool fHelp, const CPubKey& mypk CScript scriptPubKey = GetScriptForDestination(dest); ret.push_back(Pair("scriptPubKey", HexStr(scriptPubKey.begin(), scriptPubKey.end()))); - ret.push_back(Pair("segid", (int32_t)komodo_segid32((char *)params[0].get_str().c_str()) & 0x3f)); + ret.push_back(Pair("segid", (int32_t)hush_segid32((char *)params[0].get_str().c_str()) & 0x3f)); #ifdef ENABLE_WALLET isminetype mine = pwalletMain ? IsMine(*pwalletMain, dest) : ISMINE_NO; ret.push_back(Pair("ismine", (mine & ISMINE_SPENDABLE) ? true : false)); diff --git a/src/txdb.cpp b/src/txdb.cpp index e3fbe01e5..dc28b0512 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -426,7 +426,7 @@ bool CBlockTreeDB::ReadAddressIndex(uint160 addressHash, int type, } bool getAddressFromIndex(const int &type, const uint160 &hash, std::string &address); -uint32_t komodo_segid32(char *coinaddr); +uint32_t hush_segid32(char *coinaddr); #define DECLARE_IGNORELIST std::map ignoredMap = { \ {"RReUxSs5hGE39ELU23DfydX8riUuzdrHAE", 1}, \ @@ -580,7 +580,7 @@ UniValue CBlockTreeDB::Snapshot(int top) char amount[32]; sprintf(amount, "%.8f", (double) it->first / COIN); obj.push_back( make_pair("amount", amount) ); - obj.push_back( make_pair("segid",(int32_t)komodo_segid32((char *)it->second.c_str()) & 0x3f) ); + obj.push_back( make_pair("segid",(int32_t)hush_segid32((char *)it->second.c_str()) & 0x3f) ); addressesSorted.push_back(obj); topN++; // If requested, only show top N addresses in output JSON diff --git a/src/wallet-utility.cpp b/src/wallet-utility.cpp index 79017e645..059a1b84e 100644 --- a/src/wallet-utility.cpp +++ b/src/wallet-utility.cpp @@ -8,8 +8,8 @@ #include "base58.h" #include "wallet/crypter.h" #include - #include "hush_defs.h" + char SMART_CHAIN_SYMBOL[HUSH_SMART_CHAIN_MAXLEN]; int64_t MAX_MONEY = 200000000 * 100000000LL; uint64_t ASSETCHAINS_SUPPLY; @@ -19,12 +19,10 @@ uint32_t ASSETCHAIN_INIT,ASSETCHAINS_CC; uint32_t ASSETCHAINS_MAGIC = 2387029918; uint32_t ASSETCHAINS_EQUIHASH = 0; uint32_t ASSETCHAINS_ALGO = 0; -int32_t ASSETCHAINS_LWMAPOS = 0; -int32_t ASSETCHAINS_OVERWINTER = 227520; -int32_t ASSETCHAINS_SAPLING = 227520; -int32_t HUSH_TESTNODE = 0; -int32_t KOMODO_BLOCK_POSUNITS = 1000; - +int32_t ASSETCHAINS_LWMAPOS = 0; +int32_t ASSETCHAINS_OVERWINTER = 227520; +int32_t ASSETCHAINS_SAPLING = 227520; +int32_t HUSH_TESTNODE = 0; unsigned int MAX_BLOCK_SIGOPS = 20000; void show_help() diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index a8029feaf..a7cb28d4b 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -62,7 +62,7 @@ extern std::string ASSETCHAINS_OVERRIDE_PUBKEY; const std::string ADDR_TYPE_SAPLING = "sapling"; const std::string ADDR_TYPE_AMNESIA = "amnesia"; extern int32_t HUSH_INSYNC; -uint32_t komodo_segid32(char *coinaddr); +uint32_t hush_segid32(char *coinaddr); int32_t hush_dpowconfs(int32_t height,int32_t numconfs); int32_t hush_isnotaryvout(char *coinaddr,uint32_t tiptime); // from ac_private chains only CBlockIndex *komodo_getblockindex(uint256 hash); @@ -569,7 +569,7 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp, const CPubKey& mypk) #define DRAGON_MAXSCRIPTSIZE 10001 uint64_t PAX_fiatdest(uint64_t *seedp,int32_t tokomodo,char *destaddr,uint8_t pubkey37[37],char *coinaddr,int32_t height,char *base,int64_t fiatoshis); int32_t komodo_opreturnscript(uint8_t *script,uint8_t type,uint8_t *opret,int32_t opretlen); -extern int32_t KOMODO_PAX; +extern int32_t HUSH_PAX; int32_t komodo_is_issuer(); int32_t dragon_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp); int32_t komodo_isrealtime(int32_t *kmdheightp); @@ -728,7 +728,7 @@ UniValue paxdeposit(const UniValue& params, bool fHelp, const CPubKey& mypk) { uint64_t available,deposited,issued,withdrawn,approved,redeemed,seed,komodoshis = 0; int32_t height; char destaddr[64]; uint8_t i,pubkey37[33]; bool fSubtractFeeFromAmount = false; - if ( KOMODO_PAX == 0 ) + if ( HUSH_PAX == 0 ) { throw runtime_error("paxdeposit disabled without -pax"); } @@ -2842,7 +2842,7 @@ UniValue resendwallettransactions(const UniValue& params, bool fHelp, const CPub return result; } -extern uint32_t komodo_segid32(char *coinaddr); +extern uint32_t hush_segid32(char *coinaddr); UniValue listunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) { @@ -2946,7 +2946,7 @@ UniValue listunspent(const UniValue& params, bool fHelp, const CPubKey& mypk) if (fValidAddress) { entry.push_back(Pair("address", EncodeDestination(address))); - entry.push_back(Pair("segid", (int)komodo_segid32((char*)EncodeDestination(address).c_str()) & 0x3f )); + entry.push_back(Pair("segid", (int)hush_segid32((char*)EncodeDestination(address).c_str()) & 0x3f )); if (pwalletMain->mapAddressBook.count(address)) entry.push_back(Pair("account", pwalletMain->mapAddressBook[address].name)); @@ -7756,7 +7756,7 @@ UniValue getbalance64(const UniValue& params, bool fHelp, const CPubKey& mypk) nValue = out.tx->vout[out.i].nValue; if ( ExtractDestination(out.tx->vout[out.i].scriptPubKey, address) ) { - segid = (komodo_segid32((char *)CBitcoinAddress(address).ToString().c_str()) & 0x3f); + segid = (hush_segid32((char *)CBitcoinAddress(address).ToString().c_str()) & 0x3f); if ( out.nDepth < 100 ) nValues2[segid] += nValue, total2 += nValue; else nValues[segid] += nValue, total += nValue; From d6b850a8551361634483a9b3b620b183d110fd15 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 11:15:50 -0500 Subject: [PATCH 258/277] Add protipz for hushdevz --- DEVELOPING.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/DEVELOPING.md b/DEVELOPING.md index b686910aa..0a10da9f6 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -11,6 +11,36 @@ To make it use as many CPU threads as you have: ./build.sh -j$(nproc) # assumes linux ./build.sh -j8 # use a fixed 8 threads, more portable +This is dangerous! You need about 2GB of RAM per thread, plus all the +other programs and Operating System overhead. A good rule of thumb is: + +Divide how many GBs of RAM you have by 2, subtract one. Use that many jobs. + + +## Dealing with dependency changes + +Let's say you change a dependency and want the compile the notice. If your +change is outside of the main Hush source code, in ./src, simply running +`make` will not notice, and sometimes not even `build.sh`. You can always +do a fresh clone or `make clean`, but that will take a lot of time. Those +methods are actually best for Continuous Integration systems, but to help +reduce the time a developer has to wait, here are some PROTIPs. + + +If you are changing how a dependency is built, you should remove the entire directory like this: + + rm -rf depends/work/build/x86_64-unknown-linux-gnu/wolfssl/ + +The above will delete the entire source code of wolfssl dependency on `x86_64` +but it will keep the tar.gz and you will not need to download it again. If +you are testing a change in URL or SHA256, you will want to force it to download +again: + + rm -rf depends/sources/wolfssl*.tar.gz + +Now when you run `build.sh` again, you will be able to test your changes. + + ## Good Hygiene To avoid weird build system issues, it's often good to run: From f60a3e125e80102de76d87c743547797317c455a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 13:05:18 -0500 Subject: [PATCH 259/277] cleanup makefile --- Makefile.am | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/Makefile.am b/Makefile.am index 307eeffa4..7b4d44e2d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -34,13 +34,11 @@ COVERAGE_INFO = baseline_filtered_combined.info baseline.info block_test.info \ leveldb_baseline.info test_bitcoin_filtered.info total_coverage.info \ baseline_filtered.info block_test_filtered.info \ leveldb_baseline_filtered.info test_bitcoin_coverage.info test_bitcoin.info -# zcash-gtest.info zcash-gtest_filtered.info zcash-gtest_coverage.info else COVERAGE_INFO = baseline_filtered_combined.info baseline.info block_test.info \ leveldb_baseline.info test_bitcoin_filtered.info total_coverage.info \ baseline_filtered.info \ - leveldb_baseline_filtered.info test_bitcoin_coverage.info test_bitcoin.info \ - #zcash-gtest.info zcash-gtest_filtered.info zcash-gtest_coverage.info + leveldb_baseline_filtered.info test_bitcoin_coverage.info test_bitcoin.info endif dist-hook: @@ -205,17 +203,12 @@ endif test_bitcoin_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -o $@ -if ! BUILD_DARWIN -zcash-gtest_coverage.info: baseline_filtered_combined.info zcash-gtest_filtered.info - $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a zcash-gtest_filtered.info -o $@ -endif - if BUILD_DARWIN -total_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info zcash-gtest_filtered.info block_test_filtered.info - $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -a zcash-gtest_filtered.info -a block_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt +total_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info block_test_filtered.info + $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -a block_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt else -total_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info zcash-gtest_filtered.info block_test_filtered.info - $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -a zcash-gtest_filtered.info -a block_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt +total_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info block_test_filtered.info + $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -a block_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt endif @@ -223,21 +216,14 @@ test_bitcoin.coverage/.dirstamp: test_bitcoin_coverage.info $(GENHTML) -s $< -o $(@D) @touch $@ -if TARGET_DARWIN -zcash-gtest.coverage/.dirstamp: zcash-gtest_coverage.info - $(GENHTML) -s $< -o $(@D) - @touch $@ -cov-zcash: zcash-gtest.coverage/.dirstamp -endif - total.coverage/.dirstamp: total_coverage.info $(GENHTML) -s $< -o $(@D) @touch $@ if BUILD_DARWIN -cov: test_bitcoin.coverage/.dirstamp cov-zcash total.coverage/.dirstamp +cov: test_bitcoin.coverage/.dirstamp total.coverage/.dirstamp else -cov: test_bitcoin.coverage/.dirstamp cov-zcash total.coverage/.dirstamp +cov: test_bitcoin.coverage/.dirstamp total.coverage/.dirstamp endif endif @@ -255,4 +241,6 @@ install-exec-hook: DISTCHECK_CONFIGURE_FLAGS = --enable-man clean-local: - rm -rf test_bitcoin.coverage/ zcash-gtest.coverage/ total.coverage/ + rm -rf test_bitcoin.coverage/ total.coverage/ + +# I also heard about a bug in the UNIVAC but it's too big for this comment. -- Duke From 810c0ebe8bb0935a6abe8a4a1939c1530d5547e2 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 13:05:28 -0500 Subject: [PATCH 260/277] update docs --- doc/files.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/files.md b/doc/files.md index 1014b94a5..f1a56bcb9 100644 --- a/doc/files.md +++ b/doc/files.md @@ -8,7 +8,7 @@ * chainstate/*; block chain state database (LevelDB) * database/*: BDB database environment * db.log: wallet database log file -* debug.log: contains debug information and general logging generated by komodod +* debug.log: contains debug information and general logging generated by hushd * fee_estimates.dat: stores statistics used to estimate minimum transaction fees and priorities required for confirmation * peers.dat: peer IP address database (custom format) * wallet.dat: personal wallet (BDB) with keys and transactions From f75bcb3ed33b59f926f620b3edb2bc8411bf1d13 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 13:05:40 -0500 Subject: [PATCH 261/277] update tests --- qa/rpc-tests/test_framework/test_framework.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/qa/rpc-tests/test_framework/test_framework.py b/qa/rpc-tests/test_framework/test_framework.py index 8ae2cab22..6f46ed302 100755 --- a/qa/rpc-tests/test_framework/test_framework.py +++ b/qa/rpc-tests/test_framework/test_framework.py @@ -87,11 +87,11 @@ class BitcoinTestFramework(object): parser = optparse.OptionParser(usage="%prog [options]") parser.add_option("--nocleanup", dest="nocleanup", default=False, action="store_true", - help="Leave komodods and test.* datadir on exit or error") + help="Leave binaries and test.* datadir on exit or error") parser.add_option("--noshutdown", dest="noshutdown", default=False, action="store_true", - help="Don't stop komodods after the test execution") + help="Don't stop nodes after the test execution") parser.add_option("--srcdir", dest="srcdir", default="../../src", - help="Source directory containing komodod/komodo-cli (default: %default)") + help="Source directory containing hushd/hush-cli (default: %default)") parser.add_option("--tmpdir", dest="tmpdir", default=tempfile.mkdtemp(prefix="test"), help="Root directory for datadirs") parser.add_option("--tracerpc", dest="trace_rpc", default=False, action="store_true", @@ -134,7 +134,7 @@ class BitcoinTestFramework(object): stop_nodes(self.nodes) wait_bitcoinds() else: - print("Note: komodods were not stopped and may still be running") + print("Note: hushds were not stopped and may still be running") if not self.options.nocleanup and not self.options.noshutdown: print("Cleaning up") @@ -148,7 +148,7 @@ class BitcoinTestFramework(object): sys.exit(1) -# Test framework for doing p2p comparison testing, which sets up some komodod +# Test framework for doing p2p comparison testing, which sets up some hushd # binaries: # 1 binary: test binary # 2 binaries: 1 test binary, 1 ref binary @@ -162,10 +162,10 @@ class ComparisonTestFramework(BitcoinTestFramework): def add_options(self, parser): parser.add_option("--testbinary", dest="testbinary", - default=os.getenv("BITCOIND", "komodod"), + default=os.getenv("BITCOIND", "hush-smart-chain"), help="bitcoind binary to test") parser.add_option("--refbinary", dest="refbinary", - default=os.getenv("BITCOIND", "komodod"), + default=os.getenv("BITCOIND", "hush-smart-chain"), help="bitcoind binary to use for reference nodes (if any)") def setup_chain(self): From 93d1fd37f71ff22760c2bef2247c3dbca3ccbeb9 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 13:06:01 -0500 Subject: [PATCH 262/277] update manpage script --- contrib/devtools/gen-manpages.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/devtools/gen-manpages.sh b/contrib/devtools/gen-manpages.sh index 4aab1c7ab..494f8da68 100755 --- a/contrib/devtools/gen-manpages.sh +++ b/contrib/devtools/gen-manpages.sh @@ -16,8 +16,8 @@ HUSHVER="v3.6.1" #HUSHVER=$(./src/hushd --version|head -n2|tail -n1|cut -d' ' -f4|cut -d- -f1) # Create a footer file with copyright content. -# This gets autodetected fine for komodod if --version-string is not set, -# but has different outcomes for komodo-cli. +# This gets autodetected fine for hushd if --version-string is not set, +# but has different outcomes for hush-cli. echo "[COPYRIGHT]" > footer.h2m $HUSHD --version | sed -n '1!p' >> footer.h2m From 2485eb6e5ec002ed710554ca255080310687c65b Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 13:06:16 -0500 Subject: [PATCH 263/277] cleanup --- src/cc/customcc.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc/customcc.cpp b/src/cc/customcc.cpp index 213184577..1645a1588 100644 --- a/src/cc/customcc.cpp +++ b/src/cc/customcc.cpp @@ -4,11 +4,11 @@ /* simple stub custom cc - Just update the functions in this file, then from ~/komodo/src/cc + Just update the functions in this file, then from ~/hush3/src/cc - ../komodo-cli -ac_name=CUSTOM stop + ../hush-cli -ac_name=CUSTOM stop ./makecustom - ../komodod -ac_name=CUSTOM -ac_cclib=custom -ac_cc=2 ... + ../hush-smart-chain -ac_name=CUSTOM -ac_cclib=custom -ac_cc=2 ... The above will rebuild komodod and get it running again */ From cf9dc4136166e9c2c17f4cd5817f441e7843fce1 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 13:06:37 -0500 Subject: [PATCH 264/277] Update to WolfSSL 4.6.0 which has XChaCha20 --- depends/packages/wolfssl.mk | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/depends/packages/wolfssl.mk b/depends/packages/wolfssl.mk index 1b5126c10..739fad0ff 100644 --- a/depends/packages/wolfssl.mk +++ b/depends/packages/wolfssl.mk @@ -1,19 +1,25 @@ package=wolfssl -$(package)_version=4.5.0 +$(package)_version=4.6.0 $(package)_download_path=https://github.com/wolfSSL/wolfssl/archive $(package)_download_file=v$($(package)_version)-stable.tar.gz $(package)_file_name=wolfssl-$($(package)_version).tar.gz -$(package)_sha256_hash=7de62300ce14daa0051bfefc7c4d6302f96cabc768b6ae49eda77523b118250c +$(package)_sha256_hash=053aefbb02d0b06b27c5e2df6875b4b587318755b7db9d6aa8d72206b310a848 define $(package)_set_vars $(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)" $(package)_config_opts=--prefix=$(host_prefix) $(package)_config_opts+=--host=$(host) +$(package)_config_opts+=--enable-ecc $(package)_config_opts+=--enable-static $(package)_config_opts+=--enable-debug +$(package)_config_opts+=--enable-sha3 +$(package)_config_opts+=--enable-sha512 $(package)_config_opts+=--enable-tls13 +$(package)_config_opts+=--enable-xchacha # New in 4.6.0 +# TODO: these caused problems #$(package)_config_opts+=--disable-tlsv12 #$(package)_config_opts+=--disable-oldtls + $(package)_config_opts+=--disable-shared $(package)_config_opts+=--disable-examples $(package)_config_opts+=--disable-crypttests @@ -21,9 +27,11 @@ $(package)_config_opts+=--enable-keygen $(package)_config_opts+=--enable-certgen $(package)_config_opts+=--enable-bigcache $(package)_config_opts+=--enable-enckeys +# TODO: can we reduce down to only the normal openssl compat, without these options? $(package)_config_opts+=--enable-opensslall $(package)_config_opts+=--enable-opensslextra -$(package)_config_opts+=--enable-harden +#$(package)_config_opts+=C_EXTRA_FLAGS="-DSPEAK_AND_TRANSACT_FREELY" + endef define $(package)_preprocess_cmds From c9b4dfa9c7b79b9c2355aee83172598f76daf52a Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 13:09:25 -0500 Subject: [PATCH 265/277] Force WolfSSL side-channel resistance There seems to be some build-bug in WolfSSL, such that even though --enable-harden (HARDEN) is default, it's not set correctly in options.h . So we define it correctly just after parsing all other config options BUT BEFORE we load the rest of WolfSSL headers. These will be defined no matter what options are given to wolfssl ./configure: ECC_TIMING_RESISTANT TFM_TIMING_RESISTANT --- src/hush/tlsmanager.cpp | 38 +++++++++++++------------------------- src/hush/tlsmanager.h | 5 +---- src/net.h | 8 ++++++-- 3 files changed, 20 insertions(+), 31 deletions(-) diff --git a/src/hush/tlsmanager.cpp b/src/hush/tlsmanager.cpp index 92e9b6703..8fb8ad66d 100644 --- a/src/hush/tlsmanager.cpp +++ b/src/hush/tlsmanager.cpp @@ -5,10 +5,8 @@ #include #include #include - #include #include - #include "tlsmanager.h" #include "utiltls.h" @@ -70,18 +68,15 @@ static WOLFSSL_DH *get_dh2048(void) return dh; } -DH *tmp_dh_callback(WOLFSSL *ssl, int is_export, int keylength) -{ - LogPrint("tls", "TLS: %s: %s():%d - Using Diffie-Hellman param for PFS: is_export=%d, keylength=%d\n", - __FILE__, __func__, __LINE__, is_export, keylength); +DH *tmp_dh_callback(WOLFSSL *ssl, int is_export, int keylength) { + LogPrint("tls", "TLS: %s: %s():%d - Using Diffie-Hellman param for PFS: is_export=%d, keylength=%d\n", __FILE__, __func__, __LINE__, is_export, keylength); return get_dh2048(); } -int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* ssl, int timeoutSec, unsigned long& err_code) -{ +int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* ssl, int timeoutSec, unsigned long& err_code) { int retOp = 0; - err_code = 0; + err_code = 0; char err_buffer[1024]; while (true) @@ -231,26 +226,23 @@ WOLFSSL* TLSManager::connect(SOCKET hSocket, const CAddress& addrConnect, unsign if ((ssl = wolfSSL_new(tls_ctx_client))) { if (wolfSSL_set_fd(ssl, hSocket)) { int ret = TLSManager::waitFor(SSL_CONNECT, hSocket, ssl, (DEFAULT_CONNECT_TIMEOUT / 1000), err_code); - if (ret == 1) - { + if (ret == 1) { bConnectedTLS = true; + } else { + LogPrint("tls", "%s: timed out waiting for %s\n", __func__, addrConnect.ToString()); } } - } - else - { + } else { err_code = wolfSSL_ERR_get_error(); const char* error_str = wolfSSL_ERR_error_string(err_code, err_buffer); - LogPrint("tls", "TLS: %s: %s():%d - SSL_new failed err: %s\n", - __FILE__, __func__, __LINE__, err_buffer); + LogPrint("tls", "TLS: %s: %s():%d - SSL_new failed err: %s\n", __FILE__, __func__, __LINE__, err_buffer); } if (bConnectedTLS) { LogPrintf("TLS: connection to %s has been established (tlsv = %s 0x%04x / ssl = %s 0x%x ). Using cipher: %s\n", addrConnect.ToString(), wolfSSL_get_version(ssl), wolfSSL_version(ssl), wolfSSL_OpenSSL_version(), wolfSSL_lib_version_hex(), wolfSSL_get_cipher_name(ssl)); } else { - LogPrintf("TLS: %s: %s():%d - TLS connection to %s failed (err_code 0x%X)\n", - __FILE__, __func__, __LINE__, addrConnect.ToString(), err_code); + LogPrintf("TLS: %s: %s():%d - TLS connection to %s timed out\n", __FILE__, __func__, __LINE__, addrConnect.ToString(), err_code); if (ssl) { wolfSSL_free(ssl); @@ -444,13 +436,10 @@ WOLFSSL* TLSManager::accept(SOCKET hSocket, const CAddress& addr, unsigned long& bAcceptedTLS = true; } } - } - else - { + } else { err_code = wolfSSL_ERR_get_error(); const char* error_str = wolfSSL_ERR_error_string(err_code, err_buffer); - LogPrint("tls", "TLS: %s: %s():%d - SSL_new failed err: %s\n", - __FILE__, __func__, __LINE__, err_buffer); + LogPrint("tls", "TLS: %s: %s():%d - SSL_new failed err: %s\n", __FILE__, __func__, __LINE__, err_buffer); } if (bAcceptedTLS) { @@ -463,8 +452,7 @@ WOLFSSL* TLSManager::accept(SOCKET hSocket, const CAddress& addr, unsigned long& LogPrint("tls", "TLS: supporting cipher: %s\n", wolfSSL_CIPHER_get_name(c)); } } else { - LogPrintf("TLS: %s: %s():%d - TLS connection from %s failed (err_code 0x%X)\n", - __FILE__, __func__, __LINE__, addr.ToString(), err_code); + LogPrintf("TLS: %s: %s():%d - TLS connection from %s failed (err_code 0x%X)\n", __FILE__, __func__, __LINE__, addr.ToString(), err_code); if (ssl) { SSL_free(ssl); diff --git a/src/hush/tlsmanager.h b/src/hush/tlsmanager.h index 517ed09a9..8d46f372c 100644 --- a/src/hush/tlsmanager.h +++ b/src/hush/tlsmanager.h @@ -33,10 +33,7 @@ bool operator==(const _NODE_ADDR b) const } } NODE_ADDR, *PNODE_ADDR; -/** - * @brief A class to wrap some of hush specific TLS functionalities used in the net.cpp - * - */ +// A class to wrap some of hush specific TLS functionalities used in the net.cpp class TLSManager { public: diff --git a/src/net.h b/src/net.h index f9da3a9ff..7f97632b0 100644 --- a/src/net.h +++ b/src/net.h @@ -42,9 +42,13 @@ #include #include #include -// Enable side-channel resistant WolfSSL Support for Hush -#define ECC_TIMING_RESISTANT 420 +// Enable WolfSSL Support for Hush #include +// TODO: these are not set correctly by wolfssl for some reason. Ja bless. +#undef ECC_TIMING_RESISTANT +#undef TFM_TIMING_RESISTANT +#define ECC_TIMING_RESISTANT 420 +#define TFM_TIMING_RESISTANT 420 #include class CAddrMan; From c1b0a84b3a2a6bf904c180f10068f5c321f0c866 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 13:29:27 -0500 Subject: [PATCH 266/277] Cleanup dead code and less logspam --- src/main.cpp | 98 +++------------------------------------------------- 1 file changed, 4 insertions(+), 94 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index beab6356a..19c365b08 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5004,68 +5004,6 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C if ( ASSETCHAINS_CC != 0 && !fCheckPOW ) return true; - /* - bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; - if (ASSETCHAINS_CC != 0 ) // CC contracts might refer to transactions in the current block, from a CC spend within the same block and out of order - { - int32_t i,j,rejects=0,lastrejects=0; - //fprintf(stderr,"put block's tx into mempool\n"); - // Copy all non Z-txs in mempool to temporary mempool because there can be tx in local mempool that make the block invalid. - LOCK2(cs_main,mempool.cs); - //fprintf(stderr, "starting... mempoolsize.%ld\n",mempool.size()); - list transactionsToRemove; - BOOST_FOREACH(const CTxMemPoolEntry& e, mempool.mapTx) { - const CTransaction &tx = e.GetTx(); - const uint256 &hash = tx.GetHash(); - if ( tx.vjoinsplit.empty() && tx.vShieldedSpend.empty()) { - transactionsToRemove.push_back(tx); - tmpmempool.addUnchecked(hash,e,true); - } - } - BOOST_FOREACH(const CTransaction& tx, transactionsToRemove) { - list removed; - mempool.remove(tx, removed, false); - } - // add all the txs in the block to the empty mempool. - // CC validation shouldnt (cant) depend on the state of mempool! - while ( 1 ) - { - list removed; - for (i=0; i all tx in mempool\n",lastrejects); - break; - } - //fprintf(stderr,"addtomempool ht.%d for CC checking: n.%d rejects.%d last.%d\n",height,(int32_t)block.vtx.size(),rejects,lastrejects); - lastrejects = rejects; - rejects = 0; - } - //fprintf(stderr,"done putting block's tx into mempool\n"); - } - */ for (uint32_t i = 0; i < block.vtx.size(); i++) { @@ -5082,31 +5020,6 @@ bool CheckBlock(int32_t *futureblockp,int32_t height,CBlockIndex *pindex,const C if (nSigOps > MAX_BLOCK_SIGOPS) return state.DoS(100, error("CheckBlock: out-of-bounds SigOpCount"), REJECT_INVALID, "bad-blk-sigops", true); - /* - if ( fCheckPOW && komodo_check_deposit(height,block,(pindex==0||pindex->pprev==0)?0:pindex->pprev->nTime) < 0 ) - { - //static uint32_t counter; - //if ( counter++ < 100 && ASSETCHAINS_STAKED == 0 ) - // fprintf(stderr,"check deposit rejection\n"); - LogPrintf("CheckBlockHeader komodo_check_deposit error"); - return(false); - } - - if ( ASSETCHAINS_CC != 0 ) - { - LOCK2(cs_main,mempool.cs); - // here we add back all txs from the temp mempool to the main mempool. - BOOST_FOREACH(const CTxMemPoolEntry& e, tmpmempool.mapTx) - { - const CTransaction &tx = e.GetTx(); - const uint256 &hash = tx.GetHash(); - mempool.addUnchecked(hash,e,true); - } - //fprintf(stderr, "finished adding back. mempoolsize.%ld\n",mempool.size()); - // empty the temp mempool for next time. - tmpmempool.clear(); - } - */ return true; } @@ -5130,16 +5043,13 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta unsigned int nNextWork = GetNextWorkRequired(pindexPrev, &block, consensusParams); //if ((nHeight < 340000 || nHeight > 342500) && block.nBits != nNextWork) { if (block.nBits != nNextWork) { - cout << "Incorrect HUSH diffbits at height " << nHeight << - " " << block.nBits << " block.nBits vs. calc " << nNextWork << - " " << block.GetHash().ToString() << " @ " << block.GetBlockTime() << endl; - // Don't use this CLI option unless you know what you are doing -- Duke - //if(!GetArg("-dev-ignore-bad-nbits",false)) { + //cout << "Incorrect HUSH diffbits at height " << nHeight << + // " " << block.nBits << " block.nBits vs. calc " << nNextWork << + // " " << block.GetHash().ToString() << " @ " << block.GetBlockTime() << endl; if (nHeight < 340000) { return state.DoS(100, error("%s: Incorrect diffbits at height %d", __func__, nHeight), REJECT_INVALID, "bad-diffbits"); } else { - LogPrintf("%s: Ignoring nbits calc : %lu\n",__func__, nNextWork ); - LogPrintf("%s: Ignoring nbits block: %lu\n",__func__, block.nBits ); + LogPrintf("%s: Ignoring nbits calc : %lu vs block %lu\n",__func__, nNextWork, block.nBits ); cout << "Ignoring nbits for height=" << nHeight << endl; } } From f0e242632d2a625c77e4659d3d331c0e82eac29f Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 15:05:41 -0500 Subject: [PATCH 267/277] Hide some logspam behind -zdebug --- src/transaction_builder.cpp | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/transaction_builder.cpp b/src/transaction_builder.cpp index fc980d58a..d7ae68069 100644 --- a/src/transaction_builder.cpp +++ b/src/transaction_builder.cpp @@ -4,15 +4,14 @@ // file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html #include "transaction_builder.h" - #include "main.h" #include "pubkey.h" #include "script/sign.h" - #include #include #include #include "zcash/Note.hpp" +extern bool fZDebug; SpendDescriptionInfo::SpendDescriptionInfo( libzcash::SaplingExpandedSpendingKey expsk, @@ -128,9 +127,7 @@ bool TransactionBuilder::SendChangeTo(CTxDestination& changeAddr) boost::optional TransactionBuilder::Build() { - // // Consistency checks - // // Valid change CAmount change = mtx.valueBalance - fee; @@ -145,33 +142,31 @@ boost::optional TransactionBuilder::Build() return boost::none; } - // // Change output - // if (change > 0) { // Send change to the specified change address. If no change address // was set, send change to the first Sapling address given as input. if (zChangeAddr) { - LogPrintf("%s: Adding specified Sapling change output: %s\n", __FUNCTION__, zChangeAddr->second.GetHash().ToString().c_str()); + if(fZdebug) + LogPrintf("%s: Adding specified Sapling change output: %s\n", __FUNCTION__, zChangeAddr->second.GetHash().ToString().c_str()); AddSaplingOutput(zChangeAddr->first, zChangeAddr->second, change); } else if (tChangeAddr) { // tChangeAddr has already been validated. assert(AddTransparentOutput(tChangeAddr.value(), change)); } else if (!spends.empty()) { - auto fvk = spends[0].expsk.full_viewing_key(); + auto fvk = spends[0].expsk.full_viewing_key(); auto note = spends[0].note; libzcash::SaplingPaymentAddress changeAddr(note.d, note.pk_d); AddSaplingOutput(fvk.ovk, changeAddr, change); - LogPrintf("%s: Adding Sapling change output from first zinput: %s\n", __FUNCTION__, changeAddr.GetHash().ToString().c_str() ); + if(fZdebug) + LogPrintf("%s: Adding Sapling change output from first zinput: %s\n", __FUNCTION__, changeAddr.GetHash().ToString().c_str() ); } else { return boost::none; } } - // // Sapling spends and outputs - // auto ctx = librustzcash_sapling_proving_ctx_init(); @@ -212,7 +207,8 @@ boost::optional TransactionBuilder::Build() sdesc.anchor = spend.anchor; sdesc.nullifier = *nf; - LogPrintf("%s: Created cm + nullifier=%s\n", __FUNCTION__, sdesc.nullifier.ToString().c_str() ); + if(fZdebug) + LogPrintf("%s: Created cm + nullifier=%s\n", __FUNCTION__, sdesc.nullifier.ToString().c_str() ); mtx.vShieldedSpend.push_back(sdesc); } @@ -266,9 +262,7 @@ boost::optional TransactionBuilder::Build() // add op_return if there is one to add AddOpRetLast(); - // // Signatures - // auto consensusBranchId = CurrentEpochBranchId(nHeight, consensusParams); From 1488a03f1c998744488c2d230e22afb524b0530c Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 15:06:34 -0500 Subject: [PATCH 268/277] Improved TLS error handling and teach getpeerinfo about cipher of each connection --- src/hush/tlsmanager.cpp | 36 +++++++++++++++---------------- src/main.cpp | 4 ++-- src/net.cpp | 48 +++++++++++++++++++---------------------- src/net.h | 4 +++- src/rpc/net.cpp | 4 ++++ 5 files changed, 49 insertions(+), 47 deletions(-) diff --git a/src/hush/tlsmanager.cpp b/src/hush/tlsmanager.cpp index 8fb8ad66d..a5fb5c2fa 100644 --- a/src/hush/tlsmanager.cpp +++ b/src/hush/tlsmanager.cpp @@ -11,6 +11,9 @@ #include "utiltls.h" using namespace std; +// store our preferred cipherlist so we can use it for debug/etc later on +std::string TLS_CIPHERLIST; + namespace hush { static WOLFSSL_EVP_PKEY *mykey; @@ -229,6 +232,7 @@ WOLFSSL* TLSManager::connect(SOCKET hSocket, const CAddress& addrConnect, unsign if (ret == 1) { bConnectedTLS = true; } else { + err_code = wolfSSL_ERR_get_error(); LogPrint("tls", "%s: timed out waiting for %s\n", __func__, addrConnect.ToString()); } } @@ -242,7 +246,11 @@ WOLFSSL* TLSManager::connect(SOCKET hSocket, const CAddress& addrConnect, unsign LogPrintf("TLS: connection to %s has been established (tlsv = %s 0x%04x / ssl = %s 0x%x ). Using cipher: %s\n", addrConnect.ToString(), wolfSSL_get_version(ssl), wolfSSL_version(ssl), wolfSSL_OpenSSL_version(), wolfSSL_lib_version_hex(), wolfSSL_get_cipher_name(ssl)); } else { - LogPrintf("TLS: %s: %s():%d - TLS connection to %s timed out\n", __FILE__, __func__, __LINE__, addrConnect.ToString(), err_code); + if(err_code) { + LogPrintf("TLS: %s: %s():%d - TLS connection to %s failed with err_code=0x%X\n", __FILE__, __func__, __LINE__, addrConnect.ToString(), err_code); + } else { + LogPrintf("TLS: %s: %s():%d - TLS connection to %s timed out\n", __FILE__, __func__, __LINE__, addrConnect.ToString()); + } if (ssl) { wolfSSL_free(ssl); @@ -270,7 +278,7 @@ WOLFSSL_CTX* TLSManager::initCtx(TLSContextType ctxType) return NULL; } - bool bInitialized = false; + bool bInitialized = false; WOLFSSL_CTX* tlsCtx = NULL; byte *pem; @@ -279,7 +287,7 @@ WOLFSSL_CTX* TLSManager::initCtx(TLSContextType ctxType) if ((tlsCtx = wolfSSL_CTX_new(ctxType == SERVER_CONTEXT ? wolfTLSv1_3_server_method() : wolfTLSv1_3_client_method()))) { wolfSSL_CTX_set_mode(tlsCtx, SSL_MODE_AUTO_RETRY); - // Disable TLS < 1.3 ... imho redundant, because v1.3 is required via method + // Disable TLS < 1.3, just in case int ret = wolfSSL_CTX_set_min_proto_version(tlsCtx, TLS1_3_VERSION); if (ret == 0) { LogPrintf("TLS: WARNING: %s: %s():%d - failed to set min TLS version\n", __FILE__, __func__, __LINE__); @@ -293,12 +301,15 @@ WOLFSSL_CTX* TLSManager::initCtx(TLSContextType ctxType) if(GetRand(100) > 50) { if (wolfSSL_CTX_set_cipher_list(tlsCtx, "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")) { LogPrintf("%s: Preferring TLS_AES256-GCM-SHA384\n", __func__); + TLS_CIPHERLIST = "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"; } else { LogPrintf("%s: Setting preferred cipher failed !!!\n", __func__); } } else { if (wolfSSL_CTX_set_cipher_list(tlsCtx, "TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384")) { - LogPrintf("%s: Preferring TLS_AES256-GCM-SHA384\n", __func__); + LogPrintf("%s: Preferring TLS_XCHACHA20_POLY1305\n", __func__); + // WolfSSL 4.6.0 added xchacha but calls it the same ciphersuite, which causes compatibility issues + TLS_CIPHERLIST = "TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384"; } else { LogPrintf("%s: Setting preferred cipher failed !!!\n", __func__); } @@ -359,11 +370,10 @@ WOLFSSL_CTX* TLSManager::initCtx(TLSContextType ctxType) */ bool TLSManager::prepareCredentials() { - mykey = NULL; + mykey = NULL; mycert = NULL; // Generating key and the self-signed certificate for it - // mykey = GenerateEcKey(); if (mykey) { mycert = GenerateCertificate(mykey); @@ -579,15 +589,12 @@ int TLSManager::threadSocketHandler(CNode* pnode, fd_set& fdsetRecv, fd_set& fds __FILE__, __func__, __LINE__, error_str); } // socket closed gracefully (peer disconnected) - // if (!pnode->fDisconnect) LogPrint("tls", "socket closed (%s)\n", pnode->addr.ToString()); pnode->CloseSocketDisconnect(); - } else if (nBytes < 0) { // error - // if (bIsSSL) { if (nRet != WOLFSSL_ERROR_WANT_READ && nRet != WOLFSSL_ERROR_WANT_WRITE) { @@ -602,7 +609,6 @@ int TLSManager::threadSocketHandler(CNode* pnode, fd_set& fdsetRecv, fd_set& fds } else { // preventive measure from exhausting CPU usage - // MilliSleep(1); // 1 msec } } else { @@ -617,9 +623,7 @@ int TLSManager::threadSocketHandler(CNode* pnode, fd_set& fdsetRecv, fd_set& fds } } - // // Send - // if (sendSet) { TRY_LOCK(pnode->cs_vSend, lockSend); if (lockSend) @@ -640,17 +644,13 @@ bool TLSManager::initialize() bool bInitializationStatus = false; // Initialization routines for the WolfSSL library - // wolfSSL_load_error_strings(); wolfSSL_ERR_load_crypto_strings(); wolfSSL_library_init(); // Initialization of the server and client contexts - // - if ((tls_ctx_server = TLSManager::initCtx(SERVER_CONTEXT))) - { - if ((tls_ctx_client = TLSManager::initCtx(CLIENT_CONTEXT))) - { + if ((tls_ctx_server = TLSManager::initCtx(SERVER_CONTEXT))) { + if ((tls_ctx_client = TLSManager::initCtx(CLIENT_CONTEXT))) { LogPrint("tls", "TLS: contexts are initialized\n"); bInitializationStatus = true; } else { diff --git a/src/main.cpp b/src/main.cpp index 19c365b08..fb2bf91ec 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -577,8 +577,8 @@ bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats) { CNodeState *state = State(nodeid); if (state == NULL) return false; - stats.nMisbehavior = state->nMisbehavior; - stats.nSyncHeight = state->pindexBestKnownBlock ? state->pindexBestKnownBlock->GetHeight() : -1; + stats.nMisbehavior = state->nMisbehavior; + stats.nSyncHeight = state->pindexBestKnownBlock ? state->pindexBestKnownBlock->GetHeight() : -1; stats.nCommonHeight = state->pindexLastCommonBlock ? state->pindexLastCommonBlock->GetHeight() : -1; BOOST_FOREACH(const QueuedBlock& queue, state->vBlocksInFlight) { if (queue.pindex) diff --git a/src/net.cpp b/src/net.cpp index 0c1711dce..bfacabe81 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -394,8 +394,7 @@ CNode* FindNode(const CService& addr) return NULL; } -CNode* ConnectNode(CAddress addrConnect, const char *pszDest) -{ +CNode* ConnectNode(CAddress addrConnect, const char *pszDest) { if (pszDest == NULL) { if (IsLocal(addrConnect)) return NULL; @@ -429,7 +428,6 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest) WOLFSSL *ssl = NULL; -#ifdef USE_TLS /* TCP connection is ready. Do client side SSL. */ unsigned long err_code = 0; ssl = tlsmanager.connect(hSocket, addrConnect, err_code); @@ -438,11 +436,10 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest) CloseSocket(hSocket); return NULL; } - -#endif // USE_TLS // Add node - CNode* pnode = new CNode(hSocket, addrConnect, pszDest ? pszDest : "", false, ssl); + CNode* pnode = new CNode(hSocket, addrConnect, pszDest ? pszDest : "", false, ssl); + pnode->tls_cipher = wolfSSL_get_cipher_name(ssl); pnode->AddRef(); { @@ -619,23 +616,24 @@ void CNode::AddAllowlistedRange(const CSubNet &subnet) { void CNode::copyStats(CNodeStats &stats, const std::vector &m_asmap) { - stats.nodeid = this->GetId(); - stats.nServices = nServices; - stats.addr = addr; - // stats.addrBind = addrBind; - stats.m_mapped_as = addr.GetMappedAS(m_asmap); - stats.nLastSend = nLastSend; - stats.nLastRecv = nLastRecv; - stats.nTimeConnected = nTimeConnected; - stats.nTimeOffset = nTimeOffset; - stats.addrName = addrName; - stats.nVersion = nVersion; - stats.cleanSubVer = cleanSubVer; - stats.fInbound = fInbound; + stats.nodeid = this->GetId(); + stats.nServices = nServices; + stats.addr = addr; + // stats.addrBind = addrBind; + stats.m_mapped_as = addr.GetMappedAS(m_asmap); + stats.nLastSend = nLastSend; + stats.nLastRecv = nLastRecv; + stats.nTimeConnected = nTimeConnected; + stats.nTimeOffset = nTimeOffset; + stats.addrName = addrName; + stats.nVersion = nVersion; + stats.cleanSubVer = cleanSubVer; + stats.fInbound = fInbound; stats.nStartingHeight = nStartingHeight; - stats.nSendBytes = nSendBytes; - stats.nRecvBytes = nRecvBytes; - stats.fAllowlisted = fAllowlisted; + stats.nSendBytes = nSendBytes; + stats.nRecvBytes = nRecvBytes; + stats.fAllowlisted = fAllowlisted; + stats.tls_cipher = tls_cipher; // It is common for nodes with good ping times to suddenly become lagged, // due to a new block arriving or other large transfer. @@ -1103,7 +1101,6 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { SetSocketNonBlocking(hSocket, true); -#ifdef USE_TLS /* TCP connection is ready. Do server side TLS */ unsigned long err_code = 0; ssl = tlsmanager.accept( hSocket, addr, err_code); @@ -1114,13 +1111,12 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { return; } -#endif // USE_TLS - CNode* pnode = new CNode(hSocket, addr, "", true, ssl); pnode->AddRef(); pnode->fAllowlisted = allowlisted; + pnode->tls_cipher = wolfSSL_get_cipher_name(ssl); - LogPrint("net", "connection from %s accepted\n", addr.ToString()); + LogPrint("net", "connection from %s accepted using cipher %s\n", addr.ToString(), pnode->tls_cipher); { LOCK(cs_vNodes); diff --git a/src/net.h b/src/net.h index 7f97632b0..904248163 100644 --- a/src/net.h +++ b/src/net.h @@ -208,6 +208,7 @@ public: uint64_t nServices; bool fTLSEstablished; bool fTLSVerified; + std::string tls_cipher; int64_t nLastSend; int64_t nLastRecv; int64_t nTimeConnected; @@ -279,8 +280,9 @@ public: class CNode { public: - // OpenSSL + // TLS via WolfSSL SSL *ssl; + std::string tls_cipher; // socket uint64_t nServices; diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index b32db9118..8d1e1a66e 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -90,6 +90,8 @@ UniValue getpeerinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) " \"addrlocal\":\"ip:port\", (string) local address\n" " \"services\":\"xxxxxxxxxxxxxxxx\", (string) The services offered\n" " \"tls_established\": true:false, (boolean) Status of TLS connection\n" + " \"tls_verified\": true:false, (boolean) Status of TLS verification\n" + " \"tls_cipher\": \"XXX\", (string) TLS cipher used for this connection\n" " \"lastsend\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last send\n" " \"lastrecv\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last receive\n" " \"bytessent\": n, (numeric) The total bytes sent\n" @@ -139,6 +141,8 @@ UniValue getpeerinfo(const UniValue& params, bool fHelp, const CPubKey& mypk) } obj.push_back(Pair("services", strprintf("%016x", stats.nServices))); obj.push_back(Pair("tls_established", stats.fTLSEstablished)); + obj.push_back(Pair("tls_verified", stats.fTLSVerified)); + obj.push_back(Pair("tls_cipher", stats.tls_cipher)); obj.push_back(Pair("lastsend", stats.nLastSend)); obj.push_back(Pair("lastrecv", stats.nLastRecv)); obj.push_back(Pair("bytessent", stats.nSendBytes)); From 415636af685b61448fa53fb8b0e4f14cd0efae1e Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 15:57:21 -0500 Subject: [PATCH 269/277] Improve TLS p2p error-handling and reduce logspam --- src/hush/tlsmanager.cpp | 29 ++++++++++++++++++++--------- src/hush/utiltls.cpp | 1 - 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/hush/tlsmanager.cpp b/src/hush/tlsmanager.cpp index a5fb5c2fa..64dcca996 100644 --- a/src/hush/tlsmanager.cpp +++ b/src/hush/tlsmanager.cpp @@ -81,6 +81,7 @@ int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* int retOp = 0; err_code = 0; char err_buffer[1024]; + std::string disconnectedPeer("no info"); while (true) { @@ -117,7 +118,6 @@ int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* case SSL_SHUTDOWN: { if (hSocket != INVALID_SOCKET) { - std::string disconnectedPeer("no info"); struct sockaddr_in addr; socklen_t serv_len = sizeof(addr); int ret = getpeername(hSocket, (struct sockaddr *)&addr, &serv_len); @@ -136,21 +136,28 @@ int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* if (eRoutine == SSL_SHUTDOWN) { if (retOp == 0) { - LogPrint("tls", "TLS: WARNING: %s: %s():%d - SSL_SHUTDOWN: The close_notify was sent but the peer did not send it back yet.\n", + LogPrint("tls", "TLS: WARNING: %s: %s():%d - SSL_SHUTDOWN: The close_notify was sent but the peer did not send it back yet. Whatevz\n", __FILE__, __func__, __LINE__); // do not call SSL_get_error() because it may misleadingly indicate an error even though no error occurred. break; } else if (retOp == 1) { - LogPrint("tls", "TLS: %s: %s():%d - SSL_SHUTDOWN completed\n", __FILE__, __func__, __LINE__); + LogPrint("tls", "TLS: %s: %s():%d - SSL_SHUTDOWN completed from peer %s\n", __FILE__, __func__, __LINE__, disconnectedPeer.c_str()); break; } else { - LogPrint("tls", "TLS: %s: %s():%d - SSL_SHUTDOWN failed\n", __FILE__, __func__, __LINE__); + LogPrint("tls", "TLS: %s: %s():%d - SSL_SHUTDOWN failed to %s\n", __FILE__, __func__, __LINE__, disconnectedPeer.c_str()); // the error will be read afterwards } } else { if (retOp == 1) { - LogPrint("tls", "TLS: %s: %s():%d - %s completed\n", __FILE__, __func__, __LINE__, - eRoutine == SSL_CONNECT ? "SSL_CONNECT" : "SSL_ACCEPT"); + std::string goodPeer = ""; + struct sockaddr_in addr; + socklen_t serv_len = sizeof(addr); + int ret = getpeername(hSocket, (struct sockaddr *)&addr, &serv_len); + if (ret == 0) { + goodPeer = std::string(inet_ntoa(addr.sin_addr)) + ":" + std::to_string(ntohs(addr.sin_port)); + } + LogPrint("tls", "TLS: %s: %s():%d - %s completed to %s\n", __FILE__, __func__, __LINE__, + eRoutine == SSL_CONNECT ? "SSL_CONNECT" : "SSL_ACCEPT", goodPeer); break; } } @@ -159,7 +166,10 @@ int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* if (sslErr != WOLFSSL_ERROR_WANT_READ && sslErr != WOLFSSL_ERROR_WANT_WRITE) { err_code = wolfSSL_ERR_get_error(); - const char* error_str = wolfSSL_ERR_error_string(err_code, err_buffer); + const char* error_str; + if(err_code) + wolfSSL_ERR_error_string(err_code, err_buffer); + LogPrint("tls", "TLS: WARNING: %s: %s():%d - routine(%d), sslErr[0x%x], retOp[%d], errno[0x%x], lib[0x%x], func[0x%x], reas[0x%x]-> err: %s\n", __FILE__, __func__, __LINE__, eRoutine, sslErr, retOp, errno, wolfSSL_ERR_GET_LIB(err_code), ERR_GET_FUNC(err_code), wolfSSL_ERR_GET_REASON(err_code), err_buffer); @@ -441,9 +451,10 @@ WOLFSSL* TLSManager::accept(SOCKET hSocket, const CAddress& addr, unsigned long& if ((ssl = wolfSSL_new(tls_ctx_server))) { if (wolfSSL_set_fd(ssl, hSocket)) { int ret = TLSManager::waitFor(SSL_ACCEPT, hSocket, ssl, (DEFAULT_CONNECT_TIMEOUT / 1000), err_code); - if (ret == 1) - { + if (ret == 1) { bAcceptedTLS = true; + } else { + err_code = wolfSSL_ERR_get_error(); } } } else { diff --git a/src/hush/utiltls.cpp b/src/hush/utiltls.cpp index 68c7a277a..ec8e81c3b 100644 --- a/src/hush/utiltls.cpp +++ b/src/hush/utiltls.cpp @@ -5,7 +5,6 @@ #include #include - #include #include #include "../util.h" From ca4fb7b9a057708b04db3d58a05f9e50c852b294 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 19:30:54 -0500 Subject: [PATCH 270/277] TLS tweaking and freaking --- depends/packages/wolfssl.mk | 7 +++++-- src/hush/tlsmanager.cpp | 22 ++++++++++++++-------- src/net.cpp | 2 +- src/netbase.cpp | 3 --- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/depends/packages/wolfssl.mk b/depends/packages/wolfssl.mk index 739fad0ff..07f235838 100644 --- a/depends/packages/wolfssl.mk +++ b/depends/packages/wolfssl.mk @@ -15,7 +15,10 @@ $(package)_config_opts+=--enable-debug $(package)_config_opts+=--enable-sha3 $(package)_config_opts+=--enable-sha512 $(package)_config_opts+=--enable-tls13 -$(package)_config_opts+=--enable-xchacha # New in 4.6.0 + +# TODO: enable this in a future version +#$(package)_config_opts+=--enable-xchacha # New in 4.6.0 + # TODO: these caused problems #$(package)_config_opts+=--disable-tlsv12 #$(package)_config_opts+=--disable-oldtls @@ -30,7 +33,7 @@ $(package)_config_opts+=--enable-enckeys # TODO: can we reduce down to only the normal openssl compat, without these options? $(package)_config_opts+=--enable-opensslall $(package)_config_opts+=--enable-opensslextra -#$(package)_config_opts+=C_EXTRA_FLAGS="-DSPEAK_AND_TRANSACT_FREELY" +$(package)_config_opts+=C_EXTRA_FLAGS="-DSPEAK_AND_TRANSACT_FREELY" endef diff --git a/src/hush/tlsmanager.cpp b/src/hush/tlsmanager.cpp index 64dcca996..0f38d96fe 100644 --- a/src/hush/tlsmanager.cpp +++ b/src/hush/tlsmanager.cpp @@ -118,6 +118,7 @@ int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* case SSL_SHUTDOWN: { if (hSocket != INVALID_SOCKET) { + disconnectedPeer = "no info"; struct sockaddr_in addr; socklen_t serv_len = sizeof(addr); int ret = getpeername(hSocket, (struct sockaddr *)&addr, &serv_len); @@ -144,8 +145,7 @@ int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* LogPrint("tls", "TLS: %s: %s():%d - SSL_SHUTDOWN completed from peer %s\n", __FILE__, __func__, __LINE__, disconnectedPeer.c_str()); break; } else { - LogPrint("tls", "TLS: %s: %s():%d - SSL_SHUTDOWN failed to %s\n", __FILE__, __func__, __LINE__, disconnectedPeer.c_str()); - // the error will be read afterwards + LogPrint("tls", "TLS: %s: %s():%d - SSL_SHUTDOWN failed to %s with ret=%d\n", __FILE__, __func__, __LINE__, disconnectedPeer.c_str(), retOp); } } else { if (retOp == 1) { @@ -166,13 +166,15 @@ int TLSManager::waitFor(SSLConnectionRoutine eRoutine, SOCKET hSocket, WOLFSSL* if (sslErr != WOLFSSL_ERROR_WANT_READ && sslErr != WOLFSSL_ERROR_WANT_WRITE) { err_code = wolfSSL_ERR_get_error(); - const char* error_str; - if(err_code) - wolfSSL_ERR_error_string(err_code, err_buffer); + const char* error_str = NULL; + // calling this with err_code=0 generates more warnings, lulz + if(err_code) { + error_str = wolfSSL_ERR_error_string(err_code, err_buffer); + } LogPrint("tls", "TLS: WARNING: %s: %s():%d - routine(%d), sslErr[0x%x], retOp[%d], errno[0x%x], lib[0x%x], func[0x%x], reas[0x%x]-> err: %s\n", __FILE__, __func__, __LINE__, - eRoutine, sslErr, retOp, errno, wolfSSL_ERR_GET_LIB(err_code), ERR_GET_FUNC(err_code), wolfSSL_ERR_GET_REASON(err_code), err_buffer); + eRoutine, sslErr, retOp, errno, wolfSSL_ERR_GET_LIB(err_code), ERR_GET_FUNC(err_code), wolfSSL_ERR_GET_REASON(err_code), error_str); retOp = -1; break; } @@ -245,6 +247,8 @@ WOLFSSL* TLSManager::connect(SOCKET hSocket, const CAddress& addrConnect, unsign err_code = wolfSSL_ERR_get_error(); LogPrint("tls", "%s: timed out waiting for %s\n", __func__, addrConnect.ToString()); } + } else { + LogPrint("tls", "TLS: %s: failed to set file descriptor for socket!\n", __func__, addrConnect.ToString()); } } else { err_code = wolfSSL_ERR_get_error(); @@ -443,9 +447,9 @@ WOLFSSL* TLSManager::accept(SOCKET hSocket, const CAddress& addr, unsigned long& { LogPrint("tls", "TLS: accepting connection from %s (tid = %X)\n", addr.ToString(), pthread_self()); - err_code = 0; char err_buffer[1024]; - WOLFSSL* ssl = NULL; + err_code = 0; + WOLFSSL* ssl = NULL; bool bAcceptedTLS = false; if ((ssl = wolfSSL_new(tls_ctx_server))) { @@ -456,6 +460,8 @@ WOLFSSL* TLSManager::accept(SOCKET hSocket, const CAddress& addr, unsigned long& } else { err_code = wolfSSL_ERR_get_error(); } + } else { + LogPrint("tls", "TLS: %s: failed to set file descriptor for socket!\n", __func__, addr.ToString()); } } else { err_code = wolfSSL_ERR_get_error(); diff --git a/src/net.cpp b/src/net.cpp index bfacabe81..73b26675d 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1106,7 +1106,7 @@ static void AcceptConnection(const ListenSocket& hListenSocket) { ssl = tlsmanager.accept( hSocket, addr, err_code); if(!ssl) { - LogPrint("tls", "%s():%d - err_code %x, failure accepting connection from %s\n", __func__, __LINE__, err_code, addr.ToStringIP()); + LogPrint("tls", "TLS: %s():%d - err_code %x, failure accepting connection from %s\n", __func__, __LINE__, err_code, addr.ToStringIP()); CloseSocket(hSocket); return; } diff --git a/src/netbase.cpp b/src/netbase.cpp index e763467f5..be81264e0 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -2,7 +2,6 @@ // Copyright (c) 2009-2014 The Bitcoin Core 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. * * * @@ -21,9 +20,7 @@ #ifdef HAVE_CONFIG_H #include "config/bitcoin-config.h" #endif - #include "netbase.h" - #include "hash.h" #include "sync.h" #include "uint256.h" From 527c862cd29a13c86da5b8df010da0617fea1fcd Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Sun, 24 Jan 2021 19:33:40 -0500 Subject: [PATCH 271/277] Bump version and copyright year --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 148b2920a..5f62a6e5e 100644 --- a/configure.ac +++ b/configure.ac @@ -2,12 +2,12 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 3) define(_CLIENT_VERSION_MINOR, 6) -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, 2020) +define(_COPYRIGHT_YEAR, 2021) 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]) From cf57365698887e98064b8e157b2ef5dfc9324bfe Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Tue, 26 Jan 2021 08:56:08 -0500 Subject: [PATCH 272/277] Deletions and cleanups --- build-aux/m4/bitcoin_find_bdb.m4 | 4 +- src/bitcoind.cpp | 4 +- src/cc/CCMarmara.h | 2 +- src/cc/CCinclude.h | 18 +- src/cc/CCutils.cpp | 4 +- src/cc/dice.cpp | 8 +- src/cc/games/prices.cpp | 2 +- src/cc/oracles.cpp | 4 +- src/cc/prices.cpp | 2186 +----------------------------- src/crosschain.cpp | 4 +- src/hush.h | 2 +- src/hush_bitcoind.h | 81 +- src/hush_defs.h | 12 +- src/hush_gateway.h | 56 +- src/hush_globals.h | 12 +- src/hush_nSPV_fullnode.h | 2 +- src/hush_pax.h | 2 +- src/hush_utils.h | 45 +- src/init.cpp | 9 +- src/main.cpp | 40 +- src/metrics.cpp | 4 +- src/miner.cpp | 12 +- src/net.cpp | 6 - src/net.h | 2 - src/pow.cpp | 2 +- src/rpc/mining.cpp | 4 +- src/txmempool.cpp | 4 +- src/wallet/rpcwallet.cpp | 6 +- 28 files changed, 183 insertions(+), 2354 deletions(-) diff --git a/build-aux/m4/bitcoin_find_bdb.m4 b/build-aux/m4/bitcoin_find_bdb.m4 index bd5c2af45..ada8ffdbe 100644 --- a/build-aux/m4/bitcoin_find_bdb.m4 +++ b/build-aux/m4/bitcoin_find_bdb.m4 @@ -38,7 +38,7 @@ AC_DEFUN([BITCOIN_FIND_BDB62],[ done if test "x$bdbpath" = "xX"; then AC_MSG_RESULT([no]) - AC_MSG_ERROR([libdb_cxx headers missing, Bitcoin Core requires this library for wallet functionality (--disable-wallet to disable wallet functionality)]) + AC_MSG_ERROR([libdb_cxx headers missing, Hush source code requires this library for wallet functionality (1) (--disable-wallet to disable wallet functionality)]) elif test "x$bdb62path" = "xX"; then BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdbpath}],db_cxx) AC_ARG_WITH([incompatible-bdb],[AS_HELP_STRING([--with-incompatible-bdb], [allow using a bdb version other than 6.2])],[ @@ -60,7 +60,7 @@ AC_DEFUN([BITCOIN_FIND_BDB62],[ ]) done if test "x$BDB_LIBS" = "x"; then - AC_MSG_ERROR([libdb_cxx missing, Bitcoin Core requires this library for wallet functionality (--disable-wallet to disable wallet functionality)]) + AC_MSG_ERROR([libdb_cxx missing, Hush source code requires this library for wallet functionality (2) (--disable-wallet to disable wallet functionality)]) fi AC_SUBST(BDB_LIBS) ]) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 69e5eebcc..80ece237c 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -60,7 +60,7 @@ extern int32_t ASSETCHAINS_BLOCKTIME; extern uint64_t ASSETCHAINS_CBOPRET; void hush_passport_iteration(); int32_t hush_longestchain(); -void komodo_cbopretupdate(int32_t forceflag); +void hush_cbopretupdate(int32_t forceflag); CBlockIndex *hush_chainactive(int32_t height); void WaitForShutdown(boost::thread_group* threadGroup) @@ -89,7 +89,7 @@ void WaitForShutdown(boost::thread_group* threadGroup) } else { //hush_longestchain(); if ( ASSETCHAINS_CBOPRET != 0 ) - komodo_cbopretupdate(0); + hush_cbopretupdate(0); for (i=0; i<=ASSETCHAINS_BLOCKTIME/5; i++) { fShutdown = ShutdownRequested(); diff --git a/src/cc/CCMarmara.h b/src/cc/CCMarmara.h index 85ef90fa5..a23a39930 100644 --- a/src/cc/CCMarmara.h +++ b/src/cc/CCMarmara.h @@ -32,7 +32,7 @@ #define EVAL_MARMARA 0xef extern uint8_t ASSETCHAINS_MARMARA; -uint64_t komodo_block_prg(uint32_t nHeight); +uint64_t hush_block_prg(uint32_t nHeight); int32_t MarmaraGetcreatetxid(uint256 &createtxid,uint256 txid); int32_t MarmaraGetbatontxid(std::vector &creditloop,uint256 &batontxid,uint256 txid); UniValue MarmaraCreditloop(uint256 txid); diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index 2eafc975c..af72aafe2 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -19,9 +19,10 @@ #define CC_INCLUDE_H /*! \file CCinclude.h -\brief A Documented file. +\brief Cryptoconditions + +CCs for teh lulz -Details. */ /// \mainpage Brief introduction into cryptocondition contracts @@ -240,8 +241,6 @@ extern CWallet* pwalletMain; //!< global wallet object pointer to access wallet /// @private seems old-style bool GetAddressUnspent(uint160 addressHash, int type,std::vector > &unspentOutputs); -//CBlockIndex *komodo_getblockindex(uint256 hash); //moved to komodo_def.h -//int32_t hush_nextheight(); //moved to komodo_def.h /// CCgetspenttxid finds the txid of the transaction which spends a transaction output. The function does this without loading transactions from the chain, by using spent index /// @param[out] spenttxid transaction id of the spending transaction @@ -257,11 +256,6 @@ void CCclearvars(struct CCcontract_info *cp); UniValue CClib(struct CCcontract_info *cp,char *method,char *jsonstr); UniValue CClib_info(struct CCcontract_info *cp); -//CBlockIndex *hush_blockindex(uint256 hash); //moved to komodo_def.h -//CBlockIndex *hush_chainactive(int32_t height); //moved to komodo_def.h -//int32_t hush_blockheight(uint256 hash); //moved to komodo_def.h -//void StartShutdown(); - static const uint256 zeroid; //!< null uint256 constant /// \cond INTERNAL @@ -380,11 +374,8 @@ int64_t IsTokensvout(bool goDeeper, bool checkPubkeys, struct CCcontract_info *c /// returns true if success bool DecodeHexTx(CTransaction& tx, const std::string& strHexTx); -//void komodo_sendmessage(int32_t minpeers,int32_t maxpeers,const char *message,std::vector payload); // moved to hush_defs.h - /// @private int32_t payments_parsehexdata(std::vector &hexdata,cJSON *item,int32_t len); -// int32_t komodo_blockload(CBlock& block,CBlockIndex *pindex); // this def in hush_defs.h /// Makes opreturn scriptPubKey for token creation transaction. Normally this function is called internally by the tokencreate rpc. You might need to call this function to create a customized token. /// The total opreturn length should not exceed 10001 byte @@ -701,7 +692,6 @@ uint64_t stringbits(char *str); uint256 revuint256(uint256 txid); char *uint256_str(char *dest,uint256 txid); char *pubkey33_str(char *dest,uint8_t *pubkey33); -//uint256 Parseuint256(const char *hexstr); // located in komodo_defs /// \endcond /// converts public key as array of uint8_t to normal address @@ -795,8 +785,6 @@ int32_t CCCointxidExists(char const *logcategory,uint256 cointxid); /// @private uint256 BitcoinGetProofMerkleRoot(const std::vector &proofData, std::vector &txids); -// bool komodo_txnotarizedconfirmed(uint256 txid); //moved to hush_defs.h - /// @private CPubKey check_signing_pubkey(CScript scriptSig); diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index f6e244e1c..fef9cccc9 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -529,7 +529,7 @@ int64_t CCduration(int32_t &numblocks,uint256 txid) //fprintf(stderr,"CCduration no hashBlock for txid %s\n",uint256_str(str,txid)); return(0); } - else if ( (pindex= komodo_getblockindex(hashBlock)) == 0 || (txtime= pindex->nTime) == 0 || (txheight= pindex->GetHeight()) <= 0 ) + else if ( (pindex= hush_getblockindex(hashBlock)) == 0 || (txtime= pindex->nTime) == 0 || (txheight= pindex->GetHeight()) <= 0 ) { fprintf(stderr,"CCduration no txtime %u or txheight.%d %p for txid %s\n",txtime,txheight,pindex,uint256_str(str,txid)); return(0); @@ -666,7 +666,7 @@ uint256 BitcoinGetProofMerkleRoot(const std::vector &proofData, std::ve } extern struct NSPV_inforesp NSPV_inforesult; -int32_t komodo_get_current_height() +int32_t hush_get_current_height() { if ( HUSH_NSPV_SUPERLITE ) { diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index e5989ba43..a3ac74b10 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -939,7 +939,7 @@ bool DiceValidate(struct CCcontract_info *cp,Eval *eval,const CTransaction &tx, if ( (iswin= DiceIsWinner(entropy,entropyvout,txid,tx,vinTx,hash,sbits,minbet,maxbet,maxodds,timeoutblocks,fundingtxid)) != 0 ) { // will only happen for fundingPubKey - if ( HUSH_INSYNC != 0 && KOMODO_DEALERNODE != 0 ) + if ( HUSH_INSYNC != 0 && HUSH_DEALERNODE != 0 ) DiceQueue(iswin,sbits,fundingtxid,txid,tx,entropyvout); } else @@ -1791,8 +1791,8 @@ double DiceStatus(uint64_t txfee,char *planstr,uint256 fundingtxid,uint256 bettx { if ( myGetTransaction(betTx.vin[0].prevout.hash,entropyTx,hashBlock) != 0 ) { - flag = KOMODO_DEALERNODE != 0; - if ( KOMODO_DEALERNODE != 0 && scriptPubKey == fundingPubKey ) + flag = HUSH_DEALERNODE != 0; + if ( HUSH_DEALERNODE != 0 && scriptPubKey == fundingPubKey ) { bettorentropy = DiceGetEntropy(betTx,'B'); if ( (iswin= DiceIsWinner(hentropyproof,entropyvout,txid,betTx,entropyTx,bettorentropy,sbits,minbet,maxbet,maxodds,timeoutblocks,fundingtxid)) != 0 ) @@ -1821,7 +1821,7 @@ double DiceStatus(uint64_t txfee,char *planstr,uint256 fundingtxid,uint256 bettx } } } - if ( didinit == 0 && KOMODO_DEALERNODE == 0 && scriptPubKey == fundingPubKey ) + if ( didinit == 0 && HUSH_DEALERNODE == 0 && scriptPubKey == fundingPubKey ) { strcpy(_planstr,planstr); dealer0_fundingtxid = fundingtxid; diff --git a/src/cc/games/prices.cpp b/src/cc/games/prices.cpp index 0269bde65..940900834 100644 --- a/src/cc/games/prices.cpp +++ b/src/cc/games/prices.cpp @@ -71,7 +71,7 @@ int64_t prices_blockinfo(int32_t height,char *acaddr) std::vector vopret; CBlockIndex *pindex; CBlock block; CTransaction tx,vintx; uint64_t pricebits; char destaddr[64]; uint32_t aveprice=0,timestamp,uprice; uint256 hashBlock; int64_t dist,mindist=(1LL<<60),prizefund = 0; int32_t mini=-1,i,n,vini,numvouts,iter; struct prices_bar refbar; if ( (pindex= hush_chainactive(height)) != 0 ) { - if ( komodo_blockload(block,pindex) == 0 ) + if ( hush_blockload(block,pindex) == 0 ) { n = block.vtx.size(); vini = 0; diff --git a/src/cc/oracles.cpp b/src/cc/oracles.cpp index 21e7cbb82..b33751b03 100644 --- a/src/cc/oracles.cpp +++ b/src/cc/oracles.cpp @@ -95,7 +95,7 @@ vout.n-1: opreturn with oracletxid, prevbatontxid and data in proper format */ -extern int32_t komodo_get_current_height(); +extern int32_t hush_get_current_height(); #define PUBKEY_SPOOFING_FIX_ACTIVATION 1563148800 #define CC_MARKER_VALUE 10000 @@ -946,7 +946,7 @@ UniValue OracleRegister(const CPubKey& pk, int64_t txfee,uint256 oracletxid,int6 CCERR_RESULT("oraclescc",CCLOG_INFO, stream << "error adding inputs from your Oracles CC address, please fund it first with oraclesfund rpc!"); mtx.vout.push_back(CTxOut(txfee,CScript() << ParseHex(HexStr(markerpubkey)) << OP_CHECKSIG)); mtx.vout.push_back(MakeCC1vout(cp->evalcode,txfee,batonpk)); - if (GetLatestTimestamp(komodo_get_current_height())>PUBKEY_SPOOFING_FIX_ACTIVATION) mtx.vout.push_back(CTxOut(txfee,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); + if (GetLatestTimestamp(hush_get_current_height())>PUBKEY_SPOOFING_FIX_ACTIVATION) mtx.vout.push_back(CTxOut(txfee,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); return(FinalizeCCTxExt(pk.IsValid(),0,cp,mtx,mypk,txfee,EncodeOraclesOpRet('R',oracletxid,mypk,datafee))); } CCERR_RESULT("oraclescc",CCLOG_INFO, stream << "error adding normal inputs"); diff --git a/src/cc/prices.cpp b/src/cc/prices.cpp index e449f207f..0f74b1a6f 100644 --- a/src/cc/prices.cpp +++ b/src/cc/prices.cpp @@ -15,70 +15,14 @@ * Removal or modification of this copyright notice is prohibited. * * * *****************************************************************************/ -//TODO: delete all this jl777 garbage - /* - CBOPRET creates trustless oracles, which can be used for making a synthetic cash settlement system based on real world prices; - - 0.5% fee based on betamount, NOT leveraged betamount!! - 0.1% collected by price basis determinant - 0.2% collected by rekt tx - - PricesBet -> +/-leverage, amount, synthetic -> opreturn includes current price - funds are locked into 1of2 global CC address - for first day, long basis is MAX(correlated,smoothed), short is MIN() - reference price is the smoothed of the previous block - if synthetic value + amount goes negative, then anybody can rekt it to collect a rektfee, proof of rekt must be included to show cost basis, rekt price - original creator can liquidate at anytime and collect (synthetic value + amount) from globalfund - 0.5% of bet -> globalfund - - PricesStatus -> bettxid maxsamples returns initial params, cost basis, amount left, rekt:true/false, rektheight, initial synthetic price, current synthetic price, net gain - - PricesRekt -> bettxid height -> 0.1% to miner, rest to global CC - - PricesClose -> bettxid returns (synthetic value + amount) - - PricesList -> all bettxid -> list [bettxid, netgain] - - */ - -/* -To create payments plan start a chain with the following ac_params: - -ac_snapshot=1440 (or for test chain something smaller, if you like.) - - this enables the payments airdrop cc to work. - -ac_earlytxidcontract=237 (Eval code for prices cc.) - - this allows to know what contract this chain is paying with the scriptpubkey in the earlytxid op_return. - -./komodod -ac_name=TESTPRC -ac_supply=100000000 -ac_reward=1000000000 -ac_nk=96,5 -ac_blocktime=20 -ac_cc=2 -ac_snapshot=50 -ac_sapling=1 -ac_earlytxidcontract=237 -testnode=1 -gen -genproclimit=1 - -Then in very early block < 10 or so, do paymentsairdrop eg. - `./komodo-cli -ac_name=TESTPRC paymentsairdrop '[10,10,0,3999,0,0]' -Once this tx is confirmed, do `paymentsfund` and decode the raw hex. You can edit the source to not send the tx if requried. -Get the full `hex` of the vout[0] that pays to CryptoCondition. then place it on chain with the following command: with the hex you got in place of the hex below. - './komodo-cli -ac_name=TESTPRC opreturn_burn 1 2ea22c8020292ba5c8fd9cc89b12b35bf8f5d00196990ecbb06102b84d9748d11d883ef01e81031210008203000401cc' -copy the hex, and sendrawtransaction, copy the txid returned. -this places the scriptpubkey that pays the plan into an op_return before block 100, allowing us to retreive it, and nobody to change it. -Restart the daemon with -earlytxid= eg: - -./komodod -ac_name=TESTPRC -ac_supply=100000000 -ac_reward=1000000000 -ac_nk=96,5 -ac_blocktime=20 -ac_cc=2 -ac_snapshot=50 -ac_sapling=1 -ac_earlytxidcontract=237 -earlytxid=cf89d17fb11037f65c160d0749dddd74dc44d9893b0bb67fe1f96c1f59786496 -testnode=1 -gen -genproclimit=1 - -mine the chain past block 100, preventing anyone else, creating another payments plan on chain before block 100. - -We call the following in Validation and RPC where the address is needed. -if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0 ) - GetHushEarlytxidScriptPub(); - -This will fetch the op_return, calculate the scriptPubKey and save it to the global. -On daemon restart as soon as validation for BETTX happens the global will be filled, after this the transaction never needs to be looked up again. - */ +//TODO: Finish deleting all this jl777 garbage. This CC will never function #include "CCassets.h" #include "CCPrices.h" - #include #include #define IS_CHARINSTR(c, str) (std::string(str).find((char)(c)) != std::string::npos) - #define NVOUT_CCMARKER 1 #define NVOUT_NORMALMARKER 3 @@ -88,7 +32,7 @@ typedef struct OneBetData { int64_t costbasis; int64_t profits; - OneBetData() { positionsize = 0; firstheight = 0; costbasis = 0; profits = 0; } // it is important to clear costbasis as it will be calculated as minmax from inital value 0 + OneBetData() { positionsize = 0; firstheight = 0; costbasis = 0; profits = 0; } } onebetdata; typedef struct BetInfo { @@ -141,9 +85,7 @@ static bool prices_isacceptableamount(const std::vector &vecparsed, in // returns true if there are only digits and no alphas or slashes in 's' inline bool is_weight_str(std::string s) { - return - std::count_if(s.begin(), s.end(), [](unsigned char c) { return std::isdigit(c); } ) > 0 && - std::count_if(s.begin(), s.end(), [](unsigned char c) { return std::isalpha(c) || c == '/'; } ) == 0; + return false; } @@ -158,555 +100,92 @@ CScript prices_betopret(CPubKey mypk,int32_t height,int64_t amount,int16_t lever uint8_t prices_betopretdecode(CScript scriptPubKey,CPubKey &pk,int32_t &height,int64_t &amount,int16_t &leverage,int64_t &firstprice,std::vector &vec,uint256 &tokenid) { - std::vector vopret; uint8_t e,f; - - GetOpReturnData(scriptPubKey,vopret); - if (vopret.size() > 2 && E_UNMARSHAL(vopret, ss >> e; ss >> f; ss >> pk; ss >> height; ss >> amount; ss >> leverage; ss >> firstprice; ss >> vec; ss >> tokenid) != 0 && e == EVAL_PRICES && f == 'B') - { - return(f); - } return(0); } CScript prices_addopret(uint256 bettxid,CPubKey mypk,int64_t amount) { CScript opret; - opret << OP_RETURN << E_MARSHAL(ss << EVAL_PRICES << 'A' << bettxid << mypk << amount); return(opret); } uint8_t prices_addopretdecode(CScript scriptPubKey,uint256 &bettxid,CPubKey &pk,int64_t &amount) { - std::vector vopret; uint8_t e,f; - GetOpReturnData(scriptPubKey,vopret); - if ( vopret.size() > 2 && E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> bettxid; ss >> pk; ss >> amount) != 0 && e == EVAL_PRICES && f == 'A' ) - { - return(f); - } return(0); } CScript prices_costbasisopret(uint256 bettxid,CPubKey mypk,int32_t height,int64_t costbasis) { CScript opret; - opret << OP_RETURN << E_MARSHAL(ss << EVAL_PRICES << 'C' << bettxid << mypk << height << costbasis); return(opret); } uint8_t prices_costbasisopretdecode(CScript scriptPubKey,uint256 &bettxid,CPubKey &pk,int32_t &height,int64_t &costbasis) { - std::vector vopret; uint8_t e,f; - GetOpReturnData(scriptPubKey,vopret); - if ( vopret.size() > 2 && E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> bettxid; ss >> pk; ss >> height; ss >> costbasis) != 0 && e == EVAL_PRICES && f == 'C' ) - { - return(f); - } return(0); } CScript prices_finalopret(bool isRekt, uint256 bettxid, CPubKey pk, int32_t lastheight, int64_t costbasis, int64_t lastprice, int64_t liquidationprice, int64_t equity, int64_t exitfee, uint32_t nonce) { CScript opret; - opret << OP_RETURN << E_MARSHAL(ss << EVAL_PRICES << (isRekt ? 'R' : 'F') << bettxid << pk << lastheight << costbasis << lastprice << liquidationprice << equity << exitfee << nonce); return(opret); } uint8_t prices_finalopretdecode(CScript scriptPubKey, uint256 &bettxid, CPubKey &pk, int32_t &lastheight, int64_t &costbasis, int64_t &lastprice, int64_t &liquidationprice, int64_t &equity, int64_t &exitfee) { - std::vector vopret; uint8_t e,f; - uint32_t nonce; - - GetOpReturnData(scriptPubKey,vopret); - if (vopret.size() > 2 && E_UNMARSHAL(vopret, ss >> e; ss >> f; ss >> bettxid; ss >> pk; ss >> lastheight; ss >> costbasis; ss >> lastprice; ss >> liquidationprice; ss >> equity; ss >> exitfee; if (!ss.eof()) ss >> nonce; ) != 0 && e == EVAL_PRICES && (f == 'F' || f == 'R')) - { - return(f); - } return(0); } // price opret basic validation and retrieval static uint8_t PricesCheckOpret(const CTransaction & tx, vscript_t &opret) { - if (tx.vout.size() > 0 && GetOpReturnData(tx.vout.back().scriptPubKey, opret) && opret.size() > 2 && opret.begin()[0] == EVAL_PRICES && IS_CHARINSTR(opret.begin()[1], "BACFR")) - return opret.begin()[1]; - else - return (uint8_t)0; + return (uint8_t)0; } // validate bet tx helper static bool ValidateBetTx(struct CCcontract_info *cp, Eval *eval, const CTransaction & bettx) { - uint256 tokenid; - int64_t positionsize, firstprice; - int32_t firstheight; - int16_t leverage; - CPubKey pk, pricespk; - std::vector vec; - - // check payment cc config: - if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0 ) - GetHushEarlytxidScriptPub(); - - if (bettx.vout.size() < 6 || bettx.vout.size() > 7) - return eval->Invalid("incorrect vout number for bet tx"); - - vscript_t opret; - if( prices_betopretdecode(bettx.vout.back().scriptPubKey, pk, firstheight, positionsize, leverage, firstprice, vec, tokenid) != 'B') - return eval->Invalid("cannot decode opreturn for bet tx"); - - pricespk = GetUnspendable(cp, 0); - - if (MakeCC1vout(cp->evalcode, bettx.vout[0].nValue, pk) != bettx.vout[0]) - return eval->Invalid("cannot validate vout0 in bet tx with pk from opreturn"); - if (MakeCC1vout(cp->evalcode, bettx.vout[1].nValue, pricespk) != bettx.vout[1]) - return eval->Invalid("cannot validate vout1 in bet tx with global pk"); - if (MakeCC1vout(cp->evalcode, bettx.vout[2].nValue, pricespk) != bettx.vout[2] ) - return eval->Invalid("cannot validate vout2 in bet tx with pk from opreturn"); - // This should be all you need to verify it, maybe also check amount? - if ( bettx.vout[4].scriptPubKey != HUSH_EARLYTXID_SCRIPTPUB ) - return eval->Invalid("the fee was paid to wrong address."); - - int64_t betamount = bettx.vout[2].nValue; - if (betamount != PRICES_SUBREVSHAREFEE(positionsize)) { - return eval->Invalid("invalid position size in the opreturn"); - } - - // validate if normal inputs are really signed by originator pubkey (someone not cheating with originator pubkey) - CAmount ccOutputs = 0; - for (auto vout : bettx.vout) - if (vout.scriptPubKey.IsPayToCryptoCondition()) - ccOutputs += vout.nValue; - CAmount normalInputs = TotalPubkeyNormalInputs(bettx, pk); - if (normalInputs < ccOutputs) { - return eval->Invalid("bettx normal inputs not signed with pubkey in opret"); - } - - if (leverage > PRICES_MAXLEVERAGE || leverage < -PRICES_MAXLEVERAGE) { - return eval->Invalid("invalid leverage"); - } - return true; } // validate add funding tx helper static bool ValidateAddFundingTx(struct CCcontract_info *cp, Eval *eval, const CTransaction & addfundingtx, const CTransaction & vintx) { - uint256 bettxid; - int64_t amount; - CPubKey pk, pricespk; - vscript_t vintxOpret; - - // check payment cc config: - if (ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0) - GetHushEarlytxidScriptPub(); - - if (addfundingtx.vout.size() < 4 || addfundingtx.vout.size() > 5) - return eval->Invalid("incorrect vout number for add funding tx"); - - vscript_t opret; - if (prices_addopretdecode(addfundingtx.vout.back().scriptPubKey, bettxid, pk, amount) != 'A') - return eval->Invalid("cannot decode opreturn for add funding tx"); - - pricespk = GetUnspendable(cp, 0); - uint8_t vintxFuncId = PricesCheckOpret(vintx, vintxOpret); - if (vintxFuncId != 'A' && vintxFuncId != 'B') { // if vintx is bettx - return eval->Invalid("incorrect vintx funcid"); - } - - if (vintxFuncId == 'B' && vintx.GetHash() != bettxid) {// if vintx is bettx - return eval->Invalid("incorrect bet txid in opreturn"); - } - - if (MakeCC1vout(cp->evalcode, addfundingtx.vout[0].nValue, pk) != addfundingtx.vout[0]) - return eval->Invalid("cannot validate vout0 in add funding tx with pk from opreturn"); - if (MakeCC1vout(cp->evalcode, addfundingtx.vout[1].nValue, pricespk) != addfundingtx.vout[1]) - return eval->Invalid("cannot validate vout1 in add funding tx with global pk"); - - // This should be all you need to verify it, maybe also check amount? - if (addfundingtx.vout[2].scriptPubKey != HUSH_EARLYTXID_SCRIPTPUB) - return eval->Invalid("the fee was paid to wrong address."); - - int64_t betamount = addfundingtx.vout[1].nValue; - if (betamount != PRICES_SUBREVSHAREFEE(amount)) { - return eval->Invalid("invalid bet position size in the opreturn"); - } - return true; } -// validate costbasis tx helper (deprecated) -/* -static bool ValidateCostbasisTx(struct CCcontract_info *cp, Eval *eval, const CTransaction & costbasistx, const CTransaction & bettx) -{ - uint256 bettxid; - int64_t costbasisInOpret; - CPubKey pk, pricespk; - int32_t height; - - return true; //deprecated - - // check basic structure: - if (costbasistx.vout.size() < 3 || costbasistx.vout.size() > 4) - return eval->Invalid("incorrect vout count for costbasis tx"); - - vscript_t opret; - if (prices_costbasisopretdecode(costbasistx.vout.back().scriptPubKey, bettxid, pk, height, costbasisInOpret) != 'C') - return eval->Invalid("cannot decode opreturn for costbasis tx"); - - pricespk = GetUnspendable(cp, 0); - if (CTxOut(costbasistx.vout[0].nValue, CScript() << ParseHex(HexStr(pk)) << OP_CHECKSIG) != costbasistx.vout[0]) //might go to any pk who calculated costbasis - return eval->Invalid("cannot validate vout0 in costbasis tx with pk from opreturn"); - if (MakeCC1vout(cp->evalcode, costbasistx.vout[1].nValue, pricespk) != costbasistx.vout[1]) - return eval->Invalid("cannot validate vout1 in costbasis tx with global pk"); - - if (bettx.GetHash() != bettxid) - return eval->Invalid("incorrect bettx id"); - - if (bettx.vout.size() < 1) // for safety and for check encapsulation - return eval->Invalid("incorrect bettx no vouts"); - - // check costbasis rules: - if (costbasistx.vout[0].nValue > bettx.vout[1].nValue / 10) { - return eval->Invalid("costbasis myfee too big"); - } - - uint256 tokenid; - int64_t positionsize, firstprice; - int32_t firstheight; - int16_t leverage; - CPubKey betpk; - std::vector vec; - if (prices_betopretdecode(bettx.vout.back().scriptPubKey, betpk, firstheight, positionsize, leverage, firstprice, vec, tokenid) != 'B') - return eval->Invalid("cannot decode opreturn for bet tx"); - - if (firstheight + PRICES_DAYWINDOW + PRICES_SMOOTHWIDTH > chainActive.Height()) { - return eval->Invalid("cannot calculate costbasis yet"); - } - - int64_t costbasis = 0, profits, lastprice; - int32_t retcode = prices_syntheticprofits(costbasis, firstheight, firstheight + PRICES_DAYWINDOW, leverage, vec, positionsize, profits, lastprice); - if (retcode < 0) - return eval->Invalid("cannot calculate costbasis yet"); - std::cerr << "ValidateCostbasisTx() costbasis=" << costbasis << " costbasisInOpret=" << costbasisInOpret << std::endl; - if (costbasis != costbasisInOpret) { - //std::cerr << "ValidateBetTx() " << "incorrect costbasis value" << std::endl; - return eval->Invalid("incorrect costbasis value"); - } - - return true; -} -*/ // validate final tx helper static bool ValidateFinalTx(struct CCcontract_info *cp, Eval *eval, const CTransaction & finaltx, const CTransaction & bettx) { - uint256 bettxid; - int64_t amount; - CPubKey pk, pricespk; - int64_t profits; - int32_t lastheight; - int64_t firstprice, costbasis, lastprice, liquidationprice, equity, fee; - int16_t leverage; - - if (finaltx.vout.size() < 3 || finaltx.vout.size() > 4) { - //std::cerr << "ValidateFinalTx()" << " incorrect vout number for final tx =" << finaltx.vout.size() << std::endl; - return eval->Invalid("incorrect vout number for final tx"); - } - - vscript_t opret; - uint8_t funcId; - if ((funcId = prices_finalopretdecode(finaltx.vout.back().scriptPubKey, bettxid, pk, lastheight, costbasis, lastprice, liquidationprice, equity, fee)) == 0) - return eval->Invalid("cannot decode opreturn for final tx"); - - // check rekt txid mining: -// if( funcId == 'R' && (finaltx.GetHash().begin()[0] != 0 || finaltx.GetHash().begin()[31] != 0) ) -// return eval->Invalid("incorrect rekt txid"); - - if (bettx.GetHash() != bettxid) - return eval->Invalid("incorrect bettx id"); - - pricespk = GetUnspendable(cp, 0); - - if (CTxOut(finaltx.vout[0].nValue, CScript() << ParseHex(HexStr(pk)) << OP_CHECKSIG) != finaltx.vout[0]) - return eval->Invalid("cannot validate vout0 in final tx with pk from opreturn"); - - if( finaltx.vout.size() == 3 && MakeCC1vout(cp->evalcode, finaltx.vout[1].nValue, pricespk) != finaltx.vout[1] ) - return eval->Invalid("cannot validate vout1 in final tx with global pk"); - - // TODO: validate exitfee for 'R' - // TODO: validate amount for 'F' - return true; } -// validate prices tx function -// performed checks: -// basic tx structure (vout num) -// basic tx opret structure -// reference to the bet tx vout -// referenced bet txid in tx opret -// referenced bet tx structure -// non-final tx has only 1 cc vin -// cc vouts to self with mypubkey from opret -// cc vouts to global pk with global pk -// for bet tx that normal inputs digned with my pubkey from the opret >= cc outputs - disable betting for other pubkeys (Do we need this rule?) -// TODO: -// opret params (firstprice,positionsize...) -// costbasis calculation -// cashout balance (PricesExactAmounts) -// use the special address for 50% fees bool PricesValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx, uint32_t nIn) { - vscript_t vopret; - - if (strcmp(SMART_CHAIN_SYMBOL, "REKT0") == 0 && chainActive.Height() < 5851) - return true; - // check basic opret rules: - if (PricesCheckOpret(tx, vopret) == 0) - return eval->Invalid("tx has no prices opreturn"); - - uint8_t funcId = vopret.begin()[1]; - - CTransaction firstVinTx; - vscript_t firstVinTxOpret; - bool foundFirst = false; - int32_t ccVinCount = 0; - uint32_t prevCCoutN = 0; - - // check basic rules: - - // find first cc vin and load vintx (might be either bet or add funding tx): - for (auto vin : tx.vin) { - if (cp->ismyvin(vin.scriptSig)) { - CTransaction vintx; - uint256 hashBlock; - vscript_t vintxOpret; - - if (!myGetTransaction(vin.prevout.hash, vintx, hashBlock)) - return eval->Invalid("cannot load vintx"); - - if (PricesCheckOpret(vintx, vintxOpret) == 0) { - //return eval->Invalid("cannot find prices opret in vintx"); - std::cerr << "PricesValidate() " << "cannot find prices opret in vintx" << std::endl; - } - - if (!IS_CHARINSTR(funcId, "FR") && vintxOpret.begin()[1] == 'B' && prevCCoutN == 1) { - //return eval->Invalid("cannot spend bet marker"); - std::cerr << "PricesValidate() " << " non-final tx cannot spend cc marker vout=" << prevCCoutN << std::endl; - } - - if (!foundFirst) { - prevCCoutN = vin.prevout.n; - firstVinTx = vintx; - firstVinTxOpret = vintxOpret; - foundFirst = true; - } - ccVinCount++; - } - } - if (!foundFirst) - return eval->Invalid("prices cc vin not found"); - - if (!IS_CHARINSTR(funcId, "FR") && ccVinCount > 1) {// for all prices tx except final tx only one cc vin is allowed - //return eval->Invalid("only one prices cc vin allowed for this tx"); - std::cerr << "PricesValidate() " << "only one prices cc vin allowed for this tx" << std::endl; - } - - switch (funcId) { - case 'B': // bet - return eval->Invalid("unexpected validate for bet funcid"); - - case 'A': // add funding - // check tx structure: - if (!ValidateAddFundingTx(cp, eval, tx, firstVinTx)) { - std::cerr << "PricesValidate() " << "ValidateAddFundingTx = false " << eval->state.GetRejectReason() << std::endl; - return false; // invalid state is already set in the func - } - - if (firstVinTxOpret.begin()[1] == 'B') { - if (!ValidateBetTx(cp, eval, firstVinTx)) {// check tx structure - std::cerr << "PricesValidate() " << "funcId=A ValidatebetTx = false " << eval->state.GetRejectReason() << std::endl; - return false; // invalid state is already set in the func - } - } - - if (prevCCoutN != 0) { // check spending rules - std::cerr << "PricesValidate() " << "addfunding tx incorrect vout to spend=" << prevCCoutN << std::endl; - return eval->Invalid("incorrect vintx vout to spend"); - } - break; - - /* not used: - case 'C': // set costbasis - if (!ValidateCostbasisTx(cp, eval, tx, firstVinTx)) { - //return false; - std::cerr << "PricesValidate() " << "ValidateCostbasisTx=false " << eval->state.GetRejectReason() << std::endl; - } - if (!ValidateBetTx(cp, eval, firstVinTx)) { - //return false; - std::cerr << "PricesValidate() " << "funcId=C ValidateBetTx=false " << eval->state.GetRejectReason() << std::endl; - } - if (prevoutN != 1) { // check spending rules - // return eval->Invalid("incorrect vout to spend"); - std::cerr << "PricesValidate() " << "costbasis tx incorrect vout to spend=" << prevoutN << std::endl; - } - //return eval->Invalid("test: costbasis is good"); - break; */ - - case 'F': // final tx - case 'R': - if (!ValidateFinalTx(cp, eval, tx, firstVinTx)) { - std::cerr << "PricesValidate() " << "ValidateFinalTx=false " << eval->state.GetRejectReason() << std::endl; - return false; - } - if (!ValidateBetTx(cp, eval, firstVinTx)) { - std::cerr << "PricesValidate() " << "ValidateBetTx=false " << eval->state.GetRejectReason() << std::endl; - return false; - } - if (prevCCoutN != 1) { // check spending rules - std::cerr << "PricesValidate() "<< "final tx incorrect vout to spend=" << prevCCoutN << std::endl; - return eval->Invalid("incorrect vout to spend"); - } - break; - - default: - return eval->Invalid("invalid funcid"); - } - - eval->state = CValidationState(); return true; } -// end of consensus code - // helper functions for rpc calls in rpcwallet.cpp int64_t AddPricesInputs(struct CCcontract_info *cp, CMutableTransaction &mtx, char *destaddr, int64_t total, int32_t maxinputs) { - int64_t nValue, price, totalinputs = 0; uint256 txid, hashBlock; std::vector origpubkey; CTransaction vintx; int32_t vout, n = 0; - std::vector > unspentOutputs; - - SetCCunspents(unspentOutputs, destaddr); - for (std::vector >::const_iterator it = unspentOutputs.begin(); it != unspentOutputs.end(); it++) - { - txid = it->first.txhash; - vout = (int32_t)it->first.index; - //if (vout == exclvout && txid == excltxid) // exclude vout which is added directly to vins outside this function - // continue; - if (myGetTransaction(txid, vintx, hashBlock) != 0 && vout < vintx.vout.size()) - { - vscript_t vopret; - uint8_t funcId = PricesCheckOpret(vintx, vopret); - if (funcId == 'B' && vout == 1) // skip cc marker - continue; - - if ((nValue = vintx.vout[vout].nValue) >= total / maxinputs && myIsutxo_spentinmempool(ignoretxid, ignorevin, txid, vout) == 0) - { - if (total != 0 && maxinputs != 0) - mtx.vin.push_back(CTxIn(txid, vout, CScript())); - nValue = it->second.satoshis; - totalinputs += nValue; - n++; - if ((total > 0 && totalinputs >= total) || (maxinputs > 0 && n >= maxinputs)) - break; - } - } - } + int64_t totalinputs = 0; return(totalinputs); } -// return min equity percentage depending on leverage value -// for lev=1 2% -// for lev>=100 10% double prices_minmarginpercent(int16_t leverage) { - int16_t absleverage = std::abs(leverage); - if (absleverage < 100) - return (absleverage * 0.080808 + 1.9191919) / 100.0; - else - return 0.1; + return 0.0; } UniValue prices_rawtxresult(UniValue &result, std::string rawtx, int32_t broadcastflag) { - CTransaction tx; - if (rawtx.size() > 0) - { - result.push_back(Pair("hex", rawtx)); - if (DecodeHexTx(tx, rawtx) != 0) - { - if (broadcastflag != 0 && myAddtomempool(tx) != 0) - RelayTransaction(tx); - result.push_back(Pair("txid", tx.GetHash().ToString())); - result.push_back(Pair("result", "success")); - } - else - result.push_back(Pair("error", "decode hex")); - } - else - result.push_back(Pair("error", "couldnt finalize CCtx")); return(result); } static std::string prices_getsourceexpression(const std::vector &vec) { - std::string expr; - - for (int32_t i = 0; i < vec.size(); i++) - { - char name[65]; - std::string operand; - uint16_t opcode = vec[i]; - int32_t value = (opcode & (HUSH_MAXPRICES - 1)); // index or weight - - switch (opcode & HUSH_PRICEMASK) - { - case 0: // indices - komodo_pricename(name, value); - operand = std::string(name); - break; - - case PRICES_WEIGHT: // multiply by weight and consume top of stack by updating price - operand = std::to_string(value); - break; - - case PRICES_MULT: // "*" - operand = std::string("*"); - break; - - case PRICES_DIV: // "/" - operand = std::string("/"); - break; - - case PRICES_INV: // "!" - operand = std::string("!"); - break; - - case PRICES_MDD: // "*//" - operand = std::string("*//"); - break; - - case PRICES_MMD: // "**/" - operand = std::string("**/"); - break; - - case PRICES_MMM: // "***" - operand = std::string("***"); - break; - - case PRICES_DDD: // "///" - operand = std::string("///"); - break; - - default: - return "invalid opcode"; - break; - } - - if (expr.size() > 0) - expr += std::string(", "); - expr += operand; - } return expr; } @@ -715,1002 +194,102 @@ static std::string prices_getsourceexpression(const std::vector &vec) // return s true and needed operand count if string is opcode static bool prices_isopcode(const std::string &s, int &need) { - if (s == "!") { - need = 1; - return true; - } - else if (s == "*" || s == "/") { - need = 2; - return true; - } - else if (s == "***" || s == "///" || s == "*//" || s == "**/") { - need = 3; - return true; - } - else - return false; + return false; } // split pair onto two quotes divided by "_" static void prices_splitpair(const std::string &pair, std::string &upperquote, std::string &bottomquote) { - size_t pos = pair.find('_'); // like BTC_USD - if (pos != std::string::npos) { - upperquote = pair.substr(0, pos); - bottomquote = pair.substr(pos + 1); - } - else { - upperquote = pair; - bottomquote = ""; - } - //std::cerr << "prices_splitpair: upperquote=" << upperquote << " bottomquote=" << bottomquote << std::endl; } // invert pair like BTS_USD -> USD_BTC static std::string prices_invertpair(const std::string &pair) { - std::string upperquote, bottomquote; - prices_splitpair(pair, upperquote, bottomquote); - return bottomquote + std::string("_") + upperquote; + std::string s; + return s; } // invert pairs in operation accordingly to "/" operator, convert operator to * or *** static void prices_invertoperation(const std::vector &vexpr, int p, std::vector &voperation) { - int need; - - voperation.clear(); - if (prices_isopcode(vexpr[p], need)) { - if (need > 1) { - if (need == 2) { - voperation.push_back(vexpr[p - 2]); - if (vexpr[p] == "/") - voperation.push_back(prices_invertpair(vexpr[p - 1])); - else - voperation.push_back(vexpr[p - 1]); - voperation.push_back("*"); - } - - if (need == 3) { - int i; - std::string::const_iterator c; - for (c = vexpr[p].begin(), i = -3; c != vexpr[p].end(); c++, i++) { - if (*c == '/') - voperation.push_back(prices_invertpair(vexpr[p + i])); - else - voperation.push_back(vexpr[p + i]); - } - voperation.push_back("***"); - } - } - else if (vexpr[p] == "!") { - voperation.push_back(prices_invertpair(vexpr[p - 1])); - // do not add operator - } - } - - //std::cerr << "prices_invert inverted="; - //for (auto v : voperation) std::cerr << v << " "; - //std::cerr << std::endl; } // reduce pairs in the operation, change or remove opcode if reduced static int prices_reduceoperands(std::vector &voperation) { - int opcount = voperation.size() - 1; - int need = opcount; - //std::cerr << "prices_reduceoperands begin need=" << need << std::endl; - - while (true) { - int i; - //std::cerr << "prices_reduceoperands opcount=" << opcount << std::endl; - for (i = 0; i < opcount; i++) { - std::string upperquote, bottomquote; - bool breaktostart = false; - - //std::cerr << "prices_reduceoperands voperation[i]=" << voperation[i] << " i=" << i << std::endl; - prices_splitpair(voperation[i], upperquote, bottomquote); - if (upperquote == bottomquote) { - std::cerr << "prices_reduceoperands erasing i=" << i << std::endl; - voperation.erase(voperation.begin() + i); - opcount--; - //std::cerr << "prices_reduceoperands erased, size=" << voperation.size() << std::endl; - - if (voperation.size() > 0 && voperation.back() == "*") - voperation.pop_back(); - breaktostart = true; - break; - } - - - int j; - for (j = i + 1; j < opcount; j++) { - - //std::cerr << "prices_reduceoperands voperation[j]=" << voperation[j] << " j=" << j << std::endl; - - std::string upperquotej, bottomquotej; - prices_splitpair(voperation[j], upperquotej, bottomquotej); - if (upperquote == bottomquotej || bottomquote == upperquotej) { - if (upperquote == bottomquotej) - voperation[i] = upperquotej + "_" + bottomquote; - else - voperation[i] = upperquote + "_" + bottomquotej; - //std::cerr << "prices_reduceoperands erasing j=" << j << std::endl; - voperation.erase(voperation.begin() + j); - opcount--; - //std::cerr << "prices_reduceoperands erased, size=" << voperation.size() << std::endl; - - need--; - if (voperation.back() == "***") { - voperation.pop_back(); - voperation.push_back("*"); // convert *** to * - } - else if (voperation.back() == "*") { - voperation.pop_back(); // convert * to nothing - } - breaktostart = true; - break; - } - } - if (breaktostart) - break; - } - if (i >= opcount) // all seen - break; - } - - //std::cerr << "prices_reduceoperands end need=" << need << std::endl; - return need; + return 0; } // substitute reduced operation in vectored expr static void prices_substitutereduced(std::vector &vexpr, int p, std::vector voperation) { - int need; - if (prices_isopcode(vexpr[p], need)) { - vexpr.erase(vexpr.begin() + p - need, vexpr.begin() + p + 1); - vexpr.insert(vexpr.begin() + p - need, voperation.begin(), voperation.end()); - } } // try to reduce synthetic expression by substituting "BTC_USD, BTC_EUR, 30, /" with "EUR_USD, 30" etc static std::string prices_getreducedexpr(const std::string &expr) { std::string reduced; - - std::vector vexpr; - SplitStr(expr, vexpr); - - for (size_t i = 0; i < vexpr.size(); i++) { - int need; - - if (prices_isopcode(vexpr[i], need)) { - std::vector voperation; - prices_invertoperation(vexpr, i, voperation); - if (voperation.size() > 0) { - int reducedneed = prices_reduceoperands(voperation); - if (reducedneed < need) { - prices_substitutereduced(vexpr, i, voperation); - } - } - } - } - - for (size_t i = 0; i < vexpr.size(); i++) { - if (reduced.size() > 0) - reduced += std::string(", "); - reduced += vexpr[i]; - } - - //std::cerr << "reduced=" << reduced << std::endl; return reduced; } // parse synthetic expression into vector of codes int32_t prices_syntheticvec(std::vector &vec, std::vector synthetic) { - int32_t i, need, ind, depth = 0; std::string opstr; uint16_t opcode, weight; - if (synthetic.size() == 0) { - std::cerr << "prices_syntheticvec() expression is empty" << std::endl; - return(-1); - } - for (i = 0; i < synthetic.size(); i++) - { - need = 0; - opstr = synthetic[i]; - if (opstr == "*") - opcode = PRICES_MULT, need = 2; - else if (opstr == "/") - opcode = PRICES_DIV, need = 2; - else if (opstr == "!") - opcode = PRICES_INV, need = 1; - else if (opstr == "**/") - opcode = PRICES_MMD, need = 3; - else if (opstr == "*//") - opcode = PRICES_MDD, need = 3; - else if (opstr == "***") - opcode = PRICES_MMM, need = 3; - else if (opstr == "///") - opcode = PRICES_DDD, need = 3; - else if (!is_weight_str(opstr) && (ind = komodo_priceind(opstr.c_str())) >= 0) - opcode = ind, need = 0; - else if ((weight = atoi(opstr.c_str())) > 0 && weight < HUSH_MAXPRICES) - { - opcode = PRICES_WEIGHT | weight; - need = 1; - } - else { - std::cerr << "prices_syntheticvec() incorrect opcode=" << opstr << std::endl; - return(-2); - } - if (depth < need) { - std::cerr << "prices_syntheticvec() incorrect not enough operands for opcode=" << opstr << std::endl; - return(-3); - } - depth -= need; - ///std::cerr << "prices_syntheticvec() opcode=" << opcode << " opstr=" << opstr << " need=" << need << " depth=" << depth << std::endl; - if ((opcode & HUSH_PRICEMASK) != PRICES_WEIGHT) { // skip weight - depth++; // increase operands count - ///std::cerr << "depth++=" << depth << std::endl; - } - if (depth > 3) { - std::cerr << "prices_syntheticvec() too many operands, last=" << opstr << std::endl; - return(-4); - } - vec.push_back(opcode); - } - if (depth != 0) - { - fprintf(stderr, "prices_syntheticvec() depth.%d not empty\n", depth); - return(-5); - } return(0); } // calculates price for synthetic expression int64_t prices_syntheticprice(std::vector vec, int32_t height, int32_t minmax, int16_t leverage) { - int32_t i, value, errcode, depth, retval = -1; - uint16_t opcode; - int64_t *pricedata, pricestack[4], a, b, c; - - mpz_t mpzTotalPrice, mpzPriceValue, mpzDen, mpzA, mpzB, mpzC, mpzResult; - - mpz_init(mpzTotalPrice); - mpz_init(mpzPriceValue); - mpz_init(mpzDen); - - mpz_init(mpzA); - mpz_init(mpzB); - mpz_init(mpzC); - mpz_init(mpzResult); - - pricedata = (int64_t *)calloc(sizeof(*pricedata) * 3, 1 + PRICES_DAYWINDOW * 2 + PRICES_SMOOTHWIDTH); - depth = errcode = 0; - mpz_set_si(mpzTotalPrice, 0); - mpz_set_si(mpzDen, 0); - - for (i = 0; i < vec.size(); i++) - { - opcode = vec[i]; - value = (opcode & (HUSH_MAXPRICES - 1)); // index or weight - - mpz_set_ui(mpzResult, 0); // clear result to test overflow (see below) - - //std::cerr << "prices_syntheticprice" << " i=" << i << " mpzTotalPrice=" << mpz_get_si(mpzTotalPrice) << " value=" << value << " depth=" << depth << " opcode&HUSH_PRICEMASK=" << (opcode & HUSH_PRICEMASK) <= 0) - { - //std::cerr << "prices_syntheticprice" << " pricedata[0]=" << pricedata[0] << " pricedata[1]=" << pricedata[1] << " pricedata[2]=" << pricedata[2] << std::endl; - // push price to the prices stack - /*if (!minmax) - pricestack[depth] = pricedata[2]; // use smoothed value if we are over 24h - else - { - // if we are within 24h use min or max price - if (leverage > 0) - pricestack[depth] = (pricedata[1] > pricedata[2]) ? pricedata[1] : pricedata[2]; // MAX - else - pricestack[depth] = (pricedata[1] < pricedata[2]) ? pricedata[1] : pricedata[2]; // MIN - }*/ - pricestack[depth] = pricedata[2]; - } - else - errcode = -1; - - if (pricestack[depth] == 0) - errcode = -14; - - depth++; - break; - - case PRICES_WEIGHT: // multiply by weight and consume top of stack by updating price - if (depth == 1) { - depth--; - // price += pricestack[0] * value; - mpz_set_si(mpzPriceValue, pricestack[0]); - mpz_mul_si(mpzPriceValue, mpzPriceValue, value); - mpz_add(mpzTotalPrice, mpzTotalPrice, mpzPriceValue); // accumulate weight's value - - // den += value; - mpz_add_ui(mpzDen, mpzDen, (uint64_t)value); // accumulate weight's value - } - else - errcode = -2; - break; - - case PRICES_MULT: // "*" - if (depth >= 2) { - b = pricestack[--depth]; - a = pricestack[--depth]; - // pricestack[depth++] = (a * b) / SATOSHIDEN; - mpz_set_si(mpzA, a); - mpz_set_si(mpzB, b); - mpz_mul(mpzResult, mpzA, mpzB); - mpz_tdiv_q_ui(mpzResult, mpzResult, SATOSHIDEN); - pricestack[depth++] = mpz_get_si(mpzResult); - - } - else - errcode = -3; - break; - - case PRICES_DIV: // "/" - if (depth >= 2) { - b = pricestack[--depth]; - a = pricestack[--depth]; - // pricestack[depth++] = (a * SATOSHIDEN) / b; - mpz_set_si(mpzA, a); - mpz_set_si(mpzB, b); - mpz_mul_ui(mpzResult, mpzA, SATOSHIDEN); - mpz_tdiv_q(mpzResult, mpzResult, mpzB); - pricestack[depth++] = mpz_get_si(mpzResult); - } - else - errcode = -4; - break; - - case PRICES_INV: // "!" - if (depth >= 1) { - a = pricestack[--depth]; - // pricestack[depth++] = (SATOSHIDEN * SATOSHIDEN) / a; - mpz_set_si(mpzA, a); - mpz_set_ui(mpzResult, SATOSHIDEN); - mpz_mul_ui(mpzResult, mpzResult, SATOSHIDEN); - mpz_tdiv_q(mpzResult, mpzResult, mpzA); - pricestack[depth++] = mpz_get_si(mpzResult); - } - else - errcode = -5; - break; - - case PRICES_MDD: // "*//" - if (depth >= 3) { - c = pricestack[--depth]; - b = pricestack[--depth]; - a = pricestack[--depth]; - // pricestack[depth++] = (((a * SATOSHIDEN) / b) * SATOSHIDEN) / c; - mpz_set_si(mpzA, a); - mpz_set_si(mpzB, b); - mpz_set_si(mpzC, c); - mpz_mul_ui(mpzResult, mpzA, SATOSHIDEN); - mpz_tdiv_q(mpzResult, mpzResult, mpzB); - mpz_mul_ui(mpzResult, mpzResult, SATOSHIDEN); - mpz_tdiv_q(mpzResult, mpzResult, mpzC); - pricestack[depth++] = mpz_get_si(mpzResult); - } - else - errcode = -6; - break; - - case PRICES_MMD: // "**/" - if (depth >= 3) { - c = pricestack[--depth]; - b = pricestack[--depth]; - a = pricestack[--depth]; - // pricestack[depth++] = (a * b) / c; - mpz_set_si(mpzA, a); - mpz_set_si(mpzB, b); - mpz_set_si(mpzC, c); - mpz_mul(mpzResult, mpzA, mpzB); - mpz_tdiv_q(mpzResult, mpzResult, mpzC); - pricestack[depth++] = mpz_get_si(mpzResult); - } - else - errcode = -7; - break; - - case PRICES_MMM: // "***" - if (depth >= 3) { - c = pricestack[--depth]; - b = pricestack[--depth]; - a = pricestack[--depth]; - // pricestack[depth++] = (((a * b) / SATOSHIDEN ) * c) / SATOSHIDEN; - mpz_set_si(mpzA, a); - mpz_set_si(mpzB, b); - mpz_set_si(mpzC, c); - mpz_mul(mpzResult, mpzA, mpzB); - mpz_tdiv_q_ui(mpzResult, mpzResult, SATOSHIDEN); - mpz_mul(mpzResult, mpzResult, mpzC); - mpz_tdiv_q_ui(mpzResult, mpzResult, SATOSHIDEN); - pricestack[depth++] = mpz_get_si(mpzResult); - } - else - errcode = -8; - break; - - case PRICES_DDD: // "///" - if (depth >= 3) { - c = pricestack[--depth]; - b = pricestack[--depth]; - a = pricestack[--depth]; - //pricestack[depth++] = (((((SATOSHIDEN * SATOSHIDEN) / a) * SATOSHIDEN) / b) * SATOSHIDEN) / c; - mpz_set_si(mpzA, a); - mpz_set_si(mpzB, b); - mpz_set_si(mpzC, c); - mpz_set_ui(mpzResult, SATOSHIDEN); - mpz_mul_ui(mpzResult, mpzResult, SATOSHIDEN); - mpz_tdiv_q(mpzResult, mpzResult, mpzA); - mpz_mul_ui(mpzResult, mpzResult, SATOSHIDEN); - mpz_tdiv_q(mpzResult, mpzResult, mpzB); - mpz_mul_ui(mpzResult, mpzResult, SATOSHIDEN); - mpz_tdiv_q(mpzResult, mpzResult, mpzC); - pricestack[depth++] = mpz_get_si(mpzResult); - } - else - errcode = -9; - break; - - default: - errcode = -10; - break; - } - - // std::cerr << "prices_syntheticprice test mpzResult=" << mpz_get_si(mpzResult) << std::endl; - // check overflow: - if (mpz_cmp_si(mpzResult, std::numeric_limits::max()) > 0) { - errcode = -13; - break; - } - - if (errcode != 0) - break; - - // if( depth > 0 ) - // std::cerr << "prices_syntheticprice top pricestack[depth-1=" << depth-1 << "]=" << pricestack[depth-1] << std::endl; - // else - // std::cerr << "prices_syntheticprice pricestack empty" << std::endl; - - } - free(pricedata); - mpz_clear(mpzResult); - mpz_clear(mpzA); - mpz_clear(mpzB); - mpz_clear(mpzC); - - if( mpz_get_si(mpzDen) != 0 ) - mpz_tdiv_q(mpzTotalPrice, mpzTotalPrice, mpzDen); // price / den - - int64_t den = mpz_get_si(mpzDen); - int64_t priceIndex = mpz_get_si(mpzTotalPrice); - - mpz_clear(mpzDen); - mpz_clear(mpzTotalPrice); - mpz_clear(mpzPriceValue); - - if (errcode != 0) - std::cerr << "prices_syntheticprice errcode in switch=" << errcode << std::endl; - - if( errcode == -1 ) { - std::cerr << "prices_syntheticprice error getting price (could be end of chain)" << std::endl; - return errcode; - } - - if (errcode == -13) { - std::cerr << "prices_syntheticprice overflow in price" << std::endl; - return errcode; - } - if (errcode == -14) { - std::cerr << "prices_syntheticprice price is zero, not enough historic data yet" << std::endl; - return errcode; - } - if (den == 0) { - std::cerr << "prices_syntheticprice den==0 return err=-11" << std::endl; - return(-11); - } - else if (depth != 0) { - std::cerr << "prices_syntheticprice depth!=0 err=-12" << std::endl; - return(-12); - } - else if (errcode != 0) { - std::cerr << "prices_syntheticprice err=" << errcode << std::endl; - return(errcode); - } -// std::cerr << "prices_syntheticprice priceIndex=totalprice/den=" << priceIndex << " den=" << den << std::endl; - - return priceIndex; + return 0; } // calculates costbasis and profit/loss for the bet int32_t prices_syntheticprofits(int64_t &costbasis, int32_t firstheight, int32_t height, int16_t leverage, std::vector vec, int64_t positionsize, int64_t &profits, int64_t &outprice) { - int64_t price; -#ifndef TESTMODE - const int32_t COSTBASIS_PERIOD = PRICES_DAYWINDOW; -#else - const int32_t COSTBASIS_PERIOD = 7; -#endif - - - if (height < firstheight) { - fprintf(stderr, "requested height is lower than bet firstheight.%d\n", height); - return -1; - } - - int32_t minmax = (height < firstheight + COSTBASIS_PERIOD); // if we are within 24h then use min or max value - - if ((price = prices_syntheticprice(vec, height, minmax, leverage)) < 0) - { - fprintf(stderr, "error getting synthetic price at height.%d\n", height); - return -1; - } - - // clear lowest positions: - //price /= PRICES_POINTFACTOR; - //price *= PRICES_POINTFACTOR; - outprice = price; - - if (minmax) { // if we are within day window, set temp costbasis to max (or min) price value - if (leverage > 0 && price > costbasis) { - costbasis = price; // set temp costbasis - //std::cerr << "prices_syntheticprofits() minmax costbasis=" << costbasis << std::endl; - } - else if (leverage < 0 && (costbasis == 0 || price < costbasis)) { - costbasis = price; - //std::cerr << "prices_syntheticprofits() minmax costbasis=" << costbasis << std::endl; - } - //else { //-> use the previous value - // std::cerr << "prices_syntheticprofits() unchanged costbasis=" << costbasis << " price=" << price << " leverage=" << leverage << std::endl; - //} - } - else { - //if (height == firstheight + COSTBASIS_PERIOD) { - // if costbasis not set, just set it - //costbasis = price; - - // use calculated minmax costbasis - //std::cerr << "prices_syntheticprofits() use permanent costbasis=" << costbasis << " at height=" << height << std::endl; - //} - } - - // normalize to 10,000,000 to prevent underflow - //profits = costbasis > 0 ? (((price / PRICES_POINTFACTOR * PRICES_NORMFACTOR) / costbasis) - PRICES_NORMFACTOR / PRICES_POINTFACTOR) * PRICES_POINTFACTOR : 0; - //double dprofits = costbasis > 0 ? ((double)price / (double)costbasis - 1) : 0; - - //std::cerr << "prices_syntheticprofits() test value1 (price/PRICES_POINTFACTOR * PRICES_NORMFACTOR)=" << (price / PRICES_POINTFACTOR * PRICES_NORMFACTOR) << std::endl; - //std::cerr << "prices_syntheticprofits() test value2 (price/PRICES_POINTFACTOR * PRICES_NORMFACTOR)/costbasis=" << (costbasis != 0 ? (price / PRICES_POINTFACTOR * PRICES_NORMFACTOR)/costbasis : 0) << std::endl; - - //std::cerr << "prices_syntheticprofits() fractional profits=" << profits << std::endl; - //std::cerr << "prices_syntheticprofits() profits double=" << (double)price / (double)costbasis -1.0 << std::endl; - //double dprofits = (double)price / (double)costbasis - 1.0; - - //profits *= ((int64_t)leverage * (int64_t)positionsize); - //profits /= (int64_t)PRICES_NORMFACTOR; // de-normalize - - //dprofits *= ((double)leverage * (double)positionsize); - - //dprofits *= leverage * positionsize; - // profits = dprofits; - //std::cerr << "prices_syntheticprofits() dprofits=" << dprofits << std::endl; - - if (costbasis > 0) { - mpz_t mpzProfits; - mpz_t mpzCostbasis; - mpz_t mpzPrice; - mpz_t mpzLeverage; - - mpz_init(mpzProfits); - mpz_init(mpzCostbasis); - mpz_init(mpzPrice); - mpz_init(mpzLeverage); - - mpz_set_si(mpzCostbasis, costbasis); - mpz_set_si(mpzPrice, price); - mpz_mul_ui(mpzPrice, mpzPrice, SATOSHIDEN); // (price*SATOSHIDEN) - - mpz_tdiv_q(mpzProfits, mpzPrice, mpzCostbasis); // profits = (price*SATOSHIDEN)/costbasis // normalization - mpz_sub_ui(mpzProfits, mpzProfits, SATOSHIDEN); // profits -= SATOSHIDEN - - mpz_set_si(mpzLeverage, leverage); - mpz_mul(mpzProfits, mpzProfits, mpzLeverage); // profits *= leverage - mpz_mul_ui(mpzProfits, mpzProfits, positionsize); // profits *= positionsize - mpz_tdiv_q_ui(mpzProfits, mpzProfits, SATOSHIDEN); // profits /= SATOSHIDEN // de-normalization - - profits = mpz_get_si(mpzProfits); - - mpz_clear(mpzLeverage); - mpz_clear(mpzProfits); - mpz_clear(mpzCostbasis); - mpz_clear(mpzPrice); - - } - else - profits = 0; - - //std::cerr << "prices_syntheticprofits() profits=" << profits << std::endl; - return 0; // (positionsize + addedbets + profits); + return 0; } // makes result json object void prices_betjson(UniValue &result, std::vector bets, int16_t leverage, int32_t endheight, int64_t lastprice) { - - UniValue resultbets(UniValue::VARR); - int64_t totalposition = 0; - int64_t totalprofits = 0; - - for (auto b : bets) { - UniValue entry(UniValue::VOBJ); - entry.push_back(Pair("positionsize", ValueFromAmount(b.positionsize))); - entry.push_back(Pair("profits", ValueFromAmount(b.profits))); - entry.push_back(Pair("costbasis", ValueFromAmount(b.costbasis))); - entry.push_back(Pair("firstheight", b.firstheight)); - resultbets.push_back(entry); - totalposition += b.positionsize; - totalprofits += b.profits; - } - int64_t equity = totalposition + totalprofits; - - result.push_back(Pair("bets", resultbets)); - result.push_back(Pair("leverage", (int64_t)leverage)); - result.push_back(Pair("TotalPositionSize", ValueFromAmount(totalposition))); - result.push_back(Pair("TotalProfits", ValueFromAmount(totalprofits))); - result.push_back(Pair("equity", ValueFromAmount(equity))); - result.push_back(Pair("LastPrice", ValueFromAmount(lastprice))); - result.push_back(Pair("LastHeight", endheight)); } // retrieves costbasis from a tx spending bettx vout1 (deprecated) int64_t prices_costbasis(CTransaction bettx, uint256 &txidCostbasis) { - int64_t costbasis = 0; - // if vout1 is spent, follow and extract costbasis from opreturn - //uint8_t prices_costbasisopretdecode(CScript scriptPubKey,uint256 &bettxid,CPubKey &pk,int32_t &height,int64_t &costbasis) - //uint256 txidCostbasis; - int32_t vini; - int32_t height; - txidCostbasis = zeroid; -/* - if (CCgetspenttxid(txidCostbasis, vini, height, bettx.GetHash(), 1) < 0) { - std::cerr << "prices_costbasis() no costbasis txid found" << std::endl; - return 0; - } - - CTransaction txCostbasis; - uint256 hashBlock; - uint256 bettxid; - CPubKey pk; - bool isLoaded = false; - uint8_t funcId = 0; - - if ((isLoaded = myGetTransaction(txidCostbasis, txCostbasis, hashBlock)) && - txCostbasis.vout.size() > 0 && - (funcId = prices_costbasisopretdecode(txCostbasis.vout.back().scriptPubKey, bettxid, pk, height, costbasis)) != 0) { - return costbasis; - } - - std::cerr << "prices_costbasis() cannot load costbasis tx or decode opret" << " isLoaded=" << isLoaded << " funcId=" << (int)funcId << std::endl; */ return 0; } // enumerates and retrieves added bets, returns the last baton txid int64_t prices_enumaddedbets(uint256 &batontxid, std::vector &bets, uint256 bettxid) { - int64_t addedBetsTotal = 0; - int32_t vini; - int32_t height; - int32_t retcode; - - batontxid = bettxid; // initially set to the source bet tx - uint256 sourcetxid = bettxid; - - // iterate through batons, adding up vout1 -> addedbets - while ((retcode = CCgetspenttxid(batontxid, vini, height, sourcetxid, 0)) == 0) { - - CTransaction txBaton; - CBlockIndex blockIdx; - uint256 bettxidInOpret; - CPubKey pk; - bool isLoaded = false; - uint8_t funcId = 0; - int64_t amount; - EvalRef eval; - - if ((isLoaded = eval->GetTxConfirmed(batontxid, txBaton, blockIdx)) && - blockIdx.IsValid() && - txBaton.vout.size() > 0 && - (funcId = prices_addopretdecode(txBaton.vout.back().scriptPubKey, bettxidInOpret, pk, amount)) != 0) - { - OneBetData added; - - addedBetsTotal += amount; - added.positionsize = amount; - added.firstheight = blockIdx.GetHeight(); //TODO: check if this is correct (to get height from the block not from the opret) - bets.push_back(added); - //std::cerr << "prices_batontxid() added amount=" << amount << std::endl; - } - else { - std::cerr << "prices_batontxid() cannot load or decode add bet tx, isLoaded=" << isLoaded << " funcId=" << (int)funcId << std::endl; - return -1; - } - sourcetxid = batontxid; - } - - return(addedBetsTotal); + return 0; } // pricesbet rpc impl: make betting tx UniValue PricesBet(int64_t txfee, int64_t amount, int16_t leverage, std::vector synthetic) { - int32_t nextheight = hush_nextheight(); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); - struct CCcontract_info *cp, C; - CPubKey pricespk, mypk; - int64_t betamount, firstprice = 0; - std::vector vec; - //char myaddr[64]; - std::string rawtx; - - if (leverage > PRICES_MAXLEVERAGE || leverage < -PRICES_MAXLEVERAGE) - { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "leverage too big")); - return(result); - } - cp = CCinit(&C, EVAL_PRICES); - if (txfee == 0) - txfee = PRICES_TXFEE; - mypk = pubkey2pk(Mypubkey()); - pricespk = GetUnspendable(cp, 0); - //GetCCaddress(cp, myaddr, mypk); - if (prices_syntheticvec(vec, synthetic) < 0 || (firstprice = prices_syntheticprice(vec, nextheight - 1, 1, leverage)) < 0 || vec.size() == 0 || vec.size() > 4096) - { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "invalid synthetic")); - return(result); - } - - if (!prices_isacceptableamount(vec, amount, leverage)) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "too big amount and leverage")); - return(result); - } - - if (AddNormalinputs(mtx, mypk, amount + 4 * txfee, 64) >= amount + 4 * txfee) - { - betamount = PRICES_SUBREVSHAREFEE(amount); - - /*if( amount - betamount < PRICES_REVSHAREDUST) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "bet amount too small")); - return(result); - }*/ - - - mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, mypk)); // vout0 baton for total funding - // mtx.vout.push_back(MakeCC1vout(cp->evalcode, (amount - betamount) + 2 * txfee, pricespk)); // vout1, when spent, costbasis is set - mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, pricespk)); // vout1 cc marker (NVOUT_CCMARKER) - mtx.vout.push_back(MakeCC1vout(cp->evalcode, betamount, pricespk)); // vout2 betamount - mtx.vout.push_back(CTxOut(txfee, CScript() << ParseHex(HexStr(pricespk)) << OP_CHECKSIG)); // vout3 normal marker NVOUT_NORMALMARKER - TODO: remove it as we have cc marker now, when move to the new chain - if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0 ) - { - // Lock here, as in validation we cannot call lock in the function itself. - // may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here. - LOCK(cs_main); - GetHushEarlytxidScriptPub(); - } - mtx.vout.push_back(CTxOut(amount-betamount, HUSH_EARLYTXID_SCRIPTPUB)); - //test: mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); // vout4 test revshare fee - - rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_betopret(mypk, nextheight - 1, amount, leverage, firstprice, vec, zeroid)); - return(prices_rawtxresult(result, rawtx, 0)); - } - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "not enough funds")); + UniValue result(UniValue::VOBJ); return(result); } // pricesaddfunding rpc impl: add yet another bet UniValue PricesAddFunding(int64_t txfee, uint256 bettxid, int64_t amount) { - int32_t nextheight = hush_nextheight(); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); - struct CCcontract_info *cp, C; - CTransaction bettx; - CPubKey pricespk, mypk, pk; - int64_t positionsize, betamount, firstprice; - int32_t firstheight; - std::vector vecparsed; - uint256 batontxid, tokenid, hashBlock; - int16_t leverage = 0; - std::string rawtx; - //char myaddr[64]; - - cp = CCinit(&C, EVAL_PRICES); - if (txfee == 0) - txfee = PRICES_TXFEE; - mypk = pubkey2pk(Mypubkey()); - pricespk = GetUnspendable(cp, 0); - - if (!myGetTransaction(bettxid, bettx, hashBlock) || - bettx.vout.size() <= 3 || - hashBlock.IsNull() || - prices_betopretdecode(bettx.vout.back().scriptPubKey, pk, firstheight, positionsize, leverage, firstprice, vecparsed, tokenid) != 'B') { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "invalid bet tx")); - return(result); - } - - if (!prices_isacceptableamount(vecparsed, amount, leverage)) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "too big amount and leverage")); - return(result); - } - - if (AddNormalinputs(mtx, mypk, amount + 2*txfee, 64) >= amount + 2*txfee) - { - betamount = PRICES_SUBREVSHAREFEE(amount); - /*if (amount - betamount < PRICES_REVSHAREDUST) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "bet amount too small")); - return(result); - }*/ - - std::vector bets; - if (prices_enumaddedbets(batontxid, bets, bettxid) >= 0) - { - mtx.vin.push_back(CTxIn(batontxid, 0, CScript())); - mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, mypk)); // vout0 baton for total funding - mtx.vout.push_back(MakeCC1vout(cp->evalcode, betamount, pricespk)); // vout1 added amount - - if (ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && HUSH_EARLYTXID_SCRIPTPUB.size() == 0) - { - // Lock here, as in validation we cannot call lock in the function itself. - // may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here. - LOCK(cs_main); - GetHushEarlytxidScriptPub(); - } - mtx.vout.push_back(CTxOut(amount - betamount, HUSH_EARLYTXID_SCRIPTPUB)); - // test: mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); //vout2 test revshare fee - - rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_addopret(bettxid, mypk, amount)); - return(prices_rawtxresult(result, rawtx, 0)); - } - else - { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "couldnt find batonttxid")); - return(result); - } - } - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "not enough funds")); + UniValue result(UniValue::VOBJ); return(result); } // scan chain from the initial bet's first position upto the chain tip and calculate bet's costbasises and profits, breaks if rekt detected int32_t prices_scanchain(std::vector &bets, int16_t leverage, std::vector vec, int64_t &lastprice, int32_t &endheight) { - - if (bets.size() == 0) - return -1; - - bool stop = false; - for (int32_t height = bets[0].firstheight+1; ; height++) // the last datum for 24h is the costbasis value - { - int64_t totalposition = 0; - int64_t totalprofits = 0; - - // scan upto the chain tip - for (int i = 0; i < bets.size(); i++) { - - if (height > bets[i].firstheight) { - - int32_t retcode = prices_syntheticprofits(bets[i].costbasis, bets[i].firstheight, height, leverage, vec, bets[i].positionsize, bets[i].profits, lastprice); - if (retcode < 0) { - std::cerr << "prices_scanchain() prices_syntheticprofits returned -1, finishing..." << std::endl; - stop = true; - break; - } - totalposition += bets[i].positionsize; - totalprofits += bets[i].profits; - } - } - - if (stop) - break; - - endheight = height; - int64_t equity = totalposition + totalprofits; - if (equity <= (int64_t)((double)totalposition * prices_minmarginpercent(leverage))) - { // we are in loss - break; - } - } - return 0; } // pricescostbasis rpc impl: set cost basis (open price) for the bet (deprecated) UniValue PricesSetcostbasis(int64_t txfee, uint256 bettxid) { - int32_t nextheight = hush_nextheight(); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); - struct CCcontract_info *cp, C; CTransaction bettx; uint256 hashBlock, batontxid, tokenid; - int64_t myfee, positionsize = 0, addedbets, firstprice = 0, lastprice, profits = 0, costbasis = 0, equity; - int32_t i, firstheight = 0, height, numvouts; int16_t leverage = 0; - std::vector vec; - CPubKey pk, mypk, pricespk; std::string rawtx; -/* - cp = CCinit(&C, EVAL_PRICES); - if (txfee == 0) - txfee = PRICES_TXFEE; - - mypk = pubkey2pk(Mypubkey()); - pricespk = GetUnspendable(cp, 0); - if (myGetTransaction(bettxid, bettx, hashBlock) != 0 && (numvouts = bettx.vout.size()) > 3) - { - if (prices_betopretdecode(bettx.vout[numvouts - 1].scriptPubKey, pk, firstheight, positionsize, leverage, firstprice, vec, tokenid) == 'B') - { - if (nextheight <= firstheight + PRICES_DAYWINDOW + 1) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "cannot calculate costbasis yet")); - return(result); - } - - addedbets = prices_enumaddedbets(batontxid, bettx, bettxid); - mtx.vin.push_back(CTxIn(bettxid, 1, CScript())); // spend vin1 with betamount - //for (i = 0; i < PRICES_DAYWINDOW + 1; i++) // the last datum for 24h is the actual costbasis value - //{ - int32_t retcode = prices_syntheticprofits(costbasis, firstheight, firstheight + PRICES_DAYWINDOW, leverage, vec, positionsize, addedbets, profits, lastprice); - if (retcode < 0) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "cannot calculate costbasis error getting price")); - return(result); - } - equity = positionsize + addedbets + profits; - //if (equity < 0) - //{ // we are in loss - // result.push_back(Pair("rekt", (int64_t)1)); - // result.push_back(Pair("rektheight", (int64_t)firstheight + i)); - // break; - //} - //} - //if (i == PRICES_DAYWINDOW + 1) - // result.push_back(Pair("rekt", 0)); - - prices_betjson(result, profits, costbasis, positionsize, addedbets, leverage, firstheight, firstprice, lastprice, equity); - - if (AddNormalinputs(mtx, mypk, txfee, 4) >= txfee) - { - myfee = bettx.vout[1].nValue / 10; // fee for setting costbasis - result.push_back(Pair("myfee", myfee)); - - mtx.vout.push_back(CTxOut(myfee, CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); - mtx.vout.push_back(MakeCC1vout(cp->evalcode, bettx.vout[1].nValue - myfee, pricespk)); - rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_costbasisopret(bettxid, mypk, firstheight + PRICES_DAYWINDOW , costbasis)); // -1 - return(prices_rawtxresult(result, rawtx, 0)); - } - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "not enough funds")); - return(result); - } - } */ - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "deprecated")); return(result); } @@ -1718,360 +297,28 @@ UniValue PricesSetcostbasis(int64_t txfee, uint256 bettxid) // pricesaddfunding rpc impl: add yet another bet UniValue PricesRefillFund(int64_t amount) { - int32_t nextheight = hush_nextheight(); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); - struct CCcontract_info *cp, C; - CPubKey pricespk, mypk, pk; - std::string rawtx; - //char myaddr[64]; - - cp = CCinit(&C, EVAL_PRICES); - const int64_t txfee = PRICES_TXFEE; - mypk = pubkey2pk(Mypubkey()); - pricespk = GetUnspendable(cp, 0); - - if (AddNormalinputs(mtx, mypk, amount + txfee, 64) >= amount + txfee) - { - mtx.vout.push_back(MakeCC1vout(cp->evalcode, amount, pricespk)); // vout1 added amount - rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, CScript()); - return(prices_rawtxresult(result, rawtx, 0)); - - } - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "not enough funds")); + UniValue result(UniValue::VOBJ); return(result); } int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo) { - CTransaction bettx; - uint256 hashBlock, batontxid, tokenid; - - if (myGetTransaction(bettxid, bettx, hashBlock) && bettx.vout.size() > 3) - { - if (hashBlock.IsNull()) - return -2; - - - // TODO: forget old tx - //CBlockIndex *bi = komodo_getblockindex(hashBlock); - //if (bi && bi->GetHeight() < 5342) - // return -5; - - OneBetData bet1; - if (prices_betopretdecode(bettx.vout.back().scriptPubKey, betinfo.pk, bet1.firstheight, bet1.positionsize, betinfo.leverage, betinfo.firstprice, betinfo.vecparsed, betinfo.tokenid) == 'B') - { - uint256 finaltxid; - int32_t vini; - int32_t finaltxheight; //, endheight; - //std::vector bets; - betinfo.txid = bettxid; - - if (CCgetspenttxid(finaltxid, vini, finaltxheight, bettxid, NVOUT_CCMARKER) == 0) - betinfo.isOpen = false; - else - betinfo.isOpen = true; - - // override with real amount (TODO: check this) - //bet1.positionsize = bettx.vout[2].nValue; - - betinfo.bets.push_back(bet1); - - prices_enumaddedbets(batontxid, betinfo.bets, bettxid); - - if (!betinfo.isOpen) { - CTransaction finaltx; - uint256 hashBlock; - vscript_t vopret; - if (myGetTransaction(finaltxid, finaltx, hashBlock) && finaltx.vout.size() > 0 && PricesCheckOpret(finaltx, vopret) != 0) { - uint8_t funcId = prices_finalopretdecode(finaltx.vout.back().scriptPubKey, betinfo.txid, betinfo.pk, betinfo.lastheight, betinfo.averageCostbasis, betinfo.lastprice, betinfo.liquidationprice, betinfo.equity, betinfo.exitfee); - if (funcId == 0) - return -3; - - betinfo.isRekt = (funcId == 'R'); - - // return 0; - } - else - return -6; - } - - - if (prices_scanchain(betinfo.bets, betinfo.leverage, betinfo.vecparsed, betinfo.lastprice, betinfo.lastheight) < 0) { - return -4; - } - - mpz_t mpzTotalPosition; - mpz_t mpzTotalprofits; - mpz_t mpzTotalcostbasis; - - mpz_init(mpzTotalPosition); - mpz_init(mpzTotalprofits); - mpz_init(mpzTotalcostbasis); - - int64_t totalposition = 0; - int64_t totalprofits = 0; - - for (auto b : betinfo.bets) { - mpz_t mpzProduct; - mpz_t mpzProfits; - - mpz_init(mpzProduct); - mpz_init(mpzProfits); - - //totalprofits += b.profits; - //dcostbasis += b.amount * (double)b.costbasis; - // costbasis += b.amount * (b.costbasis / PRICES_POINTFACTOR); // prevent int64 overflow (but we have underflow for 1/BTC) - // std::cerr << "PricesInfo() acc dcostbasis=" << dcostbasis << " b.amount=" << b.amount << " b.costbasis/PRICES_POINTFACTOR=" << (b.costbasis / PRICES_POINTFACTOR) << std::endl; - //std::cerr << "PricesInfo() acc dcostbasis=" << dcostbasis << " b.amount=" << b.amount << " b.costbasis/PRICES_POINTFACTOR=" << (b.costbasis / PRICES_POINTFACTOR) << std::endl; - mpz_set_ui(mpzProduct, b.costbasis); - mpz_mul_ui(mpzProduct, mpzProduct, (uint64_t)b.positionsize); // b.costbasis * b.amount - mpz_add(mpzTotalcostbasis, mpzTotalcostbasis, mpzProduct); //averageCostbasis += b.costbasis * b.amount; - - mpz_add_ui(mpzTotalPosition, mpzTotalPosition, (uint64_t)b.positionsize); //totalposition += b.amount; - mpz_add(mpzTotalprofits, mpzTotalprofits, mpzProfits); //totalprofits += b.profits; - - totalposition += b.positionsize; - totalprofits += b.profits; - - mpz_clear(mpzProduct); - mpz_clear(mpzProfits); - } - - betinfo.equity = totalposition + totalprofits; - //int64_t averageCostbasis = 0; - - if (mpz_get_ui(mpzTotalPosition) != 0) { //prevent zero div - mpz_t mpzAverageCostbasis; - mpz_init(mpzAverageCostbasis); - - //averageCostbasis = totalcostbasis / totalposition; - mpz_mul_ui(mpzTotalcostbasis, mpzTotalcostbasis, SATOSHIDEN); // profits *= SATOSHIDEN normalization to prevent loss of significance while division - mpz_tdiv_q(mpzAverageCostbasis, mpzTotalcostbasis, mpzTotalPosition); - - mpz_tdiv_q_ui(mpzAverageCostbasis, mpzAverageCostbasis, SATOSHIDEN); // profits /= SATOSHIDEN de-normalization - - betinfo.averageCostbasis = mpz_get_ui(mpzAverageCostbasis); - mpz_clear(mpzAverageCostbasis); - } - - betinfo.liquidationprice = 0; - if (betinfo.leverage != 0) {// prevent zero div - betinfo.liquidationprice = betinfo.averageCostbasis - (betinfo.averageCostbasis * (1 - prices_minmarginpercent(betinfo.leverage))) / betinfo.leverage; - } - - if (!betinfo.isRekt) { // not set by check for final tx - - if (betinfo.equity > (int64_t)((double)totalposition * prices_minmarginpercent(betinfo.leverage))) - betinfo.isRekt = false; - else - { - betinfo.isRekt = true; - betinfo.exitfee = (int64_t)(((double)totalposition * prices_minmarginpercent(betinfo.leverage)) / 10); // was: totalposition / 500 - } - } - - mpz_clear(mpzTotalPosition); - mpz_clear(mpzTotalprofits); - mpz_clear(mpzTotalcostbasis); - return 0; - } - return -3; - } - return (-1); + return (-420); } // pricesrekt rpc: anyone can rekt a bet at some block where losses reached limit, collecting fee UniValue PricesRekt(int64_t txfee, uint256 bettxid, int32_t rektheight) { - int32_t nextheight = hush_nextheight(); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); - struct CCcontract_info *cp, C; - CTransaction bettx; - int64_t myfee = 0; - CPubKey pk, mypk, pricespk; - std::string rawtx; - char destaddr[64]; - - cp = CCinit(&C, EVAL_PRICES); - if (txfee == 0) // TODO: what did we want to do with txfee in prices? - txfee = PRICES_TXFEE; - mypk = pubkey2pk(Mypubkey()); - pricespk = GetUnspendable(cp, 0); - GetCCaddress(cp, destaddr, pricespk); - - BetInfo betinfo; - int32_t retcode = prices_getbetinfo(bettxid, betinfo); - if (retcode < 0) { - if (retcode == -1) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "cant find bettxid or incorrect")); - } - else if (retcode == -2) { - throw std::runtime_error("tx still in mempool"); - } - else if (retcode == -3) - { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "cant decode opret")); - return(result); - } - else if (retcode == -4) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "error scanning chain")); - } - return(result); - } - - int64_t totalposition = 0; - int64_t totalprofits = 0; - - for (auto b : betinfo.bets) { - totalposition += b.positionsize; - totalprofits += b.profits; - } - - - if (!betinfo.isOpen) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "position closed")); - return result; - } - - prices_betjson(result, betinfo.bets, betinfo.leverage, betinfo.lastheight, betinfo.lastprice); // fill output - if (betinfo.isRekt) - { - myfee = betinfo.exitfee; // consolation fee for loss - } - if (myfee != 0) - { - int64_t CCchange = 0, inputsum; - - mtx.vin.push_back(CTxIn(bettxid, NVOUT_CCMARKER, CScript())); // spend cc marker - if ((inputsum = AddPricesInputs(cp, mtx, destaddr, myfee + txfee, 64)) > myfee + txfee) // TODO: why do we take txfee from global addr and not from user's addr? - CCchange = (inputsum - myfee); - mtx.vout.push_back(CTxOut(myfee, CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); - if (CCchange >= txfee) - mtx.vout.push_back(MakeCC1vout(cp->evalcode, CCchange, pricespk)); - - /// mtx.vout.push_back(MakeCC1vout(cp->evalcode, bettx.vout[2].nValue - myfee - txfee, pricespk)); // change - - // make some PoW to get txid=0x00.....00 to 'faucet' rekts - fprintf(stderr, "start PoW at %u\n", (uint32_t)time(NULL)); - uint32_t nonce = rand() & 0xfffffff; - for (int i = 0; i<1000000; i++, nonce++) - { - CMutableTransaction tmpmtx = mtx; - //int32_t len; - //uint8_t txbuf[32768]; - - rawtx = FinalizeCCTx(0, cp, tmpmtx, mypk, txfee, prices_finalopret(true, bettxid, mypk, betinfo.lastheight, betinfo.averageCostbasis, betinfo.lastprice, betinfo.liquidationprice, betinfo.equity, myfee, nonce)); - //if ((len = (int32_t)rawtx.size()) > 0 && len < sizeof(txbuf) / sizeof(txbuf[0]) * 2) - //{ - // len >>= 1; // sizeof hex divide by 2 - //decode_hex(txbuf, len, (char *)rawtx.c_str()); - //bits256 hash = bits256_doublesha256(0, txbuf, len); - uint256 hash = tmpmtx.GetHash(); - //if ((hash.bytes[0] & 0xff) == 0 && (hash.bytes[31] & 0xff) == 0) - if ((hash.begin()[0] & 0xff) == 0 && (hash.begin()[31] & 0xff) == 0) - { - fprintf(stderr, "found valid txid after %d iterations %u\n", i, (uint32_t)time(NULL)); - return(prices_rawtxresult(result, rawtx, 0)); - } - //fprintf(stderr,"%02x%02x ",hash.bytes[0],hash.bytes[31]); - //} - } - fprintf(stderr, "couldnt generate valid txid %u\n", (uint32_t)time(NULL)); - - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "could not generate valid txid")); - return(result); - } - else - { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "position not rekt")); - return(result); - } + UniValue result(UniValue::VOBJ); + return(result); } // pricescashout rpc impl: bettor can cashout hit bet if it is not rekt UniValue PricesCashout(int64_t txfee, uint256 bettxid) { - int32_t nextheight = hush_nextheight(); - CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ); - struct CCcontract_info *cp, C; char destaddr[64]; - int64_t CCchange = 0, inputsum; - CPubKey pk, mypk, pricespk; - std::string rawtx; - - cp = CCinit(&C, EVAL_PRICES); - if (txfee == 0) - txfee = PRICES_TXFEE; - - mypk = pubkey2pk(Mypubkey()); - pricespk = GetUnspendable(cp, 0); - GetCCaddress(cp, destaddr, pricespk); - - BetInfo betinfo; - int32_t retcode = prices_getbetinfo(bettxid, betinfo); - if (retcode < 0) { - if (retcode == -1) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "cant find bettxid or incorrect")); - } - else if (retcode == -2) { - throw std::runtime_error("tx still in mempool"); - } - else if (retcode == -3) - { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "cant decode opret")); - return(result); - } - else if (retcode == -4) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "error scanning chain")); - } - return(result); - } - - int64_t totalposition = 0; - int64_t totalprofits = 0; - - for (auto b : betinfo.bets) { - totalposition += b.positionsize; - totalprofits += b.profits; - } - - - if (!betinfo.isOpen) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "position closed")); - return result; - } - - prices_betjson(result, betinfo.bets, betinfo.leverage, betinfo.lastheight, betinfo.lastprice); // fill output json - - if (betinfo.isRekt) - { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "position rekt")); - return(result); - } - - mtx.vin.push_back(CTxIn(bettxid, NVOUT_CCMARKER, CScript())); // spend cc marker - if ((inputsum = AddPricesInputs(cp, mtx, destaddr, betinfo.equity + txfee, 64)) > betinfo.equity + txfee) // TODO: why txfee from the fund? - CCchange = (inputsum - betinfo.equity); - mtx.vout.push_back(CTxOut(betinfo.equity, CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); - if (CCchange >= txfee) - mtx.vout.push_back(MakeCC1vout(cp->evalcode, CCchange, pricespk)); - // TODO: what should the opret param be: - rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_finalopret(false, bettxid, mypk, nextheight-1, betinfo.averageCostbasis, betinfo.lastprice, betinfo.liquidationprice, betinfo.equity, txfee, 0)); - return(prices_rawtxresult(result, rawtx, 0)); - + return result; } @@ -2079,66 +326,6 @@ UniValue PricesCashout(int64_t txfee, uint256 bettxid) UniValue PricesInfo(uint256 bettxid, int32_t refheight) { UniValue result(UniValue::VOBJ); -/* CTransaction bettx; - uint256 hashBlock, batontxid, tokenid; - int64_t positionsize = 0, firstprice = 0, lastprice = 0; - int32_t firstheight = 0, endheight; - int16_t leverage = 0; - std::vector vec; - CPubKey pk, mypk, pricespk; - std::string rawtx; */ - - BetInfo betinfo; - int32_t retcode = prices_getbetinfo(bettxid, betinfo); - if (retcode < 0) { - if( retcode == -1 ) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "cant find bettxid or incorrect")); - } - else if (retcode == -2) { - throw std::runtime_error("tx still in mempool"); - } - else if (retcode == -3) - { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "cant decode opret")); - return(result); - } - else if (retcode == -4) { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", "error scanning chain")); - } - else { - result.push_back(Pair("result", "error")); - result.push_back(Pair("error", retcode)); - } - return(result); - } - - if (!betinfo.isRekt) - result.push_back(Pair("rekt", 0)); - else - { - result.push_back(Pair("rekt", (int64_t)1)); - result.push_back(Pair("rektfee", betinfo.exitfee)); - result.push_back(Pair("rektheight", betinfo.lastheight)); - } - - result.push_back(Pair("open", betinfo.isOpen ? 1 : 0 )); - - std::string expr = prices_getsourceexpression(betinfo.vecparsed); - result.push_back(Pair("expression", expr)); - result.push_back(Pair("reduced", prices_getreducedexpr(expr))); -// result.push_back(Pair("batontxid", batontxid.GetHex())); - result.push_back(Pair("costbasis", ValueFromAmount(betinfo.averageCostbasis))); -#ifdef TESTMODE - result.push_back(Pair("costbasis_test_period", 7)); -#endif - - prices_betjson(result, betinfo.bets, betinfo.leverage, betinfo.lastheight, betinfo.lastprice); - - result.push_back(Pair("LiquidationPrice", ValueFromAmount(betinfo.liquidationprice))); - return(result); } @@ -2146,307 +333,35 @@ UniValue PricesInfo(uint256 bettxid, int32_t refheight) UniValue PricesList(uint32_t filter, CPubKey mypk) { UniValue result(UniValue::VARR); - std::vector > addressIndex, addressIndexCC; - struct CCcontract_info *cp, C; - - cp = CCinit(&C, EVAL_PRICES); - //pricespk = GetUnspendable(cp, 0); - - // filters and outputs prices bet txid - auto AddBetToList = [&](uint256 txid) - { - int64_t amount, firstprice; - int32_t height; - int16_t leverage; - uint256 hashBlock, tokenid; - CPubKey pk, pricespk; - std::vector vec; - CTransaction vintx; - - if (myGetTransaction(txid, vintx, hashBlock) != 0) - { - - // TODO: forget old tx - //CBlockIndex *bi = komodo_getblockindex(hashBlock); - //if (bi && bi->GetHeight() < 5342) - // return; - - bool bAppend = false; - if (vintx.vout.size() > 0 && prices_betopretdecode(vintx.vout.back().scriptPubKey, pk, height, amount, leverage, firstprice, vec, tokenid) == 'B' && - (mypk == CPubKey() || mypk == pk)) // if only mypubkey to list - { - if (filter == 0) - bAppend = true; - else { - int32_t vini; - int32_t height; - uint256 finaltxid; - - int32_t spent = CCgetspenttxid(finaltxid, vini, height, txid, NVOUT_CCMARKER); - if (filter == 1 && spent < 0 || // open positions - filter == 2 && spent == 0) // closed positions - bAppend = true; - } - if (bAppend) - result.push_back(txid.GetHex()); - } - std::cerr << "PricesList() " << " bettxid=" << txid.GetHex() << " mypk=" << HexStr(mypk) << " opretpk=" << HexStr(pk) << " filter=" << filter << " bAppend=" << bAppend << std::endl; - } - }; - - - SetCCtxids(addressIndex, cp->normaladdr, false); // old normal marker - for (std::vector >::const_iterator it = addressIndex.begin(); it != addressIndex.end(); it++) - { - if( it->first.index == NVOUT_NORMALMARKER ) - AddBetToList(it->first.txhash); - } - - /* for future when switch to cc marker only - SetCCtxids(addressIndexCC, cp->unspendableCCaddr, true); // cc marker - for (std::vector >::const_iterator it = addressIndexCC.begin(); it != addressIndexCC.end(); it++) - { - priceslist(it, 1); - } - */ return(result); } static bool prices_addbookentry(uint256 txid, std::vector &book) { - BetInfo betinfo; - if (prices_getbetinfo(txid, betinfo) == 0) { - book.push_back(betinfo); - return true; - } return false; } static bool prices_ispositionup(const std::vector &vecparsed, int16_t leverage) { - if (vecparsed.size() > 1 && vecparsed.size() <= 3) { - uint16_t opcode = vecparsed[0]; - - int32_t value = (opcode & (HUSH_MAXPRICES - 1)); // filter index or weight = opcode & (2048-1) - - if ((opcode & HUSH_PRICEMASK) == 0) { - char name[65]; - if (komodo_pricename(name, value)) { - std::string upperquote, bottomquote; - prices_splitpair(std::string(name), upperquote, bottomquote); - - uint16_t opcode1 = vecparsed[1]; - bool isInverted = ((opcode1 & HUSH_PRICEMASK) == PRICES_INV); - - //std::cerr << "prices_ispositionup upperquote=" << upperquote << " bottomquote=" << bottomquote << " opcode1=" << opcode1 << " (opcode1 & HUSH_PRICEMASK)=" << (opcode1 & HUSH_PRICEMASK) << std::endl; - - if (upperquote == "BTC" || bottomquote == "BTC") { // it is relatively btc - if (upperquote == "BTC" && (leverage > 0 && !isInverted || leverage < 0 && isInverted) || - bottomquote == "BTC" && (leverage < 0 && !isInverted || leverage > 0 && isInverted)) { - std::cerr << "prices_ispositionup returns true for BTC for expr=" << prices_getsourceexpression(vecparsed) << " lev=" << leverage << std::endl; - return true; - } - else { - std::cerr << "prices_ispositionup returns false for BTC for expr=" << prices_getsourceexpression(vecparsed) << " lev=" << leverage << std::endl; - return false; - } - } - - if (upperquote == "USD" || bottomquote == "USD") { // it is relatively usd - if (upperquote == "USD" && (leverage > 0 && !isInverted || leverage < 0 && isInverted) || - bottomquote == "USD" && (leverage < 0 && !isInverted || leverage > 0 && isInverted)) { - std::cerr << "prices_ispositionup returns true for USD for expr=" << prices_getsourceexpression(vecparsed) << " lev=" << leverage << std::endl; - return true; - } - else { - std::cerr << "prices_ispositionup returns false for USD for expr=" << prices_getsourceexpression(vecparsed) << " lev=" << leverage << std::endl; - return false; - } - } - } - } - } - std::cerr << "prices_ispositionup returns false for expr=" << prices_getsourceexpression(vecparsed) << " lev=" << leverage << std::endl; return false; } static bool prices_isopposite(BetInfo p1, BetInfo p2) { - if (p1.vecparsed.size() <= 3 && p2.vecparsed.size() <= 3) { // simple synthetic exp - - uint16_t opcode1 = p1.vecparsed[0]; - uint16_t opcode2 = p2.vecparsed[0]; - - int32_t value1 = (opcode1 & (HUSH_MAXPRICES - 1)); // index or weight - int32_t value2 = (opcode2 & (HUSH_MAXPRICES - 1)); // index or weight - - if ( (opcode1 & HUSH_PRICEMASK) == 0 && (opcode2 & HUSH_PRICEMASK) == 0 ) { - char name1[65]; - char name2[65]; - if (komodo_pricename(name1, value1) && komodo_pricename(name2, value2)) { - - uint16_t opcode1 = p1.vecparsed[1]; - uint16_t opcode2 = p2.vecparsed[1]; - - std::string upperquote1, bottomquote1, upperquote2, bottomquote2; - prices_splitpair(std::string(name1), upperquote1, bottomquote1); - prices_splitpair(std::string(name2), upperquote2, bottomquote2); - - bool isInverted1 = ((opcode1 & HUSH_PRICEMASK) != PRICES_INV); - bool isInverted2 = ((opcode2 & HUSH_PRICEMASK) != PRICES_INV); - - if (/*upperquote1 == bottomquote2 && bottomquote1 == upperquote2 && (p1.leverage > 0 == p2.leverage > 0 || (opcode1 & HUSH_PRICEMASK) == PRICES_INV == (opcode2 & HUSH_PRICEMASK) == PRICES_INV) ||*/ - upperquote1 == upperquote2 && bottomquote1 == bottomquote2 && ((p1.leverage > 0) != (p2.leverage > 0) || isInverted1 != isInverted2) ) - return true; - } - } - } return false; } static std::string findMatchedBook(const std::vector &vecparsed, const std::map > & bookmatched) { - - if (vecparsed.size() > 1 && vecparsed.size() <= 3) { - uint16_t opcode = vecparsed[0]; - - int32_t value = (opcode & (HUSH_MAXPRICES - 1)); // filter index or weight = opcode & (2048-1) - - if ((opcode & HUSH_PRICEMASK) == 0) { - char name[65]; - if (komodo_pricename(name, value)) { - auto it = bookmatched.find(std::string(name)); - if (it != bookmatched.end()) - return it->first; - } - } - } return std::string(""); } -void prices_getorderbook(std::map > & bookmatched, std::map &matchedTotals, TotalFund &fundTotals) -{ - std::vector book; - std::vector > addressIndex; - struct CCcontract_info *cp, C; - - cp = CCinit(&C, EVAL_PRICES); - - // add all bets: - SetCCtxids(addressIndex, cp->normaladdr, false); // old normal marker - for (std::vector >::const_iterator it = addressIndex.begin(); it != addressIndex.end(); it++) - { - if (it->first.index == NVOUT_NORMALMARKER) - prices_addbookentry(it->first.txhash, book); - } - - - // calc total fund amount - fundTotals.totalFund = 0; - fundTotals.totalRekt = 0; - fundTotals.totalEquity = 0; - fundTotals.totalActiveBets = 0; - - std::vector > addressCCunspents; - SetCCunspents(addressCCunspents, cp->unspendableCCaddr, true); // cc marker - for (std::vector >::const_iterator it = addressCCunspents.begin(); it != addressCCunspents.end(); it++) - { - //std::cerr << "totalfund calc txid=" << it->first.txhash.GetHex() << " nvout=" << it->first.index << " satoshis=" << it->second.satoshis << std::endl; - fundTotals.totalFund += it->second.satoshis; - } - - // extract out opposite bets: - while (book.size() > 0) { - - int64_t totalPos = 0; - for (auto bet : book[0].bets) totalPos += bet.positionsize; - - if (book[0].isOpen) { - - fundTotals.totalActiveBets += totalPos; - fundTotals.totalEquity += book[0].equity; - - if (book[0].vecparsed.size() <= 3) { // only short expr check for match: "BTC_USD,1" or "BTC_USD,!,1" - char name[65]; - komodo_pricename(name, (book[0].vecparsed[0] & (HUSH_MAXPRICES - 1))); - std::string sname = name; - bookmatched[sname].push_back(book[0]); - - for (int j = 1; j < book.size(); j++) { - if (book[0].isOpen && book[j].isOpen) { - if (prices_isopposite(book[0], book[j])) { - - bookmatched[sname].push_back(book[j]); - book.erase(book.begin() + j); - } - } - } - } - else { - // store as is - std::string sname = prices_getsourceexpression(book[0].vecparsed); - bookmatched[sname].push_back(book[0]); - } - } - else { - if( book[0].isRekt ) - fundTotals.totalRekt += (totalPos - book[0].exitfee); - else - fundTotals.totalCashout += (totalPos - book[0].exitfee); - - //TODO: store rekt - } - book.erase(book.begin()); - } - - // calculate cancelling amount - for (auto &m : bookmatched) { // note: use reference &m otherwise isUp will be changed only in a copy - int64_t totalLeveragedPositionUp = 0; - int64_t totalLeveragedPositionDown = 0; - - for (int i = 0; i < m.second.size(); i++) { - int64_t totalPos = 0; - for (auto bet : m.second[i].bets) totalPos += bet.positionsize; - m.second[i].isUp = prices_ispositionup(m.second[i].vecparsed, m.second[i].leverage); - if (m.second[i].isUp) - totalLeveragedPositionUp += totalPos * abs(m.second[i].leverage); - else - totalLeveragedPositionDown += totalPos * abs(m.second[i].leverage); - //std::cerr << "PricesGetOrderbook 0 m.second[i].isUp=" << m.second[i].isUp << " i=" << i << std::endl; - - } - matchedTotals[m.first].diffLeveragedPosition = totalLeveragedPositionUp - totalLeveragedPositionDown; - } +void prices_getorderbook(std::map > & bookmatched, std::map &matchedTotals, TotalFund &fundTotals) { } static bool prices_isacceptableamount(const std::vector &vecparsed, int64_t amount, int16_t leverage) { - - std::map > matchedBook; - std::map matchedTotals; - TotalFund fundTotals; - - prices_getorderbook(matchedBook, matchedTotals, fundTotals); - std::string pricename = findMatchedBook(vecparsed, matchedBook); - if (!pricename.empty()) { - std::cerr << "prices_isacceptableamount() found matched book=" << pricename << " diffLeveragedPosition=" << matchedTotals[pricename].diffLeveragedPosition << " expr=" << prices_getsourceexpression(vecparsed) << std::endl; - // could fit into leveraged amount - if (prices_ispositionup(vecparsed, leverage) && amount*abs(leverage) + matchedTotals[pricename].diffLeveragedPosition <= 0) { - std::cerr << "prices_isacceptableamount() could fit into opposite negative lev amount" << std::endl; - return true; - } - if (!prices_ispositionup(vecparsed, leverage) && -amount*abs(leverage) + matchedTotals[pricename].diffLeveragedPosition >= 0) { - std::cerr << "prices_isacceptableamount() could fit into opposite positive lev amount" << std::endl; - return true; - } - } - - std::cerr << "prices_isacceptableamount() amount=" << amount << " leverage=" << leverage << " fundTotals.totalFund=" << fundTotals.totalFund << " fundTotals.totalEquity=" << fundTotals.totalEquity << std::endl; - // if not fit to matched = allow to bet for leveraged amount no more than 10% from free fund - if (amount * leverage < (fundTotals.totalFund - fundTotals.totalEquity) * PRICES_MINAVAILFUNDFRACTION) - return true; - return false; } @@ -2459,64 +374,5 @@ static bool prices_isacceptableamount(const std::vector &vecparsed, in UniValue PricesGetOrderbook() { UniValue result(UniValue::VOBJ); - std::map > matchedBook; - std::map matchedTotals; - TotalFund fundTotals; - - prices_getorderbook(matchedBook, matchedTotals, fundTotals); - - /*UniValue resbook (UniValue::VARR); - for (int i = 0; i < book.size(); i++) { - UniValue entry(UniValue::VOBJ); - entry.push_back(Pair("expression", prices_getsourceexpression(book[i].vecparsed))); - entry.push_back(Pair("costbasis", book[i].averageCostbasis)); - entry.push_back(Pair("leverage", book[i].leverage)); - entry.push_back(Pair("equity", book[i].equity)); - resbook.push_back(entry); - } - result.push_back(Pair("unmatched", resbook)); */ - - // copy to rpc UniResult - for (auto &m : matchedBook) { - UniValue resheader(UniValue::VOBJ); - UniValue resbook(UniValue::VARR); - for (int i = 0; i < m.second.size(); i++) { - UniValue entry(UniValue::VOBJ); - - int64_t totalPos = 0; - for (auto bet : m.second[i].bets) totalPos += bet.positionsize; - entry.push_back(Pair("isOpen", (m.second[i].isOpen ? 1 : 0 ))); - entry.push_back(Pair("expression", prices_getsourceexpression(m.second[i].vecparsed))); - entry.push_back(Pair("positionsize", totalPos)); - entry.push_back(Pair("leverage", m.second[i].leverage)); - entry.push_back(Pair("costbasis", m.second[i].averageCostbasis)); - entry.push_back(Pair("lastprice", m.second[i].lastprice)); - entry.push_back(Pair("equity", m.second[i].equity)); - entry.push_back(Pair("isUpPosition", (m.second[i].isUp ? 1 : 0))); - resbook.push_back(entry); - } - resheader.push_back(Pair("positions", resbook)); - resheader.push_back(Pair("DiffLeveragedPosition", matchedTotals[m.first].diffLeveragedPosition)); - result.push_back(Pair(m.first, resheader)); - } - - //int64_t totalLiabilities = 0; - /* empty - for (int i = 0; i < book.size(); i++) { - if (book[i].isOpen) { - int64_t t = 0; - for (auto b : book[i].bets) t += b.positionsize; - std::cerr << "book[i].txid=" << book[i].txid.GetHex() << " exp=" << prices_getsourceexpression(book[i].vecparsed) << " totalpos=" << t << " equity=" << book[i].equity << std::endl; - totalLiabilities += book[i].equity; - } - } */ - - result.push_back(Pair("TotalFund", ValueFromAmount(fundTotals.totalFund))); - result.push_back(Pair("TotalEquity", ValueFromAmount(fundTotals.totalEquity))); - result.push_back(Pair("TotalRekt", ValueFromAmount(fundTotals.totalRekt))); - result.push_back(Pair("TotalBets", ValueFromAmount(fundTotals.totalActiveBets))); - result.push_back(Pair("TotalCashoutBets", ValueFromAmount(fundTotals.totalCashout))); - -// result.push_back(Pair("TotalLiabilities", ValueFromAmount(totalLiabilities))); return result; } diff --git a/src/crosschain.cpp b/src/crosschain.cpp index d015c210a..82199d2c7 100644 --- a/src/crosschain.cpp +++ b/src/crosschain.cpp @@ -42,7 +42,7 @@ // because it might be disconnecting blocks at the same time. // TODO: this assumes a blocktime of 75 seconds for HUSH and 60 seconds for other chains int NOTARISATION_SCAN_LIMIT_BLOCKS = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? 1152 : 1440; -CBlockIndex *komodo_getblockindex(uint256 hash); +CBlockIndex *hush_getblockindex(uint256 hash); /* On HUSH */ uint256 CalculateProofRoot(const char* symbol, uint32_t targetCCid, int hushHeight, @@ -435,7 +435,7 @@ TxProof GetAssetchainProof(uint256 hash,CTransaction burnTx) if (blockHash.IsNull()) throw std::runtime_error("tx still in mempool"); - blockIndex = komodo_getblockindex(blockHash); + blockIndex = hush_getblockindex(blockHash); int h = blockIndex->GetHeight(); // The assumption here is that the first notarization for a height GTE than // the transaction block height will contain the corresponding MoM. If there diff --git a/src/hush.h b/src/hush.h index 225f46259..2c802f50b 100644 --- a/src/hush.h +++ b/src/hush.h @@ -515,7 +515,7 @@ int32_t komodo_validate_chain(uint256 srchash,int32_t notarized_height) static int32_t last_rewind; int32_t rewindtarget; CBlockIndex *pindex; struct hush_state *sp; char symbol[HUSH_SMART_CHAIN_MAXLEN],dest[HUSH_SMART_CHAIN_MAXLEN]; if ( (sp= hush_stateptr(symbol,dest)) == 0 ) return(0); - if ( IsInitialBlockDownload() == 0 && ((pindex= komodo_getblockindex(srchash)) == 0 || pindex->GetHeight() != notarized_height) ) + if ( IsInitialBlockDownload() == 0 && ((pindex= hush_getblockindex(srchash)) == 0 || pindex->GetHeight() != notarized_height) ) { if ( sp->NOTARIZED_HEIGHT > 0 && sp->NOTARIZED_HEIGHT < notarized_height ) rewindtarget = sp->NOTARIZED_HEIGHT - 1; diff --git a/src/hush_bitcoind.h b/src/hush_bitcoind.h index f3be69c98..256bd2e15 100644 --- a/src/hush_bitcoind.h +++ b/src/hush_bitcoind.h @@ -377,7 +377,7 @@ char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port) { sprintf(url,(char *)"http://127.0.0.1:%u",port); sprintf(postdata,"{\"method\":\"%s\",\"params\":%s}",method,params); - //printf("[%s] (%s) postdata.(%s) params.(%s) USERPASS.(%s)\n",SMART_CHAIN_SYMBOL,url,postdata,params,KMDUSERPASS); + //printf("[%s] (%s) postdata.(%s) params.(%s) USERPASS.(%s)\n",SMART_CHAIN_SYMBOL,url,postdata,params,HUSHUSERPASS); retstr2 = bitcoind_RPC(&retstr,(char *)"debug",url,userpass,method,params); //retstr = curl_post(&cHandle,url,USERPASS,postdata,0,0,0,0); } @@ -389,17 +389,16 @@ int32_t notarizedtxid_height(char *dest,char *txidstr,int32_t *kmdnotarized_heig char *jsonstr,params[256],*userpass; uint16_t port; cJSON *json,*item; int32_t height = 0,txid_height = 0,txid_confirmations = 0; params[0] = 0; *kmdnotarized_heightp = 0; - if ( strcmp(dest,"KMD") == 0 ) + if ( strcmp(dest,"HUSH3") == 0 ) { + port = HUSH3_PORT; + userpass = HUSHUSERPASS; + } else if ( strcmp(dest,"BTC") == 0 ) { - port = KMD_PORT; - userpass = KMDUSERPASS; - } - else if ( strcmp(dest,"BTC") == 0 ) - { - port = 8332; + port = 8332; userpass = BTCUSERPASS; + } else { + return(0); } - else return(0); if ( userpass[0] != 0 ) { if ( (jsonstr= komodo_issuemethod(userpass,(char *)"getinfo",params,port)) != 0 ) @@ -482,12 +481,12 @@ int32_t komodo_verifynotarization(char *symbol,char *dest,int32_t height,int32_t printf("[%s] src.%s dest.%s params.[%s] ht.%d notarized.%d\n",SMART_CHAIN_SYMBOL,symbol,dest,params,height,NOTARIZED_HEIGHT); if ( strcmp(dest,"KMD") == 0 ) { - if ( KMDUSERPASS[0] != 0 ) + if ( HUSHUSERPASS[0] != 0 ) { if ( SMART_CHAIN_SYMBOL[0] != 0 ) { - jsonstr = komodo_issuemethod(KMDUSERPASS,(char *)"getrawtransaction",params,KMD_PORT); - //printf("userpass.(%s) got (%s)\n",KMDUSERPASS,jsonstr); + jsonstr = komodo_issuemethod(HUSHUSERPASS,(char *)"getrawtransaction",params,HUSH3_PORT); + //printf("userpass.(%s) got (%s)\n",HUSHUSERPASS,jsonstr); } }//else jsonstr = _dex_getrawtransaction(); else return(0); // need universal way to issue DEX* API, since notaries mine most blocks, this ok @@ -556,12 +555,12 @@ CScript komodo_makeopret(CBlock *pblock, bool fNew) return(opret); } -/*uint256 komodo_getblockhash(int32_t height) +/*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= komodo_issuemethod(KMDUSERPASS,(char *)"getblockhash",params,BITCOIND_RPCPORT)) != 0 ) + if ( (jsonstr= komodo_issuemethod(HUSHUSERPASS,(char *)"getblockhash",params,BITCOIND_RPCPORT)) != 0 ) { if ( (result= cJSON_Parse(jsonstr)) != 0 ) { @@ -582,7 +581,7 @@ CScript komodo_makeopret(CBlock *pblock, bool fNew) return(hash); } - uint256 _komodo_getblockhash(int32_t height);*/ + uint256 _hush_getblockhash(int32_t height);*/ uint64_t komodo_seed(int32_t height) { @@ -595,9 +594,9 @@ uint64_t komodo_seed(int32_t height) if ( height > 10 ) height -= 10; if ( SMART_CHAIN_SYMBOL[0] == 0 ) - hash = _komodo_getblockhash(height); + hash = _hush_getblockhash(height); if ( memcmp(&hash,&zero,sizeof(hash)) == 0 ) - hash = komodo_getblockhash(height); + hash = hush_getblockhash(height); int32_t i; for (i=0; i<32; i++) printf("%02x",((uint8_t *)&hash)[i]); @@ -639,7 +638,7 @@ uint32_t komodo_txtime(CScript &opret,uint64_t *valuep,uint256 hash, int32_t n, return(tx.nLockTime); } -CBlockIndex *komodo_getblockindex(uint256 hash) +CBlockIndex *hush_getblockindex(uint256 hash) { BlockMap::const_iterator it = mapBlockIndex.find(hash); return((it != mapBlockIndex.end()) ? it->second : NULL); @@ -658,7 +657,7 @@ uint32_t komodo_txtime2(uint64_t *valuep,uint256 hash,int32_t n,char *destaddr) //fprintf(stderr,"ERROR: %s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); return(0); } - if ( (pindex= komodo_getblockindex(hashBlock)) != 0 ) + if ( (pindex= hush_getblockindex(hashBlock)) != 0 ) txtime = pindex->nTime; else txtime = tx.nLockTime; //fprintf(stderr,"%s/v%d locktime.%u\n",hash.ToString().c_str(),n,(uint32_t)tx.nLockTime); @@ -671,7 +670,7 @@ uint32_t komodo_txtime2(uint64_t *valuep,uint256 hash,int32_t n,char *destaddr) return(txtime); } -bool komodo_checkopret(CBlock *pblock, CScript &merkleroot) +bool hush_checkopret(CBlock *pblock, CScript &merkleroot) { merkleroot = pblock->vtx.back().vout.back().scriptPubKey; return(merkleroot.IsOpReturn() && merkleroot == komodo_makeopret(pblock, false)); @@ -792,7 +791,7 @@ int32_t hush_block2pubkey33(uint8_t *pubkey33,CBlock *block) return(0); } -int32_t komodo_blockload(CBlock& block,CBlockIndex *pindex) +int32_t hush_blockload(CBlock& block,CBlockIndex *pindex) { block.SetNull(); // Open history file to read @@ -849,7 +848,7 @@ uint32_t hush_heightstamp(int32_t height) if ( HUSH_LOADINGBLOCKS == 0 ) memset(pindex->pubkey33,0xff,33); else memset(pindex->pubkey33,0,33); - if ( komodo_blockload(block,pindex) == 0 ) + if ( hush_blockload(block,pindex) == 0 ) { hush_block2pubkey33(pindex->pubkey33,&block); //for (i=0; i<33; i++) @@ -884,7 +883,7 @@ void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) memset(pubkey33,0,33); if ( pindex != 0 ) { - if ( komodo_blockload(block,pindex) == 0 ) + if ( hush_blockload(block,pindex) == 0 ) hush_block2pubkey33(pubkey33,&block); } } @@ -928,7 +927,7 @@ int32_t komodo_eligiblenotary(uint8_t pubkeys[66][33],int32_t *mids,uint32_t blo if ( (pindex= hush_chainactive(height-i)) != 0 ) { blocktimes[i] = pindex->nTime; - if ( komodo_blockload(block,pindex) == 0 ) + if ( hush_blockload(block,pindex) == 0 ) { hush_block2pubkey33(pubkeys[i],&block); for (j=0; j= 10000 sats */ @@ -1276,7 +1275,7 @@ int8_t hush_segid(int32_t nocache,int32_t height) { if ( nocache == 0 && pindex->segid >= -1 ) return(pindex->segid); - if ( komodo_blockload(block,pindex) == 0 ) + if ( hush_blockload(block,pindex) == 0 ) { txn_count = block.vtx.size(); if ( txn_count > 1 && block.vtx[txn_count-1].vin.size() == 1 && block.vtx[txn_count-1].vout.size() == 1 ) @@ -1484,7 +1483,7 @@ uint64_t komodo_notarypayamount(int32_t nHeight, int64_t notarycount) return(ret); } -int32_t komodo_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *script, int32_t len) +int32_t hush_getnotarizedheight(uint32_t timestamp,int32_t height, uint8_t *script, int32_t len) { // Check the notarisation is valid, and extract notarised height. uint64_t voutmask; @@ -1515,7 +1514,7 @@ uint64_t komodo_notarypay(CMutableTransaction &txNew, std::vector &Notar return(0); // Check the notarisation is valid. - int32_t notarizedheight = komodo_getnotarizedheight(timestamp, height, script, len); + int32_t notarizedheight = hush_getnotarizedheight(timestamp, height, script, len); if ( notarizedheight == 0 ) return(0); @@ -1570,7 +1569,7 @@ bool GetNotarizationNotaries(uint8_t notarypubkeys[64][33], int8_t &numNN, const return true; } -uint64_t komodo_checknotarypay(CBlock *pblock,int32_t height) +uint64_t hush_checknotarypay(CBlock *pblock,int32_t height) { std::vector NotarizationNotaries; uint8_t *script; int32_t scriptlen; uint64_t timestamp = pblock->nTime; @@ -1722,7 +1721,7 @@ void GetHushEarlytxidScriptPub() StartShutdown(); } -int64_t komodo_checkcommission(CBlock *pblock,int32_t height) +int64_t hush_checkcommission(CBlock *pblock,int32_t height) { if(fDebug) fprintf(stderr,"%s at height=%d\n",__func__,height); @@ -1732,7 +1731,7 @@ int64_t komodo_checkcommission(CBlock *pblock,int32_t height) checktoshis = the_commission(pblock,height); if ( checktoshis >= 10000 && pblock->vtx[0].vout.size() < 2 ) { - fprintf(stderr,"ERROR: komodo_checkcommission vsize.%d height.%d commission %.8f has checktoshis=%lu <10000 or less than 2 vouts (vouts=%lu)\n",(int32_t)pblock->vtx[0].vout.size(),height,(double)checktoshis/COIN, checktoshis, pblock->vtx[0].vout.size() ); + fprintf(stderr,"ERROR: hush_checkcommission vsize.%d height.%d commission %.8f has checktoshis=%lu <10000 or less than 2 vouts (vouts=%lu)\n",(int32_t)pblock->vtx[0].vout.size(),height,(double)checktoshis/COIN, checktoshis, pblock->vtx[0].vout.size() ); return(-1); } else if ( checktoshis != 0 ) @@ -1791,14 +1790,14 @@ int64_t komodo_checkcommission(CBlock *pblock,int32_t height) bool HUSH_TEST_ASSETCHAIN_SKIP_POW = 0; -int32_t komodo_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height) +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; if ( HUSH_TEST_ASSETCHAIN_SKIP_POW == 0 && Params().NetworkIDString() == "regtest" ) HUSH_TEST_ASSETCHAIN_SKIP_POW = 1; if ( !CheckEquihashSolution(pblock, Params()) ) { - fprintf(stderr,"komodo_checkPOW slowflag.%d ht.%d CheckEquihashSolution failed\n",slowflag,height); + fprintf(stderr,"hush_checkPOW slowflag.%d ht.%d CheckEquihashSolution failed\n",slowflag,height); return(-1); } hash = pblock->GetHash(); @@ -1855,7 +1854,7 @@ int32_t komodo_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height) return(-1); } } else { - if ( komodo_checkcommission(pblock,height) < 0 ) + if ( hush_checkcommission(pblock,height) < 0 ) return(-1); } } @@ -1886,7 +1885,7 @@ int32_t komodo_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height) } if(fDebug) { - fprintf(stderr,"komodo_checkPOW possible.%d slowflag.%d ht.%d notaryid.%d failed.%d\n",possible,slowflag,height,notaryid,failed); + fprintf(stderr,"hush_checkPOW possible.%d slowflag.%d ht.%d notaryid.%d failed.%d\n",possible,slowflag,height,notaryid,failed); } if ( failed != 0 && possible == 0 && notaryid < 0 ) { return(-1); @@ -1895,10 +1894,10 @@ int32_t komodo_checkPOW(int32_t slowflag,CBlock *pblock,int32_t height) } } -int32_t komodo_acpublic(uint32_t tiptime) +int32_t hush_scpublic(uint32_t tiptime) { - int32_t acpublic = ASSETCHAINS_PUBLIC; CBlockIndex *pindex; - return(acpublic); + // HUSH does not support public blockchains, go use something else if you want no privacy + return 0; } int64_t hush_newcoins(int64_t *zfundsp,int64_t *sproutfundsp,int32_t nHeight,CBlock *pblock) @@ -1962,7 +1961,7 @@ int64_t hush_coinsupply(int64_t *zfundsp,int64_t *sproutfundsp,int32_t height) { if ( pindex->newcoins == 0 && pindex->zfunds == 0 ) { - if ( komodo_blockload(block,pindex) == 0 ) { + if ( hush_blockload(block,pindex) == 0 ) { pindex->newcoins = hush_newcoins(&pindex->zfunds,&pindex->sproutfunds,pindex->GetHeight(),&block); } else { fprintf(stderr,"error loading block.%d\n",pindex->GetHeight()); diff --git a/src/hush_defs.h b/src/hush_defs.h index 7bf98cff7..f1ea61524 100644 --- a/src/hush_defs.h +++ b/src/hush_defs.h @@ -26,7 +26,7 @@ #define KOMODO_ELECTION_GAP 2000 #define ROUNDROBIN_DELAY 61 #define HUSH_SMART_CHAIN_MAXLEN 65 -#define KOMODO_LIMITED_NETWORKSIZE 4 +#define HUSH_LIMITED_NETWORKSIZE 4 #define DRAGON_MAXSCRIPTSIZE 10001 #define HUSH_MAXMEMPOOLTIME 3600 // affects consensus #define CRYPTO555_PUBSECPSTR "038a1bd41a08f38edda51042988022933c5775dfce81f7bae0b32a9179650352ac" @@ -480,7 +480,7 @@ static const char *notaries_elected[NUM_HUSH_SEASONS][NUM_HUSH_NOTARIES][2] = #define CLEARBIT(bits,bitoffset) (((uint8_t *)bits)[(bitoffset) >> 3] &= ~(1 << ((bitoffset) & 7))) #define HUSH_MAXNVALUE (((uint64_t)1 << 63) - 1) -#define KOMODO_BIT63SET(x) ((x) & ((uint64_t)1 << 63)) +#define HUSH_BIT63SET(x) ((x) & ((uint64_t)1 << 63)) #define HUSH_VALUETOOBIG(x) ((x) > (uint64_t)10000000001*COIN) //#ifndef TESTMODE @@ -500,7 +500,7 @@ extern uint64_t ASSETCHAINS_SUPPLY, ASSETCHAINS_FOUNDERS_REWARD; extern int32_t ASSETCHAINS_LWMAPOS, ASSETCHAINS_SAPLING, ASSETCHAINS_OVERWINTER,ASSETCHAINS_BLOCKTIME; extern uint64_t ASSETCHAINS_TIMELOCKGTE; extern uint32_t ASSETCHAINS_ALGO,ASSETCHAINS_EQUIHASH,HUSH_INITDONE; -extern int32_t HUSH_MININGTHREADS,HUSH_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,HUSH_CHOSEN_ONE,KOMODO_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,HUSH_NSPV; +extern int32_t HUSH_MININGTHREADS,HUSH_LONGESTCHAIN,ASSETCHAINS_SEED,IS_HUSH_NOTARY,USE_EXTERNAL_PUBKEY,HUSH_CHOSEN_ONE,HUSH_ON_DEMAND,HUSH_PASSPORT_INITDONE,ASSETCHAINS_STAKED,HUSH_NSPV; extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET; extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2]; extern const char *ASSETCHAINS_ALGORITHMS[]; @@ -509,7 +509,7 @@ extern std::string NOTARY_PUBKEY,ASSETCHAINS_OVERRIDE_PUBKEY,ASSETCHAINS_SCRIPTP extern uint8_t NOTARY_PUBKEY33[33],ASSETCHAINS_OVERRIDE_PUBKEY33[33],ASSETCHAINS_MARMARA; extern std::vector ASSETCHAINS_PRICES,ASSETCHAINS_STOCKS; extern uint256 HUSH_EARLYTXID; -extern int32_t HUSH_CONNECTING,HUSH_CCACTIVATE,KOMODO_DEALERNODE; +extern int32_t HUSH_CONNECTING,HUSH_CCACTIVATE,HUSH_DEALERNODE; extern uint32_t ASSETCHAINS_CC; extern std::string CCerror,ASSETCHAINS_CCLIB; extern uint8_t ASSETCHAINS_CCDISABLES[256]; @@ -562,13 +562,13 @@ bool hush_hardfork_active(uint32_t time); uint256 Parseuint256(const char *hexstr); void komodo_sendmessage(int32_t minpeers, int32_t maxpeers, const char *message, std::vector payload); -CBlockIndex *komodo_getblockindex(uint256 hash); +CBlockIndex *hush_getblockindex(uint256 hash); int32_t hush_nextheight(); CBlockIndex *hush_blockindex(uint256 hash); CBlockIndex *hush_chainactive(int32_t height); int32_t hush_blockheight(uint256 hash); bool komodo_txnotarizedconfirmed(uint256 txid); -int32_t komodo_blockload(CBlock& block, CBlockIndex *pindex); +int32_t hush_blockload(CBlock& block, CBlockIndex *pindex); uint32_t hush_chainactive_timestamp(); uint32_t GetLatestTimestamp(int32_t height); diff --git a/src/hush_gateway.h b/src/hush_gateway.h index 1db0cb454..0c0b56942 100644 --- a/src/hush_gateway.h +++ b/src/hush_gateway.h @@ -485,7 +485,7 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to strcpy(symbol,base); if ( SMART_CHAIN_SYMBOL[0] != 0 && komodo_baseid(SMART_CHAIN_SYMBOL) < 0 ) return(0); - PENDING_KOMODO_TX = 0; + PENDING_HUSH_TX = 0; for (i=0; i<3; i++) { if ( komodo_isrealtime(&ht) != 0 ) @@ -589,13 +589,13 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to data[len++] = ((uint8_t *)&pax->txid)[i]; data[len++] = pax->vout & 0xff; data[len++] = (pax->vout >> 8) & 0xff; - PENDING_KOMODO_TX += pax->fiatoshis; + PENDING_HUSH_TX += pax->fiatoshis; } else { len += komodo_rwapproval(1,&data[len],pax); - PENDING_KOMODO_TX += pax->komodoshis; - printf(" len.%d vout.%u DEPOSIT %.8f <- pax.%s pending ht %d %d %.8f | ",len,pax->vout,(double)txNew->vout[numvouts].nValue/COIN,symbol,pax->height,pax->otherheight,dstr(PENDING_KOMODO_TX)); + PENDING_HUSH_TX += pax->komodoshis; + printf(" len.%d vout.%u DEPOSIT %.8f <- pax.%s pending ht %d %d %.8f | ",len,pax->vout,(double)txNew->vout[numvouts].nValue/COIN,symbol,pax->height,pax->otherheight,dstr(PENDING_HUSH_TX)); } if ( numvouts++ >= 64 || sum > COIN ) break; @@ -618,7 +618,7 @@ int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t to memcpy(script,opret,opretlen); for (i=0; i<8; i++) printf("%02x",opret[i]); - printf(" <- opret, MINER deposits.%d (%s) vouts.%d %.8f opretlen.%d\n",tokomodo,SMART_CHAIN_SYMBOL,numvouts,dstr(PENDING_KOMODO_TX),opretlen); + printf(" <- opret, MINER deposits.%d (%s) vouts.%d %.8f opretlen.%d\n",tokomodo,SMART_CHAIN_SYMBOL,numvouts,dstr(PENDING_HUSH_TX),opretlen); return(1); } return(0); @@ -656,7 +656,7 @@ const char *banned_txids[] = //"ce567928b5490a17244167af161b1d8dd6ff753fef222fe6855d95b2278a35b3", // missed }; -int32_t komodo_checkvout(int32_t vout,int32_t k,int32_t indallvouts) +int32_t hush_checkvout(int32_t vout,int32_t k,int32_t indallvouts) { if ( k < indallvouts ) return(vout == 1); @@ -681,7 +681,7 @@ int32_t komodo_bannedset(int32_t *indallvoutsp,uint256 *array,int32_t max) void hush_passport_iteration(); -int32_t komodo_check_deposit(int32_t height,const CBlock& block,uint32_t prevtime) // verify above block is valid pax pricing +int32_t hush_check_deposit(int32_t height,const CBlock& block,uint32_t prevtime) // verify above block is valid pax pricing { static uint256 array[64]; static int32_t numbanned,indallvouts; int32_t i,j,k,n,ht,baseid,txn_count,activation,num,opretlen,offset=1,errs=0,notmatched=0,matched=0,kmdheights[256],otherheights[256]; uint256 hash,txids[256]; char symbol[HUSH_SMART_CHAIN_MAXLEN],base[HUSH_SMART_CHAIN_MAXLEN]; uint16_t vouts[256]; int8_t baseids[256]; uint8_t *script,opcode,rmd160s[256*20]; uint64_t total,subsidy,available,deposited,issued,withdrawn,approved,redeemed,seed; int64_t checktoshis,values[256],srcvalues[256]; struct pax_transaction *pax; struct hush_state *sp; CTransaction tx; @@ -730,7 +730,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block,uint32_t prevtim { for (k=0; k= indallvouts) ) + if ( block.vtx[i].vin[j].prevout.hash == array[k] && hush_checkvout(block.vtx[i].vin[j].prevout.n,k,indallvouts) != 0 ) //(block.vtx[i].vin[j].prevout.n == 1 || k >= indallvouts) ) { printf("banned tx.%d being used at ht.%d txi.%d vini.%d\n",k,height,i,j); return(-1); @@ -804,7 +804,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block,uint32_t prevtim checktoshis = 0; if ( (ASSETCHAINS_COMMISSION != 0 || ASSETCHAINS_FOUNDERS_REWARD) && height > 1 ) { - if ( (checktoshis= komodo_checkcommission((CBlock *)&block,height)) < 0 ) + if ( (checktoshis= hush_checkcommission((CBlock *)&block,height)) < 0 ) { fprintf(stderr,"ht.%d checktoshis %.8f overflow.%d total %.8f strangeout.%d\n",height,dstr(checktoshis),overflow,dstr(total),strangeout); return(-1); @@ -1568,7 +1568,7 @@ void hush_passport_iteration() extern std::vector Mineropret; // opreturn data set by the data gathering code #define PRICES_ERRORRATE (COIN / 100) // maximum acceptable change, set at 1% #define PRICES_SIZEBIT0 (sizeof(uint32_t) * 4) // 4 uint32_t unixtimestamp, BTCUSD, BTCGBP and BTCEUR -#define KOMODO_LOCALPRICE_CACHESIZE 13 +#define HUSH_LOCALPRICE_CACHESIZE 13 #define HUSH_MAXPRICES 2048 #define PRICES_SMOOTHWIDTH 1 @@ -1594,14 +1594,14 @@ struct komodo_priceinfo char symbol[64]; } PRICES[HUSH_MAXPRICES]; -uint32_t PriceCache[KOMODO_LOCALPRICE_CACHESIZE][HUSH_MAXPRICES];//4+sizeof(Cryptos)/sizeof(*Cryptos)+sizeof(Forex)/sizeof(*Forex)]; +uint32_t PriceCache[HUSH_LOCALPRICE_CACHESIZE][HUSH_MAXPRICES];//4+sizeof(Cryptos)/sizeof(*Cryptos)+sizeof(Forex)/sizeof(*Forex)]; int64_t PriceMult[HUSH_MAXPRICES]; -int32_t komodo_cbopretsize(uint64_t flags); +int32_t hush_cbopretsize(uint64_t flags); void komodo_PriceCache_shift() { int32_t i; - for (i=KOMODO_LOCALPRICE_CACHESIZE-1; i>0; i--) + for (i=HUSH_LOCALPRICE_CACHESIZE-1; i>0; i--) memcpy(PriceCache[i],PriceCache[i-1],sizeof(PriceCache[i])); memcpy(PriceCache[0],Mineropret.data(),Mineropret.size()); } @@ -1630,7 +1630,7 @@ int32_t hush_heightpricebits(uint64_t *seedp,uint32_t *heightbits,int32_t nHeigh *seedp = 0; if ( (pindex= hush_chainactive(nHeight)) != 0 ) { - if ( komodo_blockload(block,pindex) == 0 ) + if ( hush_blockload(block,pindex) == 0 ) { return(_hush_heightpricebits(seedp,heightbits,&block)); } @@ -1727,7 +1727,7 @@ CScript komodo_mineropret(int32_t nHeight) if ( numzero != 0 ) { fprintf(stderr," komodo_mineropret numzero.%d vs n.%d\n",numzero,n); - komodo_cbopretupdate(1); + hush_cbopretupdate(1); sleep(61); } } @@ -1856,13 +1856,13 @@ int32_t komodo_opretvalidate(const CBlock *block,CBlockIndex * const previndex,i if ( iter == 0 ) break; // second iteration checks recent prices to see if within local volatility - for (j=0; j= prevbits[i] ) { fprintf(stderr,"i.%d within recent localprices[%d] %u >= %u\n",i,j,PriceCache[j][i],prevbits[i]); break; } - if ( j == KOMODO_LOCALPRICE_CACHESIZE ) + if ( j == HUSH_LOCALPRICE_CACHESIZE ) { komodo_queuelocalprice(1,nHeight,block->nTime,bhash,i,prevbits[i]); break; @@ -1872,13 +1872,13 @@ int32_t komodo_opretvalidate(const CBlock *block,CBlockIndex * const previndex,i { if ( iter == 0 ) break; - for (j=0; jnTime,bhash,i,prevbits[i]); break; @@ -1891,7 +1891,7 @@ int32_t komodo_opretvalidate(const CBlock *block,CBlockIndex * const previndex,i if ( iter == 0 ) { fprintf(stderr,"force update prices\n"); - komodo_cbopretupdate(1); + hush_cbopretupdate(1); memcpy(localbits,Mineropret.data(),Mineropret.size()); } else return(-1); } @@ -2199,10 +2199,10 @@ int32_t get_btcusd(uint32_t pricebits[4]) return(-1); } -// komodo_cbopretupdate() obtains the external price data and encodes it into Mineropret, which will then be used by the miner and validation +// hush_cbopretupdate() obtains the external price data and encodes it into Mineropret, which will then be used by the miner and validation // save history, use new data to approve past rejection, where is the auto-reconsiderblock? -int32_t komodo_cbopretsize(uint64_t flags) +int32_t hush_cbopretsize(uint64_t flags) { int32_t size = 0; if ( (ASSETCHAINS_CBOPRET & 1) != 0 ) @@ -2220,7 +2220,7 @@ int32_t komodo_cbopretsize(uint64_t flags) extern uint256 Queued_reconsiderblock; -void komodo_cbopretupdate(int32_t forceflag) +void hush_cbopretupdate(int32_t forceflag) { static uint32_t lasttime,lastbtc,pending; static uint32_t pricebits[4],pricebuf[HUSH_MAXPRICES],forexprices[sizeof(Forex)/sizeof(*Forex)]; @@ -2243,7 +2243,7 @@ void komodo_cbopretupdate(int32_t forceflag) { //if ( hush_nextheight() > 333 ) // for debug only! // ASSETCHAINS_CBOPRET = 7; - size = komodo_cbopretsize(ASSETCHAINS_CBOPRET); + size = hush_cbopretsize(ASSETCHAINS_CBOPRET); if ( Mineropret.size() < size ) Mineropret.resize(size); size = PRICES_SIZEBIT0; @@ -2418,7 +2418,7 @@ char *komodo_pricename(char *name,int32_t ind) // finds index for its symbol name int32_t komodo_priceind(const char *symbol) { - char name[65]; int32_t i,n = (int32_t)(komodo_cbopretsize(ASSETCHAINS_CBOPRET) / sizeof(uint32_t)); + char name[65]; int32_t i,n = (int32_t)(hush_cbopretsize(ASSETCHAINS_CBOPRET) / sizeof(uint32_t)); for (i=1; iheight = height; - if ( (pindex= hush_chainactive(height)) != 0 && komodo_blockload(block,pindex) == 0 ) + if ( (pindex= hush_chainactive(height)) != 0 && hush_blockload(block,pindex) == 0 ) { BOOST_FOREACH(const CTransaction&tx, block.vtx) { diff --git a/src/hush_pax.h b/src/hush_pax.h index 06aec7fbe..d2984e18c 100644 --- a/src/hush_pax.h +++ b/src/hush_pax.h @@ -742,7 +742,7 @@ uint64_t PAX_fiatdest(uint64_t *seedp,int32_t tokomodo,char *destaddr,uint8_t pu if ( bitcoin_addr2rmd160(&addrtype,rmd160,coinaddr) == 20 ) { PAX_pubkey(1,pubkey33,&addrtype,rmd160,base,&shortflag,tokomodo != 0 ? &komodoshis : &fiatoshis); - bitcoin_address(destaddr,KOMODO_PUBTYPE,pubkey33,33); + bitcoin_address(destaddr,HUSH_PUBTYPE,pubkey33,33); } return(komodoshis); } diff --git a/src/hush_utils.h b/src/hush_utils.h index edc55a47c..23a7d39f2 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -49,7 +49,7 @@ typedef struct queue #define CRYPTO555_HUSHADDR "RFetqf8WUfWnwNeXdknkm8ojk7EXnYFzrv" #define CRYPTO555_RMD160STR "deadbeefbadcaca748c4986b240ff7d7bc3fffb0" -#define KOMODO_PUBTYPE 60 +#define HUSH_PUBTYPE 60 struct sha256_vstate { uint64_t length; uint32_t state[8],curlen; uint8_t buf[64]; }; struct rmd160_vstate { uint64_t length; uint8_t buf[64]; uint32_t curlen, state[5]; }; @@ -1025,7 +1025,7 @@ int32_t komodo_opreturnscript(uint8_t *script,uint8_t type,uint8_t *opret,int32_ // get a pseudo random number that is the same for each block individually at all times and different // from all other blocks. the sequence is extremely likely, but not guaranteed to be unique for each block chain -uint64_t komodo_block_prg(uint32_t nHeight) +uint64_t hush_block_prg(uint32_t nHeight) { int i; uint8_t hashSrc[8]; @@ -1050,7 +1050,7 @@ uint64_t komodo_block_prg(uint32_t nHeight) // given a block height, this returns the unlock time for that block height, derived from // the ASSETCHAINS_MAGIC number as well as the block height, providing different random numbers // for corresponding blocks across chains, but the same sequence in each chain -int64_t komodo_block_unlocktime(uint32_t nHeight) +int64_t hush_block_unlocktime(uint32_t nHeight) { uint64_t fromTime, toTime, unlocktime; @@ -1058,7 +1058,7 @@ int64_t komodo_block_unlocktime(uint32_t nHeight) unlocktime = ASSETCHAINS_TIMEUNLOCKTO; else { - unlocktime = komodo_block_prg(nHeight) / (0xffffffffffffffff / ((ASSETCHAINS_TIMEUNLOCKTO - ASSETCHAINS_TIMEUNLOCKFROM) + 1)); + unlocktime = hush_block_prg(nHeight) / (0xffffffffffffffff / ((ASSETCHAINS_TIMEUNLOCKTO - ASSETCHAINS_TIMEUNLOCKFROM) + 1)); // boundary and power of 2 can make it exceed to time by 1 unlocktime = unlocktime + ASSETCHAINS_TIMEUNLOCKFROM; if (unlocktime > ASSETCHAINS_TIMEUNLOCKTO) @@ -1320,7 +1320,7 @@ uint16_t _komodo_userpass(char *username,char *password,FILE *fp) strcpy(username,rpcuser); strcpy(password,rpcpassword); } - //printf("rpcuser.(%s) rpcpassword.(%s) KMDUSERPASS.(%s) %u\n",rpcuser,rpcpassword,KMDUSERPASS,port); + //printf("rpcuser.(%s) rpcpassword.(%s) HUSHUSERPASS.(%s) %u\n",rpcuser,rpcpassword,HUSHUSERPASS,port); if ( rpcuser != 0 ) free(rpcuser); if ( rpcpassword != 0 ) @@ -1403,9 +1403,7 @@ void komodo_configfile(char *symbol,uint16_t rpcport) printf("Created (%s)\n",fname); } else printf("Couldnt create (%s)\n",fname); #endif - } - else - { + } else { _komodo_userpass(myusername,mypassword,fp); mapArgs["-rpcpassword"] = mypassword; mapArgs["-rpcusername"] = myusername; @@ -1430,10 +1428,10 @@ void komodo_configfile(char *symbol,uint16_t rpcport) if ( (fp= fopen(fname,"rb")) != 0 ) { if ( (kmdport= _komodo_userpass(username,password,fp)) != 0 ) - KMD_PORT = kmdport; - sprintf(KMDUSERPASS,"%s:%s",username,password); + HUSH3_PORT = kmdport; + sprintf(HUSHUSERPASS,"%s:%s",username,password); fclose(fp); -//printf("KOMODO.(%s) -> userpass.(%s)\n",fname,KMDUSERPASS); + //printf("HUSH.(%s) -> userpass.(%s)\n",fname,HUSHUSERPASS); } //else printf("couldnt open.(%s)\n",fname); } @@ -1492,9 +1490,6 @@ uint16_t hush_smartport(uint32_t magic,int32_t extralen) else return(16000 + (magic % 49500)); } -// DUKE: extralen is sometimes wrong which causes wrong diffbits? -// This function is only called on startup, blocktime changing code does not modify magic -// Hush 3.5.x and Hush 3.6.x have same history and p2p ports, but different magic??? Seems not. uint16_t hush_port(char *symbol,uint64_t supply,uint32_t *magicp,uint8_t *extraptr,int32_t extralen) { if(fDebug) @@ -1629,7 +1624,7 @@ uint64_t hush_block_subsidy(int height) } // wrapper for more general supply curves of Hush Smart Chains -uint64_t komodo_ac_block_subsidy(int nHeight) +uint64_t hush_sc_block_subsidy(int nHeight) { //fprintf(stderr,"%s: ht.%d\n", __func__, nHeight); // Find current era, start from beginning reward, and determine current subsidy @@ -1730,7 +1725,7 @@ uint64_t komodo_ac_block_subsidy(int nHeight) } extern int64_t MAX_MONEY; -void komodo_cbopretupdate(int32_t forceflag); +void hush_cbopretupdate(int32_t forceflag); void SplitStr(const std::string& strVal, std::vector &outVals); int8_t equihash_params_possible(uint64_t n, uint64_t k) @@ -1780,7 +1775,7 @@ void hush_args(char *argv0) } DONATION_PUBKEY = GetArg("-donation", ""); NOTARY_PUBKEY = GetArg("-pubkey", ""); - KOMODO_DEALERNODE = GetArg("-dealer",0); + HUSH_DEALERNODE = GetArg("-dealer",0); HUSH_TESTNODE = GetArg("-testnode",0); if ( strlen(NOTARY_PUBKEY.c_str()) == 66 ) @@ -1827,12 +1822,12 @@ void hush_args(char *argv0) ASSETCHAINS_CC = GetArg("-ac_cc",0); HUSH_CCACTIVATE = GetArg("-ac_ccactivate",0); ASSETCHAINS_BLOCKTIME = GetArg("-ac_blocktime",60); - ASSETCHAINS_PUBLIC = GetArg("-ac_public",0); + ASSETCHAINS_PUBLIC = 0; ASSETCHAINS_PRIVATE = GetArg("-ac_private",0); - HUSH_SNAPSHOT_INTERVAL = GetArg("-ac_snapshot",0); + HUSH_SNAPSHOT_INTERVAL = GetArg("-ac_snapshot",0); Split(GetArg("-ac_nk",""), sizeof(ASSETCHAINS_NK)/sizeof(*ASSETCHAINS_NK), ASSETCHAINS_NK, 0); - fprintf(stderr,".oO Starting HUSH Full Node with genproc=%d notary=%d\n",HUSH_MININGTHREADS, IS_HUSH_NOTARY); + fprintf(stderr,".oO Starting HUSH Full Node (Extreme Privacy!) with genproc=%d notary=%d\n",HUSH_MININGTHREADS, IS_HUSH_NOTARY); // -ac_ccactivateht=evalcode,height,evalcode,height,evalcode,height.... Split(GetArg("-ac_ccactivateht",""), sizeof(ccEnablesHeight)/sizeof(*ccEnablesHeight), ccEnablesHeight, 0); @@ -2242,7 +2237,7 @@ void hush_args(char *argv0) } fprintf(stderr," <- CCLIB name\n"); } - // is this not being run correctly? + if ( ASSETCHAINS_BLOCKTIME != 60 ) { extralen += dragon_rwnum(1,&extraptr[extralen],sizeof(ASSETCHAINS_BLOCKTIME),(void *)&ASSETCHAINS_BLOCKTIME); fprintf(stderr,"%s: ASSETCHAINS_BLOCKTIME=%d, extralen=%d\n", __func__, ASSETCHAINS_BLOCKTIME, extralen); @@ -2275,7 +2270,7 @@ void hush_args(char *argv0) } } //komodo_pricesinit(); - komodo_cbopretupdate(1); // will set Mineropret + hush_cbopretupdate(1); // will set Mineropret fprintf(stderr,"This blockchain uses data produced from CoinDesk Bitcoin Price Index\n"); } if ( ASSETCHAINS_NK[0] != 0 && ASSETCHAINS_NK[1] != 0 ) @@ -2316,7 +2311,7 @@ void hush_args(char *argv0) if ( ASSETCHAINS_CC >= HUSH_FIRSTFUNGIBLEID && MAX_MONEY < 1000000LL*SATOSHIDEN ) MAX_MONEY = 1000000LL*SATOSHIDEN; - if ( KOMODO_BIT63SET(MAX_MONEY) != 0 ) + if ( HUSH_BIT63SET(MAX_MONEY) != 0 ) MAX_MONEY = HUSH_MAXNVALUE; if(fDebug) fprintf(stderr,"MAX_MONEY %llu %.8f\n",(long long)MAX_MONEY,(double)MAX_MONEY/SATOSHIDEN); @@ -2425,9 +2420,9 @@ void hush_args(char *argv0) if ( (fp= fopen(fname,"rb")) != 0 ) { _komodo_userpass(username,password,fp); - sprintf(iter == 0 ? KMDUSERPASS : BTCUSERPASS,"%s:%s",username,password); + sprintf(iter == 0 ? HUSHUSERPASS : BTCUSERPASS,"%s:%s",username,password); fclose(fp); - //printf("KOMODO.(%s) -> userpass.(%s)\n",fname,KMDUSERPASS); + //printf("HUSH.(%s) -> userpass.(%s)\n",fname,HUSHUSERPASS); } //else printf("couldnt open.(%s)\n",fname); if ( IS_HUSH_NOTARY == 0 ) break; diff --git a/src/init.cpp b/src/init.cpp index ab3b5e778..40d1738f3 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -88,7 +88,7 @@ using namespace std; #include "hush_defs.h" extern void ThreadSendAlert(); -extern bool komodo_dailysnapshot(int32_t height); +extern bool hush_dailysnapshot(int32_t height); extern int32_t HUSH_LOADINGBLOCKS; extern char SMART_CHAIN_SYMBOL[]; extern int32_t HUSH_SNAPSHOT_INTERVAL; @@ -431,15 +431,14 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-peerbloomfilters", strprintf(_("Support filtering of blocks and transaction with Bloom filters (default: %u)"), 1)); if (showDebug) strUsage += HelpMessageOpt("-enforcenodebloom", strprintf("Enforce minimum protocol version to limit use of Bloom filters (default: %u)", 0)); - strUsage += HelpMessageOpt("-port=", strprintf(_("Listen for connections on (default: %u or testnet: %u)"), 7770, 17770)); + strUsage += HelpMessageOpt("-port=", strprintf(_("Listen for connections on (default: %u or testnet: %u)"), 55555, 55420)); strUsage += HelpMessageOpt("-proxy=", _("Connect through SOCKS5 proxy")); strUsage += HelpMessageOpt("-proxyrandomize", strprintf(_("Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)"), 1)); strUsage += HelpMessageOpt("-seednode=", _("Connect to a node to retrieve peer addresses, and disconnect")); strUsage += HelpMessageOpt("-timeout=", strprintf(_("Specify connection timeout in milliseconds (minimum: 1, default: %d)"), DEFAULT_CONNECT_TIMEOUT)); strUsage += HelpMessageOpt("-torcontrol=:", strprintf(_("Tor control port to use if onion listening enabled (default: %s)"), DEFAULT_TOR_CONTROL)); strUsage += HelpMessageOpt("-torpassword=", _("Tor control port password (default: empty)")); - strUsage += HelpMessageOpt("-tls=

LK?VUWpBN|TLj?b&Ph0ISTv}Hpb}-DA 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¬Lh23D&k#pCd7js8u;=uUt*oVQt|~P2Nq2Poh}l? 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