]> Git Repo - VerusCoin.git/commitdiff
Merge remote-tracking branch 'zcash/master' into dPoW
authorjl777 <[email protected]>
Fri, 28 Oct 2016 16:50:21 +0000 (13:50 -0300)
committerjl777 <[email protected]>
Fri, 28 Oct 2016 16:50:21 +0000 (13:50 -0300)
19 files changed:
1  2 
README.md
src/Makefile.am
src/Makefile.gtest.include
src/bitcoin-tx.cpp
src/chainparams.cpp
src/chainparams.h
src/init.cpp
src/main.cpp
src/miner.cpp
src/primitives/transaction.h
src/rpcmining.cpp
src/rpcserver.cpp
src/script/interpreter.cpp
src/test/pow_tests.cpp
src/test/transaction_tests.cpp
src/tinyformat.h
src/util.cpp
src/wallet/rpcwallet.cpp
src/wallet/wallet.cpp

diff --cc README.md
index 639f263c65e4f69be52bd6579c9d474129f87cde,8558c1ef9fc1a475cc2e2e46f26d7138709e0521..e03d5ab252c2ad26b784861122dedc6800521b62
+++ b/README.md
++<<<<<<< HEAD
 +
 +Zcash
 +=====
 + 
 +https://z.cash/
 + 
 +Where do I begin?
 +-----------------
 +
 +We have a guide for joining the public testnet: https://github.com/zcash/zcash/wiki/Beta-Guide
 +
 +What is Zcash?
 +--------------
 + 
 +Zcash is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to
 +offer a far higher standard of privacy and anonymity through a sophisticiated zero-knowledge
 +proving scheme which preserves confidentiality of transaction metadata.
 + 
 +**Zcash is unfinished and highly experimental.** Use at your own risk.
 + 
 +Participation in the Zcash project is subject to a [Code of Conduct](code_of_conduct.md).
 + 
