[Dev] Documenting Feathercoin Specific Software settings - Part 18
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Implementation of new ACP checkpoint :: commit
implementation of new ACP checkpoint, initial commit
https://github.com/FeatherCoin/Feathercoin/commit/b1b2c158c8f13ffdd719c08d58968982f2446b76
src/main.cpp
+ /* Reset checkpoint to last hardened checkpoint + after block 1576929, which has an invalid checkpoint due to 0.9.3.2 failing ACP */ + if (nHeight == 1576940) + ResetSyncCheckpoint();
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Implementation of new ACP checkpoint :: commit
implementation of new ACP checkpoint, initial commit
https://github.com/FeatherCoin/Feathercoin/commit/b1b2c158c8f13ffdd719c08d58968982f2446b76
src/rpcserver.cpp
- { "getcheckpoint", &getcheckpoint, true, false, true }, + { "getcheckpoint", &getcheckpoint, true, false, false }, - { "sendcheckpoint", &sendcheckpoint, true, false, true }, + { "sendcheckpoint", &sendcheckpoint, true, false, false }, - { "enforcecheckpoint", &enforcecheckpoint, true, false, true }, + { "enforcecheckpoint", &enforcecheckpoint, true, false, false }, - { "makekeypair", &makekeypair, true, false, true }, + { "makekeypair", &makekeypair, true, false, false },
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Implemented new ACP keypair :: commit
Implemented new ACP keypair to reset checkpoints to
https://github.com/FeatherCoin/Feathercoin/commit/a0097479244ca53d5a94e23452bc766f16fce17d
src/init.cpp
+ uiInterface.InitMessage(_("Checking ACP ...")); + if (!CheckCheckpointPubKey()) { + strLoadError = _("Checking ACP pubkey failed"); + break; + }
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Implemented new ACP keypair :: commit
Implemented new ACP keypair to reset checkpoints to
https://github.com/FeatherCoin/Feathercoin/commit/a0097479244ca53d5a94e23452bc766f16fce17d
src/main.cpp
- /* Reset checkpoint to last hardened checkpoint - after block 1576929, which has an invalid checkpoint due to 0.9.3.2 failing ACP */ - if (nHeight == 1576940) - ResetSyncCheckpoint();
Code removed
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
fixed Issue #169 :: commit
When the client is configured to checkpointenforce=0 it crashes at startup.
https://github.com/FeatherCoin/Feathercoin/commit/1fe607b3382a0fc7521dbafa089bc66eef7c803a
src/main.cpp
- if (pindexBest->pprev && !CheckSyncCheckpoint(pindexBest->GetBlockHash(), pindexBest->pprev)) + if (pindexNew->pprev && !CheckSyncCheckpoint(pindexNew->GetBlockHash(), pindexNew->pprev))
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Increased protocol version to 70005 :: commit
https://github.com/FeatherCoin/Feathercoin/commit/e6cf22382f626414b75e444d28df565d3caf742f
src/version.h
-static const int PROTOCOL_VERSION = 70004; +static const int PROTOCOL_VERSION = 70005;
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Fixed issue #171 :: commit
0.11.2 has a compatibility feature to accept the ‘old’ and the ‘new’ pchmessagestart, so that 0.9.x nodes can successfully connect to a 0.11.x node.
When establishing outgoing connections 0.11.x uses the new pchMessageStart strin only, which is rejected by the 0.9.x nodeshttps://github.com/FeatherCoin/Feathercoin/commit/e6cf22382f626414b75e444d28df565d3caf742f
src/chainparams.cpp
+ pchMessageStartNew[0] = 0xfe; + pchMessageStartNew[1] = 0x46; + pchMessageStartNew[2] = 0x54; + pchMessageStartNew[3] = 0x43;
Code added
+ pchMessageStartNew[0] = 0xaa; + pchMessageStartNew[1] = 0xbb; + pchMessageStartNew[2] = 0xcc; + pchMessageStartNew[3] = 0xdd;
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Fixed issue #171 :: commit
The non official release 0.11.2 has a compatibility feature to accept the ‘old’ and the ‘new’ pchmessagestart, so that 0.9.x nodes can successfully connect to a 0.11.x node.
When establishing outgoing connections 0.11.x uses the new pchMessageStart strin only, which is rejected by the 0.9.x nodeshttps://github.com/FeatherCoin/Feathercoin/commit/19f116dec8a1bf1156d03f85aad36e4900318821
src/chainparams.h
+ const MessageStartChars& MessageStartNew() const { return pchMessageStartNew; }
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Fixed issue #171 :: commit
The non official release 0.11.2 has a compatibility feature to accept the ‘old’ and the ‘new’ pchmessagestart, so that 0.9.x nodes can successfully connect to a 0.11.x node.
When establishing outgoing connections 0.11.x uses the new pchMessageStart strin only, which is rejected by the 0.9.x nodeshttps://github.com/FeatherCoin/Feathercoin/commit/19f116dec8a1bf1156d03f85aad36e4900318821
src/main.cpp
- if (memcmp(msg.hdr.pchMessageStart, Params().MessageStart(), MESSAGE_START_SIZE) != 0) { - LogPrintf("\n\nPROCESSMESSAGE: INVALID MESSAGESTART\n\n"); - fOk = false; - break; - }
Code removed
+ /* Message start detector */ + if ((memcmp(msg.hdr.pchMessageStart, Params().MessageStart(), MESSAGE_START_SIZE) != 0) && (memcmp(msg.hdr.pchMessageStart, Params().MessageStartNew(), MESSAGE_START_SIZE) != 0)) { + + LogPrintf("\n\nPROCESSMESSAGE: INVALID MESSAGESTART\n\n"); + fOk = false; + break; + }
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Updated ACP key pair :: commit
https://github.com/FeatherCoin/Feathercoin/commit/9f3b0fe4daed6490565b1f918415b03243ce2932
src/checkpointsync.cpp
//sync-checkpoint master key +// for Version <= 0.9.6
Code added
-const std::string CSyncCheckpoint::strMainPubKey = "04810a50a45c847e2b3741cf4db2b678bc98e7a67d9218594fbf2d17cab5e2787b07ea56b3ba527d80a9b203623c637d2257cc849cd0f6710839dfcf34a930b4b0"; +// fro Version <= 0.9.6.1 +const std::string CSyncCheckpoint::strMainPubKey = "04c67c0114bc7cb8bb84ee0f3319e1df3339d335a15bdb04605cf2655d19212848a66d4535f3c91e943061474b7cacfd4eaa10835d35a8d4e431c68a4c4f5450ba";
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Fixed issue # 170 :: commit
[ 0.9.6 ] enforcecheckpoint config file parameter is reversed #170
When the parameter ‘enfocecheckpoint=0’ is defined checkpoints are enforced and if ‘enforcecheckpoint=1’ is defined ACP is running in advisory mode
https://github.com/FeatherCoin/Feathercoin/commit/922e3601f9366e443709164598d7d032892d6aeb
src/main.cpp
- // checkpoint advisory mode + // if not in checkpoint advisory mode - if (!IsSyncCheckpointEnforced() && !CheckSyncCheckpoint(hash, pindexPrev)) + if (IsSyncCheckpointEnforced() && !CheckSyncCheckpoint(hash, pindexPrev))
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
.gitignore
+src/**Makefile +/src/test/Makefile +/src/qt/test/Makefile +/src/qt/Makefile +/src/Makefile +/src/config/stamp-h1 +/src/config/bitcoin-config.h.in +/src/config/bitcoin-config.h +/Makefile +/libtool
Code updated / tidied
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
depends/.gitignore
+SDKs/ +work/ +built/ +sources/ +config.site +x86_64* +i686* +mips* +arm* +aarch64*
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
depends/Makefile
+.NOTPARALLEL : + +SOURCES_PATH ?= $(BASEDIR)/sources +BASE_CACHE ?= $(BASEDIR)/built +SDK_PATH ?= $(BASEDIR)/SDKs +NO_QT ?= +NO_WALLET ?= +NO_UPNP ?= +FALLBACK_DOWNLOAD_PATH ?= https://bitcoincore.org/depends-sources + +BUILD = $(shell ./config.guess) +HOST ?= $(BUILD) +PATCHES_PATH = $(BASEDIR)/patches +BASEDIR = $(CURDIR) +HASH_LENGTH:=11 +DOWNLOAD_CONNECT_TIMEOUT:=10 +DOWNLOAD_RETRIES:=3 +HOST_ID_SALT ?= salt +BUILD_ID_SALT ?= salt + +host:=$(BUILD) +ifneq ($(HOST),) +host:=$(HOST) +host_toolchain:=$(HOST)- +endif + +ifneq ($(DEBUG),) +release_type=debug +else +release_type=release +endif +
Example code from makefile, review compile file?
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
depends/README.md
+### Usage + +To build dependencies for the current arch+OS: + + make + +To build for another arch/OS: + + make HOST=host-platform-triplet + +For example: + + make HOST=x86_64-w64-mingw32 -j4 + +A prefix will be generated that's suitable for plugging into Bitcoin's +configure. In the above example, a dir named x86_64-w64-mingw32 will be +created. To use it for Bitcoin: + + ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32 + +Common `host-platform-triplets` for cross compilation are: + +- `i686-w64-mingw32` for Win32 +- `x86_64-w64-mingw32` for Win64 +- `x86_64-apple-darwin11` for MacOSX +- `arm-linux-gnueabihf` for Linux ARM 32 bit +- `aarch64-linux-gnu` for Linux ARM 64 bit + +No other options are needed, the paths are automatically configured. + +Dependency Options: +The following can be set when running make: make FOO=bar + + SOURCES_PATH: downloaded sources will be placed here + BASE_CACHE: built packages will be placed here + SDK_PATH: Path where sdk's can be found (used by OSX) + FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up + NO_QT: Don't download/build/cache qt and its dependencies + NO_WALLET: Don't download/build/cache libs needed to enable the wallet + NO_UPNP: Don't download/build/cache packages needed for enabling upnp + DEBUG: disable some optimizations and enable more runtime checking + HOST_ID_SALT: Optional salt to use when generating host package ids + BUILD_ID_SALT: Optional salt to use when generating build package ids + +If some packages are not built, for example `make NO_WALLET=1`, the appropriate +options will be passed to bitcoin's configure. In this case, `--disable-wallet`. + +Additional targets: + + download: run 'make download' to fetch all sources without building them + download-osx: run 'make download-osx' to fetch all sources needed for osx builds + download-win: run 'make download-win' to fetch all sources needed for win builds + download-linux: run 'make download-linux' to fetch all sources needed for linux builds + +### Other documentation + +- [description.md](description.md): General description of the depends system +- [packages.md](packages.md): Steps for adding packages +
New file added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
depends/builders/darwin.mk
+build_darwin_CC: = $(shell xcrun -f clang) +build_darwin_CXX: = $(shell xcrun -f clang++) +build_darwin_AR: = $(shell xcrun -f ar) +build_darwin_RANLIB: = $(shell xcrun -f ranlib) +build_darwin_STRIP: = $(shell xcrun -f strip) +build_darwin_OTOOL: = $(shell xcrun -f otool) +build_darwin_NM: = $(shell xcrun -f nm) +build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) +build_darwin_SHA256SUM = shasum -a 256 +build_darwin_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o + +#darwin host on darwin builder. overrides darwin host preferences. +darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) +darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++ +darwin_AR:=$(shell xcrun -f ar) +darwin_RANLIB:=$(shell xcrun -f ranlib) +darwin_STRIP:=$(shell xcrun -f strip) +darwin_LIBTOOL:=$(shell xcrun -f libtool) +darwin_OTOOL:=$(shell xcrun -f otool) +darwin_NM:=$(shell xcrun -f nm) +darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) +darwin_native_toolchain=
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
depends/builders/default.mk
+default_build_CC = gcc +default_build_CXX = g++ +default_build_AR = ar +default_build_RANLIB = ranlib +default_build_STRIP = strip +default_build_NM = nm +default_build_OTOOL = otool +default_build_INSTALL_NAME_TOOL = install_name_tool + +define add_build_tool_func +build_$(build_os)_$1 ?= $$(default_build_$1) +build_$(build_arch)_$(build_os)_$1 ?= $$(build_$(build_os)_$1) +build_$1=$$(build_$(build_arch)_$(build_os)_$1) +endef +$(foreach var,CC CXX AR RANLIB NM STRIP SHA256SUM DOWNLOAD OTOOL INSTALL_NAME_TOOL,$(eval $(call add_build_tool_func,$(var)))) +define add_build_flags_func +build_$(build_arch)_$(build_os)_$1 += $(build_$(build_os)_$1) +build_$1=$$(build_$(build_arch)_$(build_os)_$1) +endef +$(foreach flags, CFLAGS CXXFLAGS LDFLAGS, $(eval $(call add_build_flags_func,$(flags))))
New file code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
depends/builders/linux.mk
New file
+build_linux_SHA256SUM = sha256sum +build_linux_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
depends/builders/linux.mk
+#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2017 Free Software Foundation, Inc. + +timestamp='2017-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see <http://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to <config-patches@gnu.org>. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2017 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line
Start of large new file build file? review
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Added depends folder from bitcoin’s tree to build all dependencies. :: commit
Auto build
https://github.com/FeatherCoin/Feathercoin/commit/e69efc079f1055dc5b12be5d41b82f518cd06a5a
depends/config.site.in
+depends_prefix="`dirname ${ac_site_file}`/.." + +cross_compiling=maybe +host_alias=@HOST@ +ac_tool_prefix=${host_alias}- + +if test -z $with_boost; then + with_boost=$depends_prefix +fi +if test -z $with_qt_plugindir; then + with_qt_plugindir=$depends_prefix/plugins +fi +if test -z $with_qt_translationdir; then + with_qt_translationdir=$depends_prefix/translations +fi +if test -z $with_qt_bindir; then + with_qt_bindir=$depends_prefix/native/bin +fi +if test -z $with_protoc_bindir; then + with_protoc_bindir=$depends_prefix/native/bin +fi + + +if test -z $enable_wallet && test -n "@no_wallet@"; then + enable_wallet=no +fi + +if test -z $with_miniupnpc && test -n "@no_upnp@"; then + with_miniupnpc=no +fi + +if test -z $with_gui && test -n "@no_qt@"; then + with_gui=no +fi + +if test x@host_os@ = xdarwin; then + BREW=no + PORT=no +fi + +if test x@host_os@ = xmingw32; then + if test -z $with_qt_incdir; then + with_qt_incdir=$depends_prefix/include + fi + if test -z $with_qt_libdir; then + with_qt_libdir=$depends_prefix/lib + fi +fi + +PATH=$depends_prefix/native/bin:$PATH +PKG_CONFIG="`which pkg-config` --static" + +# These two need to remain exported because pkg-config does not see them +# otherwise. That means they must be unexported at the end of configure.ac to +# avoid ruining the cache. Sigh. + +export PKG_CONFIG_LIBDIR=$depends_prefix/lib/pkgconfig +export PKG_CONFIG_PATH=$depends_prefix/share/pkgconfig + +CPPFLAGS="-I$depends_prefix/include/ $CPPFLAGS" +LDFLAGS="-L$depends_prefix/lib $LDFLAGS" + +CC="@CC@" +CXX="@CXX@" +OBJC="${CC}" +CCACHE=$depends_prefix/native/bin/ccache +PYTHONPATH=$depends_prefix/native/lib/python/dist-packages:$PYTHONPATH + +if test -n "@AR@"; then + AR=@AR@ + ac_cv_path_ac_pt_AR=${AR} +fi + +if test -n "@RANLIB@"; then + RANLIB=@RANLIB@ + ac_cv_path_ac_pt_RANLIB=${RANLIB} +fi + +if test -n "@NM@"; then + NM=@NM@ + ac_cv_path_ac_pt_NM=${NM} +fi + +if test -n "@debug@"; then + enable_reduce_exports=no +fi + +if test -n "@CFLAGS@"; then + CFLAGS="@CFLAGS@ $CFLAGS" +fi +if test -n "@CXXFLAGS@"; then + CXXFLAGS="@CXXFLAGS@ $CXXFLAGS" +fi +if test -n "@CPPFLAGS@"; then + CPPFLAGS="@CPPFLAGS@ $CPPFLAGS" +fi +if test -n "@LDFLAGS@"; then + LDFLAGS="@LDFLAGS@ $LDFLAGS" +fi 1,828 depends/config.sub Large diffs are not rendered by default. 53 depends/description.md @@ -0,0 +1,53 @@ +This is a system of building and caching dependencies necessary for building Bitcoin. +There are several features that make it different from most similar systems: + +### It is designed to be builder and host agnostic + +In theory, binaries for any target OS/architecture can be created, from a +builder running any OS/architecture. In practice, build-side tools must be +specified when the defaults don't fit, and packages must be amended to work +on new hosts. For now, a build architecture of x86_64 is assumed, either on +Linux or OSX. + +### No reliance on timestamps + +File presence is used to determine what needs to be built. This makes the +results distributable and easily digestable by automated builders. + +### Each build only has its specified dependencies available at build-time. + +For each build, the sysroot is wiped and the (recursive) dependencies are +installed. This makes each build deterministic, since there will never be any +unknown files available to cause side-effects. + +### Each package is cached and only rebuilt as needed. + +Before building, a unique build-id is generated for each package. This id +consists of a hash of all files used to build the package (Makefiles, packages, +etc), and as well as a hash of the same data for each recursive dependency. If +any portion of a package's build recipe changes, it will be rebuilt as well as +any other package that depends on it. If any of the main makefiles (Makefile, +funcs.mk, etc) are changed, all packages will be rebuilt. After building, the +results are cached into a tarball that can be re-used and distributed. + +### Package build results are (relatively) deterministic. + +Each package is configured and patched so that it will yield the same +build-results with each consequent build, within a reasonable set of +constraints. Some things like timestamp insertion are unavoidable, and are +beyond the scope of this system. Additionally, the toolchain itself must be +capable of deterministic results. When revisions are properly bumped, a cached +build should represent an exact single payload. + +### Sources are fetched and verified automatically + +Each package must define its source location and checksum. The build will fail +if the fetched source does not match. Sources may be pre-seeded and/or cached +as desired. + +### Self-cleaning + +Build and staging dirs are wiped after use, and any previous version of a +cached result is removed following a successful build. Automated builders +should be able to build each revision and store the results with no further +intervention.
New file build file?