Merge remote-tracking branch 'zcash/master' into dPoW
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -5,7 +5,7 @@ src/bitcoin
|
||||
src/zcashd
|
||||
src/zcash-cli
|
||||
src/zcash-gtest
|
||||
src/bitcoin-tx
|
||||
src/zcash-tx
|
||||
src/test/test_bitcoin
|
||||
src/qt/test/test_bitcoin-qt
|
||||
|
||||
@@ -61,7 +61,6 @@ src/qt/test/moc*.cpp
|
||||
*.pyc
|
||||
*.o
|
||||
*.o-*
|
||||
*.patch
|
||||
.zcash
|
||||
*.a
|
||||
*.pb.cc
|
||||
@@ -121,4 +120,4 @@ qa/pull-tester/test.*/*
|
||||
|
||||
/doc/doxygen/
|
||||
|
||||
libbitcoinconsensus.pc
|
||||
libzcashconsensus.pc
|
||||
|
||||
20
COPYING
20
COPYING
@@ -18,3 +18,23 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
|
||||
The MIT software license (http://www.opensource.org/licenses/mit-license.php)
|
||||
above applies to the code directly included in this source distribution, with
|
||||
the exception of certain files under the 'src/qt/' and 'scripts/img/' directories
|
||||
which are distributed under the LGPL or GPL licenses. Dependencies downloaded
|
||||
as part of the build process may be covered by other 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](mailto:eay@cryptsoft.com)),
|
||||
and UPnP software written by Thomas Bernard.
|
||||
|
||||
|
||||
Although almost all of the Zcash code is licensed under "permissive" open source
|
||||
licenses, users and distributors should note that when built using the default
|
||||
build options, Zcash depends on Oracle Berkeley DB 6.2.x, which is licensed
|
||||
under the GNU Affero General Public License.
|
||||
|
||||
@@ -6,7 +6,7 @@ GZIP_ENV="-9n"
|
||||
|
||||
if BUILD_BITCOIN_LIBS
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libbitcoinconsensus.pc
|
||||
pkgconfig_DATA = libzcashconsensus.pc
|
||||
endif
|
||||
|
||||
BITCOIND_BIN=$(top_builddir)/src/zcashd$(EXEEXT)
|
||||
|
||||
50
README.md
50
README.md
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
|
||||
Zcash
|
||||
=====
|
||||
@@ -20,12 +21,30 @@ proving scheme which preserves confidentiality of transaction metadata.
|
||||
|
||||
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
|
||||
-------
|
||||
|
||||
@@ -135,3 +154,32 @@ tail -f ~/.komodo/debug.log
|
||||
./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).
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
AC_DEFUN([BITCOIN_FIND_BDB53],[
|
||||
AC_DEFUN([BITCOIN_FIND_BDB62],[
|
||||
AC_MSG_CHECKING([for Berkeley DB C++ headers])
|
||||
BDB_CPPFLAGS=
|
||||
BDB_LIBS=
|
||||
bdbpath=X
|
||||
bdb53path=X
|
||||
bdb62path=X
|
||||
bdbdirlist=
|
||||
for _vn in 5.3 53 5 ''; do
|
||||
for _vn in 6.2 62 6 ''; do
|
||||
for _pfx in b lib ''; do
|
||||
bdbdirlist="$bdbdirlist ${_pfx}db${_vn}"
|
||||
done
|
||||
@@ -15,8 +15,8 @@ AC_DEFUN([BITCOIN_FIND_BDB53],[
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <${searchpath}db_cxx.h>
|
||||
]],[[
|
||||
#if !((DB_VERSION_MAJOR == 5 && DB_VERSION_MINOR >= 3) || DB_VERSION_MAJOR > 5)
|
||||
#error "failed to find bdb 5.3+"
|
||||
#if !((DB_VERSION_MAJOR == 6 && DB_VERSION_MINOR >= 2) || DB_VERSION_MAJOR > 6)
|
||||
#error "failed to find bdb 6.2+"
|
||||
#endif
|
||||
]])],[
|
||||
if test "x$bdbpath" = "xX"; then
|
||||
@@ -28,32 +28,32 @@ AC_DEFUN([BITCOIN_FIND_BDB53],[
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <${searchpath}db_cxx.h>
|
||||
]],[[
|
||||
#if !(DB_VERSION_MAJOR == 5 && DB_VERSION_MINOR == 3)
|
||||
#error "failed to find bdb 5.3"
|
||||
#if !(DB_VERSION_MAJOR == 6 && DB_VERSION_MINOR == 2)
|
||||
#error "failed to find bdb 6.2"
|
||||
#endif
|
||||
]])],[
|
||||
bdb53path="${searchpath}"
|
||||
bdb62path="${searchpath}"
|
||||
break
|
||||
],[])
|
||||
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)])
|
||||
elif test "x$bdb53path" = "xX"; then
|
||||
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 5.3])],[
|
||||
AC_MSG_WARN([Found Berkeley DB other than 5.3; wallets opened by this build will not be portable!])
|
||||
AC_ARG_WITH([incompatible-bdb],[AS_HELP_STRING([--with-incompatible-bdb], [allow using a bdb version other than 6.2])],[
|
||||
AC_MSG_WARN([Found Berkeley DB other than 6.2; wallets opened by this build will not be portable!])
|
||||
],[
|
||||
AC_MSG_ERROR([Found Berkeley DB other than 5.3, required for portable wallets (--with-incompatible-bdb to ignore or --disable-wallet to disable wallet functionality)])
|
||||
AC_MSG_ERROR([Found Berkeley DB other than 6.2, required for portable wallets (--with-incompatible-bdb to ignore or --disable-wallet to disable wallet functionality)])
|
||||
])
|
||||
else
|
||||
BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdb53path}],db_cxx)
|
||||
bdbpath="${bdb53path}"
|
||||
BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdb62path}],db_cxx)
|
||||
bdbpath="${bdb62path}"
|
||||
fi
|
||||
AC_SUBST(BDB_CPPFLAGS)
|
||||
|
||||
# TODO: Ideally this could find the library version and make sure it matches the headers being used
|
||||
for searchlib in db_cxx-5.3 db_cxx; do
|
||||
for searchlib in db_cxx-6.2 db_cxx; do
|
||||
AC_CHECK_LIB([$searchlib],[main],[
|
||||
BDB_LIBS="-l${searchlib}"
|
||||
break
|
||||
|
||||
18
configure.ac
18
configure.ac
@@ -3,10 +3,10 @@ AC_PREREQ([2.60])
|
||||
define(_CLIENT_VERSION_MAJOR, 1)
|
||||
define(_CLIENT_VERSION_MINOR, 0)
|
||||
define(_CLIENT_VERSION_REVISION, 0)
|
||||
define(_CLIENT_VERSION_BUILD, 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, false)
|
||||
define(_CLIENT_VERSION_IS_RELEASE, true)
|
||||
define(_COPYRIGHT_YEAR, 2016)
|
||||
AC_INIT([Zcash],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_SUFFIX(_ZC_BUILD_VAL)],[https://github.com/zcash/zcash/issues],[zcash])
|
||||
AC_CONFIG_SRCDIR([src/main.cpp])
|
||||
@@ -179,7 +179,7 @@ CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_
|
||||
|
||||
AC_ARG_WITH([utils],
|
||||
[AS_HELP_STRING([--with-utils],
|
||||
[build bitcoin-cli bitcoin-tx (default=yes)])],
|
||||
[build zcash-cli zcash-tx (default=yes)])],
|
||||
[build_bitcoin_utils=$withval],
|
||||
[build_bitcoin_utils=yes])
|
||||
|
||||
@@ -270,9 +270,9 @@ case $host in
|
||||
dnl add default macports paths
|
||||
CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
|
||||
LIBS="$LIBS -L/opt/local/lib"
|
||||
if test -d /opt/local/include/db53; then
|
||||
CPPFLAGS="$CPPFLAGS -I/opt/local/include/db53"
|
||||
LIBS="$LIBS -L/opt/local/lib/db53"
|
||||
if test -d /opt/local/include/db62; then
|
||||
CPPFLAGS="$CPPFLAGS -I/opt/local/include/db62"
|
||||
LIBS="$LIBS -L/opt/local/lib/db62"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -522,7 +522,7 @@ AC_SUBST(LIBMEMENV)
|
||||
|
||||
if test x$enable_wallet != xno; then
|
||||
dnl Check for libdb_cxx only if wallet enabled
|
||||
BITCOIN_FIND_BDB53
|
||||
BITCOIN_FIND_BDB62
|
||||
fi
|
||||
|
||||
dnl Check for libminiupnpc (optional)
|
||||
@@ -746,7 +746,7 @@ AC_MSG_CHECKING([whether to build bitcoind])
|
||||
AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes])
|
||||
AC_MSG_RESULT($build_bitcoind)
|
||||
|
||||
AC_MSG_CHECKING([whether to build utils (bitcoin-cli bitcoin-tx)])
|
||||
AC_MSG_CHECKING([whether to build utils (zcash-cli zcash-tx)])
|
||||
AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes])
|
||||
AC_MSG_RESULT($build_bitcoin_utils)
|
||||
|
||||
@@ -754,7 +754,7 @@ AC_MSG_CHECKING([whether to build libraries])
|
||||
AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes])
|
||||
if test x$build_bitcoin_libs = xyes; then
|
||||
AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built])
|
||||
AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in])
|
||||
AC_CONFIG_FILES([libzcashconsensus.pc:libzcashconsensus.pc.in])
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT($build_bitcoin_libs)
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
zcash (1.0.0-rc1) UNRELEASED; urgency=medium
|
||||
zcash (1.0.0-sprout) jessie; urgency=medium
|
||||
|
||||
* 1.0.0 release.
|
||||
|
||||
-- Zcash Company <team@z.cash> Fri, 28 Oct 2016 03:00:50 -0700
|
||||
|
||||
zcash (1.0.0-rc4) jessie; urgency=medium
|
||||
|
||||
* 1.0.0-rc4 release.
|
||||
|
||||
-- Zcash Company <team@z.cash> Thu, 27 Oct 2016 13:36:00 +0100
|
||||
|
||||
zcash (1.0.0-rc3) jessie; urgency=medium
|
||||
|
||||
* 1.0.0-rc3 release.
|
||||
|
||||
-- Zcash Company <team@z.cash> Wed, 26 Oct 2016 23:17:03 +0100
|
||||
|
||||
zcash (1.0.0-rc2) jessie; urgency=medium
|
||||
|
||||
* 1.0.0-rc2 release.
|
||||
|
||||
-- Zcash Company <team@z.cash> Sun, 23 Oct 2016 01:51:27 +0100
|
||||
|
||||
zcash (1.0.0-rc1) jessie; urgency=medium
|
||||
|
||||
* Initial packaging for Debian.
|
||||
|
||||
-- Zcash Company <team@z.cash> Thu, 13 Oct 2016 20:12:17 -0700
|
||||
-- Zcash Company <team@z.cash> Mon, 17 Oct 2016 11:47:02 -0700
|
||||
|
||||
@@ -7,12 +7,13 @@ Build-Depends: autoconf, automake, bsdmainutils, build-essential
|
||||
git, g++-multilib, libc6-dev, libtool
|
||||
m4, ncurses-dev, pkg-config, python
|
||||
unzip, wget, zlib1g-dev
|
||||
Vcs-Git: git@github.com:zcash/zcash.git
|
||||
Vcs-Git: https://github.com/zcash/zcash.git
|
||||
Vcs-Browser: https://github.com/zcash/zcash
|
||||
Package: zcash
|
||||
Version: 1.0.0-rc1
|
||||
Version: 1.0.0-sprout
|
||||
Architecture: amd64
|
||||
Description: Zcash is an implementation of the "Zerocash" protocol.
|
||||
Depends: libgomp1
|
||||
Description: 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.
|
||||
|
||||
@@ -15,15 +15,6 @@ Files: src/json/*
|
||||
Copyright: 2007-2009, John W. Wilkinson
|
||||
License: Expat
|
||||
|
||||
Files: debian/*
|
||||
Copyright: 2010-2011, Jonas Smedegaard <dr@jones.dk>
|
||||
2011, Matt Corallo <matt@bluematt.me>
|
||||
License: GPL-2+
|
||||
|
||||
Files: debian/manpages/*
|
||||
Copyright: Micah Anderson <micah@debian.org>
|
||||
License: GPL-3+
|
||||
|
||||
Files: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png,
|
||||
src/qt/res/src/*.svg
|
||||
Copyright: Wladimir van der Laan
|
||||
@@ -95,7 +86,7 @@ Copyright: 2008 Beman Dawes
|
||||
License: Boost-Software-License-1.0
|
||||
|
||||
Files: depends/sources/db-*.tar.gz
|
||||
Copyright: 1990, 2013 Oracle and/or its affiliates;
|
||||
Copyright: 1990, 2016 Oracle and/or its affiliates;
|
||||
1990, 1993, 1994, 1995 The Regents of the University of California;
|
||||
1995, 1996 The President and Fellows of Harvard University;
|
||||
2000-2005 INRIA, France Telecom
|
||||
@@ -138,39 +129,676 @@ License: Boost-Software-License-1.0
|
||||
|
||||
License: BDB
|
||||
/*
|
||||
* Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved.
|
||||
* The Oracle Berkeley DB product is licensed
|
||||
* under the GNU AFFERO GENERAL PUBLIC LICENSE:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Redistributions in any form must be accompanied by information on
|
||||
* how to obtain complete source code for the DB software and any
|
||||
* accompanying software that uses the DB software. The source code
|
||||
* must either be included in the distribution or be available for no
|
||||
* more than the cost of distribution plus a nominal fee, and must be
|
||||
* freely redistributable under reasonable conditions. For an
|
||||
* executable file, complete source code means the source code for all
|
||||
* modules it contains. It does not include source code for modules or
|
||||
* files that typically accompany the major components of the operating
|
||||
* system on which the executable file runs.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
|
||||
* NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* Version 3, 19 November 2007
|
||||
*
|
||||
* Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
* Everyone is permitted to copy and distribute verbatim copies
|
||||
* of this license document, but changing it is not allowed.
|
||||
*
|
||||
* Preamble
|
||||
*
|
||||
* The GNU Affero General Public License is a free, copyleft license for
|
||||
* software and other kinds of works, specifically designed to ensure
|
||||
* cooperation with the community in the case of network server software.
|
||||
*
|
||||
* The licenses for most software and other practical works are designed
|
||||
* to take away your freedom to share and change the works. By contrast,
|
||||
* our General Public Licenses are 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Developers that use our General Public Licenses protect your rights
|
||||
* with two steps: (1) assert copyright on the software, and (2) offer
|
||||
* you this License which gives you legal permission to copy, distribute
|
||||
* and/or modify the software.
|
||||
*
|
||||
* A secondary benefit of defending all users' freedom is that
|
||||
* improvements made in alternate versions of the program, if they
|
||||
* receive widespread use, become available for other developers to
|
||||
* incorporate. Many developers of free software are heartened and
|
||||
* encouraged by the resulting cooperation. However, in the case of
|
||||
* software used on network servers, this result may fail to come about.
|
||||
* The GNU General Public License permits making a modified version and
|
||||
* letting the public access it on a server without ever releasing its
|
||||
* source code to the public.
|
||||
*
|
||||
* The GNU Affero General Public License is designed specifically to
|
||||
* ensure that, in such cases, the modified source code becomes available
|
||||
* to the community. It requires the operator of a network server to
|
||||
* provide the source code of the modified version running there to the
|
||||
* users of that server. Therefore, public use of a modified version, on
|
||||
* a publicly accessible server, gives the public access to the source
|
||||
* code of the modified version.
|
||||
*
|
||||
* An older license, called the Affero General Public License and
|
||||
* published by Affero, was designed to accomplish similar goals. This is
|
||||
* a different license, not a version of the Affero GPL, but Affero has
|
||||
* released a new version of the Affero GPL which permits relicensing under
|
||||
* this license.
|
||||
*
|
||||
* The precise terms and conditions for copying, distribution and
|
||||
* modification follow.
|
||||
*
|
||||
* TERMS AND CONDITIONS
|
||||
*
|
||||
* 0. Definitions.
|
||||
*
|
||||
* "This License" refers to version 3 of the GNU Affero 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. Remote Network Interaction; Use with the GNU General Public License.
|
||||
*
|
||||
* Notwithstanding any other provision of this License, if you modify the
|
||||
* Program, your modified version must prominently offer all users
|
||||
* interacting with it remotely through a computer network (if your version
|
||||
* supports such interaction) an opportunity to receive the Corresponding
|
||||
* Source of your version by providing access to the Corresponding Source
|
||||
* from a network server at no charge, through some standard or customary
|
||||
* means of facilitating copying of software. This Corresponding Source
|
||||
* shall include the Corresponding Source for any work covered by version 3
|
||||
* of the GNU General Public License that is incorporated pursuant to the
|
||||
* following paragraph.
|
||||
*
|
||||
* 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 GNU 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 work with which it is combined will remain governed by version
|
||||
* 3 of the GNU General Public License.
|
||||
*
|
||||
* 14. Revised Versions of this License.
|
||||
*
|
||||
* The Free Software Foundation may publish revised and/or new versions of
|
||||
* the GNU Affero 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 GNU Affero 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
|
||||
* GNU Affero 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 GNU Affero 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.
|
||||
*
|
||||
* END OF TERMS AND CONDITIONS
|
||||
*
|
||||
* How to Apply These Terms to Your New Programs
|
||||
*
|
||||
* If you develop a new program, and you want it to be of the greatest
|
||||
* possible use to the public, the best way to achieve this is to make it
|
||||
* free software which everyone can redistribute and change under these terms.
|
||||
*
|
||||
* To do so, attach the following notices to the program. It is safest
|
||||
* to attach them to the start of each source file to most effectively
|
||||
* state the exclusion of warranty; and each file should have at least
|
||||
* the "copyright" line and a pointer to where the full notice is found.
|
||||
*
|
||||
* <one line to give the program's name and a brief idea of what it does.>
|
||||
* Copyright (C) <year> <name of author>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Also add information on how to contact you by electronic and paper mail.
|
||||
*
|
||||
* If your software can interact with users remotely through a computer
|
||||
* network, you should also make sure that it provides a way for users to
|
||||
* get its source. For example, if your program is a web application, its
|
||||
* interface could display a "Source" link that leads users to an archive
|
||||
* of the code. There are many ways you could offer source, and different
|
||||
* solutions will be better for different programs; see section 13 for the
|
||||
* specific requirements.
|
||||
*
|
||||
* You should also get your employer (if you work as a programmer) or school,
|
||||
* if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
* For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
.
|
||||
ADDITIONAL THIRD PARTY NOTICES:
|
||||
.
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
/*
|
||||
* Copyright (c) 1990, 1993, 1994, 1995
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
|
||||
138
contrib/DEBIAN/examples/zcash.conf
Normal file
138
contrib/DEBIAN/examples/zcash.conf
Normal file
@@ -0,0 +1,138 @@
|
||||
##
|
||||
## zcash.conf configuration file. Lines beginning with # are comments.
|
||||
##
|
||||
|
||||
# Network-related settings:
|
||||
|
||||
# Run on the test network instead of the real zcash network.
|
||||
#testnet=0
|
||||
|
||||
# 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=<addr>
|
||||
|
||||
# Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6
|
||||
#whitebind=<addr>
|
||||
|
||||
##############################################################
|
||||
## 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 Zcash/zcashd process)
|
||||
#
|
||||
|
||||
# server=1 tells zcashd 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=<addr>
|
||||
|
||||
# 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 zcash will wait for a complete RPC HTTP request.
|
||||
# after the HTTP connection is established.
|
||||
#rpctimeout=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 zcashd
|
||||
# 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 Zcash or zcashd to send commands to Zcash/zcashd
|
||||
# running on another host using this option:
|
||||
#rpcconnect=127.0.0.1
|
||||
|
||||
# Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate
|
||||
# with Zcash -server or zcashd
|
||||
#rpcssl=1
|
||||
|
||||
# OpenSSL settings used when rpcssl=1
|
||||
#rpcsslciphers=TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH
|
||||
#rpcsslcertificatechainfile=server.cert
|
||||
#rpcsslprivatekeyfile=server.pem
|
||||
|
||||
# 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 zcash.
|
||||
#gen=0
|
||||
|
||||
# Set the number of threads to be used for mining zcash (-1 = all cores).
|
||||
#genproclimit=1
|
||||
|
||||
# Specify a different Equihash solver (e.g. "tromp") to try to mine zcash
|
||||
# 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 zcash. 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
|
||||
|
||||
|
||||
77
contrib/DEBIAN/manpages/zcash-cli.1
Normal file
77
contrib/DEBIAN/manpages/zcash-cli.1
Normal file
@@ -0,0 +1,77 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
|
||||
.TH ZCASH-CLI "1" "October 2016" "Zcash RPC client version v1.0.0-409dcb7" "User Commands"
|
||||
.SH NAME
|
||||
zcash-cli \- RPC client for the Zcash daemon
|
||||
.SH DESCRIPTION
|
||||
Zcash RPC client version v1.0.0
|
||||
.SS "Usage:"
|
||||
.TP
|
||||
zcash\-cli [options] <command> [params]
|
||||
Send command to Zcash
|
||||
.TP
|
||||
zcash\-cli [options] help
|
||||
List commands
|
||||
.TP
|
||||
zcash\-cli [options] help <command>
|
||||
Get help for a command
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\-?
|
||||
.IP
|
||||
This help message
|
||||
.HP
|
||||
\fB\-conf=\fR<file>
|
||||
.IP
|
||||
Specify configuration file (default: zcash.conf)
|
||||
.HP
|
||||
\fB\-datadir=\fR<dir>
|
||||
.IP
|
||||
Specify data directory
|
||||
.HP
|
||||
\fB\-testnet\fR
|
||||
.IP
|
||||
Use the test network
|
||||
.HP
|
||||
\fB\-regtest\fR
|
||||
.IP
|
||||
Enter regression test mode, which uses a special chain in which blocks
|
||||
can be solved instantly. This is intended for regression testing tools
|
||||
and app development.
|
||||
.HP
|
||||
\fB\-rpcconnect=\fR<ip>
|
||||
.IP
|
||||
Send commands to node running on <ip> (default: 127.0.0.1)
|
||||
.HP
|
||||
\fB\-rpcport=\fR<port>
|
||||
.IP
|
||||
Connect to JSON\-RPC on <port> (default: 8232 or testnet: 18232)
|
||||
.HP
|
||||
\fB\-rpcwait\fR
|
||||
.IP
|
||||
Wait for RPC server to start
|
||||
.HP
|
||||
\fB\-rpcuser=\fR<user>
|
||||
.IP
|
||||
Username for JSON\-RPC connections
|
||||
.HP
|
||||
\fB\-rpcpassword=\fR<pw>
|
||||
.IP
|
||||
Password for JSON\-RPC connections
|
||||
.PP
|
||||
SSL options: (see the Bitcoin Wiki for SSL setup instructions)
|
||||
.HP
|
||||
\fB\-rpcssl\fR
|
||||
.IP
|
||||
Use OpenSSL (https) for JSON\-RPC connections
|
||||
.SH "SEE ALSO"
|
||||
The full documentation for
|
||||
.B Zcash
|
||||
is maintained as a Texinfo manual. If the
|
||||
.B info
|
||||
and
|
||||
.B Zcash
|
||||
programs are properly installed at your site, the command
|
||||
.IP
|
||||
.B info Zcash
|
||||
.PP
|
||||
should give you access to the complete manual.
|
||||
432
contrib/DEBIAN/manpages/zcashd.1
Normal file
432
contrib/DEBIAN/manpages/zcashd.1
Normal file
@@ -0,0 +1,432 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
|
||||
.TH ZCASHD "1" "October 2016" "Zcash Daemon version v1.0.0-409dcb7" "User Commands"
|
||||
.SH NAME
|
||||
zcashd \- Network daemon for interacting with the Zcash blockchain
|
||||
.SH DESCRIPTION
|
||||
Zcash Daemon version v1.0.0
|
||||
.SS "Usage:"
|
||||
.TP
|
||||
zcashd [options]
|
||||
Start Zcash Daemon
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\-?
|
||||
.IP
|
||||
This help message
|
||||
.HP
|
||||
\fB\-alerts\fR
|
||||
.IP
|
||||
Receive and display P2P network alerts (default: 1)
|
||||
.HP
|
||||
\fB\-alertnotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command when a relevant alert is received or we see a really
|
||||
long fork (%s in cmd is replaced by message)
|
||||
.HP
|
||||
\fB\-blocknotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command when the best block changes (%s in cmd is replaced by
|
||||
block hash)
|
||||
.HP
|
||||
\fB\-checkblocks=\fR<n>
|
||||
.IP
|
||||
How many blocks to check at startup (default: 288, 0 = all)
|
||||
.HP
|
||||
\fB\-checklevel=\fR<n>
|
||||
.IP
|
||||
How thorough the block verification of \fB\-checkblocks\fR is (0\-4, default: 3)
|
||||
.HP
|
||||
\fB\-conf=\fR<file>
|
||||
.IP
|
||||
Specify configuration file (default: zcash.conf)
|
||||
.HP
|
||||
\fB\-daemon\fR
|
||||
.IP
|
||||
Run in the background as a daemon and accept commands
|
||||
.HP
|
||||
\fB\-datadir=\fR<dir>
|
||||
.IP
|
||||
Specify data directory
|
||||
.HP
|
||||
\fB\-dbcache=\fR<n>
|
||||
.IP
|
||||
Set database cache size in megabytes (4 to 16384, default: 100)
|
||||
.HP
|
||||
\fB\-loadblock=\fR<file>
|
||||
.IP
|
||||
Imports blocks from external blk000??.dat file on startup
|
||||
.HP
|
||||
\fB\-maxorphantx=\fR<n>
|
||||
.IP
|
||||
Keep at most <n> unconnectable transactions in memory (default: 100)
|
||||
.HP
|
||||
\fB\-par=\fR<n>
|
||||
.IP
|
||||
Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 =
|
||||
leave that many cores free, default: 0)
|
||||
.HP
|
||||
\fB\-pid=\fR<file>
|
||||
.IP
|
||||
Specify pid file (default: zcashd.pid)
|
||||
.HP
|
||||
\fB\-prune=\fR<n>
|
||||
.IP
|
||||
Reduce storage requirements by pruning (deleting) old blocks. This mode
|
||||
disables wallet support and is incompatible with \fB\-txindex\fR. Warning:
|
||||
Reverting this setting requires re\-downloading the entire blockchain.
|
||||
(default: 0 = disable pruning blocks, >550 = target size in MiB to use
|
||||
for block files)
|
||||
.HP
|
||||
\fB\-reindex\fR
|
||||
.IP
|
||||
Rebuild block chain index from current blk000??.dat files on startup
|
||||
.HP
|
||||
\fB\-sysperms\fR
|
||||
.IP
|
||||
Create new files with system default permissions, instead of umask 077
|
||||
(only effective with disabled wallet functionality)
|
||||
.HP
|
||||
\fB\-txindex\fR
|
||||
.IP
|
||||
Maintain a full transaction index, used by the getrawtransaction rpc
|
||||
call (default: 0)
|
||||
.PP
|
||||
Connection options:
|
||||
.HP
|
||||
\fB\-addnode=\fR<ip>
|
||||
.IP
|
||||
Add a node to connect to and attempt to keep the connection open
|
||||
.HP
|
||||
\fB\-banscore=\fR<n>
|
||||
.IP
|
||||
Threshold for disconnecting misbehaving peers (default: 100)
|
||||
.HP
|
||||
\fB\-bantime=\fR<n>
|
||||
.IP
|
||||
Number of seconds to keep misbehaving peers from reconnecting (default:
|
||||
86400)
|
||||
.HP
|
||||
\fB\-bind=\fR<addr>
|
||||
.IP
|
||||
Bind to given address and always listen on it. Use [host]:port notation
|
||||
for IPv6
|
||||
.HP
|
||||
\fB\-connect=\fR<ip>
|
||||
.IP
|
||||
Connect only to the specified node(s)
|
||||
.HP
|
||||
\fB\-discover\fR
|
||||
.IP
|
||||
Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
|
||||
or \fB\-proxy\fR)
|
||||
.HP
|
||||
\fB\-dns\fR
|
||||
.IP
|
||||
Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
|
||||
.HP
|
||||
\fB\-dnsseed\fR
|
||||
.IP
|
||||
Query for peer addresses via DNS lookup, if low on addresses (default: 1
|
||||
unless \fB\-connect\fR)
|
||||
.HP
|
||||
\fB\-externalip=\fR<ip>
|
||||
.IP
|
||||
Specify your own public address
|
||||
.HP
|
||||
\fB\-forcednsseed\fR
|
||||
.IP
|
||||
Always query for peer addresses via DNS lookup (default: 0)
|
||||
.HP
|
||||
\fB\-listen\fR
|
||||
.IP
|
||||
Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
|
||||
.HP
|
||||
\fB\-maxconnections=\fR<n>
|
||||
.IP
|
||||
Maintain at most <n> connections to peers (default: 125)
|
||||
.HP
|
||||
\fB\-maxreceivebuffer=\fR<n>
|
||||
.IP
|
||||
Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
|
||||
.HP
|
||||
\fB\-maxsendbuffer=\fR<n>
|
||||
.IP
|
||||
Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
|
||||
.HP
|
||||
\fB\-onion=\fR<ip:port>
|
||||
.IP
|
||||
Use separate SOCKS5 proxy to reach peers via Tor hidden services
|
||||
(default: \fB\-proxy\fR)
|
||||
.HP
|
||||
\fB\-onlynet=\fR<net>
|
||||
.IP
|
||||
Only connect to nodes in network <net> (ipv4, ipv6 or onion)
|
||||
.HP
|
||||
\fB\-permitbaremultisig\fR
|
||||
.IP
|
||||
Relay non\-P2SH multisig (default: 1)
|
||||
.HP
|
||||
\fB\-port=\fR<port>
|
||||
.IP
|
||||
Listen for connections on <port> (default: 8233 or testnet: 18233)
|
||||
.HP
|
||||
\fB\-proxy=\fR<ip:port>
|
||||
.IP
|
||||
Connect through SOCKS5 proxy
|
||||
.HP
|
||||
\fB\-proxyrandomize\fR
|
||||
.IP
|
||||
Randomize credentials for every proxy connection. This enables Tor
|
||||
stream isolation (default: 1)
|
||||
.HP
|
||||
\fB\-seednode=\fR<ip>
|
||||
.IP
|
||||
Connect to a node to retrieve peer addresses, and disconnect
|
||||
.HP
|
||||
\fB\-timeout=\fR<n>
|
||||
.IP
|
||||
Specify connection timeout in milliseconds (minimum: 1, default: 5000)
|
||||
.HP
|
||||
\fB\-upnp\fR
|
||||
.IP
|
||||
Use UPnP to map the listening port (default: 0)
|
||||
.HP
|
||||
\fB\-whitebind=\fR<addr>
|
||||
.IP
|
||||
Bind to given address and whitelist peers connecting to it. Use
|
||||
[host]:port notation for IPv6
|
||||
.HP
|
||||
\fB\-whitelist=\fR<netmask>
|
||||
.IP
|
||||
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
|
||||
.PP
|
||||
Wallet options:
|
||||
.HP
|
||||
\fB\-disablewallet\fR
|
||||
.IP
|
||||
Do not load the wallet and disable wallet RPC calls
|
||||
.HP
|
||||
\fB\-keypool=\fR<n>
|
||||
.IP
|
||||
Set key pool size to <n> (default: 100)
|
||||
.HP
|
||||
\fB\-paytxfee=\fR<amt>
|
||||
.IP
|
||||
Fee (in BTC/kB) to add to transactions you send (default: 0.00)
|
||||
.HP
|
||||
\fB\-rescan\fR
|
||||
.IP
|
||||
Rescan the block chain for missing wallet transactions on startup
|
||||
.HP
|
||||
\fB\-salvagewallet\fR
|
||||
.IP
|
||||
Attempt to recover private keys from a corrupt wallet.dat on startup
|
||||
.HP
|
||||
\fB\-sendfreetransactions\fR
|
||||
.IP
|
||||
Send transactions as zero\-fee transactions if possible (default: 0)
|
||||
.HP
|
||||
\fB\-spendzeroconfchange\fR
|
||||
.IP
|
||||
Spend unconfirmed change when sending transactions (default: 1)
|
||||
.HP
|
||||
\fB\-txconfirmtarget=\fR<n>
|
||||
.IP
|
||||
If paytxfee is not set, include enough fee so transactions begin
|
||||
confirmation on average within n blocks (default: 2)
|
||||
.HP
|
||||
\fB\-maxtxfee=\fR<amt>
|
||||
.IP
|
||||
Maximum total fees to use in a single wallet transaction; setting this
|
||||
too low may abort large transactions (default: 0.10)
|
||||
.HP
|
||||
\fB\-upgradewallet\fR
|
||||
.IP
|
||||
Upgrade wallet to latest format on startup
|
||||
.HP
|
||||
\fB\-wallet=\fR<file>
|
||||
.IP
|
||||
Specify wallet file (within data directory) (default: wallet.dat)
|
||||
.HP
|
||||
\fB\-walletbroadcast\fR
|
||||
.IP
|
||||
Make the wallet broadcast transactions (default: 1)
|
||||
.HP
|
||||
\fB\-walletnotify=\fR<cmd>
|
||||
.IP
|
||||
Execute command when a wallet transaction changes (%s in cmd is replaced
|
||||
by TxID)
|
||||
.HP
|
||||
\fB\-zapwallettxes=\fR<mode>
|
||||
.IP
|
||||
Delete all wallet transactions and only recover those parts of the
|
||||
blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
|
||||
account owner and payment request information, 2 = drop tx meta data)
|
||||
.PP
|
||||
Debugging/Testing options:
|
||||
.HP
|
||||
\fB\-debug=\fR<category>
|
||||
.IP
|
||||
Output debugging information (default: 0, supplying <category> is
|
||||
optional). If <category> is not supplied, output all debugging
|
||||
information.<category> can be: addrman, alert, bench, coindb, db, lock,
|
||||
rand, rpc, selectcoins, mempool, net, proxy, prune.
|
||||
.HP
|
||||
\fB\-gen\fR
|
||||
.IP
|
||||
Generate coins (default: 0)
|
||||
.HP
|
||||
\fB\-genproclimit=\fR<n>
|
||||
.IP
|
||||
Set the number of threads for coin generation if enabled (\fB\-1\fR = all
|
||||
cores, default: 1)
|
||||
.HP
|
||||
\fB\-equihashsolver=\fR<name>
|
||||
.IP
|
||||
Specify the Equihash solver to be used if enabled (default: "default")
|
||||
.HP
|
||||
\fB\-help\-debug\fR
|
||||
.IP
|
||||
Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR)
|
||||
.HP
|
||||
\fB\-logips\fR
|
||||
.IP
|
||||
Include IP addresses in debug output (default: 0)
|
||||
.HP
|
||||
\fB\-logtimestamps\fR
|
||||
.IP
|
||||
Prepend debug output with timestamp (default: 1)
|
||||
.HP
|
||||
\fB\-minrelaytxfee=\fR<amt>
|
||||
.IP
|
||||
Fees (in BTC/Kb) smaller than this are considered zero fee for relaying
|
||||
(default: 0.00005)
|
||||
.HP
|
||||
\fB\-printtoconsole\fR
|
||||
.IP
|
||||
Send trace/debug info to console instead of debug.log file
|
||||
.HP
|
||||
\fB\-shrinkdebugfile\fR
|
||||
.IP
|
||||
Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
|
||||
.HP
|
||||
\fB\-testnet\fR
|
||||
.IP
|
||||
Use the test network
|
||||
.PP
|
||||
Node relay options:
|
||||
.HP
|
||||
\fB\-datacarrier\fR
|
||||
.IP
|
||||
Relay and mine data carrier transactions (default: 1)
|
||||
.HP
|
||||
\fB\-datacarriersize\fR
|
||||
.IP
|
||||
Maximum size of data in data carrier transactions we relay and mine
|
||||
(default: 80)
|
||||
.PP
|
||||
Block creation options:
|
||||
.HP
|
||||
\fB\-blockminsize=\fR<n>
|
||||
.IP
|
||||
Set minimum block size in bytes (default: 0)
|
||||
.HP
|
||||
\fB\-blockmaxsize=\fR<n>
|
||||
.IP
|
||||
Set maximum block size in bytes (default: 750000)
|
||||
.HP
|
||||
\fB\-blockprioritysize=\fR<n>
|
||||
.IP
|
||||
Set maximum size of high\-priority/low\-fee transactions in bytes
|
||||
(default: 50000)
|
||||
.PP
|
||||
RPC server options:
|
||||
.HP
|
||||
\fB\-server\fR
|
||||
.IP
|
||||
Accept command line and JSON\-RPC commands
|
||||
.HP
|
||||
\fB\-rest\fR
|
||||
.IP
|
||||
Accept public REST requests (default: 0)
|
||||
.HP
|
||||
\fB\-rpcbind=\fR<addr>
|
||||
.IP
|
||||
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)
|
||||
.HP
|
||||
\fB\-rpcuser=\fR<user>
|
||||
.IP
|
||||
Username for JSON\-RPC connections
|
||||
.HP
|
||||
\fB\-rpcpassword=\fR<pw>
|
||||
.IP
|
||||
Password for JSON\-RPC connections
|
||||
.HP
|
||||
\fB\-rpcport=\fR<port>
|
||||
.IP
|
||||
Listen for JSON\-RPC connections on <port> (default: 8232 or testnet:
|
||||
18232)
|
||||
.HP
|
||||
\fB\-rpcallowip=\fR<ip>
|
||||
.IP
|
||||
Allow JSON\-RPC connections from specified source. Valid for <ip> are a
|
||||
single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0)
|
||||
or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified
|
||||
multiple times
|
||||
.HP
|
||||
\fB\-rpcthreads=\fR<n>
|
||||
.IP
|
||||
Set the number of threads to service RPC calls (default: 4)
|
||||
.HP
|
||||
\fB\-rpckeepalive\fR
|
||||
.IP
|
||||
RPC support for HTTP persistent connections (default: 1)
|
||||
.PP
|
||||
RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)
|
||||
.HP
|
||||
\fB\-rpcssl\fR
|
||||
.IP
|
||||
Use OpenSSL (https) for JSON\-RPC connections
|
||||
.HP
|
||||
\fB\-rpcsslcertificatechainfile=\fR<file.cert>
|
||||
.IP
|
||||
Server certificate file (default: server.cert)
|
||||
.HP
|
||||
\fB\-rpcsslprivatekeyfile=\fR<file.pem>
|
||||
.IP
|
||||
Server private key (default: server.pem)
|
||||
.HP
|
||||
\fB\-rpcsslciphers=\fR<ciphers>
|
||||
.IP
|
||||
Acceptable ciphers (default:
|
||||
TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH)
|
||||
.SH COPYRIGHT
|
||||
Copyright \(co 2009\-2016 The Bitcoin Core Developers
|
||||
.br
|
||||
Copyright \(co 2015\-2016 The Zcash Developers
|
||||
.PP
|
||||
This is experimental software.
|
||||
.PP
|
||||
Distributed under the MIT software license, see the accompanying file COPYING
|
||||
or <http://www.opensource.org/licenses/mit\-license.php>.
|
||||
.PP
|
||||
This product includes software developed by the OpenSSL Project for use in the
|
||||
OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written
|
||||
by Eric Young and UPnP software written by Thomas Bernard.
|
||||
.SH "SEE ALSO"
|
||||
The full documentation for
|
||||
.B Zcash
|
||||
is maintained as a Texinfo manual. If the
|
||||
.B info
|
||||
and
|
||||
.B Zcash
|
||||
programs are properly installed at your site, the command
|
||||
.IP
|
||||
.B info Zcash
|
||||
.PP
|
||||
should give you access to the complete manual.
|
||||
@@ -2,8 +2,9 @@
|
||||
# postinst script for zcash
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postinst> `configure' <most-recently-configured-version>
|
||||
# * <old-postinst> `abort-upgrade' <new version>
|
||||
@@ -13,9 +14,10 @@ set -x
|
||||
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
|
||||
# <failed-install-package> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# for details, see https://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
|
||||
case "$1" in
|
||||
configure)
|
||||
;;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
#set -x
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postrm> `remove'
|
||||
# * <postrm> `purge'
|
||||
@@ -15,18 +15,12 @@ set -e
|
||||
# * <new-postrm> `abort-upgrade' <old-version>
|
||||
# * <disappearer's-postrm> `disappear' <overwriter>
|
||||
# <overwriter-version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# for details, see https://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
. /usr/share/debconf/confmodule
|
||||
|
||||
|
||||
case "$1" in
|
||||
upgrade|failed-upgrade)
|
||||
;;
|
||||
|
||||
remove|abort-install|abort-upgrade|disappear)
|
||||
;;
|
||||
|
||||
purge)
|
||||
purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
|
||||
;;
|
||||
|
||||
*)
|
||||
|
||||
@@ -4,20 +4,18 @@
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
#set -x
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <new-preinst> `install'
|
||||
# * <new-preinst> `install' <old-version>
|
||||
# * <new-preinst> `upgrade' <old-version>
|
||||
# * <old-preinst> `abort-upgrade' <new-version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# for details, see https://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
case "$1" in
|
||||
install)
|
||||
;;
|
||||
|
||||
upgrade)
|
||||
case "$1" in
|
||||
install|upgrade)
|
||||
;;
|
||||
|
||||
abort-upgrade)
|
||||
|
||||
@@ -13,15 +13,12 @@ set -e
|
||||
# * <deconfigured's-prerm> `deconfigure' `in-favour'
|
||||
# <package-being-installed> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# for details, see https://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
|
||||
case "$1" in
|
||||
remove|deconfigure)
|
||||
;;
|
||||
|
||||
upgrade)
|
||||
remove|upgrade|deconfigure)
|
||||
;;
|
||||
|
||||
failed-upgrade)
|
||||
|
||||
25
contrib/DEBIAN/rules
Executable file
25
contrib/DEBIAN/rules
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/make -f
|
||||
# See debhelper(7) (uncomment to enable)
|
||||
# output every command that modifies files on the build system.
|
||||
#export DH_VERBOSE = 1
|
||||
|
||||
|
||||
# see FEATURE AREAS in dpkg-buildflags(1)
|
||||
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||
|
||||
# see ENVIRONMENT in dpkg-buildflags(1)
|
||||
# package maintainers to append CFLAGS
|
||||
#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
|
||||
# package maintainers to append LDFLAGS
|
||||
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
|
||||
|
||||
|
||||
%:
|
||||
dh $@ --with autotools_dev
|
||||
|
||||
|
||||
# dh_make generated override targets
|
||||
# This is example for Cmake (See https://bugs.debian.org/641051 )
|
||||
#override_dh_auto_configure:
|
||||
# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
|
||||
|
||||
1
contrib/DEBIAN/zcash.examples
Normal file
1
contrib/DEBIAN/zcash.examples
Normal file
@@ -0,0 +1 @@
|
||||
DEBIAN/examples/zcash.conf
|
||||
2
contrib/DEBIAN/zcash.manpages
Normal file
2
contrib/DEBIAN/zcash.manpages
Normal file
@@ -0,0 +1,2 @@
|
||||
DEBIAN/manpages/zcash-cli.1
|
||||
DEBIAN/manpages/zcashd.1
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: "zcash-1.0.0-rc1"
|
||||
name: "zcash-1.0.0"
|
||||
enable_cache: true
|
||||
distro: "debian"
|
||||
suites:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,52 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.12 (GNU/Linux)
|
||||
|
||||
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
|
||||
MrD0ofsytfy1LQ==
|
||||
=DE4h
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
70
contrib/gitian-downloader/daira.asc
Normal file
70
contrib/gitian-downloader/daira.asc
Normal file
@@ -0,0 +1,70 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: SKS 1.1.5
|
||||
Comment: Hostname: pgp.mit.edu
|
||||
|
||||
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
|
||||
eCJPlVdlz6Oj1tV2kw==
|
||||
=E8LJ
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
Binary file not shown.
@@ -1,63 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG/MacGPG2 v2.0.26
|
||||
|
||||
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
|
||||
XwbdK0Zpx/oDtRHpuDMGKJBV2LWAZYkEbFsmtg==
|
||||
=3o2I
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
Binary file not shown.
449
contrib/gitian-downloader/jack.asc
Normal file
449
contrib/gitian-downloader/jack.asc
Normal file
@@ -0,0 +1,449 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
HifqTn/z+qdV2A==
|
||||
=phy7
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
Binary file not shown.
171
contrib/gitian-downloader/kevin.asc
Normal file
171
contrib/gitian-downloader/kevin.asc
Normal file
@@ -0,0 +1,171 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=qSqw
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,28 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: SKS 1.1.0
|
||||
|
||||
mQENBE5UtMEBCADOUz2i9l/D8xYINCmfUDnxi+DXvX5LmZ39ZdvsoE+ugO0SRRGdIHEFO2is
|
||||
0xezX50wXu9aneb+tEqM0BuiLo6VxaXpxrkxHpr6c4jf37SkE/H0qsi/txEUp7337y3+4HMG
|
||||
lUjiuh802I72p1qusjsKBnmnnR0rwNouTcoDmGUDh7jpKCtzFv+2TR2dRthJn7vmmjq3+bG6
|
||||
PYfqoFY1yHrAGT1lrDBULZsQ/NBLI2+J4oo2LYv3GCq8GNnzrovqvTvui50VSROhLrOe58o2
|
||||
shE+sjQShAy5wYkPt1R1fQnpfx+5vf+TPnkxVwRb3h5GhCp0YL8XC/BXsd5vM4KlVH2rABEB
|
||||
AAG0K1dsYWRpbWlyIEouIHZhbiBkZXIgTGFhbiA8bGFhbndqQGdtYWlsLmNvbT6JATgEEwEC
|
||||
ACIFAk5UtMECGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHSBCwEjRsmmy6YIAK09
|
||||
buNXyYQrJBsX16sXxEhx5QPKyF3uHJDFJv66SdnpvIkNoznsaPiRJkbTANop93FZmaGa6wVn
|
||||
zGDiz7jPA8Dpxx5aAYPhIT+zPJAdXWM3wJ/Gio9besRNzniai8Lwi5MZ9R/5yFGBobm6/AcN
|
||||
4sUoqA3NSV2U3I29R0Vwlzo8GVtmyi9ENSi6Oo7AcXNTRt69cxW4nAHkB+amwwDJlcAb31ex
|
||||
bogYXPhScwqQZixRr+JBkKxBjkTXXnQypT4KI5SegYwQVYfyiZmDP7UHKe/u6pSKKbVphLg8
|
||||
xLB5spcXse8/a2+onrbNlw6y8TXiJ++Z54PE7zztWTXf2huakeG5AQ0ETlS0wQEIAMNO3OkP
|
||||
xoPRKWzBLcI7JRITAW+HNaLTq3uN2+4WxA57DEjbL9EDoAv+7wTkDAL40f0T+xiu6GJcLFjw
|
||||
GJZu/tYu7+mErHjrdo+K4suCQt7w5EXCBvOLjhW4tyYMzNx8hP+oqzOW9iEC+6VV91+DYeqt
|
||||
EkJuyVXOI4vzBlTw8uGow8aMMsCq8XVvKUZFTPsjGl197Q5B3A+ZOFCR8xqiqdPjuz6MglVV
|
||||
oFdDNu3EZn8zkGsQlovXoE9ndVeVzx/XMNmsxFaMYsReUs253RIf1FEfgExID0fg2OnyLCjS
|
||||
2iFW1RgajS+/saIkKl+N1iuMzJA7wMAM0plhRueOG0MtZSsAEQEAAYkBHwQYAQIACQUCTlS0
|
||||
wQIbDAAKCRB0gQsBI0bJpmsDB/4waenn2CvSHXyomykfpwf5lMte1V5LvH3z5R2LY+1NopRv
|
||||
LSz3iC39x69XWiTbhywDfgafnGPW4pWBOff2/bu5/A6z1Hnan1vyrRRD/hx1uMJ7S6q+bIvZ
|
||||
iVIg1p0jH6tdIIhwX3cydhdRZHo7e9oSMgOUWsr6Ar59NRo9CENwGPE4U61HXfOnxWdrFWoA
|
||||
XdwZczBeLxmUy6Vo6sKqv+gE4bqrtAM0sY/MsQ9cU95x+52ox/sq44lQMwd3ZBYUP7B1qbHI
|
||||
hZSZuch6MLi5scLPeau0ZvCaljiaMeivP5+x0gWPRs0kI+9sZxInbqvrsJ6oOBJM3xYGhtn1
|
||||
zZ7qmZR7
|
||||
=si/k
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
name: bitcoin
|
||||
urls:
|
||||
- http://bitcoin.org/bitcoin-latest-linux-gitian.zip
|
||||
rss:
|
||||
- url:
|
||||
xpath: //item/link/text()
|
||||
pattern: bitcoin-\d+.\d+.\d+-linux-gitian.zip
|
||||
signers:
|
||||
0A82509767C7D4A5D14DA2301AE1D35043E08E54:
|
||||
name: BlueMatt
|
||||
key: bluematt
|
||||
BF6273FAEF7CC0BA1F562E50989F6B3048A116B5:
|
||||
name: Devrandom
|
||||
key: devrandom
|
||||
E463A93F5F3117EEDE6C7316BD02942421F4889F:
|
||||
name: Luke-Jr
|
||||
key: luke-jr
|
||||
D762373D24904A3E42F33B08B9A408E71DAAC974:
|
||||
name: "Pieter Wuille"
|
||||
key: sipa
|
||||
77E72E69DA7EE0A148C06B21B34821D4944DE5F7:
|
||||
name: tcatm
|
||||
key: tcatm
|
||||
01CDF4627A3B88AAE4A571C87588242FBE38D3A8:
|
||||
name: "Gavin Andresen"
|
||||
key: gavinandresen
|
||||
71A3B16735405025D447E8F274810B012346C9A6:
|
||||
name: "Wladimir J. van der Laan"
|
||||
key: laanwj
|
||||
AEC1884398647C47413C1C3FB1179EB7347DC10D:
|
||||
name: "Warren Togami"
|
||||
key: wtogami
|
||||
9692B91BBF0E8D34DFD33B1882C5C009628ECF0C:
|
||||
name: michagogo
|
||||
key: michagogo
|
||||
E944AE667CF960B1004BC32FCA662BE18B877A60:
|
||||
name: "Andreas Schildbach"
|
||||
key: aschildbach
|
||||
C060A6635913D98A3587D7DB1C2491FFEB0EF770:
|
||||
name: "Cory Fields"
|
||||
key: "cfields"
|
||||
Binary file not shown.
@@ -1,59 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.12 (GNU/Linux)
|
||||
|
||||
mQENBFGeqJ4BCADb7SI3/+q93gIvN0AGRg9Mtz73OLIOzCHeeoyn+tp7JcYNzxkQ
|
||||
9lfeXiEfn72Sh8gHkLtLIqr7HlIMo8DxSS8JPRVjlJGkNyAW4SeEwN2wNa5OV8k0
|
||||
N4jBa9a1csFyCyrEkPKvkUpBkQDvNXjNxyEhHwyZqPanKxy6NXIHOJji8ObOMQXI
|
||||
T9HwJrpjRth3u4uKG968JBTEyAXAmkt0Zidl1Ykgzcedk4mJSE9uZCW8DjSv2wML
|
||||
XcQz8+dYsoskT3KRdkowLHxAfj1BNyNc1+rKLghliM5vSQWi+Lbhi1Bxh4sY1UwA
|
||||
lKnAGqrnAGyIvCtkwTq5QI6ufF2ZY44bvVgpABEBAAG0IU1pY2hhZ29nbyA8bWlj
|
||||
aGFnb2dvQHNlcnZlci5mYWtlPokBOAQTAQIAIgUCUZ6ongIbAwYLCQgHAwIGFQgC
|
||||
CQoLBBYCAwECHgECF4AACgkQgsXACWKOzwzMUAgAuqUmK10xE5C3lUym2f72z0t6
|
||||
a2NM5Wfjr9//Y1/okC36C5XAMEtN2UwckPzzJ5p5D5y5yzwfZq5Jd8Py29VQIMsV
|
||||
7FbC1a0H3D+bCyX+JJ6FAmUbnWOQ/+mydYc74RvD8iwjePNT6kziZNv6dMGctJTl
|
||||
0alwjtQYgyGkeYKnIxbcyjHX/IawLUrunb/6mSKun87T8+NM/omfFCTc3l8TakpM
|
||||
0wyNYRiUkIfUBvB8sDUU3A80qKN/hqRKvlFu3+/kMiAc9ZYQrbmsB+sYWdmM+4zw
|
||||
8NBw3yuYzWyPuoa4PR5ZmS9F11WLMR5vTRCdLudAqYsWu3LtV6vAIvlOUa2LMLRg
|
||||
TWljaGFnb2dvIChSZWdpc3RlcmVkIG5pY2sgbWljaGFnb2dvIG9uIGZyZWVub2Rl
|
||||
IGFzIG9mIE9jdG9iZXIgMTIsIDIwMTMpIDxtaWNoYWdvZ29Ac2VydmVyLmZha2U+
|
||||
iQE4BBMBAgAiBQJSWarzAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCC
|
||||
xcAJYo7PDA7nB/91wAiaMlU5nHLUu0anhNQbGvUdFgKK1zO90S5KzUdJcY438jcS
|
||||
UJW1az8l9U9JBRIfPRYVhz/Z1TAJ+dCzD7D8BXHFeGEr0zNOh87ly9aB5du7dpN2
|
||||
oSBD6wLcJpqxt4h+XjSS2CX98/2ZIJxXENE2KySaTXP39Xl3eNwvJTUBA4XlcMey
|
||||
J8KMp/IERli4H0O7vRyLgu3yYpUArTqAonzG1g2lfB35PQJfeInrRSniQ336otnZ
|
||||
A8qwJ63kfUtWVDRz0g1fnvtiLGPivDJaI5hyIaUeJPaXU1+sg7YNroDu60o2NGZh
|
||||
F+0IjHlvRfzzA+F9Vw38rpSqR3BmCdjf6Sv3iQEcBBABAgAGBQJSWa9/AAoJEH+r
|
||||
EUJn5PoE/hgH/1T2dAthVucA/hzY0nl4SMjbg+dzNlYBq00Qwx8DRKVjk5et8+kY
|
||||
oPI3DGILcr+ELnxNekeMv9WQBBtJanUh1K5ohZ6ohoR7lG18LXf5HCdspflB5Me6
|
||||
LMA6iMryEP6gIs9GFuoGe2YQavm58YrkqhcPu34dGN7kdurfEXLvDfVlh5ZbKCsP
|
||||
Gyd7Pbz04SpqykgK1udiTsLVjc70Xhv+jAMqeaCugDX6TLEwjVmZH/xsyKk2Uh3V
|
||||
Oib5FXADAtKH+vSqqhFpXrw7R/NaBzvCbas8l61DFHiUg1/bo8vsV8MtGcyZmzXJ
|
||||
C5Gm0njtGOil/g7JF9siUrpxs9Yyt/h+T2W0W01pY2hhZ29nbyAoVXNlciBhY2Nv
|
||||
dW50IG1pY2hhZ29nbyBvbiBHaXRodWIgYXMgb2YgT2N0b2JlciAxMiwgMjAxMykg
|
||||
PG1pY2hhZ29nb0BzZXJ2ZXIuZmFrZT6JATcEEwECACIFAlJZqxkCGwMGCwkIBwMC
|
||||
BhUIAgkKCwQWAgMBAh4BAheAAAoJEILFwAlijs8M+1AH+IU78ARblqTnJeSl0iWH
|
||||
mEsg4IBK30Q6/exDAcqOEm1Yc171uw2WnGmIvPYOQqxrRTvj3LoQ816dU6jrj6vY
|
||||
s+XX0R2hxy7ILh17D/3UKnHcddu7rmc7pNEqZeBXaMughqQaPOWkAIe52+qK5tsl
|
||||
sWllzTYE4jo29uZ3dAtDcKEJjBo/pIXnu1GOslE1+V4X1H9WDlwrS/JXHzyDQAjt
|
||||
maPR+3gNesDanhrRmrnT3ZXW2ZVd3vGBibhia8PWUhU1uwOH23ySWXncgsHH0Zad
|
||||
UMjd4w3YliZP/mLn2ghAxHB70IO7lgAgN3HYZeFoufP3pcK440A+CezfQiRcjHl/
|
||||
oIkBHAQQAQIABgUCUlmvfwAKCRB/qxFCZ+T6BOq9CACItsrUZPKGeWSTkMHknMrV
|
||||
K5vxIXJVCBb+Tppc0Q/J5p4EkW/RFhTwIP2zw8NLDKMh5oO9md4LXhvfIZkqQJFo
|
||||
6ZtLa3Vf+Kj7uyxezBo4QHA+G7tDsRGaMKVrEMiyLCwS1+hg9VaNzsf7zmQW7mYE
|
||||
vTLMHp3cVaSU7Mh2Dl8rnAaM/DpTUZQwZ+32Qrb/Z4HSa4f278iqoFpjEbBE2KCr
|
||||
vT5yEVvpCZ4lwSgA2a+uTlRTvVV6NA/kpsxU64tmhuEOjy+ToDqJ8wv4mqvWZxMv
|
||||
C6OhfVaXBy3U9gG8aQV0ffXGs+TbCtv8ApHd6E1/AVk0oyZGJaBVrEl688bBIWd/
|
||||
uQENBFGeqJ4BCADFmgR7oEGkFFB5qXnuNYFq1nUGDAh0dLNtAD3J6EMxUZEXdmp+
|
||||
DQHJw6/eDRQaG9EbjNZheycbVUoI8K2Y/Z268HQueGuIEIJv6cZYXoXdWCbDD4fn
|
||||
HMNUX2wNlpDqWxb7PNUEtfU9hI3gmHGlr5OiEh3iV06uiZg4n2rbWPbj45m5LJzv
|
||||
wpCrUA+pLcl9Xjw2cajaSTjdXHk9gvXTCo6s2ZS3/3Q4l+xuzZp1MGNzPQHASMKs
|
||||
wecSJKkYg6W8I5WsVlPd9a8oQCc/Nfz7BPw31MRVR/SF5FAMqaXx5uLwghVdHB2i
|
||||
cLURsOtJlCfP8W06gB7yS+MH45Jq/oxBRiJBABEBAAGJAR8EGAECAAkFAlGeqJ4C
|
||||
GwwACgkQgsXACWKOzwwT4wgAy6ICcnBZ9l2jSu+ldy57F6jf5kpKZgB9NV8V2mMA
|
||||
NeY1wMQ4VTVpU4t3s4E2LYtGNJNkPQVHbt1Pf4dGPasvMPaHMamgwgyqgYixqs0x
|
||||
D5PdKzVrfnjwTTr/ZAFdccSPmvy5/hbY0geQ/+mzdbL07+xaT58JIoG5nySDKhmC
|
||||
VeOvhDZtXMVAhEWBDPEgh/H9sEuBgMgZrzfE1j3q802qiXeQs6WtadWlQ1RN9Iq1
|
||||
ZzIi6u9/BifEIRI0pO/WwKOZdXLTemFUoakoe7uT3A74N96t0G9LZVihYbEoO+Pc
|
||||
5IaHPBV5VLeR3TB1LnnjHVf/Fwi8cnGy50kNWjcbMyEDag==
|
||||
=jyQ4
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
52
contrib/gitian-downloader/nathan.asc
Normal file
52
contrib/gitian-downloader/nathan.asc
Normal file
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1
|
||||
|
||||
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
|
||||
JfmuGLm2Czs=
|
||||
=kUB4
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
51
contrib/gitian-downloader/sean.asc
Normal file
51
contrib/gitian-downloader/sean.asc
Normal file
@@ -0,0 +1,51 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v2
|
||||
|
||||
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
|
||||
=0DUx
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
47
contrib/gitian-downloader/simon.asc
Normal file
47
contrib/gitian-downloader/simon.asc
Normal file
@@ -0,0 +1,47 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: SKS 1.1.5
|
||||
Comment: Hostname: pgp.mit.edu
|
||||
|
||||
mQINBFeNa5kBEADXOwQSFGy5mSfm5enqT480t8z/RjcUnURbZsf1iXMZ9UlQh5zByXZaXEg7
|
||||
iHrBqpFx/GmETQRXTOBl8UGrr/ex0WvzMu4Jpc03BedwCH4hoSBWvFvMH4jsU0LTJLwAqpDa
|
||||
KVnUD5TpOFjEGv0MkUideoiA7iSYqa4KIl1gu8bP64hA7qo/wEbBZ4VPgizO3oKUvampjQLR
|
||||
MEBDfiKvocJJ44KLeaxVzFWty1lzHtCPAxqt4M5/hJ+Gk32ZJaZZRBVppPb+Moe246QGEXNF
|
||||
1p5X8sTts3+TLZ63AM7VXbOoRCSpLxbhXdCvit75FZdpizIMhQLvgiKqsRrB0e6G1Oysahdd
|
||||
P3YVj/P1mtcqlvAkExc+1nmKv6MAHhc19Uwn84l51hGwdXdXOALnAYKbNIS5E94QRCUbmhKO
|
||||
mNypQiIPIN/HSVEi4et18bLgCUY8ALXwS5HJeNLqe8pJe22/ht8T+oPtymNSHvMs8UzF7PqL
|
||||
fKjSEv3ISbBL6I6t7PTXmYh6P3qJRNEstK4GZwsiiOuF0fu+k31JYjLmHgPhC2+aJ+wUwaTa
|
||||
CpkPXxJKXVX5JyPlwpDYE0zqIn5ulJ6SQoXqooQeGHk2zTfk1AwRTSCB6wZDMX0FnbU0w6A1
|
||||
V8tq/VI58+k2hi+hQntcSkXp6tagMoOl9OAz3S4DfIxB0Ho4PwARAQABtBRTaW1vbiA8c2lt
|
||||
b25Aei5jYXNoPokCOAQTAQIAIgUCV41rmQIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AA
|
||||
CgkQyPScCB86xsQCSw/+LIyjbAq7Ua+AJtSTiGvae97QCe6vrpg5hGA1nX1HLjC2gUrydHH7
|
||||
PR/aWcwHnxq6OJzIA5UtoYMmDLU/9u/JRgv5Cr2j71sjWTnqWfO4k03w240mRS4ukcAQJyoU
|
||||
ef5x74Fj1GFbAK1lUPWRp84ZzVJfV7mK7J6Sx9fYV+vwr4IBakDL8KY2c6UbIx36u9JxyjwN
|
||||
vHIROmPj98ErKou3XctK/T4b2bD+G0sCeUjtafo2hmIihkIzfLuch7V/G7drn4t5vyRihF2a
|
||||
RskrUIySfY0vUucp1gpVQc3mmqHQK8XDpsR/s/swm4zBwuU/q36ikO22yGMP+V+YmjSH2RuI
|
||||
TFEdrmSIrwYgmu47eh9aHouM/eG8YYOow+HD69XWtf7RleM302ssRC7nts6Gj1mTnnyYj5cQ
|
||||
TXiX/CUdBTuBFco35PQLKzYd72FcBxZ9acJlpMjtp6Lr+VaffJ5wt/cWyowCNSWeHqJGiVPU
|
||||
LSuBt2Gj7wJfT/EWN3NSAK2JMPYUEYuzLF+dcfBWQaDLsR/KBpSJI0VuS8MqnwLy39BeBGQD
|
||||
dz+9YU+0iPfvSiJ5vFFnO7SfMLnc+Sbja5MsvxN+O+pFf5Du3hPIfjiwd76jFTUho7uWDOnK
|
||||
Tl7m1DlzNFBQhgt05E/xtk5/OqpLhT/RRvpoG04Lc1uX84yqKn1lrt+5Ag0EV41rmQEQANri
|
||||
TekWLBV/ZFThl9Xvbqs+KBC1uAHH1U6b/mpQPF2d0/+JRvmP+oohQm0cEOj3/Ldj5Ap2RJc9
|
||||
0jiixOKqg5HDAWIe8iq5b08RGMqryyGHfo8/+GyN7iDhW3RVht+G4XSk1eM1vXyWw1x/DEd0
|
||||
1tWE2/udwTbUoX9A25zx7l+vJQ7x9oYjTXZ/ZZE31knR9iVYWzsMfFH4QgsTyWPPZbWsBj+0
|
||||
HbR7hdQLG1IQw9EH3j+NHJ4rxlO9UslnhNeEkQvJ7WLafhFCFtRgKJmgN5EUiunNC8/coiLZ
|
||||
54uKj+PVo0pn+cQ2GaRFxj+NlA4CprNnRtg8dI3iZjM3Tcl78FWtse9hyQdQ3EScclkRZMdZ
|
||||
4CmlNBT9KDQi7kFEHfxVriR63mXrzvom4+UKQOxQyyrXKNr8eqlcmKFhaeh+H++BU3GxtVfV
|
||||
tScLrfaZQjA8CL/lC+w/UxgSKMRbLRnvecQdp1asOFw46gLjuCvJWUW0uNmc3P4F4bUlI+xS
|
||||
BBa6P2KL8syRhodhy/+aL0OgPVEq+JC1RtX3e1gYldn/3MYIfWyW5jSbTO61VVy2cBXuaVz6
|
||||
sCdC8swZEf2x2kBVmODN43zldmgdfPU1P11OL0Ul/k0V7fvGEiRlhuBHzHLHed3Wilqz0tEE
|
||||
tY6JIg/wF1Kp3xv9WOTJAXVsXdbFj7/ZABEBAAGJAh8EGAECAAkFAleNa5kCGwwACgkQyPSc
|
||||
CB86xsRd2w/+PDe1ZzGchaPATRdr87clKsfVjDajI2WSCw9LaM89J+7l0crpIjk0dm8//jaB
|
||||
49P5teBaqkjEVbdzOfzvv/YOb6wZURHxIeiXztxKV9CfPReQdHsagRcf5yFHeJfxMRRnB4TH
|
||||
/Uvdf6hS1n/GaJmwkpYwCEYE5qG+Mwfmq6DkQUYZSITRovSTSjfSfK96CmE8CgZBM0ZmS/dP
|
||||
vYCkjDzGaU3IsFUFbf51hYMwMvbaia22Qu5nQ+o7edCZVuzgAqO5UchzNVTP8RUyIbJZQOce
|
||||
9VSVXZnSTzQi5fQIQDCN+5K2PkQGfB9EiRys784td3JljHHj3SgVngHRtSxAexJRhCKogIHJ
|
||||
XW0h/e4TPMHhqRtFAN7k2CT/47S6n1875r36CQgZlIv1O9F3I+1FEbbLuVl5yK/lJa6st+BY
|
||||
QhqV5iFc/HWRDg+ETITPQ3tZptsvEJTu4ypeahLpUJ2xW+h/j4QY+jnAQOTrann2dgFkXR/h
|
||||
jZRbelUSl2ptj9Wxi9gWJ8Paolfc/DbZV2eP/wgS4bvegdZAIyQKe88pp+1CODkBAmlRN6e2
|
||||
HxPg1fOuXje0kDONqAKMweLXZL/FhtDcsXZ0dfeUobPuxZzxl+89dt3wGYToRGqQQhtdEbrY
|
||||
sByqeURg4gzgcw7WjJGKgzqdksOWjJybrGnTvdld/75oYxY=
|
||||
=nZf9
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,42 +0,0 @@
|
||||
---
|
||||
name: bitcoin
|
||||
urls:
|
||||
- http://bitcoin.org/bitcoin-latest-win32-gitian.zip
|
||||
rss:
|
||||
- url:
|
||||
xpath: //item/link/text()
|
||||
pattern: bitcoin-\d+.\d+.\d+-win32-gitian.zip
|
||||
signers:
|
||||
0A82509767C7D4A5D14DA2301AE1D35043E08E54:
|
||||
name: BlueMatt
|
||||
key: bluematt
|
||||
BF6273FAEF7CC0BA1F562E50989F6B3048A116B5:
|
||||
name: Devrandom
|
||||
key: devrandom
|
||||
E463A93F5F3117EEDE6C7316BD02942421F4889F:
|
||||
name: Luke-Jr
|
||||
key: luke-jr
|
||||
D762373D24904A3E42F33B08B9A408E71DAAC974:
|
||||
name: "Pieter Wuille"
|
||||
key: sipa
|
||||
77E72E69DA7EE0A148C06B21B34821D4944DE5F7:
|
||||
name: tcatm
|
||||
key: tcatm
|
||||
01CDF4627A3B88AAE4A571C87588242FBE38D3A8:
|
||||
name: "Gavin Andresen"
|
||||
key: gavinandresen
|
||||
71A3B16735405025D447E8F274810B012346C9A6:
|
||||
name: "Wladimir J. van der Laan"
|
||||
key: laanwj
|
||||
AEC1884398647C47413C1C3FB1179EB7347DC10D:
|
||||
name: "Warren Togami"
|
||||
key: wtogami
|
||||
9692B91BBF0E8D34DFD33B1882C5C009628ECF0C:
|
||||
name: michagogo
|
||||
key: michagogo
|
||||
E944AE667CF960B1004BC32FCA662BE18B877A60:
|
||||
name: "Andreas Schildbach"
|
||||
key: aschildbach
|
||||
C060A6635913D98A3587D7DB1C2491FFEB0EF770:
|
||||
name: "Cory Fields"
|
||||
key: "cfields"
|
||||
@@ -1,131 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.13 (GNU/Linux)
|
||||
|
||||
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
|
||||
=icdI
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
@@ -8,7 +8,7 @@ NO_WALLET ?=
|
||||
NO_UPNP ?=
|
||||
FALLBACK_DOWNLOAD_PATH ?= https://z.cash/depends-sources
|
||||
|
||||
BUILD = $(shell ./config.guess)
|
||||
BUILD ?= $(shell ./config.guess)
|
||||
HOST ?= $(BUILD)
|
||||
PATCHES_PATH = $(BASEDIR)/patches
|
||||
BASEDIR = $(CURDIR)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package=bdb
|
||||
$(package)_version=5.3.28
|
||||
$(package)_version=6.2.23
|
||||
$(package)_download_path=http://download.oracle.com/berkeley-db
|
||||
$(package)_file_name=db-$($(package)_version).tar.gz
|
||||
$(package)_sha256_hash=e0a992d740709892e81f9d93f06daf305cf73fb81b545afe72478043172c3628
|
||||
$(package)_sha256_hash=47612c8991aa9ac2f6be721267c8d3cdccf5ac83105df8e50809daea24e95dc7
|
||||
$(package)_build_subdir=build_unix
|
||||
|
||||
define $(package)_set_vars
|
||||
@@ -16,7 +16,7 @@ define $(package)_config_cmds
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE) libdb_cxx-5.3.a libdb-5.3.a
|
||||
$(MAKE) libdb_cxx-6.2.a libdb-6.2.a
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
|
||||
@@ -3,7 +3,7 @@ $(package)_version=1_62_0
|
||||
$(package)_download_path=http://sourceforge.net/projects/boost/files/boost/1.62.0
|
||||
$(package)_file_name=$(package)_$($(package)_version).tar.bz2
|
||||
$(package)_sha256_hash=36c96b0f6155c98404091d8ceb48319a28279ca0333fba1ad8611eb90afb2ca0
|
||||
$(package)_patches=deprecated_auto_ptr.patch
|
||||
$(package)_patches=deprecated_auto_ptr.patch include_poll.patch
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts_release=variant=release
|
||||
@@ -27,7 +27,8 @@ endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
echo "using $(boost_toolset_$(host_os)) : : $($(package)_cxx) : <cxxflags>\"$($(package)_cxxflags) $($(package)_cppflags)\" <linkflags>\"$($(package)_ldflags)\" <archiver>\"$(boost_archiver_$(host_os))\" <striper>\"$(host_STRIP)\" <ranlib>\"$(host_RANLIB)\" <rc>\"$(host_WINDRES)\" : ;" > user-config.jam && \
|
||||
patch -p1 < $($(package)_patch_dir)/deprecated_auto_ptr.patch
|
||||
patch -p1 < $($(package)_patch_dir)/deprecated_auto_ptr.patch && \
|
||||
patch -p1 < $($(package)_patch_dir)/include_poll.patch
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
|
||||
@@ -7,7 +7,7 @@ $(package)_dependencies=
|
||||
$(package)_config_opts=--enable-cxx --disable-shared
|
||||
|
||||
define $(package)_config_cmds
|
||||
$($(package)_autoconf)
|
||||
$($(package)_autoconf) --host=$(host) --build=$(build)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
|
||||
@@ -9,7 +9,7 @@ $(package)_git_commit=2e6314a9f7efcd9af1c77669d7d9a229df86a777
|
||||
$(package)_dependencies=libgmp libsodium
|
||||
|
||||
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
|
||||
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"
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
|
||||
11
depends/patches/boost/include_poll.patch
Normal file
11
depends/patches/boost/include_poll.patch
Normal file
@@ -0,0 +1,11 @@
|
||||
--- boost_1_62_0-orig/boost/asio/detail/socket_types.hpp 2016-09-21 15:33:21.000000000 +0100
|
||||
+++ boost_1_62_0/boost/asio/detail/socket_types.hpp 2016-10-18 03:08:41.712254217 +0100
|
||||
@@ -58,7 +58,7 @@
|
||||
#else
|
||||
# include <sys/ioctl.h>
|
||||
# if !defined(__SYMBIAN32__)
|
||||
-# include <sys/poll.h>
|
||||
+# include <poll.h>
|
||||
# endif
|
||||
# include <sys/types.h>
|
||||
# include <sys/stat.h>
|
||||
@@ -1,20 +0,0 @@
|
||||
Zcash Core 1.0.0-beta2
|
||||
====================
|
||||
|
||||
[Zcash](https://z.cash/) 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 blockchain has reached a significant size.
|
||||
|
||||
### Need Help?
|
||||
|
||||
* See the documentation at the [Zcash Wiki](https://github.com/zcash/zcash/wiki) for help and more information. NOTE: Other documentation in this directory may be out of date and inaccurate.
|
||||
* Ask for help on the [Zcash](https://forum.z.cash/) forums.
|
||||
|
||||
Building
|
||||
--------
|
||||
|
||||
Build Zcash along with most dependencies from source by running ./zcutil/build.sh. Currently only Linux is supported.
|
||||
|
||||
License
|
||||
---------------------
|
||||
Distributed under the [MIT software license](http://www.opensource.org/licenses/mit-license.php).
|
||||
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](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard.
|
||||
20
doc/bips.md
20
doc/bips.md
@@ -1,20 +0,0 @@
|
||||
*** Warning: This document has not been updated for Zcash and may be inaccurate. ***
|
||||
|
||||
BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.10.0**):
|
||||
|
||||
* [`BIP 11`](https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki): Multisig outputs are standard since **v0.6.0** ([PR #669](https://github.com/bitcoin/bitcoin/pull/669)).
|
||||
* [`BIP 13`](https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki): The address format for P2SH addresses has been implemented since **v0.6.0** ([PR #669](https://github.com/bitcoin/bitcoin/pull/669)).
|
||||
* [`BIP 14`](https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki): The subversion string is being used as User Agent since **v0.6.0** ([PR #669](https://github.com/bitcoin/bitcoin/pull/669)).
|
||||
* [`BIP 16`](https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki): The pay-to-script-hash evaluation rules have been implemented since **v0.6.0**, and took effect on *April 1st 2012* ([PR #748](https://github.com/bitcoin/bitcoin/pull/748)).
|
||||
* [`BIP 21`](https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki): The URI format for Bitcoin payments has been implemented since **v0.6.0** ([PR #176](https://github.com/bitcoin/bitcoin/pull/176)).
|
||||
* [`BIP 22`](https://github.com/bitcoin/bips/blob/master/bip-0022.mediawiki): The 'getblocktemplate' (GBT) RPC protocol for mining has been implemented since **v0.7.0** ([PR #936](https://github.com/bitcoin/bitcoin/pull/936)).
|
||||
* [`BIP 23`](https://github.com/bitcoin/bips/blob/master/bip-0023.mediawiki): Some extensions to GBT have been implemented since **v0.10.0rc1**, including longpolling and block proposals ([PR #1816](https://github.com/bitcoin/bitcoin/pull/1816)).
|
||||
* [`BIP 30`](https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki): The evaluation rules to forbid creating new transactions with the same txid as previous not-fully-spent transactions were implemented since **v0.6.0**, and the rule took effect on *March 15th 2012* ([PR #915](https://github.com/bitcoin/bitcoin/pull/915)).
|
||||
* [`BIP 31`](https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki): The 'pong' protocol message (and the protocol version bump to 60001) has been implemented since **v0.6.1** ([PR #1081](https://github.com/bitcoin/bitcoin/pull/1081)).
|
||||
* [`BIP 34`](https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki): The rule that requires blocks to contain their height (number) in the coinbase input, and the introduction of version 2 blocks has been implemented since **v0.7.0**. The rule took effect for version 2 blocks as of *block 224413* (March 5th 2013), and version 1 blocks are no longer allowed since *block 227931* (March 25th 2013) ([PR #1526](https://github.com/bitcoin/bitcoin/pull/1526)).
|
||||
* [`BIP 35`](https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki): The 'mempool' protocol message (and the protocol version bump to 60002) has been implemented since **v0.7.0** ([PR #1641](https://github.com/bitcoin/bitcoin/pull/1641)).
|
||||
* [`BIP 37`](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki): The bloom filtering for transaction relaying, partial merkle trees for blocks, and the protocol version bump to 70001 (enabling low-bandwidth SPV clients) has been implemented since **v0.8.0** ([PR #1795](https://github.com/bitcoin/bitcoin/pull/1795)).
|
||||
* [`BIP 42`](https://github.com/bitcoin/bips/blob/master/bip-0042.mediawiki): The bug that would have caused the subsidy schedule to resume after block 13440000 was fixed in **v0.9.2** ([PR #3842](https://github.com/bitcoin/bitcoin/pull/3842)).
|
||||
* [`BIP 61`](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki): The 'reject' protocol message (and the protocol version bump to 70002) was added in **v0.9.0** ([PR #3185](https://github.com/bitcoin/bitcoin/pull/3185)).
|
||||
* [`BIP 66`](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki): The strict DER rules and associated version 3 blocks have been implemented since **v0.10.0** ([PR #5713](https://github.com/bitcoin/bitcoin/pull/5713)).
|
||||
* [`BIP 70`](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki) [`71`](https://github.com/bitcoin/bips/blob/master/bip-0071.mediawiki) [`72`](https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki): Payment Protocol support has been available in Bitcoin Core GUI since **v0.9.0** ([PR #5216](https://github.com/bitcoin/bitcoin/pull/5216)).
|
||||
@@ -1,5 +1,3 @@
|
||||
*** Warning: This document has not been updated for Zcash and may be inaccurate. ***
|
||||
|
||||
Coding
|
||||
====================
|
||||
|
||||
@@ -112,7 +110,7 @@ to see it.
|
||||
|
||||
**testnet and regtest modes**
|
||||
|
||||
Run with the -testnet option to run with "play bitcoins" on the test network, if you
|
||||
Run with the -testnet option to run with "play zcash" on the test network, if you
|
||||
are testing multi-machine code that needs to operate across the internet.
|
||||
|
||||
If you are testing something that can run on one machine, run with the -regtest option.
|
||||
@@ -121,7 +119,7 @@ that run in -regtest mode.
|
||||
|
||||
**DEBUG_LOCKORDER**
|
||||
|
||||
Bitcoin Core is a multithreaded application, and deadlocks or other multithreading bugs
|
||||
Zcash is a multithreaded application, and deadlocks or other multithreading bugs
|
||||
can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure
|
||||
CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of which locks
|
||||
are held, and adds warnings to the debug.log file if inconsistencies are detected.
|
||||
@@ -170,7 +168,7 @@ Threads
|
||||
|
||||
- ThreadRPCServer : Remote procedure call handler, listens on port 8232 for connections and services them.
|
||||
|
||||
- BitcoinMiner : Generates bitcoins (if wallet is enabled).
|
||||
- ZcashMiner : Generates zcash (if wallet is enabled).
|
||||
|
||||
- Shutdown : Does an orderly shutdown of everything.
|
||||
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
*** Warning: This document has not been updated for Zcash and may be inaccurate. ***
|
||||
|
||||
Expectations for DNS Seed operators
|
||||
====================================
|
||||
|
||||
Bitcoin Core attempts to minimize the level of trust in DNS seeds,
|
||||
Zcash attempts to minimize the level of trust in DNS seeds,
|
||||
but DNS seeds still pose a small amount of risk for the network.
|
||||
As such, DNS seeds must be run by entities which have some minimum
|
||||
level of trust within the Bitcoin community.
|
||||
level of trust within the Zcash community.
|
||||
|
||||
Other implementations of Bitcoin software may also use the same
|
||||
Other implementations of Zcash software may also use the same
|
||||
seeds and may be more exposed. In light of this exposure, this
|
||||
document establishes some basic expectations for operating dnsseeds.
|
||||
document establishes some basic expectations for operating DNS seeds.
|
||||
|
||||
0. A DNS seed operating organization or person is expected to follow good
|
||||
host security practices, maintain control of applicable infrastructure,
|
||||
@@ -18,17 +16,17 @@ and not sell or transfer control of the DNS seed. Any hosting services
|
||||
contracted by the operator are equally expected to uphold these expectations.
|
||||
|
||||
1. The DNS seed results must consist exclusively of fairly selected and
|
||||
functioning Bitcoin nodes from the public network to the best of the
|
||||
functioning Zcash nodes from the public network to the best of the
|
||||
operator's understanding and capability.
|
||||
|
||||
2. For the avoidance of doubt, the results may be randomized but must not
|
||||
single-out any group of hosts to receive different results unless due to an
|
||||
single out any group of hosts to receive different results unless due to an
|
||||
urgent technical necessity and disclosed.
|
||||
|
||||
3. The results may not be served with a DNS TTL of less than one minute.
|
||||
|
||||
4. Any logging of DNS queries should be only that which is necessary
|
||||
for the operation of the service or urgent health of the Bitcoin
|
||||
for the operation of the service or urgent health of the Zcash
|
||||
network and must not be retained longer than necessary nor disclosed
|
||||
to any third party.
|
||||
|
||||
@@ -43,14 +41,14 @@ details of their operating practices.
|
||||
7. A reachable email contact address must be published for inquiries
|
||||
related to the DNS seed operation.
|
||||
|
||||
If these expectations cannot be satisfied the operator should
|
||||
discontinue providing services and contact the active Bitcoin
|
||||
Core development team as well as posting on
|
||||
[bitcoin-dev](https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev).
|
||||
If these expectations cannot be satisfied the operator should discontinue
|
||||
providing services and contact the active Zcash development team as well as
|
||||
creating an issue in the [Zcash repository](https://github.com/zcash/zcash).
|
||||
|
||||
Behavior outside of these expectations may be reasonable in some
|
||||
situations but should be discussed in public in advance.
|
||||
|
||||
See also
|
||||
----------
|
||||
- [bitcoin-seeder](https://github.com/sipa/bitcoin-seeder) is a reference implementation of a DNS seed.
|
||||
- [zcash-seeder](https://github.com/zcash/zcash-seeder) is a reference
|
||||
implementation of a DNS seed.
|
||||
|
||||
36
doc/files.md
36
doc/files.md
@@ -1,28 +1,12 @@
|
||||
*** Warning: This document has not been updated for Zcash and may be inaccurate. ***
|
||||
|
||||
* bitcoin.conf: contains configuration settings for bitcoind or bitcoin-qt
|
||||
* bitcoind.pid: stores the process id of bitcoind while running
|
||||
* blocks/blk000??.dat: block data (custom, 128 MiB per file); since 0.8.0
|
||||
* blocks/rev000??.dat; block undo data (custom); since 0.8.0 (format changed since pre-0.8)
|
||||
* blocks/index/*; block index (LevelDB); since 0.8.0
|
||||
* chainstate/*; block chain state database (LevelDB); since 0.8.0
|
||||
* database/*: BDB database environment; only used for wallet since 0.8.0
|
||||
* zcash.conf: contains configuration settings for zcashd
|
||||
* zcashd.pid: stores the process id of zcashd while running
|
||||
* blocks/blk000??.dat: block data (custom, 128 MiB per file)
|
||||
* blocks/rev000??.dat; block undo data (custom)
|
||||
* blocks/index/*; block index (LevelDB)
|
||||
* 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 bitcoind or bitcoin-qt
|
||||
* fee_estimates.dat: stores statistics used to estimate minimum transaction fees and priorities required for confirmation; since 0.10.0
|
||||
* peers.dat: peer IP address database (custom format); since 0.7.0
|
||||
* debug.log: contains debug information and general logging generated by zcashd
|
||||
* 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
|
||||
|
||||
Only used in pre-0.8.0
|
||||
---------------------
|
||||
* blktree/*; block chain index (LevelDB); since pre-0.8, replaced by blocks/index/* in 0.8.0
|
||||
* coins/*; unspent transaction output database (LevelDB); since pre-0.8, replaced by chainstate/* in 0.8.0
|
||||
|
||||
Only used before 0.8.0
|
||||
---------------------
|
||||
* blkindex.dat: block chain index database (BDB); replaced by {chainstate/*,blocks/index/*,blocks/rev000??.dat} in 0.8.0
|
||||
* blk000?.dat: block data (custom, 2 GiB per file); replaced by blocks/blk000??.dat in 0.8.0
|
||||
|
||||
Only used before 0.7.0
|
||||
---------------------
|
||||
* addr.dat: peer IP address database (BDB); replaced by peers.dat in 0.7.0
|
||||
|
||||
@@ -18,7 +18,7 @@ When a transfer involves zaddrs, you must use the new Zcash RPC calls.
|
||||
|
||||
Zcash supports all commands in the Bitcoin Core API (as of version 0.11.2). Where applicable, Zcash will extend commands in a backwards-compatible way to enable additional functionality.
|
||||
|
||||
We do not recommend use of accounts which are now deprecated in Bitcoin Core. Where the account parameter exists in the API, please use “” as its value.
|
||||
We do not recommend use of accounts which are now deprecated in Bitcoin Core. Where the account parameter exists in the API, please use “” as its value, otherwise an error will be returned.
|
||||
|
||||
To support multiple users in a single node’s wallet, consider using getnewaddress or z_getnewaddress to obtain a new address for each user. Also consider mapping multiple addresses to each user.
|
||||
|
||||
@@ -61,7 +61,7 @@ z_listaddresses | | Returns a list of all the zaddrs in this node’s wallet for
|
||||
Command | Parameters | Description
|
||||
--- | --- | ---
|
||||
z_exportkey | zaddr | _Requires an unlocked wallet or an unencrypted wallet._<br><br>Return a zkey for a given zaddr belonging to the node’s wallet.<br><br>The key will be returned as a string formatted using Base58Check as described in the Zcash protocol spec.<br><br>Output:AKWUAkypwQjhZ6LLNaMuuuLcmZ6gt5UFyo8m3jGutvALmwZKLdR5
|
||||
z_importkey | zkey [rescan=true] | _Wallet must be unlocked._<br><br>Add a zkey as returned by z_exportkey to a node's wallet.<br><br>The key should be formatted using Base58Check as described in the Zcash protocol spec.<br><br>Set rescan to true (the default) to rescan the entire local block database for transactions affecting any address or pubkey script in the wallet (including transactions affecting the newly-added address for this spending key).<br><br>**NOTE:** If funds for imported keys fail to display, try stopping the node and restarting it with a `-reindex` flag. (`./src/zcashd -reindex`)
|
||||
z_importkey | zkey [rescan=true] | _Wallet must be unlocked._<br><br>Add a zkey as returned by z_exportkey to a node's wallet.<br><br>The key should be formatted using Base58Check as described in the Zcash protocol spec.<br><br>Set rescan to true (the default) to rescan the entire local block database for transactions affecting any address or pubkey script in the wallet (including transactions affecting the newly-added address for this spending key).
|
||||
z_exportwallet | filename | _Requires an unlocked wallet or an unencrypted wallet._<br><br>Creates or overwrites a file with taddr private keys and zaddr private keys in a human-readable format.<br><br>Filename is the file in which the wallet dump will be placed. May be prefaced by an absolute file path. An existing file with that name will be overwritten.<br><br>No value is returned but a JSON-RPC error will be reported if a failure occurred.
|
||||
z_importwallet | filename | _Requires an unlocked wallet or an unencrypted wallet._<br><br>Imports private keys from a file in wallet export file format (see z_exportwallet). These keys will be added to the keys currently in the wallet. This call may need to rescan all or parts of the block chain for transactions affecting the newly-added keys, which may take several minutes.<br><br>Filename is the file to import. The path is relative to zcashd’s working directory.<br><br>No value is returned but a JSON-RPC error will be reported if a failure occurred.
|
||||
|
||||
@@ -70,7 +70,7 @@ z_importwallet | filename | _Requires an unlocked wallet or an unencrypted walle
|
||||
Command | Parameters | Description
|
||||
--- | --- | ---
|
||||
z_listreceivedbyaddress<br> | zaddr [minconf=1] | Return a list of amounts received by a zaddr belonging to the node’s wallet.<br><br>Optionally set the minimum number of confirmations which a received amount must have in order to be included in the result. Use 0 to count unconfirmed transactions.<br><br>Output:<br>[{<br>“txid”: “4a0f…”,<br>“amount”: 0.54,<br>“memo”:”F0FF…”,}, {...}, {...}<br>]
|
||||
z_sendmany<br> | fromaddress amounts [minconf=1] | _This is an Asynchronous RPC call_<br><br>Send funds from an address to multiple outputs. The address can be either a taddr or a zaddr.<br><br>Amounts is a list containing key/value pairs corresponding to the addresses and amount to pay. Each output address can be in taddr or zaddr format.<br><br>When sending to a zaddr, you also have the option of attaching a memo in hexadecimal format.<br><br>Example of Outputs parameter:<br>[{“address”:”t123…”, “amount”:0.005},<br>,{“address”:”z010…”,”amount”:0.03, “memo”:”f508af…”}]<br><br>Optionally set the minimum number of confirmations which a private or transparent transaction must have in order to be used as an input.<br><br>The transaction fee will be determined by the node’s wallet. Any transparent change will be sent to a new transparent address. Any private change will be sent back to the zaddr being used as the source of funds.<br><br>Returns an operationid. You use the operationid value with z_getoperationstatus and z_getoperationresult to obtain the result of sending funds, which if successful, will be a txid.
|
||||
z_sendmany<br> | fromaddress amounts [minconf=1] | _This is an Asynchronous RPC call_<br><br>Send funds from an address to multiple outputs. The address can be either a taddr or a zaddr.<br><br>Amounts is a list containing key/value pairs corresponding to the addresses and amount to pay. Each output address can be in taddr or zaddr format.<br><br>When sending to a zaddr, you also have the option of attaching a memo in hexadecimal format.<br><br>**NOTE:**When sending coinbase funds to a zaddr, the node's wallet does not allow any change. Put another way, spending a partial amount of a coinbase utxo is not allowed. This is not a consensus rule but a local wallet rule due to the current implementation of z_sendmany. In future, this rule may be removed.<br><br>Example of Outputs parameter:<br>[{“address”:”t123…”, “amount”:0.005},<br>,{“address”:”z010…”,”amount”:0.03, “memo”:”f508af…”}]<br><br>Optionally set the minimum number of confirmations which a private or transparent transaction must have in order to be used as an input.<br><br>The transaction fee will be determined by the node’s wallet. Any transparent change will be sent to a new transparent address. Any private change will be sent back to the zaddr being used as the source of funds.<br><br>Returns an operationid. You use the operationid value with z_getoperationstatus and z_getoperationresult to obtain the result of sending funds, which if successful, will be a txid.
|
||||
|
||||
### Operations
|
||||
|
||||
|
||||
121
doc/release-notes/release-notes-1.0.0-rc1.md
Normal file
121
doc/release-notes/release-notes-1.0.0-rc1.md
Normal file
@@ -0,0 +1,121 @@
|
||||
4ZEC (1):
|
||||
Correct line swap
|
||||
|
||||
Cory Fields (7):
|
||||
release: add _IO_stdin_used to ignored exports
|
||||
release: add check-symbols and check-security make targets
|
||||
release: always link librt for glibc back-compat builds
|
||||
release: add security/symbol checks to gitian
|
||||
depends: allow for CONFIG_SITE to be used rather than stealing prefix
|
||||
gitian: use CONFIG_SITE rather than hijacking the prefix
|
||||
gitian: create debug packages for linux/windows
|
||||
|
||||
Daira Hopwood (6):
|
||||
Fix RPC tests to not rely on accounts.
|
||||
Cosmetics in RPC tests.
|
||||
Fix blank lines in DEBIAN/copyright license texts.
|
||||
Move the increment of nWitnessCacheSize to make the later assertions correct.
|
||||
Add another assertion to narrow down where the bug occurs.
|
||||
Add another assertion about the witness cache.
|
||||
|
||||
Jack Grigg (25):
|
||||
Update release process to sign release tags
|
||||
WriteWitnessCache: Catch errors and abort transaction
|
||||
Throw an RPC error for all accounts except the default
|
||||
Update tests for account deprecation
|
||||
Deprecated -> Unsupported in RPC error
|
||||
Correct docstring
|
||||
Add unit tests for WriteWitnessCache
|
||||
Document CWalletTx::FindMyNotes
|
||||
Refactor test to clarify expectations
|
||||
Add unit test that fails when calling FindMyNotes on a locked wallet
|
||||
Add RPC test showing correct handling of JS txns from blockchain
|
||||
Break the RPC test by encrypting the mirroring wallet
|
||||
Delay caching of nullifiers when wallet is locked
|
||||
Update comments
|
||||
Only ignore runtime errors caused by failed note decryption
|
||||
Remaining changes from bitcoin/bitcoin#6854
|
||||
[gitian] Don't call "make check-symbols"
|
||||
Fix Makefiles so "make dist" will run
|
||||
Render full version correctly in configure.ac
|
||||
Update libsnark to include determinism fix
|
||||
Address review comments
|
||||
Add more asserts to track down the bug
|
||||
Increment witnesses for new transactions on rescan
|
||||
Add clear error message for upgrading users
|
||||
Set CBlockIndex.hashAnchor correctly in ConnectBlock
|
||||
|
||||
Jay Graber (17):
|
||||
Document wallet reindexing for z_importkey description in payment-api.md
|
||||
Rm beta 1 release note about encrypted wallets
|
||||
Note that Coinbase maturity interval does not protect JoinSplits
|
||||
Refer to Zcash wiki in INSTALL
|
||||
Rm bitcoin logo
|
||||
Rm build-unix.md, to keep single copy of build instructions for Zcash on github wiki
|
||||
Rm Bitcoin-specific documentation
|
||||
Add note that document is not updated for Zcash to translation policy
|
||||
Rm doc for disabled REST interface
|
||||
Change alpha to beta testnet, add zcash hidden service
|
||||
Improve documentation on connecting to zcash hidden server
|
||||
Improve documentation on connecting to zcash hidden server
|
||||
Update tor.md
|
||||
Distinguish between connecting to 1 vs multiple tor nodes
|
||||
Revert "Rm Bitcoin-specific documentation"
|
||||
Mv btc release notes to doc/bitcoin-release-notes
|
||||
Reword joinsplit anchor paragraph
|
||||
|
||||
Kevin Gallagher (24):
|
||||
Set wget retry options for fetching parameters
|
||||
Increases timeout to 30s, wait before retry to 3s
|
||||
Initial packaging for Debian
|
||||
Moves zcash-fetch-params to /usr/bin
|
||||
Adds newline between source and package definition
|
||||
Adds copyright file back to Debian package
|
||||
Updates Linux gitian descriptor file for Zcash
|
||||
Updates trusty -> jessie in Gitian Linux descriptor
|
||||
Adds distro: debian to gitian-linux.yml
|
||||
Updates Gitian descriptor for Zcash
|
||||
Removes Windows and OSX packaging from EXTRA_DIST
|
||||
Moves V=1 and NO_QT=1 to MAKEOPTS
|
||||
Include contrib/devtools/split-debug.sh from upstream
|
||||
Adds faketime to Gitian build dependencies
|
||||
Inlude crypto/equihash.tcc in list of sources for dist
|
||||
Adds zcash/Zcash.h to LIBZCASH sources
|
||||
Adds zcash/Proof.hpp to LIBZCASH_H
|
||||
Add alertkeys.h to libbitcoin_server_a_SOURCES
|
||||
Adds files in src/zcash/circuit to libzcash_a_SOURCES
|
||||
Adds zcbenchmarks.h to libbitcoin_wallet_a_SOURCES
|
||||
Adds json_test_vectors.h to zcash_gtest_SOURCES
|
||||
Adds additional licenses to Debian copyright file
|
||||
Updates Zcash Core developers -> Zcash developers
|
||||
Adds . to blank lines in Google license
|
||||
|
||||
MarcoFalke (3):
|
||||
[gitian] Set reference date to something more recent
|
||||
[gitian] Default reference_datetime to commit author date
|
||||
[gitian] hardcode datetime for depends
|
||||
|
||||
Sean Bowe (1):
|
||||
Make 100KB transaction size limit a consensus rule, rather than a standard rule.
|
||||
|
||||
Simon (11):
|
||||
Add vjoinsplit to JSON output of RPC call gettransaction
|
||||
Fixes #1478 by ensuring wallet tests have the -datadir environment set appropriately.
|
||||
Fixes #1491 by updating help message for rpc call z_importkey
|
||||
Fix incorrect check of number of parameters for z_getnewaddress.
|
||||
Add tests to verify that all z_* rpc calls return an error if there are too many input parameters.
|
||||
Rename client identifier from Satoshi to MagicBean (closes #1481)
|
||||
Use -debug=zrpc for z_* rpc calls (#1504)
|
||||
Document CWallet::GetFilteredNotes and fix return type which should be void.
|
||||
Fix test so that the encrypted wallet is output to the test_bitcoin -datadir folder.
|
||||
Reorder gtests in zcash-gtest.
|
||||
Return improved error message when trying to spend Coinbase coins (#1373).
|
||||
|
||||
Wladimir J. van der Laan (6):
|
||||
devtools: add libraries for bitcoin-qt to symbol check
|
||||
gitian: use trusty for building
|
||||
gitian: make windows build deterministic
|
||||
gitian: Need `ca-certificates` and `python` for LXC builds
|
||||
build: Remove unnecessary executables from gitian release
|
||||
gitian: Add --disable-bench to config flags for windows
|
||||
|
||||
106
doc/release-notes/release-notes-1.0.0-rc2.md
Normal file
106
doc/release-notes/release-notes-1.0.0-rc2.md
Normal file
@@ -0,0 +1,106 @@
|
||||
Daira Hopwood (22):
|
||||
Add link to protocol specification.
|
||||
Add tests for IsStandardTx applied to v2 transactions.
|
||||
Make v2 transactions standard. This also corrects a rule about admitting large orphan transactions into the mempool, to account for v2-specific fields.
|
||||
Changes to build on Alpine Linux.
|
||||
Add Tromp's implementation of Equihash solver (as of tromp/equihash commit 690fc5eff453bc0c1ec66b283395c9df87701e93).
|
||||
Integrate Tromp solver into miner code and remove its dependency on extra BLAKE2b implementation.
|
||||
Minor edits to dnsseed-policy.md.
|
||||
Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459
|
||||
Add help for -equihashsolver= option.
|
||||
Assert that the Equihash solver is a supported option.
|
||||
Repair check-security-hardening.sh.
|
||||
Revert "Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459"
|
||||
Fix race condition in rpc-tests/wallet_protectcoinbase.py. closes #1597
|
||||
Fix other potential race conditions similar to ref #1597 in RPC tests.
|
||||
Update the error message string for tx version too low. ref #1600
|
||||
Static assertion that standard and network min tx versions are consistent.
|
||||
Update comments in chainparams.cpp.
|
||||
Update unit-tests documentation. closes #1530
|
||||
Address @str4d's comments on unit-tests doc. ref #1530
|
||||
Remove copyright entries for some files we deleted.
|
||||
Update license text in README.md. closes #38
|
||||
Bump version numbers to 1.0.0-rc2.
|
||||
|
||||
David Mercer (4):
|
||||
explicitly pass HOST and BUILD to ./configure
|
||||
allow both HOST and BUILD to be passed in from the zcutil/build.sh
|
||||
pass in both HOST and BUILD to depends system, needed for deterministic builds
|
||||
explicitly pass HOST and BUILD to libgmp ./configure
|
||||
|
||||
Gregory Maxwell (1):
|
||||
Only send one GetAddr response per connection.
|
||||
|
||||
Jack Grigg (31):
|
||||
Implement MappedShuffle for tracking the permutation of an array
|
||||
Implement static method for creating a randomized JSDescription
|
||||
Randomize JoinSplits in z_sendmany
|
||||
Refactor test code to better test JSDescription::Randomized()
|
||||
Remove stale comment
|
||||
Rename libbitcoinconsensus to libzcashconsensus
|
||||
Rename bitcoin-tx to zcash-tx
|
||||
Remove the RC 1 block index error message
|
||||
Disable wallet encryption
|
||||
Add more assertions, throw if find_output params are invalid
|
||||
Clear witness cache when re-witnessing notes
|
||||
Add heights to log output
|
||||
Throw an error when encryptwallet is disabled
|
||||
Document that wallet encryption is disabled
|
||||
Document another wallet encryption concern
|
||||
Improve security documentation
|
||||
Fix RPC tests that require wallet encryption
|
||||
Add test that encryptwallet is disabled
|
||||
Revert "Revert "Avoid boost::posix_time functions that have potential out-of-bounds read bugs. ref #1459""
|
||||
GBT: Support coinbasetxn instead of coinbasevalue
|
||||
GBT: Add informational founders' reward value to coinbasetxn
|
||||
GBT: Correct block header in proposals RPC test
|
||||
GBT: Add RPC tests
|
||||
Disallow v0 transactions as a consensus rule
|
||||
Reject block versions lower than 4
|
||||
Regenerate genesis blocks with nVersion = 4
|
||||
Use tromp's solver to regenerate miner tests
|
||||
Update tests for new genesis blocks
|
||||
Enforce standard transaction rules on testnet
|
||||
Update sighash tests for new consensus rule
|
||||
Fix RPC test
|
||||
|
||||
Jay Graber (7):
|
||||
Rm bitcoin dev keys from gitian-downloader, add zcash dev keys
|
||||
Rm bips.md
|
||||
Update files.md for zcash
|
||||
Update dnsseed-policy.md
|
||||
Developer notes still relevant
|
||||
Document RPC interface security assumptions in security-warnings.md
|
||||
Update RPC interfaces warnings language
|
||||
|
||||
Patrick Strateman (1):
|
||||
CDataStream::ignore Throw exception instead of assert on negative nSize.
|
||||
|
||||
Pieter Wuille (4):
|
||||
Introduce constant for maximum CScript length
|
||||
Treat overly long scriptPubKeys as unspendable
|
||||
Fix OOM bug: UTXO entries with invalid script length
|
||||
Add tests for CCoins deserialization
|
||||
|
||||
Simon (17):
|
||||
Fixes CID 1147436 uninitialized scalar field.
|
||||
Fixes CID 1352706 uninitialized scalar field.
|
||||
Fixes CID 1352698 uninitialized scalar field.
|
||||
Fixes CID 1352687 uninitialized scalar field.
|
||||
Fixes CID 1352715 uninitialized scalar field.
|
||||
Fixes CID 1352686 uninitialized scalar variable.
|
||||
Fixes CID 1352599 unitialized scalar variable
|
||||
Fixes CID 1352727 uninitialized scalar variable.
|
||||
Fixes CID 1352714 uninitialized scalar variable.
|
||||
Add security warning about logging of z_* calls.
|
||||
Add debug option "zrpcunsafe" to be used when logging more sensitive information such as the memo field of a note.
|
||||
Closes #1583 by setting up the datadir for the wallet gtest.
|
||||
Fix issue where z_sendmany is too strict and does not allow integer based amount e.g. 1 which is the same as 1.0
|
||||
Update test to use integer amount as well as decimal amount when calling z_sendmany
|
||||
Fix build problem with coins_tests
|
||||
Workaround g++ 5.x bug with brace enclosed initializer.
|
||||
Patch backport of upstream 1588 as we don't (yet) use the NetMsgType namespace
|
||||
|
||||
Wladimir J. van der Laan (1):
|
||||
net: Ignore `notfound` P2P messages
|
||||
|
||||
51
doc/release-notes/release-notes-1.0.0-rc3.md
Normal file
51
doc/release-notes/release-notes-1.0.0-rc3.md
Normal file
@@ -0,0 +1,51 @@
|
||||
Chirag Davé (1):
|
||||
fReopenDebugLog and fRequestShutdown should be type sig_atomic_t
|
||||
|
||||
Daira Hopwood (9):
|
||||
Refactor README docs to avoid duplication.
|
||||
Fix licensing to comply with OpenSSL and Berkeley DB licenses.
|
||||
Changes to upgrade bdb to 6.2.23
|
||||
util: Update tinyformat
|
||||
Tweak descriptions of mining parameters for example zcash.conf.
|
||||
Update dnsseeds for mainnet. closes #1369
|
||||
Minor update to release process.
|
||||
Remove the override of nMaxTipAge that effectively disables it on testnet.
|
||||
Update version numbers for rc3.
|
||||
|
||||
Jack Grigg (2):
|
||||
Disable metrics screen in performance-measurements.sh
|
||||
Link to #826 in doc/security-warnings.md, link to new Security website page
|
||||
|
||||
Joe Turgeon (2):
|
||||
Fixing floating point exception caused by metrics. Using default column width unless in a TTY.
|
||||
Adding handling for ioctl failure. Updates from code review in PR #1615.
|
||||
|
||||
Kevin Gallagher (2):
|
||||
Prefer sha256sum but fall back to shasum if not available
|
||||
Adds libgomp1 to Debian package depends
|
||||
|
||||
Louis Nyffenegger (1):
|
||||
Fix typo in README.md
|
||||
|
||||
Paige Peterson (3):
|
||||
add zcash.config
|
||||
fix per Jack's mod suggestions
|
||||
fix per Daira's suggestions
|
||||
|
||||
Pieter Wuille (3):
|
||||
Include signal.h for sig_atomic_t in WIN32
|
||||
Revert "Include signal.h for sig_atomic_t in WIN32"
|
||||
Use std::atomic for fRequestShutdown and fReopenDebugLog
|
||||
|
||||
Sean Bowe (1):
|
||||
Add manpages for zcashd and zcash-cli binaries for debian.
|
||||
|
||||
Simon (4):
|
||||
Fix incorrect error message in z_sendmany
|
||||
Add z_sendmany rule that when sending coinbase utxos to a zaddr they must be consumed entirely, without any change, since there is currently no way to specify a change address in z_sendmany.
|
||||
Add assert to AsyncRPCOperation_sendmany
|
||||
Bump version number in sendalert.cpp
|
||||
|
||||
bitcartel (1):
|
||||
Update payment-api.md
|
||||
|
||||
14
doc/release-notes/release-notes-1.0.0-rc4.md
Normal file
14
doc/release-notes/release-notes-1.0.0-rc4.md
Normal file
@@ -0,0 +1,14 @@
|
||||
Daira Hopwood (3):
|
||||
Update pchMessageStart for mainnet and testnet.
|
||||
Update version numbers for 1.0.0-rc4.
|
||||
Add release notes for 1.0.0-rc4.
|
||||
|
||||
Jack Grigg (4):
|
||||
Integrate production Founders' Reward keys
|
||||
Remove Founders' Reward override from #1398
|
||||
Regenerate mainnet and testnet genesis blocks for nMaxTipAge change
|
||||
Update tests for new genesis blocks
|
||||
|
||||
Sean Bowe (1):
|
||||
Zcash zk-SNARK public parameters for 1.0 "Sprout".
|
||||
|
||||
18
doc/release-notes/release-notes-1.0.0.md
Normal file
18
doc/release-notes/release-notes-1.0.0.md
Normal file
@@ -0,0 +1,18 @@
|
||||
Jack Grigg (8):
|
||||
Rework zcutil/build-debian-package.sh to place files correctly
|
||||
Add lintian check to zcutil/build-debian-package.sh
|
||||
Fix DEBIAN/control errors raised by lintian
|
||||
Build libsnark with -march=x86-64 instead of -march=native
|
||||
Disable the metrics screen on regtest
|
||||
Add the Zcash genesis blocks
|
||||
Update tests for new genesis blocks
|
||||
Update version strings to 1.0.0
|
||||
|
||||
Kevin Gallagher (6):
|
||||
Use fakeroot to build Debian package
|
||||
Update Debian package maintainer scripts
|
||||
Fixes executable mode of maintainer scripts
|
||||
Add DEBIAN/rules file (required by policy)
|
||||
Adds zcash.examples and zcash.manpages
|
||||
Run Lintian after built package is copied to $SRC_PATH
|
||||
|
||||
@@ -29,15 +29,18 @@ previous release:
|
||||
|
||||
$ ZCASH_RELEASE_PREV=1.0.0-beta1
|
||||
|
||||
## B. create a new release branch / github PR
|
||||
### B1. update (commit) version in sources
|
||||
## B. Create a new release branch / github PR
|
||||
### B1. Update (commit) version in sources
|
||||
|
||||
doc/README.md
|
||||
README.md
|
||||
src/clientversion.h
|
||||
configure.ac
|
||||
contrib/DEBIAN/control
|
||||
contrib/gitian-descriptors/gitian-linux.yml
|
||||
|
||||
help2man -n "RPC client for the Zcash daemon" src/zcash-cli > contrib/DEBIAN/manpages/zcash-cli.1
|
||||
help2man -n "Network daemon for interacting with the Zcash blockchain" src/zcashd > contrib/DEBIAN/manpages/zcashd.1
|
||||
|
||||
|
||||
In `configure.ac` and `clientversion.h`:
|
||||
|
||||
@@ -52,7 +55,7 @@ In `configure.ac` and `clientversion.h`:
|
||||
|
||||
- Change `CLIENT_VERSION_IS_RELEASE` to false while Zcash is in beta-test phase.
|
||||
|
||||
### B2. write release notes
|
||||
### B2. Write release notes
|
||||
|
||||
git shortlog helps a lot, for example:
|
||||
|
||||
@@ -61,19 +64,21 @@ git shortlog helps a lot, for example:
|
||||
|
||||
Update the Debian package changelog:
|
||||
|
||||
export DEBVERSION='1.0.0-rc1'
|
||||
export DEBVERSION="${ZCASH_RELEASE}"
|
||||
export DEBEMAIL="${DEBEMAIL:-team@z.cash}"
|
||||
export DEBFULLNAME="${DEBFULLNAME:-Zcash Company}"
|
||||
|
||||
dch -v $DEBVERSION -D jessie -c contrib/DEBIAN/changelog
|
||||
|
||||
### B3. change the network magics
|
||||
(`dch` comes from the devscripts package.)
|
||||
|
||||
### B3. Change the network magics
|
||||
|
||||
If this release breaks backwards compatibility, change the network magic
|
||||
numbers. Set the four `pchMessageStart` in `CTestNetParams` in `chainparams.cpp`
|
||||
to random values.
|
||||
|
||||
### B4. merge the previous changes
|
||||
### B4. Merge the previous changes
|
||||
|
||||
Do the normal pull-request, review, testing process for this release PR.
|
||||
|
||||
@@ -87,7 +92,7 @@ https://ci.z.cash/builders/depends-sources
|
||||
|
||||
Run `./fetch-params.sh`.
|
||||
|
||||
## D. make tag for the newly merged result
|
||||
## D. Make tag for the newly merged result
|
||||
|
||||
In this example, we ensure master is up to date with the
|
||||
previous merged PR, then:
|
||||
@@ -95,7 +100,7 @@ previous merged PR, then:
|
||||
$ git tag -s v${ZCASH_RELEASE}
|
||||
$ git push origin v${ZCASH_RELEASE}
|
||||
|
||||
## E. deploy testnet
|
||||
## E. Deploy testnet
|
||||
|
||||
Notify the Zcash DevOps engineer/sysadmin that the release has been tagged. They update some variables in the company's automation code and then run an Ansible playbook, which:
|
||||
|
||||
@@ -106,15 +111,20 @@ Notify the Zcash DevOps engineer/sysadmin that the release has been tagged. They
|
||||
|
||||
Then, verify that nodes can connect to the testnet server, and update the guide on the wiki to ensure the correct hostname is listed in the recommended zcash.conf.
|
||||
|
||||
## F. publish the release announcement (blog, zcash-dev, slack)
|
||||
## G. celebrate
|
||||
## F. Update the Beta Guide
|
||||
## G. Publish the release announcement (blog, zcash-dev, slack)
|
||||
## H. Make and deploy deterministic builds
|
||||
|
||||
- Run the [Gitian deterministic build environment](https://github.com/zcash/zcash-gitian)
|
||||
- Compare the uploaded [build manifests on gitian.sigs](https://github.com/zcash/gitian.sigs)
|
||||
- If all is well, the DevOps engineer will build the Debian packages and update the
|
||||
[apt.z.cash package repository](https://apt.z.cash).
|
||||
|
||||
## I. Celebrate
|
||||
|
||||
## missing steps
|
||||
Zcash still needs:
|
||||
|
||||
* deterministic or reproducible builds
|
||||
|
||||
* thorough pre-release testing (presumably more thorough than standard PR tests)
|
||||
|
||||
* release deployment steps (eg: updating build-depends mirror, deploying testnet, etc...)
|
||||
|
||||
* proper Zcash-specific versions and names in software and documentation.
|
||||
* automated release deployment (e.g.: updating build-depends mirror, deploying testnet, etc...)
|
||||
|
||||
@@ -4,7 +4,9 @@ Security Warnings
|
||||
Security Audit
|
||||
--------------
|
||||
|
||||
Zcash has been subjected to a formal third-party security review. For high priority security announcements, check https://z.cash.
|
||||
Zcash has been subjected to a formal third-party security review. For security
|
||||
announcements, audit results and other general security information, see
|
||||
https://z.cash/support/security.html
|
||||
|
||||
x86-64 Linux Only
|
||||
-----------------------
|
||||
@@ -14,6 +16,34 @@ make proving keys generated on 64-bit systems unusable on 32-bit and big-endian
|
||||
systems. It's unclear if a warning will be issued in this case, or if the
|
||||
proving system will be silently compromised.
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
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).
|
||||
|
||||
- We were concerned about the resistance of the algorithm used to derive wallet
|
||||
encryption keys (inherited from Bitcoin) to dictionary attacks by a powerful
|
||||
attacker. If and when we re-enable wallet encryption, it is likely to be with
|
||||
a modern passphrase-based key derivation algorithm designed for greater
|
||||
resistance to dictionary attack, such as Argon2i.
|
||||
|
||||
You should use full-disk encryption (or encryption of your home directory) to
|
||||
protect your wallet at rest, and should assume (even unprivileged) users who are
|
||||
runnng on your OS can read your wallet.dat file.
|
||||
|
||||
Side-Channel Attacks
|
||||
--------------------
|
||||
|
||||
@@ -44,9 +74,37 @@ The REST interface is a feature inherited from upstream Bitcoin. By default,
|
||||
it is disabled. We do not recommend you enable it until it has undergone a
|
||||
security review.
|
||||
|
||||
RPC Interface
|
||||
---------------
|
||||
|
||||
Users should choose a strong RPC password. If no RPC username and password are set, zcashd will not start and will print an error message with a suggestion for a strong random password. If the client knows the RPC password, they have at least full access to the node. In addition, certain RPC commands can be misused to overwrite files and/or take over the account that is running zcashd. (In the future we may restrict these commands, but full node access – including the ability to spend from and export keys held by the wallet – would still be possible unless wallet methods are disabled.)
|
||||
|
||||
Users should also refrain from changing the default setting that only allows RPC connections from localhost. Allowing connections from remote hosts would enable a MITM to execute arbitrary RPC commands, which could lead to compromise of the account running zcashd and loss of funds. For multi-user services that use one or more zcashd instances on the backend, the parameters passed in by users should be controlled to prevent confused-deputy attacks which could spend from any keys held by that zcashd.
|
||||
|
||||
Block Chain Reorganization: Major Differences
|
||||
---------------------------------------------------
|
||||
-------------------------------------------------
|
||||
|
||||
Users should be aware of new behavior in Zcash that differs significantly from Bitcoin: in the case of a block chain reorganization, Bitcoin's coinbase maturity rule helps to ensure that any reorganization shorter than the maturity interval will not invalidate any of the rolled-back transactions. Zcash keeps Bitcoin's 100-block maturity interval for generation transactions, but because JoinSplits must be anchored within a block, this provides more limited protection against transactions becoming invalidated. In the case of a block chain reorganization for Zcash, all JoinSplits which were anchored within the reorganization interval and any transactions that depend on them will become invalid, rolling back transactions and reverting funds to the original owner. The transaction rebroadcast mechanism inherited from Bitcoin will not successfully rebroadcast transactions depending on invalidated JoinSplits if the anchor needs to change. The creator of an invalidated JoinSplit, as well as the creators of all transactions dependent on it, must rebroadcast the transactions themselves.
|
||||
|
||||
Receivers of funds from a JoinSplit can mitigate the risk of relying on funds received from transactions that may be rolled back by using a higher minconf (minimum number of confirmations).
|
||||
|
||||
Logging z_* RPC calls
|
||||
---------------------
|
||||
|
||||
The option `-debug=zrpc` covers logging of the z_* calls. This will reveal information about private notes which you might prefer not to disclose. For example, when calling `z_sendmany` to create a shielded transaction, input notes are consumed and new output notes are created.
|
||||
|
||||
The option `-debug=zrpcunsafe` covers logging of sensitive information in z_* calls which you would only need for debugging and audit purposes. For example, if you want to examine the memo field of a note being spent.
|
||||
|
||||
Private spending keys for z addresses are never logged.
|
||||
|
||||
Potentially-Missing Required Modifications
|
||||
------------------------------------------
|
||||
|
||||
In addition to potential mistakes in code we added to Bitcoin Core, and
|
||||
potential mistakes in our modifications to Bitcoin Core, it is also possible
|
||||
that there were potential changes we were supposed to make to Bitcoin Core but
|
||||
didn't, either because we didn't even consider making those changes, or we ran
|
||||
out of time. We have brainstormed and documented a variety of such possibilities
|
||||
in [issue #826](https://github.com/zcash/zcash/issues/826), and believe that we
|
||||
have changed or done everything that was necessary for the 1.0.0 launch. Users
|
||||
may want to review this list themselves.
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
*** Warning: This document has not been updated for Zcash and may be inaccurate. ***
|
||||
Compiling/running automated tests
|
||||
---------------------------------
|
||||
|
||||
Compiling/running unit tests
|
||||
------------------------------------
|
||||
|
||||
Unit tests will be automatically compiled if dependencies were met in configure
|
||||
Automated tests will be automatically compiled if dependencies were met in configure
|
||||
and tests weren't explicitly disabled.
|
||||
|
||||
After configuring, they can be run with 'make check'.
|
||||
There are two scripts for running tests:
|
||||
|
||||
To run the bitcoind tests manually, launch src/test/test_bitcoin .
|
||||
* ``qa/zcash/full-test-suite.sh``, to run the main test suite
|
||||
* ``qa/pull-tester/rpc-tests.sh``, to run the RPC tests.
|
||||
|
||||
To add more bitcoind tests, add `BOOST_AUTO_TEST_CASE` functions to the existing
|
||||
.cpp files in the test/ directory or add new .cpp files that
|
||||
implement new BOOST_AUTO_TEST_SUITE sections.
|
||||
The main test suite uses two different testing frameworks. Tests using the Boost
|
||||
framework are under ``src/test/``; tests using the Google Test/Google Mock
|
||||
framework are under ``src/gtest/`` and ``src/wallet/gtest/``. The latter framework
|
||||
is preferred for new Zcash unit tests.
|
||||
|
||||
To run the bitcoin-qt tests manually, launch src/qt/test/test_bitcoin-qt
|
||||
|
||||
To add more bitcoin-qt tests, add them to the `src/qt/test/` directory and
|
||||
the `src/qt/test/test_main.cpp` file.
|
||||
RPC tests are implemented in Python under the ``qa/rpc-tests/`` directory.
|
||||
|
||||
@@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: Bitcoin Core consensus library
|
||||
Description: Library for the Bitcoin consensus protocol.
|
||||
Name: Zcash consensus library
|
||||
Description: Library for the Zcash consensus protocol.
|
||||
Version: @PACKAGE_VERSION@
|
||||
Libs: -L${libdir} -lbitcoinconsensus
|
||||
Libs: -L${libdir} -lzcashconsensus
|
||||
Cflags: -I${includedir}
|
||||
Requires.private: libcrypto
|
||||
@@ -31,6 +31,7 @@ testScripts=(
|
||||
'walletbackup.py'
|
||||
'zcjoinsplit.py'
|
||||
'zcjoinsplitdoublespend.py'
|
||||
'getblocktemplate.py'
|
||||
);
|
||||
testScriptsExt=(
|
||||
'bipdersig-p2p.py'
|
||||
|
||||
58
qa/rpc-tests/getblocktemplate.py
Executable file
58
qa/rpc-tests/getblocktemplate.py
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python2
|
||||
# Copyright (c) 2016 The Zcash developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import *
|
||||
|
||||
|
||||
class GetBlockTemplateTest(BitcoinTestFramework):
|
||||
'''
|
||||
Test getblocktemplate.
|
||||
'''
|
||||
|
||||
def setup_chain(self):
|
||||
print("Initializing test directory "+self.options.tmpdir)
|
||||
initialize_chain_clean(self.options.tmpdir, 4)
|
||||
|
||||
def setup_network(self, split=False):
|
||||
self.nodes = start_nodes(2, self.options.tmpdir)
|
||||
connect_nodes_bi(self.nodes,0,1)
|
||||
self.is_network_split=False
|
||||
self.sync_all()
|
||||
|
||||
def run_test(self):
|
||||
node = self.nodes[0]
|
||||
node.generate(1) # Mine a block to leave initial block download
|
||||
|
||||
# Test 1: Default to coinbasetxn
|
||||
tmpl = node.getblocktemplate()
|
||||
assert('coinbasetxn' in tmpl)
|
||||
assert('coinbasevalue' not in tmpl)
|
||||
|
||||
# Test 2: Get coinbasetxn if requested
|
||||
tmpl = node.getblocktemplate({'capabilities': ['coinbasetxn']})
|
||||
assert('coinbasetxn' in tmpl)
|
||||
assert('coinbasevalue' not in tmpl)
|
||||
|
||||
# Test 3: coinbasevalue not supported if requested
|
||||
tmpl = node.getblocktemplate({'capabilities': ['coinbasevalue']})
|
||||
assert('coinbasetxn' in tmpl)
|
||||
assert('coinbasevalue' not in tmpl)
|
||||
|
||||
# Test 4: coinbasevalue not supported if both requested
|
||||
tmpl = node.getblocktemplate({'capabilities': ['coinbasetxn', 'coinbasevalue']})
|
||||
assert('coinbasetxn' in tmpl)
|
||||
assert('coinbasevalue' not in tmpl)
|
||||
|
||||
# Test 5: General checks
|
||||
tmpl = node.getblocktemplate()
|
||||
assert(len(tmpl['noncerange']) == 16)
|
||||
|
||||
# Test 6: coinbasetxn checks
|
||||
assert('foundersreward' in tmpl['coinbasetxn'])
|
||||
assert(tmpl['coinbasetxn']['required'])
|
||||
|
||||
if __name__ == '__main__':
|
||||
GetBlockTemplateTest().main()
|
||||
@@ -71,9 +71,11 @@ def genmrklroot(leaflist):
|
||||
def template_to_bytes(tmpl, txlist):
|
||||
blkver = pack('<L', tmpl['version'])
|
||||
mrklroot = genmrklroot(list(dblsha(a) for a in txlist))
|
||||
reserved = b'\0'*32
|
||||
timestamp = pack('<L', tmpl['curtime'])
|
||||
nonce = b'\0\0\0\0'
|
||||
blk = blkver + a2b_hex(tmpl['previousblockhash'])[::-1] + mrklroot + timestamp + a2b_hex(tmpl['bits'])[::-1] + nonce
|
||||
nonce = b'\0'*32
|
||||
soln = b'\0'
|
||||
blk = blkver + a2b_hex(tmpl['previousblockhash'])[::-1] + mrklroot + reserved + timestamp + a2b_hex(tmpl['bits'])[::-1] + nonce + soln
|
||||
blk += varlenEncode(len(txlist))
|
||||
for tx in txlist:
|
||||
blk += tx
|
||||
|
||||
@@ -98,7 +98,7 @@ def main():
|
||||
os.makedirs(options.tmpdir)
|
||||
initialize_chain(options.tmpdir)
|
||||
|
||||
nodes = start_nodes(1, options.tmpdir)
|
||||
nodes = start_nodes(1, options.tmpdir, extra_args=[['-developerencryptwallet']])
|
||||
|
||||
run_test(nodes, options.tmpdir)
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ def initialize_datadir(dirname, n):
|
||||
os.makedirs(datadir)
|
||||
with open(os.path.join(datadir, "zcash.conf"), 'w') as f:
|
||||
f.write("regtest=1\n");
|
||||
f.write("showmetrics=0\n");
|
||||
f.write("rpcuser=rt\n");
|
||||
f.write("rpcpassword=rt\n");
|
||||
f.write("port="+str(p2p_port(n))+"\n");
|
||||
|
||||
@@ -51,6 +51,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
assert_equal(walletinfo['immature_balance'], 0)
|
||||
|
||||
# Have node0 mine a block, thus it will collect its own fee.
|
||||
self.sync_all()
|
||||
self.nodes[0].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
@@ -87,6 +88,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
self.nodes[1].sendrawtransaction(txns_to_send[2]["hex"], True)
|
||||
|
||||
# Have node1 mine a block to confirm transactions:
|
||||
self.sync_all()
|
||||
self.nodes[1].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
@@ -99,6 +101,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
address = self.nodes[0].getnewaddress("")
|
||||
self.nodes[2].settxfee(Decimal('0.001'))
|
||||
txid = self.nodes[2].sendtoaddress(address, 10, "", "", False)
|
||||
self.sync_all()
|
||||
self.nodes[2].generate(1)
|
||||
self.sync_all()
|
||||
assert_equal(self.nodes[2].getbalance(), Decimal('39.99900000'))
|
||||
@@ -108,6 +111,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
|
||||
# Send 10 BTC with subtract fee from amount
|
||||
txid = self.nodes[2].sendtoaddress(address, 10, "", "", True)
|
||||
self.sync_all()
|
||||
self.nodes[2].generate(1)
|
||||
self.sync_all()
|
||||
assert_equal(self.nodes[2].getbalance(), Decimal('29.99900000'))
|
||||
@@ -117,6 +121,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
|
||||
# Sendmany 10 BTC
|
||||
txid = self.nodes[2].sendmany("", {address: 10}, 0, "", [])
|
||||
self.sync_all()
|
||||
self.nodes[2].generate(1)
|
||||
self.sync_all()
|
||||
assert_equal(self.nodes[2].getbalance(), Decimal('19.99800000'))
|
||||
@@ -126,6 +131,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
|
||||
# Sendmany 10 BTC with subtract fee from amount
|
||||
txid = self.nodes[2].sendmany("", {address: 10}, 0, "", [address])
|
||||
self.sync_all()
|
||||
self.nodes[2].generate(1)
|
||||
self.sync_all()
|
||||
assert_equal(self.nodes[2].getbalance(), Decimal('9.99800000'))
|
||||
@@ -190,6 +196,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
|
||||
txIdNotBroadcasted = self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 2);
|
||||
txObjNotBroadcasted = self.nodes[0].gettransaction(txIdNotBroadcasted)
|
||||
self.sync_all()
|
||||
self.nodes[1].generate(1) #mine a block, tx should not be in there
|
||||
self.sync_all()
|
||||
assert_equal(self.nodes[2].getbalance(), Decimal('9.99800000')); #should not be changed because tx was not broadcasted
|
||||
@@ -197,6 +204,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
|
||||
#now broadcast from another node, mine a block, sync, and check the balance
|
||||
self.nodes[1].sendrawtransaction(txObjNotBroadcasted['hex'])
|
||||
self.sync_all()
|
||||
self.nodes[1].generate(1)
|
||||
self.sync_all()
|
||||
txObjNotBroadcasted = self.nodes[0].gettransaction(txIdNotBroadcasted)
|
||||
@@ -225,6 +233,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
# send from node 0 to node 2 taddr
|
||||
mytaddr = self.nodes[2].getnewaddress();
|
||||
mytxid = self.nodes[0].sendtoaddress(mytaddr, 10.0);
|
||||
self.sync_all()
|
||||
self.nodes[0].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
@@ -240,7 +249,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
|
||||
# send node 2 taddr to zaddr
|
||||
recipients = []
|
||||
recipients.append({"address":myzaddr, "amount":7.0})
|
||||
recipients.append({"address":myzaddr, "amount":7})
|
||||
myopid = self.nodes[2].z_sendmany(mytaddr, recipients)
|
||||
|
||||
opids = []
|
||||
@@ -258,6 +267,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
break
|
||||
|
||||
assert_equal("success", status)
|
||||
self.sync_all()
|
||||
self.nodes[2].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
@@ -288,7 +298,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
node2balance = self.nodes[2].getbalance() # 16.99790000
|
||||
|
||||
recipients = []
|
||||
recipients.append({"address":self.nodes[0].getnewaddress(), "amount":1.0})
|
||||
recipients.append({"address":self.nodes[0].getnewaddress(), "amount":1})
|
||||
recipients.append({"address":self.nodes[2].getnewaddress(), "amount":1.0})
|
||||
myopid = self.nodes[2].z_sendmany(myzaddr, recipients)
|
||||
|
||||
@@ -304,6 +314,7 @@ class WalletTest (BitcoinTestFramework):
|
||||
break
|
||||
|
||||
assert_equal("success", status)
|
||||
self.sync_all()
|
||||
self.nodes[2].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
|
||||
@@ -10,6 +10,10 @@ from time import *
|
||||
|
||||
class WalletNullifiersTest (BitcoinTestFramework):
|
||||
|
||||
def setup_nodes(self):
|
||||
return start_nodes(4, self.options.tmpdir,
|
||||
extra_args=[['-developerencryptwallet']] * 4)
|
||||
|
||||
def run_test (self):
|
||||
# add zaddr to node 0
|
||||
myzaddr0 = self.nodes[0].z_getnewaddress()
|
||||
@@ -17,7 +21,7 @@ class WalletNullifiersTest (BitcoinTestFramework):
|
||||
# send node 0 taddr to zaddr to get out of coinbase
|
||||
mytaddr = self.nodes[0].getnewaddress();
|
||||
recipients = []
|
||||
recipients.append({"address":myzaddr0, "amount":10.0})
|
||||
recipients.append({"address":myzaddr0, "amount":Decimal('10.0')-Decimal('0.0001')}) # utxo amount less fee
|
||||
myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
|
||||
|
||||
opids = []
|
||||
@@ -35,6 +39,7 @@ class WalletNullifiersTest (BitcoinTestFramework):
|
||||
mytxid = results[0]["result"]["txid"]
|
||||
break
|
||||
|
||||
self.sync_all()
|
||||
self.nodes[0].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
@@ -75,6 +80,7 @@ class WalletNullifiersTest (BitcoinTestFramework):
|
||||
mytxid = results[0]["result"]["txid"]
|
||||
break
|
||||
|
||||
self.sync_all()
|
||||
self.nodes[0].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
@@ -106,6 +112,7 @@ class WalletNullifiersTest (BitcoinTestFramework):
|
||||
mytxid = results[0]["result"]["txid"]
|
||||
break
|
||||
|
||||
self.sync_all()
|
||||
self.nodes[2].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
@@ -146,6 +153,7 @@ class WalletNullifiersTest (BitcoinTestFramework):
|
||||
mytxid = results[0]["result"]["txid"]
|
||||
break
|
||||
|
||||
self.sync_all()
|
||||
self.nodes[1].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
|
||||
@@ -60,32 +60,57 @@ class Wallet2Test (BitcoinTestFramework):
|
||||
# coinbase utxos can only be sent to a zaddr.
|
||||
errorString = ""
|
||||
try:
|
||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 1.0)
|
||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 1)
|
||||
except JSONRPCException,e:
|
||||
errorString = e.error['message']
|
||||
assert_equal("Coinbase funds can only be sent to a zaddr" in errorString, True)
|
||||
|
||||
# send node 0 taddr to node 0 zaddr
|
||||
# Prepare to send taddr->zaddr
|
||||
mytaddr = self.nodes[0].getnewaddress()
|
||||
myzaddr = self.nodes[0].z_getnewaddress()
|
||||
|
||||
# This send will fail because our wallet does not allow any change when protecting a coinbase utxo,
|
||||
# as it's currently not possible to specify a change address in z_sendmany.
|
||||
recipients = []
|
||||
recipients.append({"address":myzaddr, "amount":20.0})
|
||||
recipients.append({"address":myzaddr, "amount":Decimal('1.23456789')})
|
||||
errorString = ""
|
||||
myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
|
||||
opids = []
|
||||
opids.append(myopid)
|
||||
timeout = 10
|
||||
status = None
|
||||
for x in xrange(1, timeout):
|
||||
results = self.nodes[0].z_getoperationresult(opids)
|
||||
if len(results)==0:
|
||||
sleep(1)
|
||||
else:
|
||||
status = results[0]["status"]
|
||||
errorString = results[0]["error"]["message"]
|
||||
break
|
||||
assert_equal("failed", status)
|
||||
assert_equal("wallet does not allow any change" in errorString, True)
|
||||
|
||||
# This send will succeed. We send two coinbase utxos totalling 20.0 less a fee of 0.00010000, with no change.
|
||||
recipients = []
|
||||
recipients.append({"address":myzaddr, "amount": Decimal('20.0') - Decimal('0.0001')})
|
||||
myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
|
||||
self.wait_for_operationd_success(myopid)
|
||||
self.sync_all()
|
||||
self.nodes[1].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
# check balances (the z_sendmany consumes 3 coinbase utxos)
|
||||
resp = self.nodes[0].z_gettotalbalance()
|
||||
assert_equal(Decimal(resp["transparent"]), Decimal('10.0'))
|
||||
assert_equal(Decimal(resp["private"]), Decimal('29.9999'))
|
||||
assert_equal(Decimal(resp["transparent"]), Decimal('20.0'))
|
||||
assert_equal(Decimal(resp["private"]), Decimal('19.9999'))
|
||||
assert_equal(Decimal(resp["total"]), Decimal('39.9999'))
|
||||
|
||||
# convert note to transparent funds
|
||||
recipients = []
|
||||
recipients.append({"address":mytaddr, "amount":20.0})
|
||||
recipients.append({"address":mytaddr, "amount":Decimal('10.0')})
|
||||
myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
|
||||
self.wait_for_operationd_success(myopid)
|
||||
self.sync_all()
|
||||
self.nodes[1].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
@@ -98,29 +123,30 @@ class Wallet2Test (BitcoinTestFramework):
|
||||
# Send will fail because send amount is too big, even when including coinbase utxos
|
||||
errorString = ""
|
||||
try:
|
||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 99999.0)
|
||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 99999)
|
||||
except JSONRPCException,e:
|
||||
errorString = e.error['message']
|
||||
assert_equal("Insufficient funds" in errorString, True)
|
||||
|
||||
# Send will fail because of insufficient funds unless sender uses coinbase utxos
|
||||
try:
|
||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 21.0)
|
||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 21)
|
||||
except JSONRPCException,e:
|
||||
errorString = e.error['message']
|
||||
assert_equal("Insufficient funds, coinbase funds can only be spent after they have been sent to a zaddr" in errorString, True)
|
||||
|
||||
# Send will succeed because the balance of non-coinbase utxos is 20.0
|
||||
# Send will succeed because the balance of non-coinbase utxos is 10.0
|
||||
try:
|
||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 19.0)
|
||||
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 9)
|
||||
except JSONRPCException:
|
||||
assert(False)
|
||||
|
||||
self.nodes[1].generate(10)
|
||||
self.sync_all()
|
||||
self.nodes[1].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
# check balance
|
||||
assert_equal(self.nodes[2].getbalance(), Decimal('19'))
|
||||
assert_equal(self.nodes[2].getbalance(), 9)
|
||||
|
||||
if __name__ == '__main__':
|
||||
Wallet2Test ().main ()
|
||||
|
||||
@@ -32,7 +32,7 @@ make -C "$REPOROOT/src" check-security
|
||||
test_rpath_runpath "${REPOROOT}/src/zcashd"
|
||||
test_rpath_runpath "${REPOROOT}/src/zcash-cli"
|
||||
test_rpath_runpath "${REPOROOT}/src/zcash-gtest"
|
||||
test_rpath_runpath "${REPOROOT}/src/bitcoin-tx"
|
||||
test_rpath_runpath "${REPOROOT}/src/zcash-tx"
|
||||
test_rpath_runpath "${REPOROOT}/src/test/test_bitcoin"
|
||||
test_rpath_runpath "${REPOROOT}/src/zcash/GenerateParams"
|
||||
|
||||
@@ -41,6 +41,6 @@ test_rpath_runpath "${REPOROOT}/src/zcash/GenerateParams"
|
||||
test_fortify_source "${REPOROOT}/src/zcashd"
|
||||
test_fortify_source "${REPOROOT}/src/zcash-cli"
|
||||
test_fortify_source "${REPOROOT}/src/zcash-gtest"
|
||||
test_fortify_source "${REPOROOT}/src/bitcoin-tx"
|
||||
test_fortify_source "${REPOROOT}/src/zcash-tx"
|
||||
test_fortify_source "${REPOROOT}/src/test/test_bitcoin"
|
||||
test_fortify_source "${REPOROOT}/src/zcash/GenerateParams"
|
||||
|
||||
@@ -15,7 +15,7 @@ function zcashd_generate {
|
||||
function zcashd_start {
|
||||
rm -rf "$DATADIR"
|
||||
mkdir -p "$DATADIR"
|
||||
./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 &
|
||||
./src/zcashd -regtest -datadir="$DATADIR" -rpcuser=user -rpcpassword=password -rpcport=5983 -showmetrics=0 &
|
||||
ZCASHD_PID=$!
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ function zcashd_massif_start {
|
||||
rm -rf "$DATADIR"
|
||||
mkdir -p "$DATADIR"
|
||||
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 &
|
||||
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=$!
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ function zcashd_valgrind_start {
|
||||
rm -rf "$DATADIR"
|
||||
mkdir -p "$DATADIR"
|
||||
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 &
|
||||
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=$!
|
||||
}
|
||||
|
||||
|
||||
@@ -52,10 +52,10 @@ EXTRA_LIBRARIES += libbitcoin_wallet.a
|
||||
endif
|
||||
|
||||
if BUILD_BITCOIN_LIBS
|
||||
lib_LTLIBRARIES = libbitcoinconsensus.la
|
||||
LIBBITCOIN_CONSENSUS=libbitcoinconsensus.la
|
||||
lib_LTLIBRARIES = libzcashconsensus.la
|
||||
LIBZCASH_CONSENSUS=libzcashconsensus.la
|
||||
else
|
||||
LIBBITCOIN_CONSENSUS=
|
||||
LIBZCASH_CONSENSUS=
|
||||
endif
|
||||
|
||||
bin_PROGRAMS =
|
||||
@@ -120,6 +120,7 @@ BITCOIN_CORE_H = \
|
||||
main.h \
|
||||
memusage.h \
|
||||
merkleblock.h \
|
||||
metrics.h \
|
||||
miner.h \
|
||||
mruset.h \
|
||||
net.h \
|
||||
@@ -205,6 +206,7 @@ libbitcoin_server_a_SOURCES = \
|
||||
leveldbwrapper.cpp \
|
||||
main.cpp \
|
||||
merkleblock.cpp \
|
||||
metrics.cpp \
|
||||
miner.cpp \
|
||||
net.cpp \
|
||||
noui.cpp \
|
||||
@@ -243,8 +245,13 @@ libbitcoin_wallet_a_SOURCES = \
|
||||
$(BITCOIN_CORE_H) \
|
||||
$(LIBZCASH_H)
|
||||
|
||||
EQUIHASH_TROMP_SOURCES = \
|
||||
pow/tromp/equi_miner.h \
|
||||
pow/tromp/equi.h \
|
||||
pow/tromp/osx_barrier.h
|
||||
|
||||
# crypto primitives library
|
||||
crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES)
|
||||
crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES) -DEQUIHASH_TROMP_ATOMIC
|
||||
crypto_libbitcoin_crypto_a_SOURCES = \
|
||||
crypto/common.h \
|
||||
crypto/equihash.cpp \
|
||||
@@ -261,7 +268,8 @@ crypto_libbitcoin_crypto_a_SOURCES = \
|
||||
crypto/sha256.cpp \
|
||||
crypto/sha256.h \
|
||||
crypto/sha512.cpp \
|
||||
crypto/sha512.h
|
||||
crypto/sha512.h \
|
||||
${EQUIHASH_TROMP_SOURCES}
|
||||
|
||||
# univalue JSON library
|
||||
univalue_libbitcoin_univalue_a_SOURCES = \
|
||||
@@ -393,17 +401,17 @@ komodo_cli_LDADD = \
|
||||
$(LIBZCASH_LIBS)
|
||||
#
|
||||
|
||||
# bitcoin-tx binary #
|
||||
bitcoin_tx_SOURCES = bitcoin-tx.cpp
|
||||
bitcoin_tx_CPPFLAGS = $(BITCOIN_INCLUDES)
|
||||
bitcoin_tx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
# zcash-tx binary #
|
||||
zcash_tx_SOURCES = bitcoin-tx.cpp
|
||||
zcash_tx_CPPFLAGS = $(BITCOIN_INCLUDES)
|
||||
zcash_tx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
|
||||
if TARGET_WINDOWS
|
||||
bitcoin_tx_SOURCES += bitcoin-tx-res.rc
|
||||
zcash_tx_SOURCES += bitcoin-tx-res.rc
|
||||
endif
|
||||
|
||||
# FIXME: Is libzcash needed for bitcoin_tx?
|
||||
bitcoin_tx_LDADD = \
|
||||
# FIXME: Is libzcash needed for zcash_tx?
|
||||
zcash_tx_LDADD = \
|
||||
$(LIBBITCOIN_UNIVALUE) \
|
||||
$(LIBBITCOIN_COMMON) \
|
||||
$(LIBBITCOIN_UTIL) \
|
||||
@@ -412,7 +420,7 @@ bitcoin_tx_LDADD = \
|
||||
$(LIBBITCOIN_CRYPTO) \
|
||||
$(LIBZCASH_LIBS)
|
||||
|
||||
bitcoin_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
|
||||
zcash_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS)
|
||||
#
|
||||
|
||||
# zcash protocol primitives #
|
||||
@@ -440,10 +448,10 @@ libzcash_a_LDFLAGS = $(HARDENED_LDFLAGS)
|
||||
|
||||
libzcash_a_CPPFLAGS += -DMONTGOMERY_OUTPUT
|
||||
|
||||
# bitcoinconsensus library #
|
||||
# zcashconsensus library #
|
||||
if BUILD_BITCOIN_LIBS
|
||||
include_HEADERS = script/bitcoinconsensus.h
|
||||
libbitcoinconsensus_la_SOURCES = \
|
||||
include_HEADERS = script/zcashconsensus.h
|
||||
libzcashconsensus_la_SOURCES = \
|
||||
crypto/equihash.cpp \
|
||||
crypto/hmac_sha512.cpp \
|
||||
crypto/ripemd160.cpp \
|
||||
@@ -455,19 +463,19 @@ libbitcoinconsensus_la_SOURCES = \
|
||||
hash.cpp \
|
||||
primitives/transaction.cpp \
|
||||
pubkey.cpp \
|
||||
script/bitcoinconsensus.cpp \
|
||||
script/zcashconsensus.cpp \
|
||||
script/interpreter.cpp \
|
||||
script/script.cpp \
|
||||
uint256.cpp \
|
||||
utilstrencodings.cpp
|
||||
|
||||
if GLIBC_BACK_COMPAT
|
||||
libbitcoinconsensus_la_SOURCES += compat/glibc_compat.cpp
|
||||
libzcashconsensus_la_SOURCES += compat/glibc_compat.cpp
|
||||
endif
|
||||
|
||||
libbitcoinconsensus_la_LDFLAGS = -no-undefined $(RELDFLAGS)
|
||||
libbitcoinconsensus_la_LIBADD = $(CRYPTO_LIBS)
|
||||
libbitcoinconsensus_la_CPPFLAGS = $(CRYPTO_CFLAGS) -I$(builddir)/obj -DBUILD_BITCOIN_INTERNAL
|
||||
libzcashconsensus_la_LDFLAGS = -no-undefined $(RELDFLAGS)
|
||||
libzcashconsensus_la_LIBADD = $(CRYPTO_LIBS)
|
||||
libzcashconsensus_la_CPPFLAGS = $(CRYPTO_CFLAGS) -I$(builddir)/obj -DBUILD_BITCOIN_INTERNAL
|
||||
|
||||
endif
|
||||
#
|
||||
|
||||
@@ -4,6 +4,8 @@ bin_PROGRAMS += komodo-gtest
|
||||
# tool for generating our public parameters
|
||||
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 \
|
||||
@@ -17,7 +19,9 @@ komodo_gtest_SOURCES = \
|
||||
gtest/test_noteencryption.cpp \
|
||||
gtest/test_merkletree.cpp \
|
||||
gtest/test_pow.cpp \
|
||||
gtest/test_random.cpp \
|
||||
gtest/test_rpc.cpp \
|
||||
gtest/test_transaction.cpp \
|
||||
gtest/test_circuit.cpp \
|
||||
gtest/test_txid.cpp \
|
||||
gtest/test_libzcash_utils.cpp \
|
||||
|
||||
@@ -103,7 +103,7 @@ if ENABLE_WALLET
|
||||
test_test_bitcoin_LDADD += $(LIBBITCOIN_WALLET)
|
||||
endif
|
||||
|
||||
test_test_bitcoin_LDADD += $(LIBBITCOIN_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBZCASH) $(LIBZCASH_LIBS)
|
||||
test_test_bitcoin_LDADD += $(LIBZCASH_CONSENSUS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBZCASH) $(LIBZCASH_LIBS)
|
||||
test_test_bitcoin_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static
|
||||
|
||||
nodist_test_test_bitcoin_SOURCES = $(GENERATED_TEST_FILES)
|
||||
|
||||
@@ -16,14 +16,14 @@ BEGIN
|
||||
BEGIN
|
||||
BLOCK "040904E4" // U.S. English - multilingual (hex)
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Bitcoin"
|
||||
VALUE "FileDescription", "bitcoin-tx (CLI Bitcoin transaction editor utility)"
|
||||
VALUE "CompanyName", "Zcash"
|
||||
VALUE "FileDescription", "zcash-tx (CLI Zcash transaction editor utility)"
|
||||
VALUE "FileVersion", VER_FILEVERSION_STR
|
||||
VALUE "InternalName", "bitcoin-tx"
|
||||
VALUE "InternalName", "zcash-tx"
|
||||
VALUE "LegalCopyright", COPYRIGHT_STR
|
||||
VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
|
||||
VALUE "OriginalFilename", "bitcoin-tx.exe"
|
||||
VALUE "ProductName", "bitcoin-tx"
|
||||
VALUE "OriginalFilename", "zcash-tx.exe"
|
||||
VALUE "ProductName", "zcash-tx"
|
||||
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
||||
END
|
||||
END
|
||||
|
||||
@@ -46,10 +46,10 @@ static bool 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 = _("Bitcoin Core bitcoin-tx utility version") + " " + FormatFullVersion() + "\n\n" +
|
||||
std::string strUsage = _("Zcash zcash-tx utility version") + " " + FormatFullVersion() + "\n\n" +
|
||||
_("Usage:") + "\n" +
|
||||
" bitcoin-tx [options] <hex-tx> [commands] " + _("Update hex-encoded bitcoin transaction") + "\n" +
|
||||
" bitcoin-tx [options] -create [commands] " + _("Create hex-encoded bitcoin transaction") + "\n" +
|
||||
" zcash-tx [options] <hex-tx> [commands] " + _("Update hex-encoded zcash transaction") + "\n" +
|
||||
" zcash-tx [options] -create [commands] " + _("Create hex-encoded zcash transaction") + "\n" +
|
||||
"\n";
|
||||
|
||||
fprintf(stdout, "%s", strUsage.c_str());
|
||||
@@ -159,7 +159,7 @@ static void RegisterLoad(const string& strInput)
|
||||
static void MutateTxVersion(CMutableTransaction& tx, const string& cmdVal)
|
||||
{
|
||||
int64_t newVersion = atoi64(cmdVal);
|
||||
if (newVersion < 1 || newVersion > CTransaction::CURRENT_VERSION)
|
||||
if (newVersion < CTransaction::MIN_CURRENT_VERSION || newVersion > CTransaction::MAX_CURRENT_VERSION)
|
||||
throw runtime_error("Invalid TX version requested");
|
||||
|
||||
tx.nVersion = (int) newVersion;
|
||||
|
||||
@@ -324,11 +324,6 @@ public:
|
||||
READWRITE(VARINT(nDataPos));
|
||||
if (nStatus & BLOCK_HAVE_UNDO)
|
||||
READWRITE(VARINT(nUndoPos));
|
||||
uint8_t tag = 0;
|
||||
READWRITE(tag);
|
||||
if (ser_action.ForRead() && tag != 0) {
|
||||
assert(!"For the first time running zcashd after upgrading to v1.0.0-rc1, please use the -reindex option.");
|
||||
}
|
||||
READWRITE(hashAnchor);
|
||||
|
||||
// block header
|
||||
|
||||
@@ -42,9 +42,7 @@ public:
|
||||
consensus.nMajorityEnforceBlockUpgrade = 750;
|
||||
consensus.nMajorityRejectBlockOutdated = 950;
|
||||
consensus.nMajorityWindow = 4000;
|
||||
// TODO generate harder genesis block
|
||||
//consensus.powLimit = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
||||
consensus.powLimit = uint256S("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f");
|
||||
consensus.powLimit = uint256S("0007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
||||
consensus.nPowAveragingWindow = 17;
|
||||
assert(maxUint/UintToArith256(consensus.powLimit) >= consensus.nPowAveragingWindow);
|
||||
consensus.nPowMaxAdjustDown = 32; // 32% adjustment down
|
||||
@@ -62,6 +60,7 @@ public:
|
||||
pchMessageStart[3] = 0x8d;
|
||||
vAlertPubKey = ParseHex("020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9");
|
||||
nDefaultPort = 7770;
|
||||
|
||||
nMinerThreads = 0;
|
||||
nMaxTipAge = 24 * 60 * 60;
|
||||
nPruneAfterHeight = 100000;
|
||||
@@ -73,24 +72,22 @@ public:
|
||||
/**
|
||||
* Build the genesis block. Note that the output of its generation
|
||||
* transaction cannot be spent since it did not originally exist in the
|
||||
* database.
|
||||
* database (and is in any case of zero value).
|
||||
*
|
||||
* CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1)
|
||||
* CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
|
||||
* CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73)
|
||||
* CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B)
|
||||
* vMerkleTree: 4a5e1e
|
||||
* >>> from pyblake2 import blake2s
|
||||
* >>> 'Zcash' + blake2s(b'The Economist 2016-10-29 Known unknown: Another crypto-currency is born. BTC#436254 0000000000000000044f321997f336d2908cf8c8d6893e88dbf067e2d949487d ETH#2521903 483039a6b6bd8bd05f0584f9a078d075e454925eb71c1f13eaff59b405a721bb DJIA close on 27 Oct 2016: 18,169.68').hexdigest()
|
||||
*/
|
||||
const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
|
||||
const char* pszTimestamp = "Zcash0b9c4eef8b7cc417ee5001e3500984b6fea35683a7cac141a043c42064835d34";
|
||||
CMutableTransaction txNew;
|
||||
txNew.vin.resize(1);
|
||||
txNew.vout.resize(1);
|
||||
txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
|
||||
txNew.vout[0].nValue = 50 * COIN;
|
||||
txNew.vin[0].scriptSig = CScript() << 520617983 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
|
||||
txNew.vout[0].nValue = 0;
|
||||
txNew.vout[0].scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG;
|
||||
genesis.vtx.push_back(txNew);
|
||||
genesis.hashPrevBlock.SetNull();
|
||||
genesis.hashMerkleRoot = genesis.BuildMerkleTree();
|
||||
|
||||
genesis.nVersion = 1;
|
||||
genesis.nTime = 1231006505;
|
||||
// TODO generate harder genesis block
|
||||
@@ -100,11 +97,12 @@ public:
|
||||
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();
|
||||
|
||||
// TODO: set up bootstrapping for mainnet
|
||||
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,60);
|
||||
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,85);
|
||||
@@ -162,7 +160,7 @@ 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] = 0x5A;
|
||||
@@ -172,7 +170,6 @@ public:
|
||||
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.
|
||||
@@ -181,7 +178,7 @@ public:
|
||||
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();
|
||||
@@ -200,7 +197,7 @@ public:
|
||||
fRequireRPCPassword = true;
|
||||
fMiningRequiresPeers = false;//true;
|
||||
fDefaultConsistencyChecks = false;
|
||||
fRequireStandard = false;
|
||||
fRequireStandard = true;
|
||||
fMineBlocksOnDemand = false;
|
||||
fTestnetToBeDeprecatedFieldRPC = true;
|
||||
|
||||
@@ -351,14 +348,6 @@ std::string CChainParams::GetFoundersRewardAddressAtHeight(int nHeight) const {
|
||||
CScript CChainParams::GetFoundersRewardScriptAtHeight(int nHeight) const {
|
||||
assert(nHeight > 0 && nHeight <= consensus.GetLastFoundersRewardBlockHeight());
|
||||
|
||||
// #1398 START
|
||||
// We can remove this code when miner_tests no longer expect this script
|
||||
if (fMinerTestModeForFoundersRewardScript) {
|
||||
auto rewardScript = ParseHex("a9146708e6670db0b950dac68031025cc5b63213a49187");
|
||||
return CScript(rewardScript.begin(), rewardScript.end());
|
||||
}
|
||||
// #1398 END
|
||||
|
||||
CBitcoinAddress address(GetFoundersRewardAddressAtHeight(nHeight).c_str());
|
||||
assert(address.IsValid());
|
||||
assert(address.IsScript());
|
||||
|
||||
@@ -83,8 +83,6 @@ public:
|
||||
std::string GetFoundersRewardAddressAtHeight(int height) const;
|
||||
CScript GetFoundersRewardScriptAtHeight(int height) const;
|
||||
std::string GetFoundersRewardAddressAtIndex(int i) const;
|
||||
/** #1398 to return a fixed founders reward script for miner_tests */
|
||||
bool fMinerTestModeForFoundersRewardScript = false;
|
||||
/** Enforce coinbase consensus rule in regtest mode */
|
||||
void SetRegTestCoinbaseMustBeProtected() { consensus.fCoinbaseMustBeProtected = true; }
|
||||
protected:
|
||||
@@ -94,23 +92,23 @@ protected:
|
||||
CMessageHeader::MessageStartChars pchMessageStart;
|
||||
//! Raw pub key bytes for the broadcast alert signing key.
|
||||
std::vector<unsigned char> vAlertPubKey;
|
||||
int nDefaultPort;
|
||||
int nMinerThreads;
|
||||
long nMaxTipAge;
|
||||
uint64_t nPruneAfterHeight;
|
||||
unsigned int nEquihashN;
|
||||
unsigned int nEquihashK;
|
||||
int nDefaultPort = 0;
|
||||
int nMinerThreads = 0;
|
||||
long nMaxTipAge = 0;
|
||||
uint64_t nPruneAfterHeight = 0;
|
||||
unsigned int nEquihashN = 0;
|
||||
unsigned int nEquihashK = 0;
|
||||
std::vector<CDNSSeedData> vSeeds;
|
||||
std::vector<unsigned char> base58Prefixes[MAX_BASE58_TYPES];
|
||||
std::string strNetworkID;
|
||||
CBlock genesis;
|
||||
std::vector<SeedSpec6> vFixedSeeds;
|
||||
bool fRequireRPCPassword;
|
||||
bool fMiningRequiresPeers;
|
||||
bool fDefaultConsistencyChecks;
|
||||
bool fRequireStandard;
|
||||
bool fMineBlocksOnDemand;
|
||||
bool fTestnetToBeDeprecatedFieldRPC;
|
||||
bool fRequireRPCPassword = false;
|
||||
bool fMiningRequiresPeers = false;
|
||||
bool fDefaultConsistencyChecks = false;
|
||||
bool fRequireStandard = false;
|
||||
bool fMineBlocksOnDemand = false;
|
||||
bool fTestnetToBeDeprecatedFieldRPC = false;
|
||||
Checkpoints::CCheckpointData checkpointData;
|
||||
std::vector<std::string> vFoundersRewardAddress;
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
protected:
|
||||
CBaseChainParams() {}
|
||||
|
||||
int nRPCPort;
|
||||
int nRPCPort = 0;
|
||||
std::string strDataDir;
|
||||
};
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
#define CLIENT_VERSION_MAJOR 1
|
||||
#define CLIENT_VERSION_MINOR 0
|
||||
#define CLIENT_VERSION_REVISION 0
|
||||
#define CLIENT_VERSION_BUILD 1
|
||||
#define CLIENT_VERSION_BUILD 50
|
||||
|
||||
//! Set to true for release, false for prerelease or test build
|
||||
#define CLIENT_VERSION_IS_RELEASE false
|
||||
#define CLIENT_VERSION_IS_RELEASE true
|
||||
|
||||
/**
|
||||
* Copyright year (2009-this)
|
||||
@@ -38,7 +38,7 @@
|
||||
#define DO_STRINGIZE(X) #X
|
||||
|
||||
//! Copyright string used in Windows .rc files
|
||||
#define COPYRIGHT_STR "2009-" STRINGIZE(COPYRIGHT_YEAR) " The Bitcoin Core Developers"
|
||||
#define COPYRIGHT_STR "2009-" STRINGIZE(COPYRIGHT_YEAR) " The Bitcoin Core Developers and The Zcash developers"
|
||||
|
||||
/**
|
||||
* bitcoind-res.rc includes this file, but it cannot cope with real c++ code.
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#include <windows.h>
|
||||
#include <ws2tcpip.h>
|
||||
#else
|
||||
#include <sys/fcntl.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -86,8 +86,14 @@ public:
|
||||
return;
|
||||
}
|
||||
nSize -= nSpecialScripts;
|
||||
script.resize(nSize);
|
||||
s >> REF(CFlatData(script));
|
||||
if (nSize > MAX_SCRIPT_SIZE) {
|
||||
// Overly long script, replace with a short invalid one
|
||||
script << OP_RETURN;
|
||||
s.ignore(nSize);
|
||||
} else {
|
||||
script.resize(nSize);
|
||||
s >> REF(CFlatData(script));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
#ifndef BITCOIN_CONSENSUS_CONSENSUS_H
|
||||
#define BITCOIN_CONSENSUS_CONSENSUS_H
|
||||
|
||||
/** The minimum allowed block version (network rule) */
|
||||
static const int32_t MIN_BLOCK_VERSION = 4;
|
||||
/** The minimum allowed transaction version (network rule) */
|
||||
static const int32_t MIN_TX_VERSION = 1;
|
||||
/** The maximum allowed size for a serialized block, in bytes (network rule) */
|
||||
static const unsigned int MAX_BLOCK_SIZE = 2000000;
|
||||
/** The maximum allowed number of signature check operations in a block (network rule) */
|
||||
|
||||
31
src/gtest/test_checkblock.cpp
Normal file
31
src/gtest/test_checkblock.cpp
Normal file
@@ -0,0 +1,31 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <gmock/gmock.h>
|
||||
|
||||
#include "consensus/validation.h"
|
||||
#include "main.h"
|
||||
|
||||
class MockCValidationState : public CValidationState {
|
||||
public:
|
||||
MOCK_METHOD5(DoS, bool(int level, bool ret,
|
||||
unsigned char chRejectCodeIn, std::string strRejectReasonIn,
|
||||
bool corruptionIn));
|
||||
MOCK_METHOD3(Invalid, bool(bool ret,
|
||||
unsigned char _chRejectCode, std::string _strRejectReason));
|
||||
MOCK_METHOD1(Error, bool(std::string strRejectReasonIn));
|
||||
MOCK_CONST_METHOD0(IsValid, bool());
|
||||
MOCK_CONST_METHOD0(IsInvalid, bool());
|
||||
MOCK_CONST_METHOD0(IsError, bool());
|
||||
MOCK_CONST_METHOD1(IsInvalid, bool(int &nDoSOut));
|
||||
MOCK_CONST_METHOD0(CorruptionPossible, bool());
|
||||
MOCK_CONST_METHOD0(GetRejectCode, unsigned char());
|
||||
MOCK_CONST_METHOD0(GetRejectReason, std::string());
|
||||
};
|
||||
|
||||
TEST(CheckBlock, VersionTooLow) {
|
||||
CBlock block;
|
||||
block.nVersion = 1;
|
||||
|
||||
MockCValidationState state;
|
||||
EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "version-too-low", false)).Times(1);
|
||||
EXPECT_FALSE(CheckBlock(block, state, false, false));
|
||||
}
|
||||
@@ -94,6 +94,16 @@ TEST(checktransaction_tests, valid_transaction) {
|
||||
EXPECT_TRUE(CheckTransactionWithoutProofVerification(tx, state));
|
||||
}
|
||||
|
||||
TEST(checktransaction_tests, BadVersionTooLow) {
|
||||
CMutableTransaction mtx = GetValidTransaction();
|
||||
mtx.nVersion = 0;
|
||||
|
||||
CTransaction tx(mtx);
|
||||
MockCValidationState state;
|
||||
EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-txns-version-too-low", false)).Times(1);
|
||||
CheckTransactionWithoutProofVerification(tx, state);
|
||||
}
|
||||
|
||||
TEST(checktransaction_tests, bad_txns_vin_empty) {
|
||||
CMutableTransaction mtx = GetValidTransaction();
|
||||
mtx.vjoinsplit.resize(0);
|
||||
|
||||
27
src/gtest/test_random.cpp
Normal file
27
src/gtest/test_random.cpp
Normal file
@@ -0,0 +1,27 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "random.h"
|
||||
|
||||
extern int GenZero(int n);
|
||||
extern int GenMax(int n);
|
||||
|
||||
TEST(Random, MappedShuffle) {
|
||||
std::vector<int> a {8, 4, 6, 3, 5};
|
||||
std::vector<int> m {0, 1, 2, 3, 4};
|
||||
|
||||
auto a1 = a;
|
||||
auto m1 = m;
|
||||
MappedShuffle(a1.begin(), m1.begin(), a1.size(), GenZero);
|
||||
std::vector<int> ea1 {4, 6, 3, 5, 8};
|
||||
std::vector<int> em1 {1, 2, 3, 4, 0};
|
||||
EXPECT_EQ(ea1, a1);
|
||||
EXPECT_EQ(em1, m1);
|
||||
|
||||
auto a2 = a;
|
||||
auto m2 = m;
|
||||
MappedShuffle(a2.begin(), m2.begin(), a2.size(), GenMax);
|
||||
std::vector<int> ea2 {8, 4, 6, 3, 5};
|
||||
std::vector<int> em2 {0, 1, 2, 3, 4};
|
||||
EXPECT_EQ(ea2, a2);
|
||||
EXPECT_EQ(em2, m2);
|
||||
}
|
||||
85
src/gtest/test_transaction.cpp
Normal file
85
src/gtest/test_transaction.cpp
Normal file
@@ -0,0 +1,85 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "primitives/transaction.h"
|
||||
#include "zcash/Note.hpp"
|
||||
#include "zcash/Address.hpp"
|
||||
|
||||
extern ZCJoinSplit* params;
|
||||
extern int GenZero(int n);
|
||||
extern int GenMax(int n);
|
||||
|
||||
TEST(Transaction, JSDescriptionRandomized) {
|
||||
// construct a merkle tree
|
||||
ZCIncrementalMerkleTree merkleTree;
|
||||
|
||||
libzcash::SpendingKey k = libzcash::SpendingKey::random();
|
||||
libzcash::PaymentAddress addr = k.address();
|
||||
|
||||
libzcash::Note note(addr.a_pk, 100, uint256(), uint256());
|
||||
|
||||
// commitment from coin
|
||||
uint256 commitment = note.cm();
|
||||
|
||||
// insert commitment into the merkle tree
|
||||
merkleTree.append(commitment);
|
||||
|
||||
// compute the merkle root we will be working with
|
||||
uint256 rt = merkleTree.root();
|
||||
|
||||
auto witness = merkleTree.witness();
|
||||
|
||||
// create JSDescription
|
||||
uint256 pubKeyHash;
|
||||
boost::array<libzcash::JSInput, ZC_NUM_JS_INPUTS> inputs = {
|
||||
libzcash::JSInput(witness, note, k),
|
||||
libzcash::JSInput() // dummy input of zero value
|
||||
};
|
||||
boost::array<libzcash::JSOutput, ZC_NUM_JS_OUTPUTS> outputs = {
|
||||
libzcash::JSOutput(addr, 50),
|
||||
libzcash::JSOutput(addr, 50)
|
||||
};
|
||||
boost::array<size_t, ZC_NUM_JS_INPUTS> inputMap;
|
||||
boost::array<size_t, ZC_NUM_JS_OUTPUTS> outputMap;
|
||||
|
||||
{
|
||||
auto jsdesc = JSDescription::Randomized(
|
||||
*params, pubKeyHash, rt,
|
||||
inputs, outputs,
|
||||
inputMap, outputMap,
|
||||
0, 0, false);
|
||||
|
||||
std::set<size_t> inputSet(inputMap.begin(), inputMap.end());
|
||||
std::set<size_t> expectedInputSet {0, 1};
|
||||
EXPECT_EQ(expectedInputSet, inputSet);
|
||||
|
||||
std::set<size_t> outputSet(outputMap.begin(), outputMap.end());
|
||||
std::set<size_t> expectedOutputSet {0, 1};
|
||||
EXPECT_EQ(expectedOutputSet, outputSet);
|
||||
}
|
||||
|
||||
{
|
||||
auto jsdesc = JSDescription::Randomized(
|
||||
*params, pubKeyHash, rt,
|
||||
inputs, outputs,
|
||||
inputMap, outputMap,
|
||||
0, 0, false, GenZero);
|
||||
|
||||
boost::array<size_t, ZC_NUM_JS_INPUTS> expectedInputMap {1, 0};
|
||||
boost::array<size_t, ZC_NUM_JS_OUTPUTS> expectedOutputMap {1, 0};
|
||||
EXPECT_EQ(expectedInputMap, inputMap);
|
||||
EXPECT_EQ(expectedOutputMap, outputMap);
|
||||
}
|
||||
|
||||
{
|
||||
auto jsdesc = JSDescription::Randomized(
|
||||
*params, pubKeyHash, rt,
|
||||
inputs, outputs,
|
||||
inputMap, outputMap,
|
||||
0, 0, false, GenMax);
|
||||
|
||||
boost::array<size_t, ZC_NUM_JS_INPUTS> expectedInputMap {0, 1};
|
||||
boost::array<size_t, ZC_NUM_JS_OUTPUTS> expectedOutputMap {0, 1};
|
||||
EXPECT_EQ(expectedInputMap, inputMap);
|
||||
EXPECT_EQ(expectedOutputMap, outputMap);
|
||||
}
|
||||
}
|
||||
13
src/gtest/utils.cpp
Normal file
13
src/gtest/utils.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "zcash/JoinSplit.hpp"
|
||||
|
||||
ZCJoinSplit* params = ZCJoinSplit::Unopened();
|
||||
|
||||
int GenZero(int n)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GenMax(int n)
|
||||
{
|
||||
return n-1;
|
||||
}
|
||||
28
src/init.cpp
28
src/init.cpp
@@ -16,6 +16,7 @@
|
||||
#include "consensus/validation.h"
|
||||
#include "key.h"
|
||||
#include "main.h"
|
||||
#include "metrics.h"
|
||||
#include "miner.h"
|
||||
#include "net.h"
|
||||
#include "rpcserver.h"
|
||||
@@ -110,7 +111,7 @@ CClientUIInterface uiInterface; // Declared but not defined in ui_interface.h
|
||||
// shutdown thing.
|
||||
//
|
||||
|
||||
volatile bool fRequestShutdown = false;
|
||||
std::atomic<bool> fRequestShutdown(false);
|
||||
|
||||
void StartShutdown()
|
||||
{
|
||||
@@ -156,7 +157,7 @@ void Shutdown()
|
||||
/// for example if the data directory was found to be locked.
|
||||
/// Be sure that anything that writes files or flushes caches only does this if the respective
|
||||
/// module was initialized.
|
||||
RenameThread("bitcoin-shutoff");
|
||||
RenameThread("zcash-shutoff");
|
||||
mempool.AddTransactionsUpdated(1);
|
||||
StopRPCThreads();
|
||||
#ifdef ENABLE_WALLET
|
||||
@@ -383,6 +384,7 @@ std::string HelpMessage(HelpMessageMode mode)
|
||||
#ifdef ENABLE_WALLET
|
||||
strUsage += HelpMessageOpt("-gen", strprintf(_("Generate coins (default: %u)"), 0));
|
||||
strUsage += HelpMessageOpt("-genproclimit=<n>", strprintf(_("Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)"), 1));
|
||||
strUsage += HelpMessageOpt("-equihashsolver=<name>", _("Specify the Equihash solver to be used if enabled (default: \"default\")"));
|
||||
#endif
|
||||
strUsage += HelpMessageOpt("-help-debug", _("Show all debugging options (usage: --help -help-debug)"));
|
||||
strUsage += HelpMessageOpt("-logips", strprintf(_("Include IP addresses in debug output (default: %u)"), 0));
|
||||
@@ -529,7 +531,7 @@ void CleanupBlockRevFiles()
|
||||
|
||||
void ThreadImport(std::vector<boost::filesystem::path> vImportFiles)
|
||||
{
|
||||
RenameThread("bitcoin-loadblk");
|
||||
RenameThread("zcash-loadblk");
|
||||
// -reindex
|
||||
if (fReindex) {
|
||||
#ifdef ENABLE_WALLET
|
||||
@@ -613,8 +615,8 @@ static void ZC_LoadParams()
|
||||
struct timeval tv_start, tv_end;
|
||||
float elapsed;
|
||||
|
||||
boost::filesystem::path pk_path = ZC_GetParamsDir() / "beta2-proving.key";
|
||||
boost::filesystem::path vk_path = ZC_GetParamsDir() / "beta2-verifying.key";
|
||||
boost::filesystem::path pk_path = ZC_GetParamsDir() / "sprout-proving.key";
|
||||
boost::filesystem::path vk_path = ZC_GetParamsDir() / "sprout-verifying.key";
|
||||
|
||||
pzcashParams = ZCJoinSplit::Unopened();
|
||||
|
||||
@@ -924,7 +926,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||
|
||||
// Sanity check
|
||||
if (!InitSanityCheck())
|
||||
return InitError(_("Initialization sanity check failed. Bitcoin Core is shutting down."));
|
||||
return InitError(_("Initialization sanity check failed. Zcash is shutting down."));
|
||||
|
||||
std::string strDataDir = GetDataDir().string();
|
||||
#ifdef ENABLE_WALLET
|
||||
@@ -940,9 +942,9 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||
try {
|
||||
static boost::interprocess::file_lock lock(pathLockFile.string().c_str());
|
||||
if (!lock.try_lock())
|
||||
return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running."), strDataDir));
|
||||
return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Zcash is probably already running."), strDataDir));
|
||||
} catch(const boost::interprocess::interprocess_exception& e) {
|
||||
return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin Core is probably already running.") + " %s.", strDataDir, e.what()));
|
||||
return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Zcash is probably already running.") + " %s.", strDataDir, e.what()));
|
||||
}
|
||||
|
||||
#ifndef WIN32
|
||||
@@ -951,7 +953,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||
if (GetBoolArg("-shrinkdebugfile", !fDebug))
|
||||
ShrinkDebugFile();
|
||||
LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
|
||||
LogPrintf("Bitcoin version %s (%s)\n", FormatFullVersion(), CLIENT_DATE);
|
||||
LogPrintf("Zcash version %s (%s)\n", FormatFullVersion(), CLIENT_DATE);
|
||||
LogPrintf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION));
|
||||
#ifdef ENABLE_WALLET
|
||||
LogPrintf("Using BerkeleyDB version %s\n", DbEnv::version(0, 0, 0));
|
||||
@@ -974,6 +976,14 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||
CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler);
|
||||
threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));
|
||||
|
||||
if ((chainparams.NetworkIDString() != "regtest") &&
|
||||
GetBoolArg("-showmetrics", true) &&
|
||||
!fPrintToConsole && !GetBoolArg("-daemon", false)) {
|
||||
// Start the persistent metrics interface
|
||||
ConnectMetricsScreen();
|
||||
threadGroup.create_thread(&ThreadShowMetricsScreen);
|
||||
}
|
||||
|
||||
// Initialize Zcash circuit parameters
|
||||
ZC_LoadParams();
|
||||
// These must be disabled for now, they are buggy and we probably don't
|
||||
|
||||
52
src/main.cpp
52
src/main.cpp
@@ -16,6 +16,7 @@
|
||||
#include "consensus/validation.h"
|
||||
#include "init.h"
|
||||
#include "merkleblock.h"
|
||||
#include "metrics.h"
|
||||
#include "net.h"
|
||||
#include "pow.h"
|
||||
#include "txdb.h"
|
||||
@@ -38,7 +39,7 @@
|
||||
using namespace std;
|
||||
|
||||
#if defined(NDEBUG)
|
||||
# error "Bitcoin cannot be compiled without assertions."
|
||||
# error "Zcash cannot be compiled without assertions."
|
||||
#endif
|
||||
|
||||
|
||||
@@ -577,7 +578,7 @@ bool AddOrphanTx(const CTransaction& tx, NodeId peer)
|
||||
// have been mined or received.
|
||||
// 10,000 orphans, each of which is at most 5,000 bytes big is
|
||||
// at most 500 megabytes of orphans:
|
||||
unsigned int sz = tx.GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION);
|
||||
unsigned int sz = tx.GetSerializeSize(SER_NETWORK, tx.nVersion);
|
||||
if (sz > 5000)
|
||||
{
|
||||
LogPrint("mempool", "ignoring large orphan tx (size: %u, hash: %s)\n", sz, hash.ToString());
|
||||
@@ -652,7 +653,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans)
|
||||
|
||||
bool IsStandardTx(const CTransaction& tx, string& reason)
|
||||
{
|
||||
if (tx.nVersion > CTransaction::CURRENT_VERSION || tx.nVersion < 1) {
|
||||
if (tx.nVersion > CTransaction::MAX_CURRENT_VERSION || tx.nVersion < CTransaction::MIN_CURRENT_VERSION) {
|
||||
reason = "version";
|
||||
return false;
|
||||
}
|
||||
@@ -863,6 +864,11 @@ unsigned int GetP2SHSigOpCount(const CTransaction& tx, const CCoinsViewCache& in
|
||||
|
||||
bool CheckTransaction(const CTransaction& tx, CValidationState &state)
|
||||
{
|
||||
// Don't count coinbase transactions because mining skews the count
|
||||
if (!tx.IsCoinBase()) {
|
||||
transactionsValidated.increment();
|
||||
}
|
||||
|
||||
if (!CheckTransactionWithoutProofVerification(tx, state)) {
|
||||
return false;
|
||||
} else {
|
||||
@@ -881,6 +887,12 @@ bool CheckTransactionWithoutProofVerification(const CTransaction& tx, CValidatio
|
||||
{
|
||||
// Basic checks that don't depend on any context
|
||||
|
||||
// Check transaction version
|
||||
if (tx.nVersion < MIN_TX_VERSION) {
|
||||
return state.DoS(100, error("CheckTransaction(): version too low"),
|
||||
REJECT_INVALID, "bad-txns-version-too-low");
|
||||
}
|
||||
|
||||
// Transactions can contain empty `vin` and `vout` so long as
|
||||
// `vjoinsplit` is non-empty.
|
||||
if (tx.vin.empty() && tx.vjoinsplit.empty())
|
||||
@@ -2006,7 +2018,7 @@ bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigne
|
||||
static CCheckQueue<CScriptCheck> scriptcheckqueue(128);
|
||||
|
||||
void ThreadScriptCheck() {
|
||||
RenameThread("bitcoin-scriptch");
|
||||
RenameThread("zcash-scriptch");
|
||||
scriptcheckqueue.Thread();
|
||||
}
|
||||
|
||||
@@ -3003,14 +3015,15 @@ bool CheckBlockHeader(int32_t height,CBlockIndex *pindex, const CBlockHeader& bl
|
||||
// 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(&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()];
|
||||
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");
|
||||
@@ -4916,6 +4929,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
// the getaddr message mitigates the attack.
|
||||
else if ((strCommand == "getaddr") && (pfrom->fInbound))
|
||||
{
|
||||
// Only send one GetAddr response per connection to reduce resource waste
|
||||
// and discourage addr stamping of INV announcements.
|
||||
if (pfrom->fSentAddr) {
|
||||
LogPrint("net", "Ignoring repeated \"getaddr\". peer=%d\n", pfrom->id);
|
||||
return true;
|
||||
}
|
||||
pfrom->fSentAddr = true;
|
||||
|
||||
pfrom->vAddrToSend.clear();
|
||||
vector<CAddress> vAddr = addrman.GetAddr();
|
||||
BOOST_FOREACH(const CAddress &addr, vAddr)
|
||||
@@ -5130,15 +5151,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
}
|
||||
}
|
||||
}
|
||||
/*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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
223
src/metrics.cpp
Normal file
223
src/metrics.cpp
Normal file
@@ -0,0 +1,223 @@
|
||||
// Copyright (c) 2016 The Zcash developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "metrics.h"
|
||||
|
||||
#include "chainparams.h"
|
||||
#include "ui_interface.h"
|
||||
#include "util.h"
|
||||
#include "utiltime.h"
|
||||
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/synchronized_value.hpp>
|
||||
#include <string>
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
AtomicCounter transactionsValidated;
|
||||
AtomicCounter ehSolverRuns;
|
||||
AtomicCounter solutionTargetChecks;
|
||||
AtomicCounter minedBlocks;
|
||||
|
||||
boost::synchronized_value<std::list<std::string>> messageBox;
|
||||
boost::synchronized_value<std::string> initMessage;
|
||||
bool loaded = false;
|
||||
|
||||
static bool metrics_ThreadSafeMessageBox(const std::string& message,
|
||||
const std::string& caption,
|
||||
unsigned int style)
|
||||
{
|
||||
std::string strCaption;
|
||||
// Check for usage of predefined caption
|
||||
switch (style) {
|
||||
case CClientUIInterface::MSG_ERROR:
|
||||
strCaption += _("Error");
|
||||
break;
|
||||
case CClientUIInterface::MSG_WARNING:
|
||||
strCaption += _("Warning");
|
||||
break;
|
||||
case CClientUIInterface::MSG_INFORMATION:
|
||||
strCaption += _("Information");
|
||||
break;
|
||||
default:
|
||||
strCaption += caption; // Use supplied caption (can be empty)
|
||||
}
|
||||
|
||||
boost::strict_lock_ptr<std::list<std::string>> u = messageBox.synchronize();
|
||||
u->push_back(strCaption + ": " + message);
|
||||
if (u->size() > 5) {
|
||||
u->pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
static void metrics_InitMessage(const std::string& message)
|
||||
{
|
||||
*initMessage = message;
|
||||
}
|
||||
|
||||
void ConnectMetricsScreen()
|
||||
{
|
||||
uiInterface.ThreadSafeMessageBox.disconnect_all_slots();
|
||||
uiInterface.ThreadSafeMessageBox.connect(metrics_ThreadSafeMessageBox);
|
||||
uiInterface.InitMessage.disconnect_all_slots();
|
||||
uiInterface.InitMessage.connect(metrics_InitMessage);
|
||||
}
|
||||
|
||||
void printMiningStatus(bool mining)
|
||||
{
|
||||
if (mining) {
|
||||
int nThreads = GetArg("-genproclimit", 1);
|
||||
if (nThreads < 0) {
|
||||
// In regtest threads defaults to 1
|
||||
if (Params().DefaultMinerThreads())
|
||||
nThreads = Params().DefaultMinerThreads();
|
||||
else
|
||||
nThreads = boost::thread::hardware_concurrency();
|
||||
}
|
||||
std::cout << strprintf(_("You are running %d mining threads."), nThreads) << std::endl;
|
||||
} else {
|
||||
std::cout << _("You are currently not mining.") << std::endl;
|
||||
std::cout << _("To enable mining, add 'gen=1' to your zcash.conf and restart.") << std::endl;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
int printMetrics(size_t cols, int64_t nStart, bool mining)
|
||||
{
|
||||
// Number of lines that are always displayed
|
||||
int lines = 3;
|
||||
|
||||
// Calculate uptime
|
||||
int64_t uptime = GetTime() - nStart;
|
||||
int days = uptime / (24 * 60 * 60);
|
||||
int hours = (uptime - (days * 24 * 60 * 60)) / (60 * 60);
|
||||
int minutes = (uptime - (((days * 24) + hours) * 60 * 60)) / 60;
|
||||
int seconds = uptime - (((((days * 24) + hours) * 60) + minutes) * 60);
|
||||
|
||||
// Display uptime
|
||||
std::string duration;
|
||||
if (days > 0) {
|
||||
duration = strprintf(_("%d days, %d hours, %d minutes, %d seconds"), days, hours, minutes, seconds);
|
||||
} else if (hours > 0) {
|
||||
duration = strprintf(_("%d hours, %d minutes, %d seconds"), hours, minutes, seconds);
|
||||
} else if (minutes > 0) {
|
||||
duration = strprintf(_("%d minutes, %d seconds"), minutes, seconds);
|
||||
} else {
|
||||
duration = strprintf(_("%d seconds"), seconds);
|
||||
}
|
||||
std::string strDuration = strprintf(_("Since starting this node %s ago:"), duration);
|
||||
std::cout << strDuration << std::endl;
|
||||
lines += (strDuration.size() / cols);
|
||||
|
||||
std::cout << "- " << strprintf(_("You have validated %d transactions!"), transactionsValidated.get()) << std::endl;
|
||||
|
||||
if (mining) {
|
||||
double solps = uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0;
|
||||
std::string strSolps = strprintf("%.4f Sol/s", solps);
|
||||
std::cout << "- " << strprintf(_("You have contributed %s on average to the network solution rate."), strSolps) << std::endl;
|
||||
std::cout << "- " << strprintf(_("You have completed %d Equihash solver runs."), ehSolverRuns.get()) << std::endl;
|
||||
lines += 2;
|
||||
|
||||
int mined = minedBlocks.get();
|
||||
if (mined > 0) {
|
||||
std::cout << "- " << strprintf(_("You have mined %d blocks!"), mined) << std::endl;
|
||||
lines++;
|
||||
}
|
||||
}
|
||||
std::cout << std::endl;
|
||||
|
||||
return lines;
|
||||
}
|
||||
|
||||
int printMessageBox(size_t cols)
|
||||
{
|
||||
boost::strict_lock_ptr<std::list<std::string>> u = messageBox.synchronize();
|
||||
|
||||
if (u->size() == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lines = 2 + u->size();
|
||||
std::cout << _("Messages:") << std::endl;
|
||||
for (auto it = u->cbegin(); it != u->cend(); ++it) {
|
||||
std::cout << *it << std::endl;
|
||||
// Handle wrapped lines
|
||||
lines += (it->size() / cols);
|
||||
}
|
||||
std::cout << std::endl;
|
||||
return lines;
|
||||
}
|
||||
|
||||
int printInitMessage()
|
||||
{
|
||||
if (loaded) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string msg = *initMessage;
|
||||
std::cout << _("Init message:") << " " << msg << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
if (msg == _("Done loading")) {
|
||||
loaded = true;
|
||||
}
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
void ThreadShowMetricsScreen()
|
||||
{
|
||||
// Make this thread recognisable as the metrics screen thread
|
||||
RenameThread("zcash-metrics-screen");
|
||||
|
||||
// Clear screen
|
||||
std::cout << "\e[2J";
|
||||
|
||||
// Print art
|
||||
std::cout << METRICS_ART << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
// Thank you text
|
||||
std::cout << _("Thank you for running a Zcash node!") << std::endl;
|
||||
std::cout << _("You're helping to strengthen the network and contributing to a social good :)") << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
// Miner status
|
||||
bool mining = GetBoolArg("-gen", false);
|
||||
printMiningStatus(mining);
|
||||
|
||||
// Count uptime
|
||||
int64_t nStart = GetTime();
|
||||
|
||||
while (true) {
|
||||
// Number of lines that are always displayed
|
||||
int lines = 1;
|
||||
int cols = 80;
|
||||
|
||||
// Get current window size
|
||||
if (isatty(STDOUT_FILENO)) {
|
||||
struct winsize w;
|
||||
w.ws_col = 0;
|
||||
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_col != 0) {
|
||||
cols = w.ws_col;
|
||||
}
|
||||
}
|
||||
|
||||
// Erase below current position
|
||||
std::cout << "\e[J";
|
||||
|
||||
lines += printMetrics(cols, nStart, mining);
|
||||
lines += printMessageBox(cols);
|
||||
lines += printInitMessage();
|
||||
|
||||
// Explain how to exit
|
||||
std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl;;
|
||||
|
||||
boost::this_thread::interruption_point();
|
||||
MilliSleep(1000);
|
||||
|
||||
// Return to the top of the updating section
|
||||
std::cout << "\e[" << lines << "A";
|
||||
}
|
||||
}
|
||||
62
src/metrics.h
Normal file
62
src/metrics.h
Normal file
@@ -0,0 +1,62 @@
|
||||
// Copyright (c) 2016 The Zcash developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <atomic>
|
||||
#include <string>
|
||||
|
||||
struct AtomicCounter {
|
||||
std::atomic<int> value;
|
||||
|
||||
AtomicCounter() : value {0} { }
|
||||
|
||||
void increment(){
|
||||
++value;
|
||||
}
|
||||
|
||||
void decrement(){
|
||||
--value;
|
||||
}
|
||||
|
||||
int get(){
|
||||
return value.load();
|
||||
}
|
||||
};
|
||||
|
||||
extern AtomicCounter transactionsValidated;
|
||||
extern AtomicCounter ehSolverRuns;
|
||||
extern AtomicCounter solutionTargetChecks;
|
||||
extern AtomicCounter minedBlocks;
|
||||
|
||||
void ConnectMetricsScreen();
|
||||
void ThreadShowMetricsScreen();
|
||||
|
||||
/**
|
||||
* Heart image: https://commons.wikimedia.org/wiki/File:Heart_coraz%C3%B3n.svg
|
||||
* License: CC BY-SA 3.0
|
||||
*
|
||||
* Rendering options:
|
||||
* Zcash: img2txt -W 40 -H 20 -f utf8 -d none -g 0.7 Z-yellow.orange-logo.png
|
||||
* Heart: img2txt -W 40 -H 20 -f utf8 -d none 2000px-Heart_corazón.svg.png
|
||||
*/
|
||||
const std::string METRICS_ART =
|
||||
" [0;34;40m [0m \n"
|
||||
" [0;34;40m [0m \n"
|
||||
" [0;34;40m [0;31;40m:8[0;33;5;40;100m8[0;1;30;90;43mSX@888@@X[0;31;5;40;100m8[0;31;40m:[0;34;40m [0m [0;31;5;41;101m8; %[0;1;31;91;41mX[0m [0;1;31;91;41mX[0;31;5;41;101m% ;8[0m \n"
|
||||
" [0;34;40m [0;31;40m%[0;1;30;90;43m%X[0;1;33;93;43mt[0;33;5;43;103m%tt%[0;1;30;90;43mSSSS[0;33;5;43;103mS:[0;37;5;43;103mXXX[0;1;33;93;43mt[0;1;30;90;43m@[0;31;40m@[0;34;40m [0m [0;1;31;91;41mX[0;31;5;41;101m :[0;1;31;91;41m:[0m [0;1;31;91;41m:[0;31;5;41;101m: [0;1;31;91;41mX[0m \n"
|
||||
" [0;34;40m [0;31;40m@[0;1;30;90;43mS[0;1;33;93;43m;;tt%%[0;33;5;43;103m%[0;1;33;93;43mt[0;34;40m [0;1;33;93;43m;[0;33;5;43;103m;::[0;37;5;43;103mXXXX[0;37;43mS[0;31;5;40;100mX[0;34;40m [0m [0;31;5;41;101m% SS %[0m \n"
|
||||
" [0;34;40m [0;31;40m.[0;1;30;90;43mt[0;1;33;93;43m:::;;[0;1;30;90;43m%[0;31;40m8888[0;34;40m [0;31;40m8[0;30;41m8888[0;1;33;93;43mt[0;37;5;43;103mXXXX[0;1;30;90;43m8[0;31;40m;[0;34;40m [0m [0;1;31;91;41mS[0;31;5;41;101m [0;1;31;91;41mS[0m \n"
|
||||
" [0;34;40m [0;31;40m.[0;1;30;90;43m%[0;1;33;93;43m...:::[0;31;40m8[0;34;40m [0;1;30;90;43m8[0;33;5;43;103m::[0;37;5;43;103mXXX[0;1;33;93;43m%[0;31;40m;[0;34;40m [0m [0;31;5;41;101mX X[0m \n"
|
||||
" [0;34;40m [0;31;43m8[0;1;31;91;43m888[0;1;33;93;43m...:[0;1;30;90;43mt[0;1;30;90;41m888888[0;31;40mX[0;34;40m [0;33;5;40;100m8[0;33;5;43;103mt;;::[0;37;5;43;103mXX[0;1;30;90;43m8[0;31;40m [0;34;40m [0m [0;31;5;41;101m8 8[0m \n"
|
||||
"[0;34;40m [0;31;40m%[0;1;31;91;43m888888[0;1;33;93;43m...:::;:[0;1;30;90;41m8[0;31;40m [0;34;40m [0;31;40m:[0;1;30;90;43mX[0;33;5;43;103mttt;;;::[0;37;5;43;103mX[0;31;5;40;100m@[0;34;40m [0m [0;31;5;41;101m [0m \n"
|
||||
"[0;34;40m [0;1;30;90;41m8[0;1;31;91;43m88888888[0;1;33;93;43m...:[0;1;30;90;43mS[0;31;40mt[0;34;40m [0;1;30;90;41m8[0;1;33;93;43m:%[0;33;5;43;103m%tttt;;;:[0;1;30;90;43mX[0;34;40m [0m [0;31;5;41;101mX X[0m \n"
|
||||
"[0;34;40m [0;1;30;90;41m8[0;1;31;91;43m8888888888[0;1;30;90;43mS[0;1;30;90;41m8[0;31;40m [0;34;40m [0;31;40m:[0;1;30;90;43m%[0;1;33;93;43m;ttt%[0;33;5;43;103m%tttt;;[0;1;30;90;43mX[0;34;40m [0m [0;31;5;41;101m8 8[0m \n"
|
||||
"[0;34;40m [0;31;40m%[0;1;31;91;43m888888888[0;1;30;90;43m%[0;31;40mt[0;34;40m [0;30;41m8[0;1;30;90;43mS[0;1;33;93;43m:;;;tt%%[0;33;5;43;103m%ttt;[0;1;30;90;41m8[0;34;40m [0m [0;31;5;41;101m: :[0m \n"
|
||||
" [0;34;40m [0;31;43m8t[0;1;31;91;43m888888[0;33;41m8[0;31;40m [0;34;40m [0;31;40mS[0;33;41m888[0;31;43m8888[0;1;30;90;43mS[0;1;33;93;43mtt%%[0;33;5;43;103m%t[0;1;30;90;43m@[0;31;40m [0;34;40m [0m [0;1;31;91;41m:[0;31;5;41;101m: :[0;1;31;91;41m:[0m \n"
|
||||
" [0;34;40m [0;31;40m.[0;31;43m@tt[0;1;31;91;43m888[0;31;43m@[0;34;40m [0;1;30;90;41m8[0;1;33;93;43m;;ttt[0;1;30;90;43m@[0;31;40m;[0;34;40m [0m [0;31;5;41;101mt t[0m \n"
|
||||
" [0;34;40m [0;31;40m.[0;31;43m8ttt[0;1;31;91;43m8[0;31;43m@[0;31;40mSSSSS[0;34;40m [0;31;40mSXXXX[0;1;30;90;43m%[0;1;33;93;43m:;;;[0;1;30;90;43mX[0;31;40m;[0;34;40m [0m [0;31;5;41;101m8 8[0m \n"
|
||||
" [0;34;40m [0;31;40mX[0;31;43m8ttt[0;1;31;91;43m8888[0;1;30;90;43m%[0;34;40m [0;1;30;90;43m%[0;1;31;91;43m88[0;1;33;93;43m...::[0;1;30;90;43mX[0;30;41m8[0;31;40m [0;34;40m [0m [0;1;31;91;41mX[0;31;5;41;101m. .[0;1;31;91;41mX[0m \n"
|
||||
" [0;34;40m [0;31;40m%[0;1;30;90;41m8[0;31;43m@tt[0;1;31;91;43m88[0;31;43m;[0;33;41m8888[0;1;30;90;43m%[0;1;31;91;43m8888[0;1;30;90;43m%[0;31;43m8[0;31;40mX[0;32;40m [0;34;40m [0m [0;1;31;91;41m:[0;31;5;41;101m; ;[0;1;31;91;41m:[0m \n"
|
||||
" [0;34;40m [0;31;40m:@[0;1;30;90;41m8[0;33;41m8[0;31;43m8@XXX@8[0;1;30;90;41m8[0;31;40m8:[0;34;40m [0m [0;31;5;41;101mtt[0m \n"
|
||||
" [0;34;40m [0m \n"
|
||||
" [0;34;40m [0m ";
|
||||
@@ -4,6 +4,7 @@
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "miner.h"
|
||||
#include "pow/tromp/equi_miner.h"
|
||||
|
||||
#include "amount.h"
|
||||
#include "chainparams.h"
|
||||
@@ -11,6 +12,7 @@
|
||||
#include "consensus/validation.h"
|
||||
#include "hash.h"
|
||||
#include "main.h"
|
||||
#include "metrics.h"
|
||||
#include "net.h"
|
||||
#include "pow.h"
|
||||
#include "primitives/transaction.h"
|
||||
@@ -450,6 +452,8 @@ static bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& rese
|
||||
if (!ProcessNewBlock(state, NULL, pblock, true, NULL))
|
||||
return error("ZcashMiner: ProcessNewBlock, block not accepted");
|
||||
|
||||
minedBlocks.increment();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -471,6 +475,10 @@ void static BitcoinMiner(CWallet *pwallet)
|
||||
unsigned int n = chainparams.EquihashN();
|
||||
unsigned int k = chainparams.EquihashK();
|
||||
|
||||
std::string solver = GetArg("-equihashsolver", "default");
|
||||
assert(solver == "tromp" || solver == "default");
|
||||
LogPrint("pow", "Using Equihash solver \"%s\" with n = %u, k = %u\n", solver, n, k);
|
||||
|
||||
std::mutex m_cs;
|
||||
bool cancelSolver = false;
|
||||
boost::signals2::connection c = uiInterface.NotifyBlockTip.connect(
|
||||
@@ -554,8 +562,8 @@ void static BitcoinMiner(CWallet *pwallet)
|
||||
pblock->nNonce.size());
|
||||
|
||||
// (x_1, x_2, ...) = A(I, V, n, k)
|
||||
LogPrint("pow", "Running Equihash solver with nNonce = %s\n",
|
||||
pblock->nNonce.ToString());
|
||||
LogPrint("pow", "Running Equihash solver \"%s\" with nNonce = %s\n",
|
||||
solver, pblock->nNonce.ToString());
|
||||
|
||||
std::function<bool(std::vector<unsigned char>)> validBlock =
|
||||
[&pblock, &hashTarget, &pwallet, &reservekey, &m_cs, &cancelSolver, &chainparams]
|
||||
@@ -563,6 +571,7 @@ void static BitcoinMiner(CWallet *pwallet)
|
||||
// Write the solution to the hash and compute the result.
|
||||
LogPrint("pow", "- Checking solution against target\n");
|
||||
pblock->nSolution = soln;
|
||||
solutionTargetChecks.increment();
|
||||
|
||||
if (UintToArith256(pblock->GetHash()) > hashTarget) {
|
||||
return false;
|
||||
@@ -586,8 +595,11 @@ void static BitcoinMiner(CWallet *pwallet)
|
||||
SetThreadPriority(THREAD_PRIORITY_LOWEST);
|
||||
|
||||
// In regression test mode, stop mining after a block is found.
|
||||
if (chainparams.MineBlocksOnDemand())
|
||||
if (chainparams.MineBlocksOnDemand()) {
|
||||
// Increment here because throwing skips the call below
|
||||
ehSolverRuns.increment();
|
||||
throw boost::thread_interrupted();
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
@@ -595,14 +607,53 @@ void static BitcoinMiner(CWallet *pwallet)
|
||||
std::lock_guard<std::mutex> lock{m_cs};
|
||||
return cancelSolver;
|
||||
};
|
||||
try {
|
||||
// If we find a valid block, we rebuild
|
||||
if (EhOptimisedSolve(n, k, curr_state, validBlock, cancelled))
|
||||
break;
|
||||
} catch (EhSolverCancelledException&) {
|
||||
LogPrint("pow", "Equihash solver cancelled\n");
|
||||
std::lock_guard<std::mutex> lock{m_cs};
|
||||
cancelSolver = false;
|
||||
|
||||
// TODO: factor this out into a function with the same API for each solver.
|
||||
if (solver == "tromp") {
|
||||
// Create solver and initialize it.
|
||||
equi eq(1);
|
||||
eq.setstate(&curr_state);
|
||||
|
||||
// Intialization done, start algo driver.
|
||||
eq.digit0(0);
|
||||
eq.xfull = eq.bfull = eq.hfull = 0;
|
||||
eq.showbsizes(0);
|
||||
for (u32 r = 1; r < WK; r++) {
|
||||
(r&1) ? eq.digitodd(r, 0) : eq.digiteven(r, 0);
|
||||
eq.xfull = eq.bfull = eq.hfull = 0;
|
||||
eq.showbsizes(r);
|
||||
}
|
||||
eq.digitK(0);
|
||||
ehSolverRuns.increment();
|
||||
|
||||
// Convert solution indices to byte array (decompress) and pass it to validBlock method.
|
||||
for (size_t s = 0; s < eq.nsols; s++) {
|
||||
LogPrint("pow", "Checking solution %d\n", s+1);
|
||||
std::vector<eh_index> index_vector(PROOFSIZE);
|
||||
for (size_t i = 0; i < PROOFSIZE; i++) {
|
||||
index_vector[i] = eq.sols[s][i];
|
||||
}
|
||||
std::vector<unsigned char> sol_char = GetMinimalFromIndices(index_vector, DIGITBITS);
|
||||
|
||||
if (validBlock(sol_char)) {
|
||||
// If we find a POW solution, do not try other solutions
|
||||
// because they become invalid as we created a new block in blockchain.
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
// If we find a valid block, we rebuild
|
||||
bool found = EhOptimisedSolve(n, k, curr_state, validBlock, cancelled);
|
||||
ehSolverRuns.increment();
|
||||
if (found) {
|
||||
break;
|
||||
}
|
||||
} catch (EhSolverCancelledException&) {
|
||||
LogPrint("pow", "Equihash solver cancelled\n");
|
||||
std::lock_guard<std::mutex> lock{m_cs};
|
||||
cancelSolver = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for stop or if block needs to be rebuilt
|
||||
|
||||
@@ -2142,6 +2142,7 @@ CNode::CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn, bool fIn
|
||||
nStartingHeight = -1;
|
||||
fGetAddr = false;
|
||||
fRelayTxes = false;
|
||||
fSentAddr = false;
|
||||
pfilter = new CBloomFilter();
|
||||
nPingNonceSent = 0;
|
||||
nPingUsecStart = 0;
|
||||
|
||||
@@ -278,6 +278,7 @@ public:
|
||||
// b) the peer may tell us in its version message that we should not relay tx invs
|
||||
// until it has initialized its bloom filter.
|
||||
bool fRelayTxes;
|
||||
bool fSentAddr;
|
||||
CSemaphoreGrant grantOutbound;
|
||||
CCriticalSection cs_filter;
|
||||
CBloomFilter* pfilter;
|
||||
|
||||
@@ -66,6 +66,9 @@ class CTxMemPoolEntry;
|
||||
* they've been outstanding.
|
||||
*/
|
||||
|
||||
/** Decay of .998 is a half-life of 346 blocks or about 2.4 days */
|
||||
static const double DEFAULT_DECAY = .998;
|
||||
|
||||
/**
|
||||
* We will instantiate two instances of this class, one to track transactions
|
||||
* that were included in a block due to fee, and one for tx's included due to
|
||||
@@ -105,7 +108,7 @@ private:
|
||||
// Combine the total value with the tx counts to calculate the avg fee/priority per bucket
|
||||
|
||||
std::string dataTypeString;
|
||||
double decay;
|
||||
double decay = DEFAULT_DECAY;
|
||||
|
||||
// Mempool counts of outstanding transactions
|
||||
// For each bucket X, track the number of transactions in the mempool
|
||||
@@ -179,9 +182,6 @@ public:
|
||||
/** Track confirm delays up to 25 blocks, can't estimate beyond that */
|
||||
static const unsigned int MAX_BLOCK_CONFIRMS = 25;
|
||||
|
||||
/** Decay of .998 is a half-life of 346 blocks or about 2.4 days */
|
||||
static const double DEFAULT_DECAY = .998;
|
||||
|
||||
/** Require greater than 85% of X fee transactions to be confirmed within Y blocks for X to be big enough */
|
||||
static const double MIN_SUCCESS_PCT = .85;
|
||||
static const double UNLIKELY_PCT = .5;
|
||||
|
||||
98
src/pow/tromp/equi.h
Normal file
98
src/pow/tromp/equi.h
Normal file
@@ -0,0 +1,98 @@
|
||||
// Equihash solver
|
||||
// Copyright (c) 2016-2016 John Tromp, The Zcash developers
|
||||
|
||||
#include "sodium.h"
|
||||
#ifdef __APPLE__
|
||||
#include "pow/tromp/osx_barrier.h"
|
||||
#endif
|
||||
#include "compat/endian.h"
|
||||
|
||||
#include <stdint.h> // for types uint32_t,uint64_t
|
||||
#include <string.h> // for functions memset
|
||||
#include <stdlib.h> // for function qsort
|
||||
|
||||
typedef uint32_t u32;
|
||||
typedef unsigned char uchar;
|
||||
|
||||
// algorithm parameters, prefixed with W to reduce include file conflicts
|
||||
|
||||
#ifndef WN
|
||||
#define WN 200
|
||||
#endif
|
||||
|
||||
#ifndef WK
|
||||
#define WK 9
|
||||
#endif
|
||||
|
||||
#define NDIGITS (WK+1)
|
||||
#define DIGITBITS (WN/(NDIGITS))
|
||||
|
||||
static const u32 PROOFSIZE = 1<<WK;
|
||||
static const u32 BASE = 1<<DIGITBITS;
|
||||
static const u32 NHASHES = 2*BASE;
|
||||
static const u32 HASHESPERBLAKE = 512/WN;
|
||||
static const u32 HASHOUT = HASHESPERBLAKE*WN/8;
|
||||
|
||||
typedef u32 proof[PROOFSIZE];
|
||||
|
||||
|
||||
enum verify_code { POW_OK, POW_DUPLICATE, POW_OUT_OF_ORDER, POW_NONZERO_XOR };
|
||||
const char *errstr[] = { "OK", "duplicate index", "indices out of order", "nonzero xor" };
|
||||
|
||||
void genhash(const crypto_generichash_blake2b_state *ctx, u32 idx, uchar *hash) {
|
||||
crypto_generichash_blake2b_state state = *ctx;
|
||||
u32 leb = htole32(idx / HASHESPERBLAKE);
|
||||
crypto_generichash_blake2b_update(&state, (uchar *)&leb, sizeof(u32));
|
||||
uchar blakehash[HASHOUT];
|
||||
crypto_generichash_blake2b_final(&state, blakehash, HASHOUT);
|
||||
memcpy(hash, blakehash + (idx % HASHESPERBLAKE) * WN/8, WN/8);
|
||||
}
|
||||
|
||||
int verifyrec(const crypto_generichash_blake2b_state *ctx, u32 *indices, uchar *hash, int r) {
|
||||
if (r == 0) {
|
||||
genhash(ctx, *indices, hash);
|
||||
return POW_OK;
|
||||
}
|
||||
u32 *indices1 = indices + (1 << (r-1));
|
||||
if (*indices >= *indices1)
|
||||
return POW_OUT_OF_ORDER;
|
||||
uchar hash0[WN/8], hash1[WN/8];
|
||||
int vrf0 = verifyrec(ctx, indices, hash0, r-1);
|
||||
if (vrf0 != POW_OK)
|
||||
return vrf0;
|
||||
int vrf1 = verifyrec(ctx, indices1, hash1, r-1);
|
||||
if (vrf1 != POW_OK)
|
||||
return vrf1;
|
||||
for (int i=0; i < WN/8; i++)
|
||||
hash[i] = hash0[i] ^ hash1[i];
|
||||
int i, b = r * DIGITBITS;
|
||||
for (i = 0; i < b/8; i++)
|
||||
if (hash[i])
|
||||
return POW_NONZERO_XOR;
|
||||
if ((b%8) && hash[i] >> (8-(b%8)))
|
||||
return POW_NONZERO_XOR;
|
||||
return POW_OK;
|
||||
}
|
||||
|
||||
int compu32(const void *pa, const void *pb) {
|
||||
u32 a = *(u32 *)pa, b = *(u32 *)pb;
|
||||
return a<b ? -1 : a==b ? 0 : +1;
|
||||
}
|
||||
|
||||
bool duped(proof prf) {
|
||||
proof sortprf;
|
||||
memcpy(sortprf, prf, sizeof(proof));
|
||||
qsort(sortprf, PROOFSIZE, sizeof(u32), &compu32);
|
||||
for (u32 i=1; i<PROOFSIZE; i++)
|
||||
if (sortprf[i] <= sortprf[i-1])
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
// verify Wagner conditions
|
||||
int verify(u32 indices[PROOFSIZE], const crypto_generichash_blake2b_state *ctx) {
|
||||
if (duped(indices))
|
||||
return POW_DUPLICATE;
|
||||
uchar hash[WN/8];
|
||||
return verifyrec(ctx, indices, hash, WK);
|
||||
}
|
||||
644
src/pow/tromp/equi_miner.h
Normal file
644
src/pow/tromp/equi_miner.h
Normal file
@@ -0,0 +1,644 @@
|
||||
// Equihash solver
|
||||
// Copyright (c) 2016 John Tromp, The Zcash developers
|
||||
|
||||
// Fix N, K, such that n = N/(k+1) is integer
|
||||
// Fix M = 2^{n+1} hashes each of length N bits,
|
||||
// H_0, ... , H_{M-1}, generated fom (n+1)-bit indices.
|
||||
// Problem: find binary tree on 2^K distinct indices,
|
||||
// for which the exclusive-or of leaf hashes is all 0s.
|
||||
// Additionally, it should satisfy the Wagner conditions:
|
||||
// for each height i subtree, the exclusive-or
|
||||
// of its 2^i corresponding hashes starts with i*n 0 bits,
|
||||
// and for i>0 the leftmost leaf of its left subtree
|
||||
// is less than the leftmost leaf of its right subtree
|
||||
|
||||
// The algorithm below solves this by maintaining the trees
|
||||
// in a graph of K layers, each split into buckets
|
||||
// with buckets indexed by the first n-RESTBITS bits following
|
||||
// the i*n 0s, each bucket having 4 * 2^RESTBITS slots,
|
||||
// twice the number of subtrees expected to land there.
|
||||
|
||||
#include "pow/tromp/equi.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
#include <assert.h>
|
||||
|
||||
typedef uint16_t u16;
|
||||
typedef uint64_t u64;
|
||||
|
||||
#ifdef EQUIHASH_TROMP_ATOMIC
|
||||
#include <atomic>
|
||||
typedef std::atomic<u32> au32;
|
||||
#else
|
||||
typedef u32 au32;
|
||||
#endif
|
||||
|
||||
#ifndef RESTBITS
|
||||
#define RESTBITS 8
|
||||
#endif
|
||||
|
||||
// 2_log of number of buckets
|
||||
#define BUCKBITS (DIGITBITS-RESTBITS)
|
||||
|
||||
#ifndef SAVEMEM
|
||||
#if RESTBITS == 4
|
||||
// can't save memory in such small buckets
|
||||
#define SAVEMEM 1
|
||||
#elif RESTBITS >= 8
|
||||
// take advantage of law of large numbers (sum of 2^8 random numbers)
|
||||
// this reduces (200,9) memory to under 144MB, with negligible discarding
|
||||
#define SAVEMEM 9/14
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// number of buckets
|
||||
static const u32 NBUCKETS = 1<<BUCKBITS;
|
||||
// 2_log of number of slots per bucket
|
||||
static const u32 SLOTBITS = RESTBITS+1+1;
|
||||
static const u32 SLOTRANGE = 1<<SLOTBITS;
|
||||
static const u32 SLOTMSB = 1<<(SLOTBITS-1);
|
||||
// number of slots per bucket
|
||||
static const u32 NSLOTS = SLOTRANGE * SAVEMEM;
|
||||
// number of per-xhash slots
|
||||
static const u32 XFULL = 16;
|
||||
// SLOTBITS mask
|
||||
static const u32 SLOTMASK = SLOTRANGE-1;
|
||||
// number of possible values of xhash (rest of n) bits
|
||||
static const u32 NRESTS = 1<<RESTBITS;
|
||||
// number of blocks of hashes extracted from single 512 bit blake2b output
|
||||
static const u32 NBLOCKS = (NHASHES+HASHESPERBLAKE-1)/HASHESPERBLAKE;
|
||||
// nothing larger found in 100000 runs
|
||||
static const u32 MAXSOLS = 8;
|
||||
|
||||
// tree node identifying its children as two different slots in
|
||||
// a bucket on previous layer with the same rest bits (x-tra hash)
|
||||
struct tree {
|
||||
u32 bid_s0_s1; // manual bitfields
|
||||
|
||||
tree(const u32 idx) {
|
||||
bid_s0_s1 = idx;
|
||||
}
|
||||
tree(const u32 bid, const u32 s0, const u32 s1) {
|
||||
#ifdef SLOTDIFF
|
||||
u32 ds10 = (s1 - s0) & SLOTMASK;
|
||||
if (ds10 & SLOTMSB) {
|
||||
bid_s0_s1 = (((bid << SLOTBITS) | s1) << (SLOTBITS-1)) | (SLOTMASK & ~ds10);
|
||||
} else {
|
||||
bid_s0_s1 = (((bid << SLOTBITS) | s0) << (SLOTBITS-1)) | (ds10 - 1);
|
||||
}
|
||||
#else
|
||||
bid_s0_s1 = (((bid << SLOTBITS) | s0) << SLOTBITS) | s1;
|
||||
#endif
|
||||
}
|
||||
u32 getindex() const {
|
||||
return bid_s0_s1;
|
||||
}
|
||||
u32 bucketid() const {
|
||||
#ifdef SLOTDIFF
|
||||
return bid_s0_s1 >> (2 * SLOTBITS - 1);
|
||||
#else
|
||||
return bid_s0_s1 >> (2 * SLOTBITS);
|
||||
#endif
|
||||
}
|
||||
u32 slotid0() const {
|
||||
#ifdef SLOTDIFF
|
||||
return (bid_s0_s1 >> (SLOTBITS-1)) & SLOTMASK;
|
||||
#else
|
||||
return (bid_s0_s1 >> SLOTBITS) & SLOTMASK;
|
||||
#endif
|
||||
}
|
||||
u32 slotid1() const {
|
||||
#ifdef SLOTDIFF
|
||||
return (slotid0() + 1 + (bid_s0_s1 & (SLOTMASK>>1))) & SLOTMASK;
|
||||
#else
|
||||
return bid_s0_s1 & SLOTMASK;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
union hashunit {
|
||||
u32 word;
|
||||
uchar bytes[sizeof(u32)];
|
||||
};
|
||||
|
||||
#define WORDS(bits) ((bits + 31) / 32)
|
||||
#define HASHWORDS0 WORDS(WN - DIGITBITS + RESTBITS)
|
||||
#define HASHWORDS1 WORDS(WN - 2*DIGITBITS + RESTBITS)
|
||||
|
||||
struct slot0 {
|
||||
tree attr;
|
||||
hashunit hash[HASHWORDS0];
|
||||
};
|
||||
|
||||
struct slot1 {
|
||||
tree attr;
|
||||
hashunit hash[HASHWORDS1];
|
||||
};
|
||||
|
||||
// a bucket is NSLOTS treenodes
|
||||
typedef slot0 bucket0[NSLOTS];
|
||||
typedef slot1 bucket1[NSLOTS];
|
||||
// the N-bit hash consists of K+1 n-bit "digits"
|
||||
// each of which corresponds to a layer of NBUCKETS buckets
|
||||
typedef bucket0 digit0[NBUCKETS];
|
||||
typedef bucket1 digit1[NBUCKETS];
|
||||
|
||||
// size (in bytes) of hash in round 0 <= r < WK
|
||||
u32 hashsize(const u32 r) {
|
||||
const u32 hashbits = WN - (r+1) * DIGITBITS + RESTBITS;
|
||||
return (hashbits + 7) / 8;
|
||||
}
|
||||
|
||||
u32 hashwords(u32 bytes) {
|
||||
return (bytes + 3) / 4;
|
||||
}
|
||||
|
||||
// manages hash and tree data
|
||||
struct htalloc {
|
||||
u32 *heap0;
|
||||
u32 *heap1;
|
||||
bucket0 *trees0[(WK+1)/2];
|
||||
bucket1 *trees1[WK/2];
|
||||
u32 alloced;
|
||||
htalloc() {
|
||||
alloced = 0;
|
||||
}
|
||||
void alloctrees() {
|
||||
// optimize xenoncat's fixed memory layout, avoiding any waste
|
||||
// digit trees hashes trees hashes
|
||||
// 0 0 A A A A A A . . . . . .
|
||||
// 1 0 A A A A A A 1 B B B B B
|
||||
// 2 0 2 C C C C C 1 B B B B B
|
||||
// 3 0 2 C C C C C 1 3 D D D D
|
||||
// 4 0 2 4 E E E E 1 3 D D D D
|
||||
// 5 0 2 4 E E E E 1 3 5 F F F
|
||||
// 6 0 2 4 6 . G G 1 3 5 F F F
|
||||
// 7 0 2 4 6 . G G 1 3 5 7 H H
|
||||
// 8 0 2 4 6 8 . I 1 3 5 7 H H
|
||||
assert(DIGITBITS >= 16); // ensures hashes shorten by 1 unit every 2 digits
|
||||
heap0 = (u32 *)alloc(1, sizeof(digit0));
|
||||
heap1 = (u32 *)alloc(1, sizeof(digit1));
|
||||
for (int r=0; r<WK; r++)
|
||||
if ((r&1) == 0)
|
||||
trees0[r/2] = (bucket0 *)(heap0 + r/2);
|
||||
else
|
||||
trees1[r/2] = (bucket1 *)(heap1 + r/2);
|
||||
}
|
||||
void dealloctrees() {
|
||||
free(heap0);
|
||||
free(heap1);
|
||||
}
|
||||
void *alloc(const u32 n, const u32 sz) {
|
||||
void *mem = calloc(n, sz);
|
||||
assert(mem);
|
||||
alloced += n * sz;
|
||||
return mem;
|
||||
}
|
||||
};
|
||||
|
||||
typedef au32 bsizes[NBUCKETS];
|
||||
|
||||
u32 min(const u32 a, const u32 b) {
|
||||
return a < b ? a : b;
|
||||
}
|
||||
|
||||
struct equi {
|
||||
crypto_generichash_blake2b_state blake_ctx;
|
||||
htalloc hta;
|
||||
bsizes *nslots; // PUT IN BUCKET STRUCT
|
||||
proof *sols;
|
||||
au32 nsols;
|
||||
u32 nthreads;
|
||||
u32 xfull;
|
||||
u32 hfull;
|
||||
u32 bfull;
|
||||
pthread_barrier_t barry;
|
||||
equi(const u32 n_threads) {
|
||||
assert(sizeof(hashunit) == 4);
|
||||
nthreads = n_threads;
|
||||
const int err = pthread_barrier_init(&barry, NULL, nthreads);
|
||||
assert(!err);
|
||||
hta.alloctrees();
|
||||
nslots = (bsizes *)hta.alloc(2 * NBUCKETS, sizeof(au32));
|
||||
sols = (proof *)hta.alloc(MAXSOLS, sizeof(proof));
|
||||
}
|
||||
~equi() {
|
||||
hta.dealloctrees();
|
||||
free(nslots);
|
||||
free(sols);
|
||||
}
|
||||
void setstate(const crypto_generichash_blake2b_state *ctx) {
|
||||
blake_ctx = *ctx;
|
||||
memset(nslots, 0, NBUCKETS * sizeof(au32)); // only nslots[0] needs zeroing
|
||||
nsols = 0;
|
||||
}
|
||||
u32 getslot(const u32 r, const u32 bucketi) {
|
||||
#ifdef EQUIHASH_TROMP_ATOMIC
|
||||
return std::atomic_fetch_add_explicit(&nslots[r&1][bucketi], 1U, std::memory_order_relaxed);
|
||||
#else
|
||||
return nslots[r&1][bucketi]++;
|
||||
#endif
|
||||
}
|
||||
u32 getnslots(const u32 r, const u32 bid) { // SHOULD BE METHOD IN BUCKET STRUCT
|
||||
au32 &nslot = nslots[r&1][bid];
|
||||
const u32 n = min(nslot, NSLOTS);
|
||||
nslot = 0;
|
||||
return n;
|
||||
}
|
||||
void orderindices(u32 *indices, u32 size) {
|
||||
if (indices[0] > indices[size]) {
|
||||
for (u32 i=0; i < size; i++) {
|
||||
const u32 tmp = indices[i];
|
||||
indices[i] = indices[size+i];
|
||||
indices[size+i] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
void listindices0(u32 r, const tree t, u32 *indices) {
|
||||
if (r == 0) {
|
||||
*indices = t.getindex();
|
||||
return;
|
||||
}
|
||||
const bucket1 &buck = hta.trees1[--r/2][t.bucketid()];
|
||||
const u32 size = 1 << r;
|
||||
u32 *indices1 = indices + size;
|
||||
listindices1(r, buck[t.slotid0()].attr, indices);
|
||||
listindices1(r, buck[t.slotid1()].attr, indices1);
|
||||
orderindices(indices, size);
|
||||
}
|
||||
void listindices1(u32 r, const tree t, u32 *indices) {
|
||||
const bucket0 &buck = hta.trees0[--r/2][t.bucketid()];
|
||||
const u32 size = 1 << r;
|
||||
u32 *indices1 = indices + size;
|
||||
listindices0(r, buck[t.slotid0()].attr, indices);
|
||||
listindices0(r, buck[t.slotid1()].attr, indices1);
|
||||
orderindices(indices, size);
|
||||
}
|
||||
void candidate(const tree t) {
|
||||
proof prf;
|
||||
listindices1(WK, t, prf); // assume WK odd
|
||||
qsort(prf, PROOFSIZE, sizeof(u32), &compu32);
|
||||
for (u32 i=1; i<PROOFSIZE; i++)
|
||||
if (prf[i] <= prf[i-1])
|
||||
return;
|
||||
#ifdef EQUIHASH_TROMP_ATOMIC
|
||||
u32 soli = std::atomic_fetch_add_explicit(&nsols, 1U, std::memory_order_relaxed);
|
||||
#else
|
||||
u32 soli = nsols++;
|
||||
#endif
|
||||
if (soli < MAXSOLS)
|
||||
listindices1(WK, t, sols[soli]); // assume WK odd
|
||||
}
|
||||
void showbsizes(u32 r) {
|
||||
#if defined(HIST) || defined(SPARK) || defined(LOGSPARK)
|
||||
u32 binsizes[65];
|
||||
memset(binsizes, 0, 65 * sizeof(u32));
|
||||
for (u32 bucketid = 0; bucketid < NBUCKETS; bucketid++) {
|
||||
u32 bsize = min(nslots[r&1][bucketid], NSLOTS) >> (SLOTBITS-6);
|
||||
binsizes[bsize]++;
|
||||
}
|
||||
for (u32 i=0; i < 65; i++) {
|
||||
#ifdef HIST
|
||||
// printf(" %d:%d", i, binsizes[i]);
|
||||
#else
|
||||
#ifdef SPARK
|
||||
u32 sparks = binsizes[i] / SPARKSCALE;
|
||||
#else
|
||||
u32 sparks = 0;
|
||||
for (u32 bs = binsizes[i]; bs; bs >>= 1) sparks++;
|
||||
sparks = sparks * 7 / SPARKSCALE;
|
||||
#endif
|
||||
// printf("\342\226%c", '\201' + sparks);
|
||||
#endif
|
||||
}
|
||||
// printf("\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
struct htlayout {
|
||||
htalloc hta;
|
||||
u32 prevhashunits;
|
||||
u32 nexthashunits;
|
||||
u32 dunits;
|
||||
u32 prevbo;
|
||||
u32 nextbo;
|
||||
|
||||
htlayout(equi *eq, u32 r): hta(eq->hta), prevhashunits(0), dunits(0) {
|
||||
u32 nexthashbytes = hashsize(r);
|
||||
nexthashunits = hashwords(nexthashbytes);
|
||||
prevbo = 0;
|
||||
nextbo = nexthashunits * sizeof(hashunit) - nexthashbytes; // 0-3
|
||||
if (r) {
|
||||
u32 prevhashbytes = hashsize(r-1);
|
||||
prevhashunits = hashwords(prevhashbytes);
|
||||
prevbo = prevhashunits * sizeof(hashunit) - prevhashbytes; // 0-3
|
||||
dunits = prevhashunits - nexthashunits;
|
||||
}
|
||||
}
|
||||
u32 getxhash0(const slot0* pslot) const {
|
||||
#if WN == 200 && RESTBITS == 4
|
||||
return pslot->hash->bytes[prevbo] >> 4;
|
||||
#elif WN == 200 && RESTBITS == 8
|
||||
return (pslot->hash->bytes[prevbo] & 0xf) << 4 | pslot->hash->bytes[prevbo+1] >> 4;
|
||||
#elif WN == 200 && RESTBITS == 9
|
||||
return (pslot->hash->bytes[prevbo] & 0x1f) << 4 | pslot->hash->bytes[prevbo+1] >> 4;
|
||||
#elif WN == 144 && RESTBITS == 4
|
||||
return pslot->hash->bytes[prevbo] & 0xf;
|
||||
#else
|
||||
#error non implemented
|
||||
#endif
|
||||
}
|
||||
u32 getxhash1(const slot1* pslot) const {
|
||||
#if WN == 200 && RESTBITS == 4
|
||||
return pslot->hash->bytes[prevbo] & 0xf;
|
||||
#elif WN == 200 && RESTBITS == 8
|
||||
return pslot->hash->bytes[prevbo];
|
||||
#elif WN == 200 && RESTBITS == 9
|
||||
return (pslot->hash->bytes[prevbo]&1) << 8 | pslot->hash->bytes[prevbo+1];
|
||||
#elif WN == 144 && RESTBITS == 4
|
||||
return pslot->hash->bytes[prevbo] & 0xf;
|
||||
#else
|
||||
#error non implemented
|
||||
#endif
|
||||
}
|
||||
bool equal(const hashunit *hash0, const hashunit *hash1) const {
|
||||
return hash0[prevhashunits-1].word == hash1[prevhashunits-1].word;
|
||||
}
|
||||
};
|
||||
|
||||
struct collisiondata {
|
||||
#ifdef XBITMAP
|
||||
#if NSLOTS > 64
|
||||
#error cant use XBITMAP with more than 64 slots
|
||||
#endif
|
||||
u64 xhashmap[NRESTS];
|
||||
u64 xmap;
|
||||
#else
|
||||
#if RESTBITS <= 6
|
||||
typedef uchar xslot;
|
||||
#else
|
||||
typedef u16 xslot;
|
||||
#endif
|
||||
xslot nxhashslots[NRESTS];
|
||||
xslot xhashslots[NRESTS][XFULL];
|
||||
xslot *xx;
|
||||
u32 n0;
|
||||
u32 n1;
|
||||
#endif
|
||||
u32 s0;
|
||||
|
||||
void clear() {
|
||||
#ifdef XBITMAP
|
||||
memset(xhashmap, 0, NRESTS * sizeof(u64));
|
||||
#else
|
||||
memset(nxhashslots, 0, NRESTS * sizeof(xslot));
|
||||
#endif
|
||||
}
|
||||
bool addslot(u32 s1, u32 xh) {
|
||||
#ifdef XBITMAP
|
||||
xmap = xhashmap[xh];
|
||||
xhashmap[xh] |= (u64)1 << s1;
|
||||
s0 = -1;
|
||||
return true;
|
||||
#else
|
||||
n1 = (u32)nxhashslots[xh]++;
|
||||
if (n1 >= XFULL)
|
||||
return false;
|
||||
xx = xhashslots[xh];
|
||||
xx[n1] = s1;
|
||||
n0 = 0;
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
bool nextcollision() const {
|
||||
#ifdef XBITMAP
|
||||
return xmap != 0;
|
||||
#else
|
||||
return n0 < n1;
|
||||
#endif
|
||||
}
|
||||
u32 slot() {
|
||||
#ifdef XBITMAP
|
||||
const u32 ffs = __builtin_ffsll(xmap);
|
||||
s0 += ffs; xmap >>= ffs;
|
||||
return s0;
|
||||
#else
|
||||
return (u32)xx[n0++];
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
void digit0(const u32 id) {
|
||||
uchar hash[HASHOUT];
|
||||
crypto_generichash_blake2b_state state;
|
||||
htlayout htl(this, 0);
|
||||
const u32 hashbytes = hashsize(0);
|
||||
for (u32 block = id; block < NBLOCKS; block += nthreads) {
|
||||
state = blake_ctx;
|
||||
u32 leb = htole32(block);
|
||||
crypto_generichash_blake2b_update(&state, (uchar *)&leb, sizeof(u32));
|
||||
crypto_generichash_blake2b_final(&state, hash, HASHOUT);
|
||||
for (u32 i = 0; i<HASHESPERBLAKE; i++) {
|
||||
const uchar *ph = hash + i * WN/8;
|
||||
#if BUCKBITS == 16 && RESTBITS == 4
|
||||
const u32 bucketid = ((u32)ph[0] << 8) | ph[1];
|
||||
#elif BUCKBITS == 12 && RESTBITS == 8
|
||||
const u32 bucketid = ((u32)ph[0] << 4) | ph[1] >> 4;
|
||||
#elif BUCKBITS == 11 && RESTBITS == 9
|
||||
const u32 bucketid = ((u32)ph[0] << 3) | ph[1] >> 5;
|
||||
#elif BUCKBITS == 20 && RESTBITS == 4
|
||||
const u32 bucketid = ((((u32)ph[0] << 8) | ph[1]) << 4) | ph[2] >> 4;
|
||||
#elif BUCKBITS == 12 && RESTBITS == 4
|
||||
const u32 bucketid = ((u32)ph[0] << 4) | ph[1] >> 4;
|
||||
const u32 xhash = ph[1] & 0xf;
|
||||
#else
|
||||
#error not implemented
|
||||
#endif
|
||||
const u32 slot = getslot(0, bucketid);
|
||||
if (slot >= NSLOTS) {
|
||||
bfull++;
|
||||
continue;
|
||||
}
|
||||
slot0 &s = hta.trees0[0][bucketid][slot];
|
||||
s.attr = tree(block * HASHESPERBLAKE + i);
|
||||
memcpy(s.hash->bytes+htl.nextbo, ph+WN/8-hashbytes, hashbytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void digitodd(const u32 r, const u32 id) {
|
||||
htlayout htl(this, r);
|
||||
collisiondata cd;
|
||||
for (u32 bucketid=id; bucketid < NBUCKETS; bucketid += nthreads) {
|
||||
cd.clear();
|
||||
slot0 *buck = htl.hta.trees0[(r-1)/2][bucketid]; // optimize by updating previous buck?!
|
||||
u32 bsize = getnslots(r-1, bucketid); // optimize by putting bucketsize with block?!
|
||||
for (u32 s1 = 0; s1 < bsize; s1++) {
|
||||
const slot0 *pslot1 = buck + s1; // optimize by updating previous pslot1?!
|
||||
if (!cd.addslot(s1, htl.getxhash0(pslot1))) {
|
||||
xfull++;
|
||||
continue;
|
||||
}
|
||||
for (; cd.nextcollision(); ) {
|
||||
const u32 s0 = cd.slot();
|
||||
const slot0 *pslot0 = buck + s0;
|
||||
if (htl.equal(pslot0->hash, pslot1->hash)) {
|
||||
hfull++;
|
||||
continue;
|
||||
}
|
||||
u32 xorbucketid;
|
||||
const uchar *bytes0 = pslot0->hash->bytes, *bytes1 = pslot1->hash->bytes;
|
||||
#if WN == 200 && BUCKBITS == 12 && RESTBITS == 8
|
||||
xorbucketid = (((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) & 0xf) << 8)
|
||||
| (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]);
|
||||
#elif WN == 200 && BUCKBITS == 11 && RESTBITS == 9
|
||||
xorbucketid = (((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) & 0xf) << 7)
|
||||
| (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) >> 1;
|
||||
#elif WN == 144 && BUCKBITS == 20 && RESTBITS == 4
|
||||
xorbucketid = ((((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 8)
|
||||
| (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2])) << 4)
|
||||
| (bytes0[htl.prevbo+3] ^ bytes1[htl.prevbo+3]) >> 4;
|
||||
#elif WN == 96 && BUCKBITS == 12 && RESTBITS == 4
|
||||
xorbucketid = ((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 4)
|
||||
| (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) >> 4;
|
||||
#else
|
||||
#error not implemented
|
||||
#endif
|
||||
const u32 xorslot = getslot(r, xorbucketid);
|
||||
if (xorslot >= NSLOTS) {
|
||||
bfull++;
|
||||
continue;
|
||||
}
|
||||
slot1 &xs = htl.hta.trees1[r/2][xorbucketid][xorslot];
|
||||
xs.attr = tree(bucketid, s0, s1);
|
||||
for (u32 i=htl.dunits; i < htl.prevhashunits; i++)
|
||||
xs.hash[i-htl.dunits].word = pslot0->hash[i].word ^ pslot1->hash[i].word;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void digiteven(const u32 r, const u32 id) {
|
||||
htlayout htl(this, r);
|
||||
collisiondata cd;
|
||||
for (u32 bucketid=id; bucketid < NBUCKETS; bucketid += nthreads) {
|
||||
cd.clear();
|
||||
slot1 *buck = htl.hta.trees1[(r-1)/2][bucketid]; // OPTIMIZE BY UPDATING PREVIOUS
|
||||
u32 bsize = getnslots(r-1, bucketid);
|
||||
for (u32 s1 = 0; s1 < bsize; s1++) {
|
||||
const slot1 *pslot1 = buck + s1; // OPTIMIZE BY UPDATING PREVIOUS
|
||||
if (!cd.addslot(s1, htl.getxhash1(pslot1))) {
|
||||
xfull++;
|
||||
continue;
|
||||
}
|
||||
for (; cd.nextcollision(); ) {
|
||||
const u32 s0 = cd.slot();
|
||||
const slot1 *pslot0 = buck + s0;
|
||||
if (htl.equal(pslot0->hash, pslot1->hash)) {
|
||||
hfull++;
|
||||
continue;
|
||||
}
|
||||
u32 xorbucketid;
|
||||
const uchar *bytes0 = pslot0->hash->bytes, *bytes1 = pslot1->hash->bytes;
|
||||
#if WN == 200 && BUCKBITS == 12 && RESTBITS == 8
|
||||
xorbucketid = ((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 4)
|
||||
| (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) >> 4;
|
||||
#elif WN == 200 && BUCKBITS == 11 && RESTBITS == 9
|
||||
xorbucketid = ((u32)(bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) << 3)
|
||||
| (bytes0[htl.prevbo+3] ^ bytes1[htl.prevbo+3]) >> 5;
|
||||
#elif WN == 144 && BUCKBITS == 20 && RESTBITS == 4
|
||||
xorbucketid = ((((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 8)
|
||||
| (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2])) << 4)
|
||||
| (bytes0[htl.prevbo+3] ^ bytes1[htl.prevbo+3]) >> 4;
|
||||
#elif WN == 96 && BUCKBITS == 12 && RESTBITS == 4
|
||||
xorbucketid = ((u32)(bytes0[htl.prevbo+1] ^ bytes1[htl.prevbo+1]) << 4)
|
||||
| (bytes0[htl.prevbo+2] ^ bytes1[htl.prevbo+2]) >> 4;
|
||||
#else
|
||||
#error not implemented
|
||||
#endif
|
||||
const u32 xorslot = getslot(r, xorbucketid);
|
||||
if (xorslot >= NSLOTS) {
|
||||
bfull++;
|
||||
continue;
|
||||
}
|
||||
slot0 &xs = htl.hta.trees0[r/2][xorbucketid][xorslot];
|
||||
xs.attr = tree(bucketid, s0, s1);
|
||||
for (u32 i=htl.dunits; i < htl.prevhashunits; i++)
|
||||
xs.hash[i-htl.dunits].word = pslot0->hash[i].word ^ pslot1->hash[i].word;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void digitK(const u32 id) {
|
||||
collisiondata cd;
|
||||
htlayout htl(this, WK);
|
||||
u32 nc = 0;
|
||||
for (u32 bucketid = id; bucketid < NBUCKETS; bucketid += nthreads) {
|
||||
cd.clear();
|
||||
slot0 *buck = htl.hta.trees0[(WK-1)/2][bucketid];
|
||||
u32 bsize = getnslots(WK-1, bucketid);
|
||||
for (u32 s1 = 0; s1 < bsize; s1++) {
|
||||
const slot0 *pslot1 = buck + s1;
|
||||
if (!cd.addslot(s1, htl.getxhash0(pslot1))) // assume WK odd
|
||||
continue;
|
||||
for (; cd.nextcollision(); ) {
|
||||
const u32 s0 = cd.slot();
|
||||
if (htl.equal(buck[s0].hash, pslot1->hash))
|
||||
nc++, candidate(tree(bucketid, s0, s1));
|
||||
}
|
||||
}
|
||||
}
|
||||
//printf(" %d candidates ", nc);
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
u32 id;
|
||||
pthread_t thread;
|
||||
equi *eq;
|
||||
} thread_ctx;
|
||||
|
||||
void barrier(pthread_barrier_t *barry) {
|
||||
const int rc = pthread_barrier_wait(barry);
|
||||
if (rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD) {
|
||||
// printf("Could not wait on barrier\n");
|
||||
pthread_exit(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void *worker(void *vp) {
|
||||
thread_ctx *tp = (thread_ctx *)vp;
|
||||
equi *eq = tp->eq;
|
||||
|
||||
if (tp->id == 0)
|
||||
// printf("Digit 0\n");
|
||||
barrier(&eq->barry);
|
||||
eq->digit0(tp->id);
|
||||
barrier(&eq->barry);
|
||||
if (tp->id == 0) {
|
||||
eq->xfull = eq->bfull = eq->hfull = 0;
|
||||
eq->showbsizes(0);
|
||||
}
|
||||
barrier(&eq->barry);
|
||||
for (u32 r = 1; r < WK; r++) {
|
||||
if (tp->id == 0)
|
||||
// printf("Digit %d", r);
|
||||
barrier(&eq->barry);
|
||||
r&1 ? eq->digitodd(r, tp->id) : eq->digiteven(r, tp->id);
|
||||
barrier(&eq->barry);
|
||||
if (tp->id == 0) {
|
||||
// printf(" x%d b%d h%d\n", eq->xfull, eq->bfull, eq->hfull);
|
||||
eq->xfull = eq->bfull = eq->hfull = 0;
|
||||
eq->showbsizes(r);
|
||||
}
|
||||
barrier(&eq->barry);
|
||||
}
|
||||
if (tp->id == 0)
|
||||
// printf("Digit %d\n", WK);
|
||||
eq->digitK(tp->id);
|
||||
barrier(&eq->barry);
|
||||
pthread_exit(NULL);
|
||||
return 0;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user