++=======
+ Zcash 1.0.0
+ ===========
+ What is Zcash?
+ --------------
+ [Zcash](https://z.cash/) is an implementation of the "Zerocash" protocol.
+ Based on Bitcoin's code, it intends to offer a far higher standard of privacy
+ and anonymity through a sophisticated zero-knowledge proving scheme that
+ preserves confidentiality of transaction metadata. Technical details are
+ available in our [Protocol Specification](https://github.com/zcash/zips/raw/master/protocol/protocol.pdf).
+ This software is the Zcash client. It downloads and stores the entire history
+ of Zcash transactions; depending on the speed of your computer and network
+ connection, the synchronization process could take a day or more once the
+ block chain has reached a significant size.
  Security Warnings
  -----------------
 -
 + 
  See important security warnings in
  [doc/security-warnings.md](doc/security-warnings.md).
-  
 +License
 +-------
 + 
 +Zcash is released under the terms of the MIT license. See [COPYING](COPYING) for more
 +information or see http://opensource.org/licenses/MIT.
 + 
 + 
 +Komodo Specific Notes
 +=====================
 + 
 +Dependencies
 +------------
 + 
 +```
 +#The following packages are needed:
 +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 libboost-all-dev libssl-dev libprotobuf-dev protobuf-compiler libqt4-dev libqrencode-dev libdb++-dev ntp ntpdate
 +```
 + 
 +Komodo
 +------
 + 
 +```
 +git clone https://github.com/jl777/komodo
 +cd komodo
 +./autogen.sh
 +./configure --with-incompatible-bdb --with-gui
 +# This command might finish with: configure: error: libgmp headers missing. This can be ignored. so can libsnark directory missing error
 +./zcutil/fetch-params.sh
 +
 +# -j8 uses 8 threads - replace 8 with number of threads you want to use
 +./zcutil/build.sh -j8
 +#This can take some time.
 +```
 + 
 +# to update an existing version, git checkout dPoW if not on that branch already
 +
 +git pull
 +
 +./zcutil/fetch-params.sh
 +
 +./zcutil/build.sh -j8
 +
 +To reset the blockchain, from ~/.komodo rm -rf blocks chainstate debug.log komodostate db.log
 +
 +Create komodo.conf
 +------------------
 + 
 +```
 +cd ~
 +mkdir .komodo
 +cd .komodo
 +pico komodo.conf
 +#Add the following lines to the komodo.conf file:
 +
 +rpcuser=bitcoinrpc
 +rpcpassword=password
 +txindex=1
 +addnode=5.9.102.210
 +addnode=78.47.196.146
 +addnode=178.63.69.164
 +addnode=88.198.65.74
 +addnode=5.9.122.241
 +addnode=144.76.94.38
 +addnode=89.248.166.91
 +```
 + 
 +Start mining
 +------------
 + 
 +```
 +#iguana documentation shows how to get the btcpubkey and wifstrs that need to be used
 +
 +#bitcoin also need to be installed with txindex=1 and with rpc enabled
 +
 +cd ~
 +cd komodo
 +
 +
 +#This will return your pubkey eg. "0259e137e5594cf8287195d13aed816af75bd5c04ae673296b51f66e7e8346e8d8" for your address
 +./src/komodo-cli validateaddress <yourwalletaddres>
 +
 +#This will give the privkey of your wallet address
 +./src/komodo-cli dumpprivkey <yourwalletaddres>
 +
 +#This will import the privkey to be sure the mined coins are placed into your wallet address
 +./src/komodo-cli importprivkey <yourwalletprivkey>
 +
 +#To stop the daemon:
 +./src/komodo-cli stop
 +
 +#This starts komodo notary - replace genproclimit with number of threads you want to use and add your pubkey
 +./src/komodod -gen -genproclimit=2 -notary -pubkey="0259e137e5594cf8287195d13aed816af75bd5c04ae673296b51f66e7e8346e8d8" &
 +
 +#This will get the stats:
 +./src/komodo-cli getinfo
 +
 +#To view the process:
 +ps -ef | grep komodod
 +
 +#To stop the daemon:
 +./src/komodo-cli stop 
 + 
 +#To view komodod output:
 +tail -f ~/.komodo/debug.log
 +
 +#To view all command
 +./src/komodo-cli help
 +```
 +
++=======
++
+ **Zcash is unfinished and highly experimental.** Use at your own risk.
+ Where do I begin?
+ -----------------
+ We have a guide for joining the public testnet:
+ https://github.com/zcash/zcash/wiki/Beta-Guide
+ ### Need Help?
+ * See the documentation at the [Zcash Wiki](https://github.com/zcash/zcash/wiki)
+   for help and more information.
+ * Ask for help on the [Zcash](https://forum.z.cash/) forum.
+ Participation in the Zcash project is subject to a
+ [Code of Conduct](code_of_conduct.md).
+ Building
+ --------
+ Build Zcash along with most dependencies from source by running
+ ./zcutil/build.sh. Currently only Linux is supported.
+ License
+ -------
+ For license information see the file [COPYING](COPYING).
diff --cc src/Makefile.am
Simple merge
index 531cab7a64872e4dfde1e4687202dfda0d209da5,8c41ef7833c2569bfc164ce92583112d40d457f8..cee085b594c981eeace53ba7a6bad388b5a66c91
@@@ -1,9 -1,11 +1,11 @@@
 -TESTS += zcash-gtest
 -bin_PROGRAMS += zcash-gtest
 +TESTS += komodo-gtest
 +bin_PROGRAMS += komodo-gtest
  
  # tool for generating our public parameters
 -zcash_gtest_SOURCES = \
 +komodo_gtest_SOURCES = \
        gtest/main.cpp \
+       gtest/utils.cpp \
+       gtest/test_checkblock.cpp \
        gtest/test_checktransaction.cpp \
        gtest/json_test_vectors.cpp \
          gtest/json_test_vectors.h \
Simple merge
index 5f71c825965e9b671f5255b41624243bae61ec15,8691455e89257c0e3579539172aede5e281436b0..3890b2952f76f65cc84ac619389f775b9b31bcd4
@@@ -49,19 -47,17 +47,20 @@@ public
          assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
          consensus.nPowMaxAdjustDown = 32; // 32% adjustment down
          consensus.nPowMaxAdjustUp = 16; // 16% adjustment up
 -        consensus.nPowTargetSpacing = 2.5 * 60;
 -        consensus.fPowAllowMinDifficultyBlocks = false;
 -        /**
 -         * The message start string should be awesome! ⓩ❤
 +        consensus.nPowTargetSpacing = 1 * 60;
 +        consensus.fPowAllowMinDifficultyBlocks = true; //false;
 +        /** 
 +         * The message start string is designed to be unlikely to occur in normal data.
 +         * The characters are rarely used upper ASCII, not valid as UTF-8, and produce
 +         * a large 32-bit integer with any alignment.
           */
 -        pchMessageStart[0] = 0x24;
 -        pchMessageStart[1] = 0xe9;
 -        pchMessageStart[2] = 0x27;
 -        pchMessageStart[3] = 0x64;
 -        vAlertPubKey = ParseHex("04b7ecf0baa90495ceb4e4090f6b2fd37eec1e9c85fac68a487f3ce11589692e4a317479316ee814e066638e1db54e37a10689b70286e6315b1087b6615d179264");
 -        nDefaultPort = 8233;
 +        pchMessageStart[0] = 0xf9;
 +        pchMessageStart[1] = 0xee;
 +        pchMessageStart[2] = 0xe4;
 +        pchMessageStart[3] = 0x8d;
 +        vAlertPubKey = ParseHex("020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9");
 +        nDefaultPort = 7770;
++
          nMinerThreads = 0;
          nMaxTipAge = 24 * 60 * 60;
          nPruneAfterHeight = 100000;
          genesis.vtx.push_back(txNew);
          genesis.hashPrevBlock.SetNull();
          genesis.hashMerkleRoot = genesis.BuildMerkleTree();
 -        genesis.nVersion = 4;
 -        genesis.nTime    = 1477641360;
 -        genesis.nBits    = 0x1f07ffff;
 -        genesis.nNonce   = uint256S("0x0000000000000000000000000000000000000000000000000000000000001257");
 -        genesis.nSolution = ParseHex("000a889f00854b8665cd555f4656f68179d31ccadc1b1f7fb0952726313b16941da348284d67add4686121d4e3d930160c1348d8191c25f12b267a6a9c131b5031cbf8af1f79c9d513076a216ec87ed045fa966e01214ed83ca02dc1797270a454720d3206ac7d931a0a680c5c5e099057592570ca9bdf6058343958b31901fce1a15a4f38fd347750912e14004c73dfe588b903b6c03166582eeaf30529b14072a7b3079e3a684601b9b3024054201f7440b0ee9eb1a7120ff43f713735494aa27b1f8bab60d7f398bca14f6abb2adbf29b04099121438a7974b078a11635b594e9170f1086140b4173822dd697894483e1c6b4e8b8dcd5cb12ca4903bc61e108871d4d915a9093c18ac9b02b6716ce1013ca2c1174e319c1a570215bc9ab5f7564765f7be20524dc3fdf8aa356fd94d445e05ab165ad8bb4a0db096c097618c81098f91443c719416d39837af6de85015dca0de89462b1d8386758b2cf8a99e00953b308032ae44c35e05eb71842922eb69797f68813b59caf266cb6c213569ae3280505421a7e3a0a37fdf8e2ea354fc5422816655394a9454bac542a9298f176e211020d63dee6852c40de02267e2fc9d5e1ff2ad9309506f02a1a71a0501b16d0d36f70cdfd8de78116c0c506ee0b8ddfdeb561acadf31746b5a9dd32c21930884397fb1682164cb565cc14e089d66635a32618f7eb05fe05082b8a3fae620571660a6b89886eac53dec109d7cbb6930ca698a168f301a950be152da1be2b9e07516995e20baceebecb5579d7cdbc16d09f3a50cb3c7dffe33f26686d4ff3f8946ee6475e98cf7b3cf9062b6966e838f865ff3de5fb064a37a21da7bb8dfd2501a29e184f207caaba364f36f2329a77515dcb710e29ffbf73e2bbd773fab1f9a6b005567affff605c132e4e4dd69f36bd201005458cfbd2c658701eb2a700251cefd886b1e674ae816d3f719bac64be649c172ba27a4fd55947d95d53ba4cbc73de97b8af5ed4840b659370c556e7376457f51e5ebb66018849923db82c1c9a819f173cccdb8f3324b239609a300018d0fb094adf5bd7cbb3834c69e6d0b3798065c525b20f040e965e1a161af78ff7561cd874f5f1b75aa0bc77f720589e1b810f831eac5073e6dd46d00a2793f70f7427f0f798f2f53a67e615e65d356e66fe40609a958a05edb4c175bcc383ea0530e67ddbe479a898943c6e3074c6fcc252d6014de3a3d292b03f0d88d312fe221be7be7e3c59d07fa0f2f4029e364f1f355c5d01fa53770d0cd76d82bf7e60f6903bc1beb772e6fde4a70be51d9c7e03c8d6d8dfb361a234ba47c470fe630820bbd920715621b9fbedb49fcee165ead0875e6c2b1af16f50b5d6140cc981122fcbcf7c5a4e3772b3661b628e08380abc545957e59f634705b1bbde2f0b4e055a5ec5676d859be77e20962b645e051a880fddb0180b4555789e1f9344a436a84dc5579e2553f1e5fb0a599c137be36cabbed0319831fea3fddf94ddc7971e4bcf02cdc93294a9aab3e3b13e3b058235b4f4ec06ba4ceaa49d675b4ba80716f3bc6976b1fbf9c8bf1f3e3a4dc1cd83ef9cf816667fb94f1e923ff63fef072e6a19321e4812f96cb0ffa864da50ad74deb76917a336f31dce03ed5f0303aad5e6a83634f9fcc371096f8288b8f02ddded5ff1bb9d49331e4a84dbe1543164438fde9ad71dab024779dcdde0b6602b5ae0a6265c14b94edd83b37403f4b78fcd2ed555b596402c28ee81d87a909c4e8722b30c71ecdd861b05f61f8b1231795c76adba2fdefa451b283a5d527955b9f3de1b9828e7b2e74123dd47062ddcc09b05e7fa13cb2212a6fdbc65d7e852cec463ec6fd929f5b8483cf3052113b13dac91b69f49d1b7d1aec01c4a68e41ce157");
++
 +        genesis.nVersion = 1;
 +        genesis.nTime    = 1231006505;
 +        // TODO generate harder genesis block
 +        //genesis.nBits    = 0x1d00ffff;
 +        genesis.nBits    = KOMODO_MINDIFF_NBITS;
 +        genesis.nNonce   = uint256S("0x000000000000000000000000000000000000000000000000000000000000000b");
 +        genesis.nSolution = ParseHex("000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2");
  
          consensus.hashGenesisBlock = genesis.GetHash();
-         assert(consensus.hashGenesisBlock == uint256S("0x027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71"));
-         assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"));
+         assert(consensus.hashGenesisBlock == uint256S("0x00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08"));
+         assert(genesis.hashMerkleRoot == uint256S("0xc4eaa58879081de3c24a7b117ed2b28300e7ec4c4c1dff1d3f1268b7857a4ddb"));
  
          vFixedSeeds.clear();
          vSeeds.clear();
 -        vSeeds.push_back(CDNSSeedData("z.cash", "dnsseed.z.cash")); // Zcash
 -        vSeeds.push_back(CDNSSeedData("str4d.xyz", "dnsseed.str4d.xyz")); // @str4d
 -        vSeeds.push_back(CDNSSeedData("znodes.org", "dnsseed.znodes.org")); // @bitcartel
 +        // TODO: set up bootstrapping for mainnet
 +        base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,60);
 +        base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,85);
 +        base58Prefixes[SECRET_KEY] =     std::vector<unsigned char>(1,188);
 +        base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container<std::vector<unsigned char> >();
 +        base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container<std::vector<unsigned char> >();
 +        // guarantees the first two characters, when base58 encoded, are "zc"
 +        base58Prefixes[ZCPAYMENT_ADDRRESS] = {22,154};
 +        // guarantees the first two characters, when base58 encoded, are "SK"
 +        base58Prefixes[ZCSPENDING_KEY] = {171,54};
 +
 +        /*
          // guarantees the first 2 characters, when base58 encoded, are "t1"
          base58Prefixes[PUBKEY_ADDRESS]     = {0x1C,0xB8};
          // guarantees the first 2 characters, when base58 encoded, are "t3"
@@@ -162,26 -205,25 +160,25 @@@ public
          consensus.nMajorityEnforceBlockUpgrade = 51;
          consensus.nMajorityRejectBlockOutdated = 75;
          consensus.nMajorityWindow = 400;
-         consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f");
+         consensus.powLimit = uint256S("07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
          assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
          consensus.fPowAllowMinDifficultyBlocks = true;
 -        pchMessageStart[0] = 0xfa;
 -        pchMessageStart[1] = 0x1a;
 -        pchMessageStart[2] = 0xf9;
 -        pchMessageStart[3] = 0xbf;
 -        vAlertPubKey = ParseHex("044e7a1553392325c871c5ace5d6ad73501c66f4c185d6b0453cf45dec5a1322e705c672ac1a27ef7cdaf588c10effdf50ed5f95f85f2f54a5f6159fca394ed0c6");
 -        nDefaultPort = 18233;
 +        pchMessageStart[0] = 0x5A;
 +        pchMessageStart[1] = 0x1F;
 +        pchMessageStart[2] = 0x7E;
 +        pchMessageStart[3] = 0x62;
 +        vAlertPubKey = ParseHex("00");
 +        nDefaultPort = 17770;
          nMinerThreads = 0;
-         nMaxTipAge = 0x7fffffff;
          nPruneAfterHeight = 1000;
  
          //! Modify the testnet genesis block so the timestamp is valid for a later start.
 -        genesis.nTime = 1477648033;
 -        genesis.nBits = 0x2007ffff;
 -        genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000006");
 -        genesis.nSolution = ParseHex("00a6a51259c3f6732481e2d035197218b7a69504461d04335503cd69759b2d02bd2b53a9653f42cb33c608511c953673fa9da76170958115fe92157ad3bb5720d927f18e09459bf5c6072973e143e20f9bdf0584058c96b7c2234c7565f100d5eea083ba5d3dbaff9f0681799a113e7beff4a611d2b49590563109962baa149b628aae869af791f2f70bb041bd7ebfa658570917f6654a142b05e7ec0289a4f46470be7be5f693b90173eaaa6e84907170f32602204f1f4e1c04b1830116ffd0c54f0b1caa9a5698357bd8aa1f5ac8fc93b405265d824ba0e49f69dab5446653927298e6b7bdc61ee86ff31c07bde86331b4e500d42e4e50417e285502684b7966184505b885b42819a88469d1e9cf55072d7f3510f85580db689302eab377e4e11b14a91fdd0df7627efc048934f0aff8e7eb77eb17b3a95de13678004f2512293891d8baf8dde0ef69be520a58bbd6038ce899c9594cf3e30b8c3d9c7ecc832d4c19a6212747b50724e6f70f6451f78fd27b58ce43ca33b1641304a916186cfbe7dbca224f55d08530ba851e4df22baf7ab7078e9cbea46c0798b35a750f54103b0cdd08c81a6505c4932f6bfbd492a9fced31d54e98b6370d4c96600552fcf5b37780ed18c8787d03200963600db297a8f05dfa551321d17b9917edadcda51e274830749d133ad226f8bb6b94f13b4f77e67b35b71f52112ce9ba5da706ad9573584a2570a4ff25d29ab9761a06bdcf2c33638bf9baf2054825037881c14adf3816ba0cbd0fca689aad3ce16f2fe362c98f48134a9221765d939f0b49677d1c2447e56b46859f1810e2cf23e82a53e0d44f34dae932581b3b7f49eaec59af872cf9de757a964f7b33d143a36c270189508fcafe19398e4d2966948164d40556b05b7ff532f66f5d1edc41334ef742f78221dfe0c7ae2275bb3f24c89ae35f00afeea4e6ed187b866b209dc6e83b660593fce7c40e143beb07ac86c56f39e895385924667efe3a3f031938753c7764a2dbeb0a643fd359c46e614873fd0424e435fa7fac083b9a41a9d6bf7e284eee537ea7c50dd239f359941a43dc982745184bf3ee31a8dc850316aa9c6b66d6985acee814373be3458550659e1a06287c3b3b76a185c5cb93e38c1eebcf34ff072894b6430aed8d34122dafd925c46a515cca79b0269c92b301890ca6b0dc8b679cdac0f23318c105de73d7a46d16d2dad988d49c22e9963c117960bdc70ef0db6b091cf09445a516176b7f6d58ec29539166cc8a38bbff387acefffab2ea5faad0e8bb70625716ef0edf61940733c25993ea3de9f0be23d36e7cb8da10505f9dc426cd0e6e5b173ab4fff8c37e1f1fb56d1ea372013d075e0934c6919393cfc21395eea20718fad03542a4162a9ded66c814ad8320b2d7c2da3ecaf206da34c502db2096d1c46699a91dd1c432f019ad434e2c1ce507f91104f66f491fed37b225b8e0b2888c37276cfa0468fc13b8d593fd9a2675f0f5b20b8a15f8fa7558176a530d6865738ddb25d3426dab905221681cf9da0e0200eea5b2eba3ad3a5237d2a391f9074bf1779a2005cee43eec2b058511532635e0fea61664f531ac2b356f40db5c5d275a4cf5c82d468976455af4e3362cc8f71aa95e71d394aff3ead6f7101279f95bcd8a0fedce1d21cb3c9f6dd3b182fce0db5d6712981b651f29178a24119968b14783cafa713bc5f2a65205a42e4ce9dc7ba462bdb1f3e4553afc15f5f39998fdb53e7e231e3e520a46943734a007c2daa1eda9f495791657eefcac5c32833936e568d06187857ed04d7b97167ae207c5c5ae54e528c36016a984235e9c5b2f0718d7b3aa93c7822ccc772580b6599671b3c02ece8a21399abd33cfd3028790133167d0a97e7de53dc8ff");
 +        genesis.nTime = 1296688602;
 +        genesis.nBits = KOMODO_MINDIFF_NBITS;
 +        genesis.nNonce = uint256S("0x0000000000000000000000000000000000000000000000000000000000000009");
 +        genesis.nSolution = ParseHex("003423da3e41f916bf3ff0ee770eb844a240361abe08a8c9d46bd30226e2ad411a4047b6ddc230d173c60537e470e24f764120f5a2778b2a1285b0727bf79a0b085ad67e6266fb38fd72ef17f827315c42f921720248c983d4100e6ebd1c4b5e8762a973bac3bec7f7153b93752ebbb465f0fc9520bcfc30f9abfe303627338fed6ede9cf1b9173a736cf270cf4d9c6999ff4c3a301a78fd50dab6ccca67a0c5c2e41f216a1f3efd049a74bbe6252f9773bc309d3f9e554d996913ce8e1cec672a1fa4ea59726b61ea9e75d5ce9aa5dbfa96179a293810e02787f26de324fe7c88376ff57e29574a55faff7c2946f3e40e451861c32bf67da7377de3136858a18f34fab1bc8da37726ca2c25fc7b312a5427554ec944da81c7e27255d6c94ade9987ff7daedc2d1cc63d7d4cf93e691d13326fb1c7ee72ccdc0b134eb665fc6a9821e6fef6a6d45e4aac6dca6b505a0100ad56ea4f6fa4cdc2f0d1b65f730104a515172e34163bdb422f99d083e6eb860cf6b3f66642c4dbaf0d0fa1dca1b6166f1d1ffaa55a9d6d6df628afbdd14f1622c1c8303259299521a253bc28fcc93676723158067270fc710a09155a1e50c533e9b79ed5edba4ab70a08a9a2fc0eef0ddae050d75776a9804f8d6ad7e30ccb66c6a98d86710ca7a4dfb4feb159484796b9a015c5764aa3509051c87f729b9877ea41f8b470898c01388ed9098b1e006d3c30fc6e7c781072fa3f75d918505ee8ca75840fc62f67c57060666aa42578a2dd022eda62e3f1e447d7364074d34fd60ad9b138f60422afa6cfcb913fd6c213b496144dbfda7bfc7c24540cfe40ad0c0fd5a8c0902127f53d3178ba1b2a87bf1224d53d3a15e49ccdf121ae872a011c996d1b9793153cdcd4c0a7e99f8a35669788551cca2b62769eda24b6b55e2f4e0ac0d30aa50ecf33c6cdb24adfc922006a7bf434ced800fefe814c94c6fc8caa37b372d5088bb31d2f6b11a7a67ad3f70abbac0d5c256b637828de6cc525978cf151a2e50798e0c591787639a030291272c9ced3ab7d682e03f8c7db51f60163baa85315789666ea8c5cd6f789a7f4a5de4f8a9dfefce20f353cec606492fde8eab3e3b487b3a3a57434f8cf252a4b643fc125c8a5948b06744f5dc306aa587bdc85364c7488235c6edddd78763675e50a9637181519be06dd30c4ba0d845f9ba320d01706fd6dd64d1aa3cd4211a4a7d1d3f2c1ef2766d27d5d2cdf8e7f5e3ea309d4f149bb737305df1373a7f5313abe5986f4aa620bec4b0065d48aafac3631de3771f5c4d2f6eec67b09d9c70a3c1969fecdb014cb3c69832b63cc9d6efa378bff0ef95ffacdeb1675bb326e698f022c1a3a2e1c2b0f05e1492a6d2b7552388eca7ee8a2467ef5d4207f65d4e2ae7e33f13eb473954f249d7c20158ae703e1accddd4ea899f026618695ed2949715678a32a153df32c08922fafad68b1895e3b10e143e712940104b3b352369f4fe79bd1f1dbe03ea9909dbcf5862d1f15b3d1557a6191f54c891513cdb3c729bb9ab08c0d4c35a3ed67d517ffe1e2b7a798521aed15ff9822169c0ec860d7b897340bc2ef4c37f7eb73bd7dafef12c4fd4e6f5dd3690305257ae14ed03df5e3327b68467775a90993e613173fa6650ffa2a26e84b3ce79606bf234eda9f4053307f344099e3b10308d3785b8726fd02d8e94c2759bebd05748c3fe7d5fe087dc63608fb77f29708ab167a13f32da251e249a544124ed50c270cfc6986d9d1814273d2f0510d0d2ea335817207db6a4a23ae9b079967b63b25cb3ceea7001b65b879263f5009ac84ab89738a5b8b71fd032beb9f297326f1f5afa630a5198d684514e242f315a4d95fa6802e82799a525bb653b80b4518ec610a5996403b1391");
          consensus.hashGenesisBlock = genesis.GetHash();
-         assert(consensus.hashGenesisBlock == uint256S("0x0cdf00b25a93ded11d73ebe1728cf7867f18e1f62aca9554b95e0f3026174e33"));
+         assert(consensus.hashGenesisBlock == uint256S("0x05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38"));
  
          vFixedSeeds.clear();
          vSeeds.clear();
          vFixedSeeds = std::vector<SeedSpec6>(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
  
          fRequireRPCPassword = true;
 -        fMiningRequiresPeers = true;
 +        fMiningRequiresPeers = false;//true;
          fDefaultConsistencyChecks = false;
-         fRequireStandard = false;
+         fRequireStandard = true;
          fMineBlocksOnDemand = false;
          fTestnetToBeDeprecatedFieldRPC = true;
  
Simple merge
diff --cc src/init.cpp
Simple merge
diff --cc src/main.cpp
index e5fcc4736b8bc6b861fb82a6aeb2b2885efeb59d,1cad27fe8801733dc53c9fc23a48b3062c885220..b195e5c13781421f2755de31e681afc1d9ee867b
  using namespace std;
  
  #if defined(NDEBUG)
- # error "Bitcoin cannot be compiled without assertions."
+ # error "Zcash cannot be compiled without assertions."
  #endif
  
 +
  /**
   * Global state
   */
@@@ -2997,23 -2944,28 +3009,24 @@@ bool FindUndoPos(CValidationState &stat
      return true;
  }
  
 -bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, bool fCheckPOW)
 +bool CheckBlockHeader(int32_t height,CBlockIndex *pindex, const CBlockHeader& blockhdr, CValidationState& state, bool fCheckPOW)
  {
 -    if (block.nVersion < MIN_BLOCK_VERSION)
 -        return state.DoS(100, error("CheckBlockHeader(): block version too low"),
 -                         REJECT_INVALID, "version-too-low");
 +    uint8_t pubkey33[33];
 +    // Check timestamp
 +    if (blockhdr.GetBlockTime() > GetAdjustedTime() + 60)
 +        return state.Invalid(error("CheckBlockHeader(): block timestamp too far in the future"),REJECT_INVALID, "time-too-new");
+     // Check block version
++    //if (block.nVersion < MIN_BLOCK_VERSION)
++    //    return state.DoS(100, error("CheckBlockHeader(): block version too low"),REJECT_INVALID, "version-too-low");
      // Check Equihash solution is valid
 -    if (fCheckPOW && !CheckEquihashSolution(&block, Params()))
 -        return state.DoS(100, error("CheckBlockHeader(): Equihash solution invalid"),
 -                         REJECT_INVALID, "invalid-solution");
 -
 +    if ( fCheckPOW && !CheckEquihashSolution(&blockhdr, Params()) )
 +        return state.DoS(100, error("CheckBlockHeader(): Equihash solution invalid"),REJECT_INVALID, "invalid-solution");
 +    
      // Check proof of work matches claimed amount
-     //printf("from checkblockheader pindex.%p %p\n",pindex,mapBlockIndex[blockhdr.GetHash()]);
-     //if ( pindex == 0 )
-     //    pindex = mapBlockIndex[blockhdr.GetHash()];
 -    if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus()))
 -        return state.DoS(50, error("CheckBlockHeader(): proof of work failed"),
 -                         REJECT_INVALID, "high-hash");
 -
 -    // Check timestamp
 -    if (block.GetBlockTime() > GetAdjustedTime() + 2 * 60 * 60)
 -        return state.Invalid(error("CheckBlockHeader(): block timestamp too far in the future"),
 -                             REJECT_INVALID, "time-too-new");
 -
 +    komodo_index2pubkey33(pubkey33,pindex,height);
 +    if ( fCheckPOW && !CheckProofOfWork(height,pubkey33,blockhdr.GetHash(), blockhdr.nBits, Params().GetConsensus()) )
 +        return state.DoS(50, error("CheckBlockHeader(): proof of work failed"),REJECT_INVALID, "high-hash");
      return true;
  }
  
@@@ -5130,15 -5106,15 +5151,14 @@@ bool static ProcessMessage(CNode* pfrom
              }
          }
      }
-     /*else if (strCommand == "komodo")
-     {
-         vector<unsigned char> vData;
-         vRecv >> vData;
-         komodo_checkmsg(pfrom,vData.data(),vData.size());
-     }*/
-     else
-     {
-         LogPrint("net", "Unknown \"%s\" from peer=%d\n", SanitizeString(strCommand),pfrom->id);
 -
+     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 {
+         // Ignore unknown commands for extensibility
+         LogPrint("net", "Unknown command \"%s\" from peer=%d\n", SanitizeString(strCommand), pfrom->id);
      }
  
  
diff --cc src/miner.cpp
Simple merge
Simple merge
index 2e4ebd113e13faacb8fb7abb2024d6bb818dd139,3759bd03a98bdeb36f752ea85d24c7aa5dab104c..0808bc9ad15e3b4e03cba85936a6b1229446f298
@@@ -191,14 -190,16 +192,18 @@@ Value generate(const Array& params, boo
  
              // (x_1, x_2, ...) = A(I, V, n, k)
              std::function<bool(std::vector<unsigned char>)> validBlock =
 -                    [&pblock](std::vector<unsigned char> soln) {
 +                    [&pblock](std::vector<unsigned char> soln)
 +            {
 +                LOCK(cs_main);
                  pblock->nSolution = soln;
 -                return CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus());
+                 solutionTargetChecks.increment();
 +                return CheckProofOfWork(chainActive.Height(),NOTARY_PUBKEY33,pblock->GetHash(), pblock->nBits, Params().GetConsensus());
              };
-             if (EhBasicSolveUncancellable(n, k, curr_state, validBlock))
+             bool found = EhBasicSolveUncancellable(n, k, curr_state, validBlock);
+             ehSolverRuns.increment();
+             if (found) {
                  goto endloop;
+             }
          }
  endloop:
          CValidationState state;
index 8b72e6986c7abb578f70962ce9fd0247e780cb20,99e529ef39859691662fb5f6864dee8ab5fc43b4..801a4ff95ee5b2b82a431dacbfd7635966488cb8
@@@ -627,10 -623,10 +627,10 @@@ void StartRPCThreads(
          unsigned char rand_pwd[32];
          GetRandBytes(rand_pwd, 32);
          uiInterface.ThreadSafeMessageBox(strprintf(
-             _("To use bitcoind, or the -server option to komodo-qt, you must set an rpcpassword in the configuration file:\n"
 -            _("To use zcashd you must set an rpcpassword in the configuration file:\n"
++            _("To use komodod you must set an rpcpassword in the configuration file:\n"
                "%s\n"
                "It is recommended you use the following random password:\n"
-               "rpcuser=bitcoinrpc\n"
+               "rpcuser=zcashrpc\n"
                "rpcpassword=%s\n"
                "(you do not need to remember this password)\n"
                "The username and password MUST NOT be the same.\n"
Simple merge
index d8fc45ec0f345ff698195743b9133982f79ef8e8,5a11483f2741843d54f42e3f711d7debbd24ad56..46abcb43129c284a9114fb605d3ecc3f3ed1f035
@@@ -36,10 -36,9 +36,10 @@@ BOOST_AUTO_TEST_CASE(get_next_work_pow_
      int64_t nLastRetargetTime = 1231006505; // Block #0 of Bitcoin
      int64_t nThisTime = 1233061996;  // Block #2015 of Bitcoin
      arith_uint256 bnAvg;
 -    bnAvg.SetCompact(0x1f07ffff);
 -    BOOST_CHECK_EQUAL(0x1f07ffff,
 -                      CalculateNextWorkRequired(bnAvg, nThisTime, nLastRetargetTime, params));
 +    // TODO change once the harder genesis block is generated
 +    bnAvg.SetCompact(KOMODO_MINDIFF_NBITS);
 +    BOOST_CHECK_EQUAL(KOMODO_MINDIFF_NBITS,
-                       CalculateNextWorkRequired(bnAvg, nThisTime, nLastRetargetTime, params));
++    CalculateNextWorkRequired(bnAvg, nThisTime, nLastRetargetTime, params));
  }
  
  /* Test the constraint on the lower bound for actual time taken */
Simple merge
index 7d3de1de222d34b04093742758d59c56e1b1844d,0236610e1ad17a932cee943e70f304e133953ba8..a259077f1caf31f140a7b4856ad5bb87b3e321fb
@@@ -435,147 -481,51 +481,58 @@@ cog.outl('#define TINYFORMAT_FOREACH_AR
  
  namespace detail {
  
- // Class holding current position in format string and an output stream into
- // which arguments are formatted.
- class FormatIterator
+ // Type-opaque holder for an argument to format(), with associated actions on
+ // the type held as explicit function pointers.  This allows FormatArg's for
+ // each argument to be allocated as a homogenous array inside FormatList
+ // whereas a naive implementation based on inheritance does not.
+ class FormatArg
  {
      public:
-         // Flags for features not representable with standard stream state
-         enum ExtraFormatFlags
-         {
-             Flag_None                = 0,
-             Flag_TruncateToPrecision = 1<<0, // truncate length to stream precision()
-             Flag_SpacePadPositive    = 1<<1, // pad positive values with spaces
-             Flag_VariableWidth       = 1<<2, // variable field width in arg list
-             Flag_VariablePrecision   = 1<<3  // variable field precision in arg list
-         };
-         // out is the output stream, fmt is the full format string
-         FormatIterator(std::ostream& out, const char* fmt)
-             : m_out(out),
-             m_fmt(fmt),
-             m_extraFlags(Flag_None),
-             m_wantWidth(false),
-             m_wantPrecision(false),
-             m_variableWidth(0),
-             m_variablePrecision(0),
-             m_origWidth(out.width()),
-             m_origPrecision(out.precision()),
-             m_origFlags(out.flags()),
-             m_origFill(out.fill())
+         FormatArg() {}
+         template<typename T>
+         FormatArg(const T& value)
+             : m_value(static_cast<const void*>(&value)),
+             m_formatImpl(&formatImpl<T>),
+             m_toIntImpl(&toIntImpl<T>)
          { }
  
-         // Print remaining part of format string.
-         void finish()
+         void format(std::ostream& out, const char* fmtBegin,
+                     const char* fmtEnd, int ntrunc) const
          {
++/*<<<<<<< HEAD
 +            // It would be nice if we could do this from the destructor, but we
 +            // can't if TINYFORMAT_ERROR is used to throw an exception!
 +            m_fmt = printFormatStringLiteral(m_out, m_fmt);
 +            if(*m_fmt != '\0')
 +                TINYFORMAT_ERROR("tinyformat: Too many conversion specifiers in format string");
++=======*/
+             m_formatImpl(out, fmtBegin, fmtEnd, ntrunc, m_value);
          }
  
-         ~FormatIterator()
+         int toInt() const
          {
-             // Restore stream state
-             m_out.width(m_origWidth);
-             m_out.precision(m_origPrecision);
-             m_out.flags(m_origFlags);
-             m_out.fill(m_origFill);
+             return m_toIntImpl(m_value);
          }
  
-         template<typename T>
-         void accept(const T& value);
      private:
-         // Parse and return an integer from the string c, as atoi()
-         // On return, c is set to one past the end of the integer.
-         static int parseIntAndAdvance(const char*& c)
+         template<typename T>
+         TINYFORMAT_HIDDEN static void formatImpl(std::ostream& out, const char* fmtBegin,
+                         const char* fmtEnd, int ntrunc, const void* value)
          {
-             int i = 0;
-             for(;*c >= '0' && *c <= '9'; ++c)
-                 i = 10*i + (*c - '0');
-             return i;
+             formatValue(out, fmtBegin, fmtEnd, ntrunc, *static_cast<const T*>(value));
          }
  
-         // Format at most truncLen characters of a C string to the given
-         // stream.  Return true if formatting proceeded (generic version always
-         // returns false)
          template<typename T>
-         static bool formatCStringTruncate(std::ostream& /*out*/, const T& /*value*/,
-                                         std::streamsize /*truncLen*/)
+         TINYFORMAT_HIDDEN static int toIntImpl(const void* value)
          {
-             return false;
-         }
- #       define TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(type)            \
-         static bool formatCStringTruncate(std::ostream& out, type* value,  \
-                                         std::streamsize truncLen)          \
-         {                                                                  \
-             std::streamsize len = 0;                                       \
-             while(len < truncLen && value[len] != 0)                       \
-                 ++len;                                                     \
-             out.write(value, len);                                         \
-             return true;                                                   \
-         }
-         // Overload for const char* and char*.  Could overload for signed &
-         // unsigned char too, but these are technically unneeded for printf
-         // compatibility.
-         TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(const char)
-         TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(char)
- #       undef TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE
-         // Print literal part of format string and return next format spec
-         // position.
-         //
-         // Skips over any occurrences of '%%', printing a literal '%' to the
-         // output.  The position of the first % character of the next
-         // nontrivial format spec is returned, or the end of string.
-         static const char* printFormatStringLiteral(std::ostream& out,
-                                                     const char* fmt)
-         {
-             const char* c = fmt;
-             for(; true; ++c)
-             {
-                 switch(*c)
-                 {
-                     case '\0':
-                         out.write(fmt, static_cast<std::streamsize>(c - fmt));
-                         return c;
-                     case '%':
-                         out.write(fmt, static_cast<std::streamsize>(c - fmt));
-                         if(*(c+1) != '%')
-                             return c;
-                         // for "%%", tack trailing % onto next literal section.
-                         fmt = ++c;
-                         break;
-                 }
-             }
+             return convertToInt<T>::invoke(*static_cast<const T*>(value));
          }
  
-         static const char* streamStateFromFormat(std::ostream& out,
-                                                  unsigned int& extraFlags,
-                                                  const char* fmtStart,
-                                                  int variableWidth,
-                                                  int variablePrecision);
-         // Private copy & assign: Kill gcc warnings with -Weffc++
-         FormatIterator(const FormatIterator&);
-         FormatIterator& operator=(const FormatIterator&);
-         // Stream, current format string & state
-         std::ostream& m_out;
-         const char* m_fmt;
-         unsigned int m_extraFlags;
-         // State machine info for handling of variable width & precision
-         bool m_wantWidth;
-         bool m_wantPrecision;
-         int m_variableWidth;
-         int m_variablePrecision;
-         // Saved stream state
-         std::streamsize m_origWidth;
-         std::streamsize m_origPrecision;
-         std::ios::fmtflags m_origFlags;
-         char m_origFill;
+         const void* m_value;
+         void (*m_formatImpl)(std::ostream& out, const char* fmtBegin,
+                              const char* fmtEnd, int ntrunc, const void* value);
+         int (*m_toIntImpl)(const void* value);
  };
  
  
diff --cc src/util.cpp
Simple merge
Simple merge
Simple merge
This page took 0.058466 seconds and 4 git commands to generate.