From e1ff3dd5e2a7475d4de52ab00f6425bb535fc09e Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Thu, 13 Apr 2023 14:33:46 +0800 Subject: [PATCH] Rebase to master, and enable path agnostic rust builds (#1895) * Fix typo in clang dockerfile (#1842) * Update PULL_REQUEST_TEMPLATE.md * mingw fixes for bcrypt, suppress depends related warnings (#1847) * Suppress depends related superfluous warnings * Fix passthrough string quote * Fix windres, bcrypt failures * Cleanup build process and workflows (#1851) * Suppress depends related superfluous warnings * Fix passthrough string quote * Fix windres, bcrypt failures * Cleanup build, workflows, dockerfiles * Cleanup comments * Refactor default var setup * Cleanup comments * Add safe_rm_rf and simplify left file list * Fix shellcheck * Fix arm core images * More cleanup, unify packaging, safer rm * Apply default conf across all arch, conf args append * Apply glibc compat only on linux builds * Clean up obsolete comments * Cleanup unmaintained deps, configs and tools (#1855) * Suppress depends related superfluous warnings * Fix passthrough string quote * Fix windres, bcrypt failures * Cleanup build, workflows, dockerfiles * Cleanup comments * Refactor default var setup * Cleanup comments * Add safe_rm_rf and simplify left file list * Fix shellcheck * Fix arm core images * More cleanup, unify packaging, safer rm * Apply default conf across all arch, conf args append * Apply glibc compat only on linux builds * Clean up obsolete comments * Cleanup unmaintained files * Remove install.md * Remove libdeficonsensus dyn lib, defi-wallet * Enable static linking * Revert boost changes * Remove outdated man pages * Remove debian packaging related file * Bump boost min to 1.77, remove obsolete checks * Revert boost config cleanup * More cleanups, nsis, gitian * Remove boost reduce exports change * Cleanup boost obsolete check * Remove wallet tool test * Update toolchains, deps and further cleanup (#1857) * Suppress depends related superfluous warnings * Fix passthrough string quote * Fix windres, bcrypt failures * Cleanup build, workflows, dockerfiles * Cleanup comments * Refactor default var setup * Cleanup comments * Add safe_rm_rf and simplify left file list * Fix shellcheck * Fix arm core images * More cleanup, unify packaging, safer rm * Apply default conf across all arch, conf args append * Apply glibc compat only on linux builds * Clean up obsolete comments * Cleanup unmaintained files * Remove install.md * Remove libdeficonsensus dyn lib, defi-wallet * Enable static linking * Revert boost changes * Remove outdated man pages * Remove debian packaging related file * Bump boost min to 1.77, remove obsolete checks * Revert boost config cleanup * More cleanups, nsis, gitian * Remove boost reduce exports change * Cleanup boost obsolete check * Reorganize scripts, merge share and contrib * Fix docker script * Remove wallet tool test * static libgcc, disable tests and benches on CI builds * Fix CI builds to use consistent compilers * Better consistency in toolchains * Remove cdrkit, libdmg and switch to docker multiplatform base * Update cppcheck version * Switch libdeficonsensus to internal, toolchain cleanups (#1860) * Cleanup deps * Switch libdeficonsensus to an internal lib * Update ubuntu bases * Update darwin llvm to 16, update cctools and all depends (#1862) * Update toolchains * Remove obsolete zeromq patches * Make libtapi path agnostic of version * Update XCode SDK * Rename target to x86_64-apple-darwin * Revert to older behavior of zeromq * Remove superfluous LIBADD * Couple LDFLAGS together * Skip unrecognized flag on clang * Fix unintended quote * Overhaul of build, CI tests and lints, packaging and deps (#1880) * Fix spv out of tree builds * Sync dockerignore and gitignore * Overhaul of builds (to out of tree), deps updates, simplify dockefiles, CI test, lints and more * Uncomment benchmark code, disable with flags instead * Resolve compiler warnings * Fix arm64 crc intrinsics flags * Minor CI updates and docker login fixes * Add `--prefix` into configure to workaround surviving config.sub rechecks * Update ignores (#1888) * Fixes for make.sh undeclared locals and clean-artifacts (#1887) * Fix local decls in make.sh * Fix lints * Actually fix lints * Minimal change set to enable rust build * fmt * Include google protos to remove external dependence * Cleanup unused vars --------- Co-authored-by: Shoham Chakraborty --- .appveyor.yml | 46 - .cirrus.yml | 53 - .dockerignore | 131 +- .github/PULL_REQUEST_TEMPLATE.md | 20 +- .github/workflows/build-dev.yaml | 111 +- .github/workflows/build-release.yaml | 112 +- .github/workflows/lint.yaml | 41 +- .github/workflows/misc-prune-artifacts.yaml | 1 + .github/workflows/tests-e2e.yaml | 39 +- .github/workflows/tests-jellyfish.yml | 24 +- .github/workflows/tests-sync.yml | 40 +- .gitignore | 118 +- .lift.toml | 3 - .python-version | 1 - .style.yapf | 261 ---- .tx/config | 7 - INSTALL.md | 5 - Makefile.am | 161 +-- build_msvc/.gitignore | 12 - build_msvc/README.md | 50 - build_msvc/bench_defi/bench_defi.vcxproj.in | 59 - build_msvc/common.init.vcxproj | 121 -- build_msvc/common.vcxproj | 12 - build_msvc/defi.sln | 210 --- build_msvc/defi_config.h | 422 ------ build_msvc/libdefi_cli/libdefi_cli.vcxproj.in | 16 - .../libdefi_common/libdefi_common.vcxproj.in | 16 - .../libdefi_crypto/libdefi_crypto.vcxproj.in | 16 - .../libdefi_server/libdefi_server.vcxproj.in | 19 - .../libdefi_util/libdefi_util.vcxproj.in | 16 - .../libdefi_wallet/libdefi_wallet.vcxproj.in | 16 - .../libdefi_wallet_tool.vcxproj.in | 16 - build_msvc/libdefi_zmq/libdefi_zmq.vcxproj.in | 16 - build_msvc/libleveldb/libleveldb.vcxproj | 63 - build_msvc/libsecp256k1/libsecp256k1.vcxproj | 22 - build_msvc/libsecp256k1_config.h | 29 - build_msvc/libunivalue/libunivalue.vcxproj | 19 - build_msvc/msbuild/tasks/hexdump.targets | 53 - .../msbuild/tasks/replaceinfile.targets | 35 - build_msvc/msvc-autogen.py | 82 -- build_msvc/testconsensus/testconsensus.cpp | 50 - .../testconsensus/testconsensus.vcxproj | 28 - ci/README.md | 34 +- ci/extended_lint/04_install.sh | 12 - ci/extended_lint/06_script.sh | 9 - ci/extended_lint/deps.sh | 17 + ci/extended_lint/lint.sh | 27 + ci/extended_lint/main.sh | 26 + ci/lint/04_install.sh | 18 - ci/lint/05_before_script.sh | 9 - ci/lint/06_script.sh | 25 - ci/lint/deps.sh | 23 + ci/lint/lint.sh | 33 + ci/lint/main.sh | 26 + ci/parallel_sync/sync.sh | 164 --- ci/retry/README.md | 123 -- ci/retry/retry | 163 --- ci/sync/main.sh | 179 +++ ci/test/00_setup_env.sh | 67 - ci/test/00_setup_env_amd64_asan.sh | 14 - ci/test/00_setup_env_amd64_fuzz.sh | 16 - ci/test/00_setup_env_amd64_nowallet.sh | 13 - ci/test/00_setup_env_amd64_trusty.sh | 15 - ci/test/00_setup_env_amd64_tsan.sh | 14 - ci/test/00_setup_env_arm.sh | 16 - ci/test/00_setup_env_i686.sh | 13 - ci/test/00_setup_env_mac.sh | 16 - ci/test/00_setup_env_win64.sh | 13 - ci/test/03_before_install.sh | 26 - ci/test/04_install.sh | 63 - ci/test/05_before_script.sh | 27 - ci/test/06_script_a.sh | 48 - ci/test/06_script_b.sh | 29 - ci/test/main.sh | 28 + ci/test_run_all.sh | 14 - configure.ac | 142 +- contrib/README.md | 26 - .../defi-cli.bash-completion | 0 .../defi-tx.bash-completion | 0 .../defid.bash-completion | 0 .../conf-examples}/default.conf | 4 +- .../conf-examples}/pruned.conf | 4 +- contrib/debian/copyright | 146 -- contrib/defi-qt.pro | 21 - contrib/devtools/README.md | 14 - contrib/devtools/gen-manpages.sh | 33 - contrib/devtools/optimize-pngs.py | 2 +- .../dockerfiles/aarch64-linux-gnu.dockerfile | 44 + .../arm-linux-gnueabihf.dockerfile | 71 +- .../dockerhub/x86_64-pc-linux-gnu.dockerfile | 19 - .../x86_64-alpine-linux-musl.dockerfile | 0 .../x86_64-apple-darwin.dockerfile | 24 + .../x86_64-apple-darwin18.dockerfile | 86 -- .../x86_64-pc-linux-gnu-clang.dockerfile | 80 +- .../x86_64-pc-linux-gnu-dev.dockerfile | 12 - .../x86_64-pc-linux-gnu.dockerfile | 69 +- .../dockerfiles/x86_64-w64-mingw32.dockerfile | 88 +- {share => contrib}/genbuild.sh | 7 +- contrib/gitian-build.py | 261 ---- contrib/gitian-descriptors/gitian-linux.yml | 191 --- .../gitian-descriptors/gitian-osx-signer.yml | 40 - contrib/gitian-descriptors/gitian-osx.yml | 168 --- .../gitian-descriptors/gitian-win-signer.yml | 42 - contrib/gitian-descriptors/gitian-win.yml | 180 --- contrib/gitian-keys/README.md | 29 - contrib/gitian-keys/keys.txt | 33 - contrib/guix/README.md | 229 --- contrib/guix/guix-build.sh | 39 - contrib/guix/libexec/build.sh | 206 --- contrib/guix/manifest.scm | 158 --- contrib/init/README.md | 1 - contrib/init/defid.conf | 65 - contrib/macdeploy/LICENSE | 674 --------- contrib/macdeploy/README.md | 15 - contrib/macdeploy/background.svg | 34 - contrib/macdeploy/custom_dsstore.py | 59 - contrib/macdeploy/detached-sig-apply.sh | 57 - contrib/macdeploy/detached-sig-create.sh | 52 - contrib/macdeploy/extract-osx-sdk.sh | 34 - contrib/macdeploy/fancy.plist | 32 - contrib/macdeploy/macdeployqtplus | 866 ------------ {share => contrib}/pixmaps/defi.ico | Bin {share => contrib}/pixmaps/defi128.png | Bin {share => contrib}/pixmaps/defi128.xpm | 0 {share => contrib}/pixmaps/defi16.png | Bin {share => contrib}/pixmaps/defi16.xpm | 0 {share => contrib}/pixmaps/defi256.png | Bin {share => contrib}/pixmaps/defi256.xpm | 0 {share => contrib}/pixmaps/defi32.png | Bin {share => contrib}/pixmaps/defi32.xpm | 0 {share => contrib}/pixmaps/defi64.png | Bin {share => contrib}/pixmaps/defi64.xpm | 0 {share => contrib}/rpcauth/README.md | 2 +- {share => contrib}/rpcauth/rpcauth.py | 0 contrib/verify-commits/README.md | 57 - .../allow-incorrect-sha512-commits | 2 - contrib/verify-commits/allow-revsig-commits | 504 ------- .../allow-unclean-merge-commits | 4 - contrib/verify-commits/gpg.sh | 65 - contrib/verify-commits/pre-push-hook.sh | 21 - contrib/verify-commits/trusted-git-root | 1 - contrib/verify-commits/trusted-keys | 6 - .../verify-commits/trusted-sha512-root-commit | 1 - contrib/verify-commits/verify-commits.py | 165 --- contrib/verifybinaries/README.md | 43 - contrib/verifybinaries/verify.sh | 177 --- contrib/windeploy/detached-sig-create.sh | 35 - contrib/windeploy/win-codesign.cert | 100 -- depends/.dockerignore | 12 + depends/Makefile | 12 +- depends/README.md | 2 +- depends/config.site.in | 2 +- depends/hosts/darwin.mk | 15 +- depends/packages/bdb.mk | 4 - depends/packages/boost.mk | 8 +- depends/packages/libevent.mk | 4 - depends/packages/native_biplist.mk | 15 - depends/packages/native_cctools.mk | 38 +- depends/packages/native_cdrkit.mk | 26 - depends/packages/native_ds_store.mk | 16 - depends/packages/native_libdmg-hfsplus.mk | 22 - depends/packages/native_mac_alias.mk | 15 - depends/packages/packages.mk | 5 +- depends/packages/zeromq.mk | 15 +- .../native_cdrkit/cdrkit-deterministic.patch | 86 -- .../0001-fix-build-with-older-mingw64.patch | 30 - .../0002-disable-pthread_set_name_np.patch | 35 - doc/.dockerignore | 1 + doc/JSON-RPC-interface.md | 2 +- doc/build-quick.md | 105 +- doc/defi-conf.md | 2 +- doc/developer-notes.md | 33 - doc/init.md | 13 +- doc/man/Makefile.am | 19 - doc/man/defi-cli.1 | 119 -- doc/man/defi-qt.1 | 618 --------- doc/man/defi-tx.1 | 120 -- doc/man/defi-wallet.1 | 67 - doc/man/defid.1 | 591 -------- doc/release-notes/release-notes-0.10.0.md | 762 ---------- doc/release-notes/release-notes-0.10.1.md | 143 -- doc/release-notes/release-notes-0.10.2.md | 86 -- doc/release-notes/release-notes-0.10.3.md | 165 --- doc/release-notes/release-notes-0.10.4.md | 172 --- doc/release-notes/release-notes-0.11.0.md | 505 ------- doc/release-notes/release-notes-0.11.1.md | 172 --- doc/release-notes/release-notes-0.11.2.md | 217 --- doc/release-notes/release-notes-0.12.0.md | 894 ------------ doc/release-notes/release-notes-0.12.1.md | 198 --- doc/release-notes/release-notes-0.13.0.md | 868 ------------ doc/release-notes/release-notes-0.13.1.md | 410 ------ doc/release-notes/release-notes-0.13.2.md | 178 --- doc/release-notes/release-notes-0.14.0.md | 873 ------------ doc/release-notes/release-notes-0.14.1.md | 143 -- doc/release-notes/release-notes-0.14.2.md | 102 -- doc/release-notes/release-notes-0.14.3.md | 118 -- doc/release-notes/release-notes-0.15.0.1.md | 87 -- doc/release-notes/release-notes-0.15.0.md | 878 ------------ doc/release-notes/release-notes-0.15.1.md | 277 ---- doc/release-notes/release-notes-0.15.2.md | 118 -- doc/release-notes/release-notes-0.16.0.md | 720 ---------- doc/release-notes/release-notes-0.16.1.md | 145 -- doc/release-notes/release-notes-0.16.2.md | 116 -- doc/release-notes/release-notes-0.16.3.md | 88 -- doc/release-notes/release-notes-0.17.0.1.md | 41 - doc/release-notes/release-notes-0.17.0.md | 1105 --------------- doc/release-notes/release-notes-0.17.1.md | 168 --- doc/release-notes/release-notes-0.18.0.md | 1224 ----------------- doc/release-notes/release-notes-0.18.1.md | 136 -- doc/release-notes/release-notes-0.3.12.md | 13 - doc/release-notes/release-notes-0.3.13.md | 26 - doc/release-notes/release-notes-0.3.14.md | 11 - doc/release-notes/release-notes-0.3.15.md | 6 - doc/release-notes/release-notes-0.3.16.md | 1 - doc/release-notes/release-notes-0.3.17.md | 12 - doc/release-notes/release-notes-0.3.18.md | 11 - doc/release-notes/release-notes-0.3.19.md | 9 - doc/release-notes/release-notes-0.3.20.1.md | 1 - doc/release-notes/release-notes-0.3.20.2.md | 17 - doc/release-notes/release-notes-0.3.20.md | 22 - doc/release-notes/release-notes-0.3.21.md | 20 - doc/release-notes/release-notes-0.3.22.md | 16 - doc/release-notes/release-notes-0.3.23.md | 10 - doc/release-notes/release-notes-0.3.24.md | 20 - doc/release-notes/release-notes-0.4.0.md | 70 - doc/release-notes/release-notes-0.4.1.md | 38 - doc/release-notes/release-notes-0.4.2.md | 1 - doc/release-notes/release-notes-0.4.3.md | 21 - doc/release-notes/release-notes-0.4.4.md | 30 - doc/release-notes/release-notes-0.4.5.md | 1 - doc/release-notes/release-notes-0.4.6.md | 37 - doc/release-notes/release-notes-0.5.0.md | 70 - doc/release-notes/release-notes-0.5.1.md | 43 - doc/release-notes/release-notes-0.5.2.md | 22 - doc/release-notes/release-notes-0.5.3.md | 42 - doc/release-notes/release-notes-0.5.4.md | 39 - doc/release-notes/release-notes-0.5.5.md | 37 - doc/release-notes/release-notes-0.6.0.md | 138 -- doc/release-notes/release-notes-0.6.1.md | 2 - doc/release-notes/release-notes-0.6.2.md | 50 - doc/release-notes/release-notes-0.6.3.md | 29 - doc/release-notes/release-notes-0.7.0.md | 169 --- doc/release-notes/release-notes-0.7.1.md | 110 -- doc/release-notes/release-notes-0.7.2.md | 68 - doc/release-notes/release-notes-0.8.0.md | 139 -- doc/release-notes/release-notes-0.8.1.md | 22 - doc/release-notes/release-notes-0.8.2.md | 137 -- doc/release-notes/release-notes-0.8.3.md | 18 - doc/release-notes/release-notes-0.8.4.md | 83 -- doc/release-notes/release-notes-0.8.5.md | 44 - doc/release-notes/release-notes-0.8.6.md | 66 - doc/release-notes/release-notes-0.9.0.md | 411 ------ doc/release-notes/release-notes-0.9.1.md | 53 - doc/release-notes/release-notes-0.9.2.1.md | 207 --- doc/release-notes/release-notes-0.9.2.md | 207 --- doc/release-notes/release-notes-0.9.3.md | 101 -- doc/release-notes/release-notes-0.9.4.md | 95 -- doc/release-notes/release-notes-0.9.5.md | 60 - doc/setup-nodes-docker.md | 4 +- libdeficonsensus.pc.in | 11 - make.sh | 672 +++++---- share/pixmaps/nsis-header.bmp | Bin 25820 -> 0 bytes share/pixmaps/nsis-wizard.bmp | Bin 154544 -> 0 bytes share/setup.nsi.in | 179 --- src/Makefile.am | 186 +-- src/Makefile.bench.include | 3 +- src/Makefile.test.include | 19 +- src/amount.h | 2 +- src/bench/.dockerignore | 1 + src/bench/bench_defi.cpp | 70 +- src/bench/checkqueue.cpp | 1 - src/crc32c/.dockerignore | 8 + src/leveldb/.dockerignore | 13 + src/rust/Cargo.lock | 21 +- src/rust/Makefile | 44 - src/rust/Makefile.am | 29 + .../{build.rs => build.rs.disabled} | 0 src/rust/crates/ain-evm-cpp-ffi/src/lib.rs | 26 +- src/rust/crates/ain-evm-ffi/Cargo.toml | 1 - src/rust/crates/ain-evm-ffi/build.rs | 31 +- src/rust/crates/ain-grpc/build.rs | 25 +- src/rust/crates/ain-grpc/src/codegen.rs | 4 +- src/rust/crates/ain-grpc/src/gen/.gitkeep | 0 src/rust/crates/ain-grpc/src/gen/rpc.rs | 748 ++++++++++ src/rust/crates/ain-grpc/src/gen/types.rs | 1167 ++++++++++++++++ src/rust/protobuf/google/protobuf/any.proto | 161 +++ src/rust/protobuf/google/protobuf/api.proto | 207 +++ .../google/protobuf/compiler/plugin.proto | 180 +++ .../protobuf/google/protobuf/descriptor.proto | 975 +++++++++++++ .../protobuf/google/protobuf/duration.proto | 115 ++ src/rust/protobuf/google/protobuf/empty.proto | 51 + .../protobuf/google/protobuf/field_mask.proto | 245 ++++ .../google/protobuf/source_context.proto | 48 + .../protobuf/google/protobuf/struct.proto | 95 ++ .../protobuf/google/protobuf/timestamp.proto | 144 ++ src/rust/protobuf/google/protobuf/type.proto | 187 +++ .../protobuf/google/protobuf/wrappers.proto | 123 ++ src/secp256k1/.dockerignore | 64 + src/spv/bcash/BRBCashAddr.cpp | 9 +- src/spv/bcash/BRBCashParams.cpp | 8 +- src/spv/bcash/BRBCashParams.h | 2 +- src/spv/bitcoin/BRBIP38Key.cpp | 10 +- src/spv/bitcoin/BRBIP38Key.h | 2 +- src/spv/bitcoin/BRBloomFilter.cpp | 8 +- src/spv/bitcoin/BRChainParams.cpp | 2 +- src/spv/bitcoin/BRChainParams.h | 7 +- src/spv/bitcoin/BRMerkleBlock.cpp | 9 +- src/spv/bitcoin/BRMerkleBlock.h | 3 +- src/spv/bitcoin/BRPaymentProtocol.cpp | 7 +- src/spv/bitcoin/BRPaymentProtocol.h | 7 +- src/spv/bitcoin/BRPeer.cpp | 19 +- src/spv/bitcoin/BRPeer.h | 10 +- src/spv/bitcoin/BRPeerManager.cpp | 13 +- src/spv/bitcoin/BRPeerManager.h | 12 +- src/spv/bitcoin/BRTransaction.cpp | 7 +- src/spv/bitcoin/BRTransaction.h | 8 +- src/spv/bitcoin/BRWallet.cpp | 10 +- src/spv/bitcoin/BRWallet.h | 8 +- src/spv/spv_rpc.cpp | 5 +- src/spv/spv_wrapper.h | 4 +- src/spv/support/BRAddress.cpp | 12 +- src/spv/support/BRAddress.h | 5 +- src/spv/support/BRBIP32Sequence.cpp | 11 +- src/spv/support/BRBIP32Sequence.h | 5 +- src/spv/support/BRBIP39Mnemonic.cpp | 7 +- src/spv/support/BRBIP39WordsEn.h | 2 +- src/spv/support/BRBase58.cpp | 7 +- src/spv/support/BRBech32.cpp | 7 +- src/spv/support/BRCrypto.cpp | 4 +- src/spv/support/BRInt.h | 4 +- src/spv/support/BRKey.cpp | 9 +- src/spv/support/BRKey.h | 3 +- src/spv/support/BRKeyECIES.cpp | 5 +- src/spv/support/BRKeyECIES.h | 2 +- src/spv/support/BRSet.cpp | 3 +- src/test/blockencodings_tests.cpp | 1 - src/test/uint256_tests.cpp | 8 +- src/txmempool.cpp | 2 - src/univalue/.dockerignore | 32 + src/univalue/TODO | 10 - src/univalue/build-aux/m4/.dockerignore | 1 + src/univalue/lib/.dockerignore | 2 + src/univalue/test/.dockerignore | 8 + test/config.ini.in | 2 +- test/functional/.dockerignore | 2 + test/functional/README.md | 1 - ..._rollback.py => example_rollback_check.py} | 58 +- .../test_framework/test_framework.py | 75 +- test/functional/test_runner.py | 11 +- test/functional/tool_wallet.py | 215 --- test/lint/README.md | 17 - test/lint/commit-script-check.sh | 4 +- test/lint/disabled-lint-shebang.sh | 20 - test/lint/extended-lint-all.sh | 2 + test/lint/git-subtree-check.sh | 98 -- test/lint/lint-all.sh | 8 +- test/lint/lint-circular-dependencies.sh | 3 + test/lint/lint-qt.sh | 20 - test/lint/lint-shebang.sh | 35 + test/util/rpcauth-test.py | 2 +- 360 files changed, 6493 insertions(+), 25708 deletions(-) delete mode 100644 .appveyor.yml delete mode 100644 .cirrus.yml delete mode 100644 .lift.toml delete mode 100644 .python-version delete mode 100644 .style.yapf delete mode 100644 .tx/config delete mode 100644 INSTALL.md delete mode 100644 build_msvc/.gitignore delete mode 100644 build_msvc/README.md delete mode 100644 build_msvc/bench_defi/bench_defi.vcxproj.in delete mode 100644 build_msvc/common.init.vcxproj delete mode 100644 build_msvc/common.vcxproj delete mode 100644 build_msvc/defi.sln delete mode 100644 build_msvc/defi_config.h delete mode 100644 build_msvc/libdefi_cli/libdefi_cli.vcxproj.in delete mode 100644 build_msvc/libdefi_common/libdefi_common.vcxproj.in delete mode 100644 build_msvc/libdefi_crypto/libdefi_crypto.vcxproj.in delete mode 100644 build_msvc/libdefi_server/libdefi_server.vcxproj.in delete mode 100644 build_msvc/libdefi_util/libdefi_util.vcxproj.in delete mode 100644 build_msvc/libdefi_wallet/libdefi_wallet.vcxproj.in delete mode 100644 build_msvc/libdefi_wallet_tool/libdefi_wallet_tool.vcxproj.in delete mode 100644 build_msvc/libdefi_zmq/libdefi_zmq.vcxproj.in delete mode 100644 build_msvc/libleveldb/libleveldb.vcxproj delete mode 100644 build_msvc/libsecp256k1/libsecp256k1.vcxproj delete mode 100644 build_msvc/libsecp256k1_config.h delete mode 100644 build_msvc/libunivalue/libunivalue.vcxproj delete mode 100644 build_msvc/msbuild/tasks/hexdump.targets delete mode 100644 build_msvc/msbuild/tasks/replaceinfile.targets delete mode 100644 build_msvc/msvc-autogen.py delete mode 100644 build_msvc/testconsensus/testconsensus.cpp delete mode 100644 build_msvc/testconsensus/testconsensus.vcxproj delete mode 100755 ci/extended_lint/04_install.sh delete mode 100755 ci/extended_lint/06_script.sh create mode 100755 ci/extended_lint/deps.sh create mode 100755 ci/extended_lint/lint.sh create mode 100755 ci/extended_lint/main.sh delete mode 100755 ci/lint/04_install.sh delete mode 100755 ci/lint/05_before_script.sh delete mode 100755 ci/lint/06_script.sh create mode 100755 ci/lint/deps.sh create mode 100755 ci/lint/lint.sh create mode 100755 ci/lint/main.sh delete mode 100644 ci/parallel_sync/sync.sh delete mode 100644 ci/retry/README.md delete mode 100755 ci/retry/retry create mode 100755 ci/sync/main.sh delete mode 100755 ci/test/00_setup_env.sh delete mode 100644 ci/test/00_setup_env_amd64_asan.sh delete mode 100644 ci/test/00_setup_env_amd64_fuzz.sh delete mode 100644 ci/test/00_setup_env_amd64_nowallet.sh delete mode 100644 ci/test/00_setup_env_amd64_trusty.sh delete mode 100644 ci/test/00_setup_env_amd64_tsan.sh delete mode 100644 ci/test/00_setup_env_arm.sh delete mode 100644 ci/test/00_setup_env_i686.sh delete mode 100644 ci/test/00_setup_env_mac.sh delete mode 100644 ci/test/00_setup_env_win64.sh delete mode 100755 ci/test/03_before_install.sh delete mode 100755 ci/test/04_install.sh delete mode 100755 ci/test/05_before_script.sh delete mode 100755 ci/test/06_script_a.sh delete mode 100755 ci/test/06_script_b.sh create mode 100755 ci/test/main.sh delete mode 100755 ci/test_run_all.sh rename contrib/{ => bash-completion}/defi-cli.bash-completion (100%) rename contrib/{ => bash-completion}/defi-tx.bash-completion (100%) rename contrib/{ => bash-completion}/defid.bash-completion (100%) rename {share/examples => contrib/conf-examples}/default.conf (97%) rename {share/examples => contrib/conf-examples}/pruned.conf (97%) delete mode 100644 contrib/debian/copyright delete mode 100644 contrib/defi-qt.pro delete mode 100755 contrib/devtools/gen-manpages.sh create mode 100644 contrib/dockerfiles/aarch64-linux-gnu.dockerfile delete mode 100644 contrib/dockerfiles/dockerhub/x86_64-pc-linux-gnu.dockerfile rename contrib/dockerfiles/{ => draft}/x86_64-alpine-linux-musl.dockerfile (100%) create mode 100644 contrib/dockerfiles/x86_64-apple-darwin.dockerfile delete mode 100644 contrib/dockerfiles/x86_64-apple-darwin18.dockerfile delete mode 100644 contrib/dockerfiles/x86_64-pc-linux-gnu-dev.dockerfile rename {share => contrib}/genbuild.sh (92%) delete mode 100755 contrib/gitian-build.py delete mode 100644 contrib/gitian-descriptors/gitian-linux.yml delete mode 100644 contrib/gitian-descriptors/gitian-osx-signer.yml delete mode 100644 contrib/gitian-descriptors/gitian-osx.yml delete mode 100644 contrib/gitian-descriptors/gitian-win-signer.yml delete mode 100644 contrib/gitian-descriptors/gitian-win.yml delete mode 100644 contrib/gitian-keys/README.md delete mode 100644 contrib/gitian-keys/keys.txt delete mode 100644 contrib/guix/README.md delete mode 100755 contrib/guix/guix-build.sh delete mode 100644 contrib/guix/libexec/build.sh delete mode 100644 contrib/guix/manifest.scm delete mode 100644 contrib/init/defid.conf delete mode 100644 contrib/macdeploy/LICENSE delete mode 100644 contrib/macdeploy/README.md delete mode 100644 contrib/macdeploy/background.svg delete mode 100755 contrib/macdeploy/custom_dsstore.py delete mode 100755 contrib/macdeploy/detached-sig-apply.sh delete mode 100755 contrib/macdeploy/detached-sig-create.sh delete mode 100755 contrib/macdeploy/extract-osx-sdk.sh delete mode 100644 contrib/macdeploy/fancy.plist delete mode 100755 contrib/macdeploy/macdeployqtplus rename {share => contrib}/pixmaps/defi.ico (100%) rename {share => contrib}/pixmaps/defi128.png (100%) rename {share => contrib}/pixmaps/defi128.xpm (100%) rename {share => contrib}/pixmaps/defi16.png (100%) rename {share => contrib}/pixmaps/defi16.xpm (100%) rename {share => contrib}/pixmaps/defi256.png (100%) rename {share => contrib}/pixmaps/defi256.xpm (100%) rename {share => contrib}/pixmaps/defi32.png (100%) rename {share => contrib}/pixmaps/defi32.xpm (100%) rename {share => contrib}/pixmaps/defi64.png (100%) rename {share => contrib}/pixmaps/defi64.xpm (100%) rename {share => contrib}/rpcauth/README.md (91%) rename {share => contrib}/rpcauth/rpcauth.py (100%) delete mode 100644 contrib/verify-commits/README.md delete mode 100644 contrib/verify-commits/allow-incorrect-sha512-commits delete mode 100644 contrib/verify-commits/allow-revsig-commits delete mode 100644 contrib/verify-commits/allow-unclean-merge-commits delete mode 100755 contrib/verify-commits/gpg.sh delete mode 100755 contrib/verify-commits/pre-push-hook.sh delete mode 100644 contrib/verify-commits/trusted-git-root delete mode 100644 contrib/verify-commits/trusted-keys delete mode 100644 contrib/verify-commits/trusted-sha512-root-commit delete mode 100755 contrib/verify-commits/verify-commits.py delete mode 100644 contrib/verifybinaries/README.md delete mode 100755 contrib/verifybinaries/verify.sh delete mode 100755 contrib/windeploy/detached-sig-create.sh delete mode 100644 contrib/windeploy/win-codesign.cert create mode 100644 depends/.dockerignore delete mode 100644 depends/packages/native_biplist.mk delete mode 100644 depends/packages/native_cdrkit.mk delete mode 100644 depends/packages/native_ds_store.mk delete mode 100644 depends/packages/native_libdmg-hfsplus.mk delete mode 100644 depends/packages/native_mac_alias.mk delete mode 100644 depends/patches/native_cdrkit/cdrkit-deterministic.patch delete mode 100644 depends/patches/zeromq/0001-fix-build-with-older-mingw64.patch delete mode 100644 depends/patches/zeromq/0002-disable-pthread_set_name_np.patch create mode 100644 doc/.dockerignore delete mode 100644 doc/man/Makefile.am delete mode 100644 doc/man/defi-cli.1 delete mode 100644 doc/man/defi-qt.1 delete mode 100644 doc/man/defi-tx.1 delete mode 100644 doc/man/defi-wallet.1 delete mode 100644 doc/man/defid.1 delete mode 100644 doc/release-notes/release-notes-0.10.0.md delete mode 100644 doc/release-notes/release-notes-0.10.1.md delete mode 100644 doc/release-notes/release-notes-0.10.2.md delete mode 100644 doc/release-notes/release-notes-0.10.3.md delete mode 100644 doc/release-notes/release-notes-0.10.4.md delete mode 100644 doc/release-notes/release-notes-0.11.0.md delete mode 100644 doc/release-notes/release-notes-0.11.1.md delete mode 100644 doc/release-notes/release-notes-0.11.2.md delete mode 100644 doc/release-notes/release-notes-0.12.0.md delete mode 100644 doc/release-notes/release-notes-0.12.1.md delete mode 100644 doc/release-notes/release-notes-0.13.0.md delete mode 100644 doc/release-notes/release-notes-0.13.1.md delete mode 100644 doc/release-notes/release-notes-0.13.2.md delete mode 100644 doc/release-notes/release-notes-0.14.0.md delete mode 100644 doc/release-notes/release-notes-0.14.1.md delete mode 100644 doc/release-notes/release-notes-0.14.2.md delete mode 100644 doc/release-notes/release-notes-0.14.3.md delete mode 100644 doc/release-notes/release-notes-0.15.0.1.md delete mode 100644 doc/release-notes/release-notes-0.15.0.md delete mode 100644 doc/release-notes/release-notes-0.15.1.md delete mode 100644 doc/release-notes/release-notes-0.15.2.md delete mode 100644 doc/release-notes/release-notes-0.16.0.md delete mode 100644 doc/release-notes/release-notes-0.16.1.md delete mode 100644 doc/release-notes/release-notes-0.16.2.md delete mode 100644 doc/release-notes/release-notes-0.16.3.md delete mode 100644 doc/release-notes/release-notes-0.17.0.1.md delete mode 100644 doc/release-notes/release-notes-0.17.0.md delete mode 100644 doc/release-notes/release-notes-0.17.1.md delete mode 100644 doc/release-notes/release-notes-0.18.0.md delete mode 100644 doc/release-notes/release-notes-0.18.1.md delete mode 100644 doc/release-notes/release-notes-0.3.12.md delete mode 100644 doc/release-notes/release-notes-0.3.13.md delete mode 100644 doc/release-notes/release-notes-0.3.14.md delete mode 100644 doc/release-notes/release-notes-0.3.15.md delete mode 100644 doc/release-notes/release-notes-0.3.16.md delete mode 100644 doc/release-notes/release-notes-0.3.17.md delete mode 100644 doc/release-notes/release-notes-0.3.18.md delete mode 100644 doc/release-notes/release-notes-0.3.19.md delete mode 100644 doc/release-notes/release-notes-0.3.20.1.md delete mode 100644 doc/release-notes/release-notes-0.3.20.2.md delete mode 100644 doc/release-notes/release-notes-0.3.20.md delete mode 100644 doc/release-notes/release-notes-0.3.21.md delete mode 100644 doc/release-notes/release-notes-0.3.22.md delete mode 100644 doc/release-notes/release-notes-0.3.23.md delete mode 100644 doc/release-notes/release-notes-0.3.24.md delete mode 100644 doc/release-notes/release-notes-0.4.0.md delete mode 100644 doc/release-notes/release-notes-0.4.1.md delete mode 100644 doc/release-notes/release-notes-0.4.2.md delete mode 100644 doc/release-notes/release-notes-0.4.3.md delete mode 100644 doc/release-notes/release-notes-0.4.4.md delete mode 100644 doc/release-notes/release-notes-0.4.5.md delete mode 100644 doc/release-notes/release-notes-0.4.6.md delete mode 100644 doc/release-notes/release-notes-0.5.0.md delete mode 100644 doc/release-notes/release-notes-0.5.1.md delete mode 100644 doc/release-notes/release-notes-0.5.2.md delete mode 100644 doc/release-notes/release-notes-0.5.3.md delete mode 100644 doc/release-notes/release-notes-0.5.4.md delete mode 100644 doc/release-notes/release-notes-0.5.5.md delete mode 100644 doc/release-notes/release-notes-0.6.0.md delete mode 100644 doc/release-notes/release-notes-0.6.1.md delete mode 100644 doc/release-notes/release-notes-0.6.2.md delete mode 100644 doc/release-notes/release-notes-0.6.3.md delete mode 100644 doc/release-notes/release-notes-0.7.0.md delete mode 100644 doc/release-notes/release-notes-0.7.1.md delete mode 100644 doc/release-notes/release-notes-0.7.2.md delete mode 100644 doc/release-notes/release-notes-0.8.0.md delete mode 100644 doc/release-notes/release-notes-0.8.1.md delete mode 100644 doc/release-notes/release-notes-0.8.2.md delete mode 100644 doc/release-notes/release-notes-0.8.3.md delete mode 100644 doc/release-notes/release-notes-0.8.4.md delete mode 100644 doc/release-notes/release-notes-0.8.5.md delete mode 100644 doc/release-notes/release-notes-0.8.6.md delete mode 100644 doc/release-notes/release-notes-0.9.0.md delete mode 100644 doc/release-notes/release-notes-0.9.1.md delete mode 100644 doc/release-notes/release-notes-0.9.2.1.md delete mode 100644 doc/release-notes/release-notes-0.9.2.md delete mode 100644 doc/release-notes/release-notes-0.9.3.md delete mode 100644 doc/release-notes/release-notes-0.9.4.md delete mode 100644 doc/release-notes/release-notes-0.9.5.md delete mode 100644 libdeficonsensus.pc.in delete mode 100644 share/pixmaps/nsis-header.bmp delete mode 100644 share/pixmaps/nsis-wizard.bmp delete mode 100644 share/setup.nsi.in create mode 100644 src/bench/.dockerignore create mode 100644 src/crc32c/.dockerignore create mode 100644 src/leveldb/.dockerignore delete mode 100644 src/rust/Makefile create mode 100644 src/rust/Makefile.am rename src/rust/crates/ain-evm-cpp-ffi/{build.rs => build.rs.disabled} (100%) create mode 100644 src/rust/crates/ain-grpc/src/gen/.gitkeep create mode 100644 src/rust/crates/ain-grpc/src/gen/rpc.rs create mode 100644 src/rust/crates/ain-grpc/src/gen/types.rs create mode 100644 src/rust/protobuf/google/protobuf/any.proto create mode 100644 src/rust/protobuf/google/protobuf/api.proto create mode 100644 src/rust/protobuf/google/protobuf/compiler/plugin.proto create mode 100644 src/rust/protobuf/google/protobuf/descriptor.proto create mode 100644 src/rust/protobuf/google/protobuf/duration.proto create mode 100644 src/rust/protobuf/google/protobuf/empty.proto create mode 100644 src/rust/protobuf/google/protobuf/field_mask.proto create mode 100644 src/rust/protobuf/google/protobuf/source_context.proto create mode 100644 src/rust/protobuf/google/protobuf/struct.proto create mode 100644 src/rust/protobuf/google/protobuf/timestamp.proto create mode 100644 src/rust/protobuf/google/protobuf/type.proto create mode 100644 src/rust/protobuf/google/protobuf/wrappers.proto create mode 100644 src/secp256k1/.dockerignore create mode 100644 src/univalue/.dockerignore delete mode 100644 src/univalue/TODO create mode 100644 src/univalue/build-aux/m4/.dockerignore create mode 100644 src/univalue/lib/.dockerignore create mode 100644 src/univalue/test/.dockerignore create mode 100644 test/functional/.dockerignore rename test/functional/{feature_framework_rollback.py => example_rollback_check.py} (70%) delete mode 100755 test/functional/tool_wallet.py delete mode 100755 test/lint/disabled-lint-shebang.sh delete mode 100755 test/lint/git-subtree-check.sh delete mode 100755 test/lint/lint-qt.sh create mode 100755 test/lint/lint-shebang.sh diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 8c27d9d5ef..0000000000 --- a/.appveyor.yml +++ /dev/null @@ -1,46 +0,0 @@ -version: '{branch}.{build}' -skip_tags: true -image: Visual Studio 2017 -configuration: Release -platform: x64 -clone_depth: 5 -environment: - APPVEYOR_SAVE_CACHE_ON_ERROR: true - CLCACHE_SERVER: 1 - PACKAGES: berkeleydb boost-filesystem boost-signals2 boost-test libevent openssl rapidcheck zeromq - PATH: 'C:\Python37-x64;C:\Python37-x64\Scripts;%PATH%' - PYTHONUTF8: 1 -cache: -- C:\tools\vcpkg\installed -> .appveyor.yml -- C:\Users\appveyor\clcache -> .appveyor.yml, build_msvc\**, **\Makefile.am, **\*.vcxproj.in -install: -- cmd: pip install --quiet git+https://github.com/frerich/clcache.git@v4.2.0 -# Disable zmq test for now since python zmq library on Windows would cause Access violation sometimes. -# - cmd: pip install zmq -- cmd: echo set(VCPKG_BUILD_TYPE release) >> C:\tools\vcpkg\triplets\%PLATFORM%-windows-static.cmake -- cmd: vcpkg remove --outdated --recurse -- cmd: vcpkg install --triplet %PLATFORM%-windows-static %PACKAGES% > NUL -before_build: -- ps: clcache -M 536870912 -- cmd: python build_msvc\msvc-autogen.py -- ps: $files = (Get-ChildItem -Recurse | where {$_.extension -eq ".vcxproj"}).FullName -- ps: for (${i} = 0; ${i} -lt ${files}.length; ${i}++) { - ${content} = (Get-Content ${files}[${i}]); - ${content} = ${content}.Replace("", "None"); - ${content} = ${content}.Replace("true", "false"); - Set-Content ${files}[${i}] ${content}; - } -- ps: Start-Process clcache-server -- ps: fsutil behavior set disablelastaccess 0 # Enable Access time feature on Windows (for clcache) -build_script: -- cmd: msbuild /p:TrackFileAccess=false /p:CLToolExe=clcache.exe build_msvc\defi.sln /m /v:n /nologo -after_build: -- ps: fsutil behavior set disablelastaccess 1 # Disable Access time feature on Windows (better performance) -- ps: clcache -z -test_script: -- cmd: src\test_bitcoin.exe -k stdout -e stdout 2> NUL -- cmd: src\bench_bitcoin.exe -evals=1 -scaling=0 > NUL -- ps: python test\util\bitcoin-util-test.py -- cmd: python test\util\rpcauth-test.py -- cmd: python test\functional\test_runner.py --ci --quiet --combinedlogslen=4000 --failfast -deploy: off diff --git a/.cirrus.yml b/.cirrus.yml deleted file mode 100644 index 2af9221bbb..0000000000 --- a/.cirrus.yml +++ /dev/null @@ -1,53 +0,0 @@ -task: - name: "FreeBsd 12.0 amd64 [GOAL: install] [no depends, only system libs]" - freebsd_instance: - image: freebsd-12-0-release-amd64 - cpu: 8 - memory: 8G - timeout_in: 60m - env: - MAKEJOBS: "-j9" - CONFIGURE_OPTS: "--disable-dependency-tracking" - GOAL: "install" - CCACHE_SIZE: "200M" - CCACHE_COMPRESS: 1 - CCACHE_DIR: "/tmp/ccache_dir" - ccache_cache: - folder: "/tmp/ccache_dir" - install_script: - - pkg install -y autoconf automake boost-libs git gmake libevent libtool openssl pkgconf python3 ccache - - ./contrib/install_db4.sh $(pwd) - - ccache --max-size=${CCACHE_SIZE} - configure_script: - - ./autogen.sh - - ./configure ${CONFIGURE_OPTS} BDB_LIBS="-L$(pwd)/db4/lib -ldb_cxx-4.8" BDB_CFLAGS="-I$(pwd)/db4/include" || ( cat config.log && false) - make_script: - - gmake ${MAKEJOBS} ${GOAL} || ( echo "Build failure. Verbose build follows." && gmake ${GOAL} V=1 ; false ) - check_script: - - gmake check ${MAKEJOBS} VERBOSE=1 - functional_test_script: - - ./test/functional/test_runner.py --jobs 9 --ci --extended --exclude feature_dbcrash --combinedlogslen=1000 --quiet --failfast -task: - name: "x86_64 Linux [GOAL: install] [bionic] [Using ./ci/ system]" - container: - image: ubuntu:20.04 - cpu: 8 - memory: 8G - timeout_in: 60m - env: - MAKEJOBS: "-j9" - RUN_CI_ON_HOST: "1" - CCACHE_SIZE: "200M" - CCACHE_DIR: "/tmp/ccache_dir" - ccache_cache: - folder: "/tmp/ccache_dir" - depends_built_cache: - folder: "/tmp/cirrus-ci-build/depends/built" - depends_sdk_cache: - folder: "/tmp/cirrus-ci-build/depends/sdk-sources" - install_script: - - apt-get update - - apt-get -y install git bash ccache - - ccache --max-size=${CCACHE_SIZE} - ci_script: - - ./ci/test_run_all.sh diff --git a/.dockerignore b/.dockerignore index 809463dfae..3dca3c2ddf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,26 +1,23 @@ -# depends - -depends/built -depends/work -depends/sources -depends/x86_64* -depends/i686* -depends/mips* -depends/arm* -depends/aarch64* -depends/riscv32* -depends/riscv64* - -## Copy of .gitignore - .code .idea -build +# Editors. +*.sw* +.vscode +.clangd + +# Misc *.tar.gz +*.tmp +# Build +build/ +out/ *.exe *.pdb + +# Univalue + src/defi src/defid src/defi-cli @@ -28,33 +25,46 @@ src/defi-tx src/defi-wallet src/test/test_defi src/test/test_defi_fuzzy +src/config/defi-config.h +src/config/defi-config.h.in +src/obj +src/univalue/gen +src/secp256k1/gen_context +src/secp256k1/src/ecmult_static_context.h -# autoreconf +# autotools + +Makefile Makefile.in -aclocal.m4 -autom4te.cache/ -build-aux/config.guess -build-aux/config.sub -build-aux/depcomp -build-aux/install-sh -build-aux/ltmain.sh -build-aux/m4/libtool.m4 -build-aux/m4/lt~obsolete.m4 -build-aux/m4/ltoptions.m4 -build-aux/m4/ltsugar.m4 -build-aux/m4/ltversion.m4 -build-aux/missing -build-aux/compile -build-aux/test-driver +Makefile.am.user +Makefile.test +!depends/Makefile +!src/leveldb*/Makefile + config.log config.status configure +configure~ + +aclocal.m4 +autom4te.cache/ +**/build-aux/config.guess +**/build-aux/config.sub +**/build-aux/depcomp +**/build-aux/install-sh +**/build-aux/ltmain.sh +**/build-aux/m4/ar-lib.m4 +**/build-aux/m4/libtool.m4 +**/build-aux/m4/lt~obsolete.m4 +**/build-aux/m4/ltoptions.m4 +**/build-aux/m4/ltsugar.m4 +**/build-aux/m4/ltversion.m4 +**/build-aux/missing +**/build-aux/compile +**/build-aux/test-driver + libtool -src/config/defi-config.h -src/config/defi-config.h.in -src/config/stamp-h1 -src/obj -share/setup.nsi +stamp-h1 .deps .dirstamp @@ -82,27 +92,15 @@ share/setup.nsi # Only ignore unexpected patches *.patch !depends/patches/**/*.patch +!contrib/devtools/*.patch #libtool object files *.lo *.la -# Compilation +# Compilation and Qt preprocessor part *.qm -Makefile -!depends/Makefile background.tiff* -Makefile.am.user - -# Unit-tests -Makefile.test - -# Resources cpp -qrc_*.cpp - -# Mac specific -.DS_Store -build #lcov *.gcno @@ -119,22 +117,31 @@ win32-build test/config.ini test/cache/* -!src/leveldb*/Makefile - -/doc/doxygen/ - -libdeficonsensus.pc -contrib/devtools/split-debug.sh - # Output from running db4 installation db4/ -# clang-check +# Mac +.DS_Store *.plist - osx_volname dist/ *.background.tiff -# spv -!src/spv/Makefile +# VSCode extension LocalHistory +.history + +# compile_commands.json +compile_commands.json + +# Others + +/doc/doxygen/ +contrib/devtools/split-debug.sh + +# CI scratch area used for tests +/ci/scratch/ + +# Potential rust paths to keep things clean +# as we switch between branches +/src/rust/target +/lib/target \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 61eb2ea931..f727f699e2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,11 +2,11 @@ Thanks for sending a pull request! - Check out our contributing guidelines, https://github.com/DeFiCh/ain/blob/master/CONTRIBUTING.md -- Pull requests without a rationale and clear improvement may be closed. - Even small changes will need to have multiple eyes and require substantial time effort to review. - Please use bullet points to summarize as well as provide detailed info as much as possible. - Short bullet points are easier to read and process. -- If you'd like to add detailed notes, split the summary with a "Details" section. +- If you'd like to add detailed notes, split the summary with a "Details" section. +- Delete sections that are empty except for implications. --> ## Summary @@ -15,29 +15,35 @@ Thanks for sending a pull request! ## RPCs + - ## Flags + - ## Protocol + - ## Storage + - ## Implications -- Index changes - - [ ] Reindex required - - [ ] Reindex optional - - [ ] Reindex not required +- Storage + - [ ] Database reindex required + - [ ] Database reindex optional + - [ ] Database reindex not required + - [ ] None - Consensus - [ ] Network upgrade required - [ ] Includes backward compatible changes - [ ] Includes consensus workarounds - - [ ] Includes consensus refactors \ No newline at end of file + - [ ] Includes consensus refactors + - [ ] None diff --git a/.github/workflows/build-dev.yaml b/.github/workflows/build-dev.yaml index dc9781e534..52e5ac8680 100644 --- a/.github/workflows/build-dev.yaml +++ b/.github/workflows/build-dev.yaml @@ -7,42 +7,25 @@ on: - "!v*" branches: - master - - testnet - - epic/* - - t/* - - e/* - - v* - - "[0-9]+.[0-9]+.x" pull_request: branches: - master - - testnet - - epic/* - - t/* - - e/* - - v* - - "[0-9]+.[0-9]+.x" env: - MAKE_CONF_ARGS: --disable-bench + BUILD_VERSION: latest # Computed + DOCKER_HUB_USER: defi jobs: - - linux: - # We use a matrix since it's easier to migrate upwards, add new - # test on multiple, then remove old without creating friction. - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04] - env: - BUILD_VERSION: latest # Computed - + linux-x64: + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Populate environment + run: GIT_VERSION=1 ./make.sh ci-export-vars + - name: Build and package - run: DOCKERFILE="x86_64-pc-linux-gnu-clang" TARGET="x86_64-pc-linux-gnu" ./make.sh docker-release-git + run: GIT_VERSION=1 DOCKERFILE="x86_64-pc-linux-gnu-clang" TARGET="x86_64-pc-linux-gnu" ./make.sh docker-release - name: Publish artifact - x86_64-pc-linux-gnu uses: actions/upload-artifact@v3 @@ -50,38 +33,45 @@ jobs: name: defichain-${{ env.BUILD_VERSION }}-x86_64-pc-linux-gnu path: ./build/defichain-${{ env.BUILD_VERSION }}-x86_64-pc-linux-gnu.tar.gz - # Linux build additionally pushes the docker images to docker hub on successful build - - name: Tag dockerhub build - if: ${{ github.repository == 'DeFiCh/ain' }} - run: > - docker tag defichain-x86_64-pc-linux-gnu:${{ env.BUILD_VERSION }} - defichain-x86_64-pc-linux-gnu:dockerhub-latest - - - uses: docker/build-push-action@v1 - # Make sure to only build on ain repo. Also add in additional restrictions here if needed to - # make sure we don't push unnecessary images to docker - if: ${{ github.repository == 'DeFiCh/ain' }} + - name: Login to Docker Hub + uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKER_HUB_USER }} + username: ${{ env.DOCKER_HUB_USER }} password: ${{ secrets.DOCKER_HUB_TOKEN }} - path: ./contrib/dockerfiles/dockerhub - dockerfile: ./contrib/dockerfiles/dockerhub/x86_64-pc-linux-gnu.dockerfile - repository: defi/defichain - tags: ${{ env.BUILD_VERSION }} - - windows: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04] - env: - BUILD_VERSION: latest # Computed + - name: Push to Docker Hub + run: | + set -e; ver=${{ env.BUILD_VERSION }} + docker tag defichain-x86_64-pc-linux-gnu:${ver} defi/defichain:${ver} + docker push defi/defichain:${ver} + + linux-armhf: + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Populate environment + run: GIT_VERSION=1 ./make.sh ci-export-vars + - name: Build and package - run: TARGET="x86_64-w64-mingw32" ./make.sh docker-release-git + run: GIT_VERSION=1 TARGET="arm-linux-gnueabihf" ./make.sh docker-release + + - name: Publish artifact - arm-linux-gnueabihf + uses: actions/upload-artifact@v3 + with: + name: defichain-${{ env.BUILD_VERSION }}-arm-linux-gnueabihf + path: ./build/defichain-${{ env.BUILD_VERSION }}-arm-linux-gnueabihf.tar.gz + + win-x64: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Populate environment + run: GIT_VERSION=1 ./make.sh ci-export-vars + + - name: Build and package + run: GIT_VERSION=1 TARGET="x86_64-w64-mingw32" ./make.sh docker-release - name: Publish artifact - x86_64-w64-mingw32 uses: actions/upload-artifact@v3 @@ -89,22 +79,19 @@ jobs: name: defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32 path: ./build/defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32.tar.gz - macos: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04] - env: - BUILD_VERSION: latest # Computed - + mac-x64: + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Populate environment + run: GIT_VERSION=1 ./make.sh ci-export-vars + - name: Build and package - run: TARGET="x86_64-apple-darwin18" ./make.sh docker-release-git + run: GIT_VERSION=1 TARGET="x86_64-apple-darwin" ./make.sh docker-release - - name: Publish artifact - x86_64-apple-darwin18 + - name: Publish artifact - x86_64-apple-darwin uses: actions/upload-artifact@v3 with: - name: defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18 - path: ./build/defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18.tar.gz + name: defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin + path: ./build/defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin.tar.gz diff --git a/.github/workflows/build-release.yaml b/.github/workflows/build-release.yaml index 09755e5700..93f816093a 100644 --- a/.github/workflows/build-release.yaml +++ b/.github/workflows/build-release.yaml @@ -1,24 +1,27 @@ name: Build - Release on: + workflow_dispatch: release: types: [published] -jobs: +env: + BUILD_VERSION: latest # Computed + DOCKER_HUB_USER: defi +jobs: linux: - runs-on: ubuntu-20.04 - env: - BUILD_VERSION: latest # Computed + runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v3 - with: - fetch-depth: 0 + + - name: Populate environment + run: GIT_VERSION=1 ./make.sh ci-export-vars - name: Build and package - run: DOCKERFILE="x86_64-pc-linux-gnu-clang" TARGET="x86_64-pc-linux-gnu" ./make.sh docker-release-git + run: GIT_VERSION=1 DOCKERFILE="x86_64-pc-linux-gnu-clang" TARGET="x86_64-pc-linux-gnu" ./make.sh docker-release - name: Publish artifacts uses: actions/upload-artifact@v3 @@ -26,36 +29,32 @@ jobs: name: defichain-${{ env.BUILD_VERSION }}-x86_64-pc-linux-gnu path: ./build/defichain-${{ env.BUILD_VERSION }}-x86_64-pc-linux-gnu.tar.gz - # Linux build additionally pushes the docker images to docker hub on successful build - - name: Tag dockerhub build - if: ${{ github.repository == 'DeFiCh/ain' }} - run: > - docker tag defichain-x86_64-pc-linux-gnu:${{ env.BUILD_VERSION }} - defichain-x86_64-pc-linux-gnu:dockerhub-latest - - - uses: docker/build-push-action@v1 - # Make sure to only build on ain repo. Also add in additional restrictions here if needed to - # make sure we don't push unnecessary images to docker - if: ${{ github.repository == 'DeFiCh/ain' }} + - name: Login to Docker Hub + uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKER_HUB_USER }} + username: ${{ env.DOCKER_HUB_USER }} password: ${{ secrets.DOCKER_HUB_TOKEN }} - path: ./contrib/dockerfiles/dockerhub - dockerfile: ./contrib/dockerfiles/dockerhub/x86_64-pc-linux-gnu.dockerfile - repository: defi/defichain - tags: latest,${{ env.BUILD_VERSION }} + + - name: Push to Docker Hub + run: | + set -e; ver=${{ env.BUILD_VERSION }} + for tag in $(echo $ver latest); do + docker tag defichain-x86_64-pc-linux-gnu:${ver} defi/defichain:${tag} + done + docker push defi/defichain:${ver} windows: - runs-on: ubuntu-20.04 - env: - BUILD_VERSION: latest # Computed + runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v3 + - name: Populate environment + run: GIT_VERSION=1 ./make.sh ci-export-vars + - name: Build and package - run: TARGET="x86_64-w64-mingw32" ./make.sh docker-release-git + run: GIT_VERSION=1 TARGET="x86_64-w64-mingw32" ./make.sh docker-release - name: Publish artifact - x86_64-w64-mingw32 uses: actions/upload-artifact@v3 @@ -64,56 +63,54 @@ jobs: path: ./build/defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32.tar.gz macos: - runs-on: ubuntu-20.04 - env: - BUILD_VERSION: latest # Computed + runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v3 + - name: Populate environment + run: GIT_VERSION=1 ./make.sh ci-export-vars + - name: Build and package - run: TARGET="x86_64-apple-darwin18" ./make.sh docker-release-git + run: GIT_VERSION=1 TARGET="x86_64-apple-darwin" ./make.sh docker-release - - name: Publish artifact - x86_64-apple-darwin18 + - name: Publish artifact - x86_64-apple-darwin uses: actions/upload-artifact@v3 with: - name: defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18 - path: ./build/defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18.tar.gz + name: defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin + path: ./build/defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin.tar.gz create-release: needs: - linux - windows - macos - runs-on: ubuntu-20.04 - env: - BUILD_VERSION: latest # Computed + runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v3 - - name: compute build version - run: ./make.sh git-version + - name: Populate environment + run: GIT_VERSION=1 ./make.sh ci-export-vars - - name: cleanup work dir + - name: Cleanup work dir run: rm -rf * - - name: get all build artifacts + - name: Get artifacts uses: actions/download-artifact@v3 - name: zip package for windows run: | - set -e - cd defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32 - tar xzf defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32.tar.gz - zip -r "defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32.zip" \ - defichain-${{ env.BUILD_VERSION }}/ + set -e; ver=${{ env.BUILD_VERSION }} + cd defichain-${ver}-x86_64-w64-mingw32 + tar xzf defichain-${ver}-x86_64-w64-mingw32.tar.gz + zip -r "defichain-${ver}-x86_64-w64-mingw32.zip" defichain-${ver}/ - name: Get Release by Tag id: get_release_by_tag - uses: jonfriesen/get-release-by-tag@77560d8bbb6096f823ca949d556a1e48c0a60cd0 + uses: jonfriesen/get-release-by-tag@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -121,12 +118,13 @@ jobs: - name: Generate SHA256 checksum run: | - cd ./defichain-${{ env.BUILD_VERSION }}-x86_64-pc-linux-gnu - sha256sum ./defichain-${{ env.BUILD_VERSION }}-x86_64-pc-linux-gnu.tar.gz > ./defichain-${{ env.BUILD_VERSION }}-x86_64-pc-linux-gnu.tar.gz.SHA256 - cd .. && cd ./defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32 - sha256sum ./defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32.zip > ./defichain-${{ env.BUILD_VERSION }}-x86_64-w64-mingw32.zip.SHA256 - cd .. && cd ./defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18 - sha256sum ./defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18.tar.gz > ././defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18.tar.gz.SHA256 + set -e; ver=${{ env.BUILD_VERSION }} + cd ./defichain-${ver}-x86_64-pc-linux-gnu + sha256sum ./defichain-${ver}-x86_64-pc-linux-gnu.tar.gz > ./defichain-${ver}-x86_64-pc-linux-gnu.tar.gz.SHA256 + cd .. && cd ./defichain-${ver}-x86_64-w64-mingw32 + sha256sum ./defichain-${ver}-x86_64-w64-mingw32.zip > ./defichain-${ver}-x86_64-w64-mingw32.zip.SHA256 + cd .. && cd ./defichain-${ver}-x86_64-apple-darwin + sha256sum ./defichain-${ver}-x86_64-apple-darwin.tar.gz > ././defichain-${ver}-x86_64-apple-darwin.tar.gz.SHA256 - name: Upload release asset - linux uses: actions/upload-release-asset@v1 @@ -174,8 +172,8 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.get_release_by_tag.outputs.upload_url }} - asset_path: ./defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18/defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18.tar.gz - asset_name: defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18.tar.gz + asset_path: ./defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin/defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin.tar.gz + asset_name: defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin.tar.gz asset_content_type: application/gzip - name: Upload checksum asset - macos @@ -184,6 +182,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.get_release_by_tag.outputs.upload_url }} - asset_path: ./defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18/defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18.tar.gz.SHA256 - asset_name: defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin18.tar.gz.SHA256 + asset_path: ./defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin/defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin.tar.gz.SHA256 + asset_name: defichain-${{ env.BUILD_VERSION }}-x86_64-apple-darwin.tar.gz.SHA256 asset_content_type: text/plain diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 28aef9a736..b27a5c1129 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -1,61 +1,30 @@ name: Lint on: + workflow_dispatch: push: tags: - "!v*" branches: - master - - staging - - develop - - ci/* - - epic/* - - v* pull_request: branches: - master - - develop - - staging - - ci/* - - epic/* - - v* - - "[0-9]+.[0-9]+.x" - + jobs: unit_tests: name: Lint - # We use a matrix since it's easier to migrate upwards, add new - # test on multiple, then remove old without creating friction. - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04] + runs-on: ubuntu-latest env: BUILD_VERSION: latest # Computed GITHUB_PULL_REQUEST: ${{ github.event.number }} PYTHON: 3.8 - TRAVIS_BUILD_DIR: ${{ github.workspace }} - TRAVIS_COMMIT: ${{ github.sha }} steps: - name: Checkout uses: actions/checkout@v1 - # This script has been modified to pipe variables to GITHUB_ENV, which allows them to be - # used by subsequent steps. - - name: Set Env - run: set -o errexit; source ./ci/test/00_setup_env.sh - - # The following scripts must be run in the same step as they reference Bash functions from - # previous scripts, which are difficult to expose globally in Github workflows - - name: Lint - run: | - set -o errexit; source ./ci/lint/04_install.sh - set -o errexit; source ./ci/lint/05_before_script.sh - set -o errexit; source ./ci/lint/06_script.sh + run: ./ci/lint/main.sh - name: Extended Lint - run: | - set -o errexit; source ./ci/extended_lint/04_install.sh - set -o errexit; source ./ci/lint/05_before_script.sh - set -o errexit; source ./ci/extended_lint/06_script.sh + run: ./ci/extended_lint/main.sh diff --git a/.github/workflows/misc-prune-artifacts.yaml b/.github/workflows/misc-prune-artifacts.yaml index 3f6aa70c16..20988eb25b 100644 --- a/.github/workflows/misc-prune-artifacts.yaml +++ b/.github/workflows/misc-prune-artifacts.yaml @@ -5,6 +5,7 @@ name: Misc - Prune Artifacts # filling up the storage space on: + workflow_dispatch: schedule: # Every day at 1am - cron: '0 1 * * *' diff --git a/.github/workflows/tests-e2e.yaml b/.github/workflows/tests-e2e.yaml index 587420975e..f8cd24236a 100644 --- a/.github/workflows/tests-e2e.yaml +++ b/.github/workflows/tests-e2e.yaml @@ -1,42 +1,22 @@ name: Tests - E2E on: + workflow_dispatch: push: tags: - "!v*" branches: - master - - staging - - develop - - ci/* - - epic/* - - v* - - "[0-9]+.[0-9]+.x" pull_request: branches: - master - - develop - - staging - - ci/* - - epic/* - - v* - - "[0-9]+.[0-9]+.x" jobs: unit_tests: name: Unit Tests - # We use a matrix since it's easier to migrate upwards, add new - # test on multiple, then remove old without creating friction. - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-20.04] + runs-on: ubuntu-latest env: - BUILD_VERSION: latest # Computed GITHUB_PULL_REQUEST: ${{ github.event.number }} - PYTHON: 3.6 - TRAVIS_BUILD_DIR: ${{ github.workspace }} - TRAVIS_COMMIT: ${{ github.sha }} steps: - name: Checkout base branch and/or merge if: github.event_name != 'pull_request' @@ -48,18 +28,5 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - # This script has been modified to pipe variables to GITHUB_ENV, which allows them to be - # used by subsequent steps. - - name: Set Env - run: set -o errexit; source ./ci/test/00_setup_env.sh - - # The following scripts must be run in the same step as they reference Bash functions from - # previous scripts, which are difficult to expose globally in Github workflows - - name: Tests - run: | - set -o errexit; source ./ci/test/03_before_install.sh - set -o errexit; source ./ci/test/04_install.sh - set -o errexit; source ./ci/test/05_before_script.sh - set -o errexit; source ./ci/test/06_script_a.sh - set -o errexit; source ./ci/test/06_script_b.sh + run: ./ci/test/main.sh diff --git a/.github/workflows/tests-jellyfish.yml b/.github/workflows/tests-jellyfish.yml index 1be37a3b75..b35f897d57 100644 --- a/.github/workflows/tests-jellyfish.yml +++ b/.github/workflows/tests-jellyfish.yml @@ -1,14 +1,13 @@ name: Tests - Jellyfish on: - push: - branches: - - epic/* + workflow_dispatch: pull_request: branches: - master - - epic/* - +env: + BUILD_VERSION: latest # Computed + jobs: test: name: Test @@ -28,18 +27,11 @@ jobs: node-version: '18' - name: Set build version - run: | - cd defichain - DOCKERFILE="x86_64-pc-linux-gnu-clang" TARGET="x86_64-pc-linux-gnu" ./make.sh git_version + run: cd defichain && ./make.sh git_version - - name: Build and package - run: | - echo ">>> BUILD VERSION <<<" - echo ${BUILD_VERSION} - cd defichain - DOCKERFILE="x86_64-pc-linux-gnu-clang" TARGET="x86_64-pc-linux-gnu" ./make.sh docker-release-git - docker tag defichain-x86_64-pc-linux-gnu:$BUILD_VERSION defichain-x86_64-pc-linux-gnu:dockerhub-latest - docker build -t test-build-container -f ./contrib/dockerfiles/dockerhub/x86_64-pc-linux-gnu.dockerfile . + - name: Build and setup + run: "cd defichain && docker build -t test-build-container + -f ./contrib/dockerfiles/x86_64-pc-linux-gnu.dockerfile ." - name: Run tests run: | diff --git a/.github/workflows/tests-sync.yml b/.github/workflows/tests-sync.yml index 646644844d..aa19af72cd 100644 --- a/.github/workflows/tests-sync.yml +++ b/.github/workflows/tests-sync.yml @@ -1,18 +1,19 @@ name: Tests - Sync on: - pull_request: - branches: - - master - - epic/* - types: [labeled, opened, reopened, synchronize] workflow_dispatch: inputs: block_ranges: - description: 'Optionally restrict to specific block ranges. Should be formatted as multiple start block, such as "350000 50000 750000". Defaults to all block ranges' + description: 'Optionally restrict to specific block ranges. Should be + formatted as multiple start block, such as "350000 50000 750000". + Defaults to all block ranges' required: false name: description: 'Workflow run custom name' - require: false + required: false + pull_request: + branches: + - master + types: [labeled, opened, reopened, synchronize] run-name: ${{ inputs.name || github.event.pull_request.title || github.ref_name }} @@ -25,31 +26,24 @@ jobs: with: fetch-depth: 0 - - name: Build Node - run: MAKE_CONF_ARGS="--disable-bench --disable-tests" ./make.sh build + - name: Build node + # TODO: Switch this to a docker build later and this builds on the native + # VM toolchain and loses disparity with the CI release builds + run: TARGET="x86_64-pc-linux-gnu" ./make.sh build - - name: Upload Binaries + - name: Upload binaries uses: actions/upload-artifact@v3 with: name: defibins path: | - src/defid - src/defi-cli + build/x86_64-pc-linux-gnu/src/defid + build/x86_64-pc-linux-gnu/src/defi-cli - - name: Archive Binaries - uses: actions/upload-artifact@v3 - with: - name: defibins - path: | - src/defid - src/defi-cli - - - name: Archive Shell Commands + - name: Upload shell commands uses: actions/upload-artifact@v3 with: name: sync - path: | - ci/parallel_sync/sync.sh + path: ci/sync/main.sh generate-matrix: if: contains(github.event.pull_request.labels.*.name, 'ci/sync') || github.event_name == 'workflow_dispatch' diff --git a/.gitignore b/.gitignore index 6f3636bfdc..439f90c7b2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,23 @@ .code .idea + # Editors. *.sw* .vscode .clangd -build +# Misc *.tar.gz *.tmp -.DS_Store -# Build directory. +# Build build/ out/ *.exe *.pdb + +# Univalue + src/defi src/defid src/defi-cli @@ -22,36 +25,46 @@ src/defi-tx src/defi-wallet src/test/test_defi src/test/test_defi_fuzzy +src/config/defi-config.h +src/config/defi-config.h.in +src/obj +src/univalue/gen +src/secp256k1/gen_context +src/secp256k1/src/ecmult_static_context.h + +# autotools -# autoreconf +Makefile Makefile.in -aclocal.m4 -autom4te.cache/ -build-aux/config.guess -build-aux/config.sub -build-aux/depcomp -build-aux/install-sh -build-aux/ltmain.sh -build-aux/m4/libtool.m4 -build-aux/m4/lt~obsolete.m4 -build-aux/m4/ltoptions.m4 -build-aux/m4/ltsugar.m4 -build-aux/m4/ltversion.m4 -build-aux/missing -build-aux/compile -build-aux/test-driver +Makefile.am.user +Makefile.test +!depends/Makefile +!src/leveldb*/Makefile + config.log config.status configure -libtool -src/config/defi-config.h -src/config/defi-config.h.in -src/config/stamp-h1 -src/obj -share/setup.nsi -share/qt/Info.plist +configure~ -src/univalue/gen +aclocal.m4 +autom4te.cache/ +**/build-aux/config.guess +**/build-aux/config.sub +**/build-aux/depcomp +**/build-aux/install-sh +**/build-aux/ltmain.sh +**/build-aux/m4/ar-lib.m4 +**/build-aux/m4/libtool.m4 +**/build-aux/m4/lt~obsolete.m4 +**/build-aux/m4/ltoptions.m4 +**/build-aux/m4/ltsugar.m4 +**/build-aux/m4/ltversion.m4 +**/build-aux/missing +**/build-aux/compile +**/build-aux/test-driver + +libtool +stamp-h1 .deps .dirstamp @@ -87,26 +100,7 @@ src/univalue/gen # Compilation and Qt preprocessor part *.qm -Makefile -!depends/Makefile background.tiff* -configure~ - -# Qt Creator -Makefile.am.user - -# Unit-tests -Makefile.test - -# Rust -**/cargo.lock - -# Resources cpp -qrc_*.cpp - -# Mac specific -.DS_Store -build #lcov *.gcno @@ -123,37 +117,31 @@ win32-build test/config.ini test/cache/* -!src/leveldb*/Makefile - -/doc/doxygen/ - -libdeficonsensus.pc -contrib/devtools/split-debug.sh - # Output from running db4 installation db4/ -# clang-check +# Mac +.DS_Store *.plist - osx_volname dist/ *.background.tiff -# spv -!src/spv/Makefile - # VSCode extension LocalHistory .history # compile_commands.json compile_commands.json -# secp256k1 -src/secp256k1/gen_context -src/secp256k1/src/ecmult_static_context.h +# Others + +/doc/doxygen/ +contrib/devtools/split-debug.sh + +# CI scratch area used for tests +/ci/scratch/ -# EVM -src/evm/Cargo.lock -src/evm/target/ -*.bin +# Potential rust paths to keep things clean +# as we switch between branches +/src/rust/target +/lib/target diff --git a/.lift.toml b/.lift.toml deleted file mode 100644 index 6b1729f444..0000000000 --- a/.lift.toml +++ /dev/null @@ -1,3 +0,0 @@ -setup = "make -C depends && ./autogen.sh" -build = "configure CC=clang-11 CXX=clang++-11 --prefix='$(pwd)/depends/x86_64-pc-linux-gnu'" -tools = ["infer"] diff --git a/.python-version b/.python-version deleted file mode 100644 index c49282585a..0000000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.5.6 diff --git a/.style.yapf b/.style.yapf deleted file mode 100644 index 69d8c6aee4..0000000000 --- a/.style.yapf +++ /dev/null @@ -1,261 +0,0 @@ -[style] -# Align closing bracket with visual indentation. -align_closing_bracket_with_visual_indent=True - -# Allow dictionary keys to exist on multiple lines. For example: -# -# x = { -# ('this is the first element of a tuple', -# 'this is the second element of a tuple'): -# value, -# } -allow_multiline_dictionary_keys=False - -# Allow lambdas to be formatted on more than one line. -allow_multiline_lambdas=False - -# Allow splits before the dictionary value. -allow_split_before_dict_value=True - -# Number of blank lines surrounding top-level function and class -# definitions. -blank_lines_around_top_level_definition=2 - -# Insert a blank line before a class-level docstring. -blank_line_before_class_docstring=False - -# Insert a blank line before a module docstring. -blank_line_before_module_docstring=False - -# Insert a blank line before a 'def' or 'class' immediately nested -# within another 'def' or 'class'. For example: -# -# class Foo: -# # <------ this blank line -# def method(): -# ... -blank_line_before_nested_class_or_def=False - -# Do not split consecutive brackets. Only relevant when -# dedent_closing_brackets is set. For example: -# -# call_func_that_takes_a_dict( -# { -# 'key1': 'value1', -# 'key2': 'value2', -# } -# ) -# -# would reformat to: -# -# call_func_that_takes_a_dict({ -# 'key1': 'value1', -# 'key2': 'value2', -# }) -coalesce_brackets=False - -# The column limit. -column_limit=160 - -# The style for continuation alignment. Possible values are: -# -# - SPACE: Use spaces for continuation alignment. This is default behavior. -# - FIXED: Use fixed number (CONTINUATION_INDENT_WIDTH) of columns -# (ie: CONTINUATION_INDENT_WIDTH/INDENT_WIDTH tabs) for continuation -# alignment. -# - LESS: Slightly left if cannot vertically align continuation lines with -# indent characters. -# - VALIGN-RIGHT: Vertically align continuation lines with indent -# characters. Slightly right (one more indent character) if cannot -# vertically align continuation lines with indent characters. -# -# For options FIXED, and VALIGN-RIGHT are only available when USE_TABS is -# enabled. -continuation_align_style=SPACE - -# Indent width used for line continuations. -continuation_indent_width=4 - -# Put closing brackets on a separate line, dedented, if the bracketed -# expression can't fit in a single line. Applies to all kinds of brackets, -# including function definitions and calls. For example: -# -# config = { -# 'key1': 'value1', -# 'key2': 'value2', -# } # <--- this bracket is dedented and on a separate line -# -# time_series = self.remote_client.query_entity_counters( -# entity='dev3246.region1', -# key='dns.query_latency_tcp', -# transform=Transformation.AVERAGE(window=timedelta(seconds=60)), -# start_ts=now()-timedelta(days=3), -# end_ts=now(), -# ) # <--- this bracket is dedented and on a separate line -dedent_closing_brackets=False - -# Disable the heuristic which places each list element on a separate line -# if the list is comma-terminated. -disable_ending_comma_heuristic=False - -# Place each dictionary entry onto its own line. -each_dict_entry_on_separate_line=True - -# The regex for an i18n comment. The presence of this comment stops -# reformatting of that line, because the comments are required to be -# next to the string they translate. -i18n_comment= - -# The i18n function call names. The presence of this function stops -# reformattting on that line, because the string it has cannot be moved -# away from the i18n comment. -i18n_function_call= - -# Indent the dictionary value if it cannot fit on the same line as the -# dictionary key. For example: -# -# config = { -# 'key1': -# 'value1', -# 'key2': value1 + -# value2, -# } -indent_dictionary_value=False - -# The number of columns to use for indentation. -indent_width=4 - -# Join short lines into one line. E.g., single line 'if' statements. -join_multiple_lines=True - -# Do not include spaces around selected binary operators. For example: -# -# 1 + 2 * 3 - 4 / 5 -# -# will be formatted as follows when configured with "*,/": -# -# 1 + 2*3 - 4/5 -# -no_spaces_around_selected_binary_operators= - -# Use spaces around default or named assigns. -spaces_around_default_or_named_assign=False - -# Use spaces around the power operator. -spaces_around_power_operator=False - -# The number of spaces required before a trailing comment. -spaces_before_comment=2 - -# Insert a space between the ending comma and closing bracket of a list, -# etc. -space_between_ending_comma_and_closing_bracket=True - -# Split before arguments -split_all_comma_separated_values=False - -# Split before arguments if the argument list is terminated by a -# comma. -split_arguments_when_comma_terminated=False - -# Set to True to prefer splitting before '&', '|' or '^' rather than -# after. -split_before_bitwise_operator=True - -# Split before the closing bracket if a list or dict literal doesn't fit on -# a single line. -split_before_closing_bracket=True - -# Split before a dictionary or set generator (comp_for). For example, note -# the split before the 'for': -# -# foo = { -# variable: 'Hello world, have a nice day!' -# for variable in bar if variable != 42 -# } -split_before_dict_set_generator=True - -# Split before the '.' if we need to split a longer expression: -# -# foo = ('This is a really long string: {}, {}, {}, {}'.format(a, b, c, d)) -# -# would reformat to something like: -# -# foo = ('This is a really long string: {}, {}, {}, {}' -# .format(a, b, c, d)) -split_before_dot=False - -# Split after the opening paren which surrounds an expression if it doesn't -# fit on a single line. -split_before_expression_after_opening_paren=False - -# If an argument / parameter list is going to be split, then split before -# the first argument. -split_before_first_argument=False - -# Set to True to prefer splitting before 'and' or 'or' rather than -# after. -split_before_logical_operator=True - -# Split named assignments onto individual lines. -split_before_named_assigns=True - -# Set to True to split list comprehensions and generators that have -# non-trivial expressions and multiple clauses before each of these -# clauses. For example: -# -# result = [ -# a_long_var + 100 for a_long_var in xrange(1000) -# if a_long_var % 10] -# -# would reformat to something like: -# -# result = [ -# a_long_var + 100 -# for a_long_var in xrange(1000) -# if a_long_var % 10] -split_complex_comprehension=False - -# The penalty for splitting right after the opening bracket. -split_penalty_after_opening_bracket=30 - -# The penalty for splitting the line after a unary operator. -split_penalty_after_unary_operator=10000 - -# The penalty for splitting right before an if expression. -split_penalty_before_if_expr=0 - -# The penalty of splitting the line around the '&', '|', and '^' -# operators. -split_penalty_bitwise_operator=300 - -# The penalty for splitting a list comprehension or generator -# expression. -split_penalty_comprehension=80 - -# The penalty for characters over the column limit. -split_penalty_excess_character=7000 - -# The penalty incurred by adding a line split to the unwrapped line. The -# more line splits added the higher the penalty. -split_penalty_for_added_line_split=30 - -# The penalty of splitting a list of "import as" names. For example: -# -# from a_very_long_or_indented_module_name_yada_yad import (long_argument_1, -# long_argument_2, -# long_argument_3) -# -# would reformat to something like: -# -# from a_very_long_or_indented_module_name_yada_yad import ( -# long_argument_1, long_argument_2, long_argument_3) -split_penalty_import_names=0 - -# The penalty of splitting the line around the 'and' and 'or' -# operators. -split_penalty_logical_operator=300 - -# Use the Tab character for indentation. -use_tabs=False - diff --git a/.tx/config b/.tx/config deleted file mode 100644 index 2ac26fef82..0000000000 --- a/.tx/config +++ /dev/null @@ -1,7 +0,0 @@ -[main] -host = https://www.transifex.com - -[defi.qt-translation-018x] -file_filter = src/qt/locale/defi_.ts -source_file = src/qt/locale/defi_en.ts -source_lang = en diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index 657acf05ed..0000000000 --- a/INSTALL.md +++ /dev/null @@ -1,5 +0,0 @@ -Building the DeFi Blockchain -================ - -See doc/build-*.md for instructions on building the various -elements of DeFi Blockchain. diff --git a/Makefile.am b/Makefile.am index 1efb9c6f9e..df6fb6b1f9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4,84 +4,54 @@ ACLOCAL_AMFLAGS = -I build-aux/m4 SUBDIRS = src -if ENABLE_MAN -SUBDIRS += doc/man -endif + .PHONY: deploy FORCE export PYTHONPATH -if BUILD_DEFI_LIBS -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libdeficonsensus.pc -endif - DEFID_BIN=$(top_builddir)/src/$(DEFI_DAEMON_NAME)$(EXEEXT) DEFI_CLI_BIN=$(top_builddir)/src/$(DEFI_CLI_NAME)$(EXEEXT) DEFI_TX_BIN=$(top_builddir)/src/$(DEFI_TX_NAME)$(EXEEXT) -DEFI_WALLET_BIN=$(top_builddir)/src/$(DEFI_WALLET_TOOL_NAME)$(EXEEXT) -DEFI_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win$(WINDOWS_BITS)-setup$(EXEEXT) -support_examples_dir = $(pkgdatadir)/examples -support_examples__DATA = $(top_srcdir)/share/examples/default.conf \ - $(top_srcdir)/share/examples/pruned.conf +support_examples_dir = $(pkgdatadir)/conf-examples +support_examples__DATA = $(top_srcdir)/contrib/conf-examples/default.conf \ + $(top_srcdir)/contrib/conf-examples/pruned.conf support_rpcauth_dir = $(pkgdatadir)/rpcauth -support_rpcauth__DATA = $(top_srcdir)/share/rpcauth/rpcauth.py \ - $(top_srcdir)/share/rpcauth/README.md +support_rpcauth__DATA = $(top_srcdir)/contrib/rpcauth/rpcauth.py \ + $(top_srcdir)/contrib/rpcauth/README.md support_service_dir = $(pkgdatadir)/service -support_service__DATA = $(top_srcdir)/contrib/init/defid.conf \ +support_service__DATA = \ $(top_srcdir)/contrib/init/defid.init \ $(top_srcdir)/contrib/init/defid.openrc \ $(top_srcdir)/contrib/init/defid.openrcconf \ $(top_srcdir)/contrib/init/defid.service support_bash_dir = $(datadir)/bash-completion/completions -support_bash__DATA = $(top_srcdir)/contrib/defi-cli.bash-completion \ - $(top_srcdir)/contrib/defi-tx.bash-completion \ - $(top_srcdir)/contrib/defid.bash-completion +support_bash__DATA = $(top_srcdir)/contrib/bash-completion/defi-cli.bash-completion \ + $(top_srcdir)/contrib/bash-completion/defi-tx.bash-completion \ + $(top_srcdir)/contrib/bash-completion/defid.bash-completion + +support_extra_dir = $(pkgdatadir) +support_extra__DATA = $(top_srcdir)/README.md $(top_srcdir)/LICENSE empty := space := $(empty) $(empty) -OSX_APP=Defi-Qt.app -OSX_VOLNAME = $(subst $(space),-,$(PACKAGE_NAME)) -OSX_DMG = $(OSX_VOLNAME).dmg -OSX_BACKGROUND_SVG=background.svg -OSX_BACKGROUND_IMAGE=background.tiff -OSX_BACKGROUND_IMAGE_DPIS=36 72 -OSX_DSSTORE_GEN=$(top_srcdir)/contrib/macdeploy/custom_dsstore.py -OSX_DEPLOY_SCRIPT=$(top_srcdir)/contrib/macdeploy/macdeployqtplus -OSX_FANCY_PLIST=$(top_srcdir)/contrib/macdeploy/fancy.plist -OSX_PLIST=$(top_builddir)/share/qt/Info.plist #not installed -OSX_QT_TRANSLATIONS = da,de,es,hu,ru,uk,zh_CN,zh_TW - DIST_DOCS = $(wildcard doc/*.md) $(wildcard doc/release-notes/*.md) -DIST_CONTRIB = $(top_srcdir)/contrib/defi-cli.bash-completion \ - $(top_srcdir)/contrib/defi-tx.bash-completion \ - $(top_srcdir)/contrib/defid.bash-completion \ - $(top_srcdir)/contrib/debian/copyright \ +DIST_CONTRIB = $(top_srcdir)/contrib/bash-completion/defi-cli.bash-completion \ + $(top_srcdir)/contrib/bash-completion/defi-tx.bash-completion \ + $(top_srcdir)/contrib/bash-completion/defid.bash-completion \ $(top_srcdir)/contrib/init \ $(top_srcdir)/contrib/install_db4.sh DIST_SHARE = \ - $(top_srcdir)/share/genbuild.sh \ - $(top_srcdir)/share/rpcauth + $(top_srcdir)/contrib/genbuild.sh \ + $(top_srcdir)/contrib/rpcauth BIN_CHECKS=$(top_srcdir)/contrib/devtools/symbol-check.py \ $(top_srcdir)/contrib/devtools/security-check.py -WINDOWS_PACKAGING = $(top_srcdir)/share/pixmaps/defi.ico \ - $(top_srcdir)/share/pixmaps/nsis-header.bmp \ - $(top_srcdir)/share/pixmaps/nsis-wizard.bmp \ - $(top_srcdir)/doc/README_windows.txt - -OSX_PACKAGING = $(OSX_DEPLOY_SCRIPT) $(OSX_FANCY_PLIST) \ - $(top_srcdir)/contrib/macdeploy/$(OSX_BACKGROUND_SVG) \ - $(OSX_DSSTORE_GEN) \ - $(top_srcdir)/contrib/macdeploy/detached-sig-apply.sh \ - $(top_srcdir)/contrib/macdeploy/detached-sig-create.sh - COVERAGE_INFO = baseline.info \ test_defi_filtered.info total_coverage.info \ baseline_filtered.info functional_test.info functional_test_filtered.info \ @@ -90,88 +60,6 @@ COVERAGE_INFO = baseline.info \ dist-hook: -$(GIT) archive --format=tar HEAD -- src/clientversion.cpp | $(AMTAR) -C $(top_distdir) -xf - -$(DEFI_WIN_INSTALLER): all-recursive - $(MKDIR_P) $(top_builddir)/release - STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(DEFID_BIN) $(top_builddir)/release - STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(DEFI_CLI_BIN) $(top_builddir)/release - STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(DEFI_TX_BIN) $(top_builddir)/release - STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(DEFI_WALLET_BIN) $(top_builddir)/release - @test -f $(MAKENSIS) && $(MAKENSIS) -V2 $(top_builddir)/share/setup.nsi || \ - echo error: could not build $@ - @echo built $@ - -$(OSX_APP)/Contents/PkgInfo: - $(MKDIR_P) $(@D) - @echo "APPL????" > $@ - -$(OSX_APP)/Contents/Resources/empty.lproj: - $(MKDIR_P) $(@D) - @touch $@ - -$(OSX_APP)/Contents/Info.plist: $(OSX_PLIST) - $(MKDIR_P) $(@D) - $(INSTALL_DATA) $< $@ - -$(OSX_APP)/Contents/Resources/Base.lproj/InfoPlist.strings: - $(MKDIR_P) $(@D) - echo '{ CFBundleDisplayName = "$(PACKAGE_NAME)"; CFBundleName = "$(PACKAGE_NAME)"; }' > $@ - -OSX_APP_BUILT=$(OSX_APP)/Contents/PkgInfo $(OSX_APP)/Contents/Resources/empty.lproj \ - $(OSX_APP)/Contents/Resources/defi.icns $(OSX_APP)/Contents/Info.plist \ - $(OSX_APP)/Contents/MacOS/Defi-Qt $(OSX_APP)/Contents/Resources/Base.lproj/InfoPlist.strings - -osx_volname: - echo $(OSX_VOLNAME) >$@ - -if BUILD_DARWIN -$(OSX_DMG): $(OSX_APP_BUILT) $(OSX_PACKAGING) $(OSX_BACKGROUND_IMAGE) - $(PYTHON) $(OSX_DEPLOY_SCRIPT) $(OSX_APP) -add-qt-tr $(OSX_QT_TRANSLATIONS) -translations-dir=$(QT_TRANSLATION_DIR) -dmg -fancy $(OSX_FANCY_PLIST) -verbose 2 -volname $(OSX_VOLNAME) - -$(OSX_BACKGROUND_IMAGE).png: contrib/macdeploy/$(OSX_BACKGROUND_SVG) - sed 's/PACKAGE_NAME/$(PACKAGE_NAME)/' < "$<" | $(RSVG_CONVERT) -f png -d 36 -p 36 -o $@ -$(OSX_BACKGROUND_IMAGE)@2x.png: contrib/macdeploy/$(OSX_BACKGROUND_SVG) - sed 's/PACKAGE_NAME/$(PACKAGE_NAME)/' < "$<" | $(RSVG_CONVERT) -f png -d 72 -p 72 -o $@ -$(OSX_BACKGROUND_IMAGE): $(OSX_BACKGROUND_IMAGE).png $(OSX_BACKGROUND_IMAGE)@2x.png - tiffutil -cathidpicheck $^ -out $@ - -deploydir: $(OSX_DMG) -else -APP_DIST_DIR=$(top_builddir)/dist -APP_DIST_EXTRAS=$(APP_DIST_DIR)/.background/$(OSX_BACKGROUND_IMAGE) $(APP_DIST_DIR)/.DS_Store $(APP_DIST_DIR)/Applications - -$(APP_DIST_DIR)/Applications: - @rm -f $@ - @cd $(@D); $(LN_S) /Applications $(@F) - -$(APP_DIST_EXTRAS): $(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/Defi-Qt - -$(OSX_DMG): $(APP_DIST_EXTRAS) - $(GENISOIMAGE) -no-cache-inodes -D -l -probe -V "$(OSX_VOLNAME)" -no-pad -r -dir-mode 0755 -apple -o $@ dist - -dpi%.$(OSX_BACKGROUND_IMAGE): contrib/macdeploy/$(OSX_BACKGROUND_SVG) - sed 's/PACKAGE_NAME/$(PACKAGE_NAME)/' < "$<" | $(RSVG_CONVERT) -f png -d $* -p $* | $(IMAGEMAGICK_CONVERT) - $@ -OSX_BACKGROUND_IMAGE_DPIFILES := $(foreach dpi,$(OSX_BACKGROUND_IMAGE_DPIS),dpi$(dpi).$(OSX_BACKGROUND_IMAGE)) -$(APP_DIST_DIR)/.background/$(OSX_BACKGROUND_IMAGE): $(OSX_BACKGROUND_IMAGE_DPIFILES) - $(MKDIR_P) $(@D) - $(TIFFCP) -c none $(OSX_BACKGROUND_IMAGE_DPIFILES) $@ - -$(APP_DIST_DIR)/.DS_Store: $(OSX_DSSTORE_GEN) - $(PYTHON) $< "$@" "$(OSX_VOLNAME)" - -$(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/Defi-Qt: $(OSX_APP_BUILT) $(OSX_PACKAGING) - INSTALLNAMETOOL=$(INSTALLNAMETOOL) OTOOL=$(OTOOL) STRIP=$(STRIP) $(PYTHON) $(OSX_DEPLOY_SCRIPT) $(OSX_APP) -translations-dir=$(QT_TRANSLATION_DIR) -add-qt-tr $(OSX_QT_TRANSLATIONS) -verbose 2 - -deploydir: $(APP_DIST_EXTRAS) -endif - -if TARGET_DARWIN -appbundle: $(OSX_APP_BUILT) -deploy: $(OSX_DMG) -endif -if TARGET_WINDOWS -deploy: $(DEFI_WIN_INSTALLER) -endif - $(DEFID_BIN): FORCE $(MAKE) -C src $(@F) @@ -181,9 +69,6 @@ $(DEFI_CLI_BIN): FORCE $(DEFI_TX_BIN): FORCE $(MAKE) -C src $(@F) -$(DEFI_WALLET_BIN): FORCE - $(MAKE) -C src $(@F) - if USE_LCOV LCOV_FILTER_PATTERN=-p "/usr/include/" -p "/usr/lib/" -p "src/leveldb/" -p "src/bench/" -p "src/univalue" -p "src/crypto/ctaes" -p "src/secp256k1" @@ -232,7 +117,7 @@ endif dist_noinst_SCRIPTS = autogen.sh -EXTRA_DIST = $(DIST_SHARE) $(DIST_CONTRIB) $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) $(BIN_CHECKS) +EXTRA_DIST = $(DIST_SHARE) $(DIST_CONTRIB) $(DIST_DOCS) $(BIN_CHECKS) EXTRA_DIST += \ test/functional \ @@ -292,11 +177,11 @@ EXTRA_DIST += \ test/util/data/txcreatesignv2.hex \ test/util/rpcauth-test.py -CLEANFILES = $(OSX_DMG) $(DEFI_WIN_INSTALLER) +CLEANFILES = .INTERMEDIATE: $(COVERAGE_INFO) -DISTCHECK_CONFIGURE_FLAGS = --enable-man +DISTCHECK_CONFIGURE_FLAGS = doc/doxygen/.stamp: doc/Doxyfile FORCE $(MKDIR_P) $(@D) @@ -314,7 +199,7 @@ clean-docs: rm -rf doc/doxygen clean-local: clean-docs - rm -rf coverage_percent.txt test_defi.coverage/ total.coverage/ test/tmp/ cache/ $(OSX_APP) - rm -rf test/functional/__pycache__ test/functional/test_framework/__pycache__ test/cache share/rpcauth/__pycache__ + rm -rf coverage_percent.txt test_defi.coverage/ total.coverage/ test/tmp/ cache/ + rm -rf test/functional/__pycache__ test/functional/test_framework/__pycache__ test/cache contrib/rpcauth/__pycache__ rm -rf osx_volname dist/ dpi36.background.tiff dpi72.background.tiff diff --git a/build_msvc/.gitignore b/build_msvc/.gitignore deleted file mode 100644 index 8ba65dda8f..0000000000 --- a/build_msvc/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# Build directories -Debug/* -Release/* -.vs -packages/* -*/Obj -*/Debug -*/Release -*/x64 -*.vcxproj.user -*.vcxproj -*/Win32 diff --git a/build_msvc/README.md b/build_msvc/README.md deleted file mode 100644 index 99da76b983..0000000000 --- a/build_msvc/README.md +++ /dev/null @@ -1,50 +0,0 @@ -Building DeFi Blockchain with Visual Studio -======================================== - -Introduction ---------------------- -Solution and project files to build DeFi Blockchain applications (except Qt dependent ones) with Visual Studio 2017 can be found in the build_msvc directory. - -Building with Visual Studio is an alternative to the Linux based [cross-compiler build](../doc/build-windows.md). - -Dependencies ---------------------- -A number of [open source libraries](../doc/dependencies.md) are required in order to be able to build the DeFi Blockchain. - -Options for installing the dependencies in a Visual Studio compatible manner are: - -- Use Microsoft's [vcpkg](https://docs.microsoft.com/en-us/cpp/vcpkg) to download the source packages and build locally. This is the recommended approach. -- Download the source code, build each dependency, add the required include paths, link libraries and binary tools to the Visual Studio project files. -- Use [nuget](https://www.nuget.org/) packages with the understanding that any binary files have been compiled by an untrusted third party. - -The external dependencies required for the Visual Studio build are (see [dependencies.md](../doc/dependencies.md) for more info): - -- Berkeley DB -- OpenSSL -- Boost -- libevent -- ZeroMQ -- RapidCheck - -Additional dependencies required from the [DeFi Blockchain](https://github.com/defich/ain) GitHub repository are: -- libsecp256k1 -- LevelDB - -Building ---------------------- -The instructions below use `vcpkg` to install the dependencies. - -- Clone `vcpkg` from the [github repository](https://github.com/Microsoft/vcpkg) and install as per the instructions in the main README.md. -- Install the required packages (replace x64 with x86 as required): - -``` - PS >.\vcpkg install --triplet x64-windows-static boost-filesystem boost-signals2 boost-test libevent openssl zeromq berkeleydb secp256k1 leveldb rapidcheck -``` - -- Use Python to generate *.vcxproj from Makefile - -``` - PS >py -3 msvc-autogen.py -``` - -- Build in Visual Studio. diff --git a/build_msvc/bench_defi/bench_defi.vcxproj.in b/build_msvc/bench_defi/bench_defi.vcxproj.in deleted file mode 100644 index 8d248a8ef6..0000000000 --- a/build_msvc/bench_defi/bench_defi.vcxproj.in +++ /dev/null @@ -1,59 +0,0 @@ - - - - - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB} - - - Application - $(SolutionDir)$(Platform)\$(Configuration)\ - - -@SOURCE_FILES@ - - - - {2b384fa8-9ee1-4544-93cb-0d733c25e8ce} - - - {7c87e378-df58-482e-aa2f-1bc129bc19ce} - - - {6190199c-6cf4-4dad-bfbd-93fa72a760c1} - - - {460fee33-1fe1-483f-b3bf-931ff8e969a5} - - - {b53a5535-ee9d-4c6f-9a26-f79ee3bc3754} - - - {93b86837-b543-48a5-a89b-7c87abb77df2} - - - {792d487f-f14c-49fc-a9de-3fc150f31c3f} - - - {5724ba7d-a09a-4ba8-800b-c4c1561b3d69} - - - {bb493552-3b8c-4a8c-bf69-a6e7a51d2ea6} - - - {18430fef-6b61-4c53-b396-718e02850f1b} - - - - - There was an error executing the raw bench header generation task. - - - - - - - - - - - \ No newline at end of file diff --git a/build_msvc/common.init.vcxproj b/build_msvc/common.init.vcxproj deleted file mode 100644 index e9f4e23862..0000000000 --- a/build_msvc/common.init.vcxproj +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - 16.0 - x86-windows-static - x64-windows-static - - - $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0@ProductVersion) - $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0@ProductVersion) - - $(WindowsTargetPlatformVersion_10).0 - $(WindowsTargetPlatformVersion_10) - - - - - Release - x64 - - - Debug - x64 - - - Release - Win32 - - - Debug - Win32 - - - - - true - false - true - v141 - Unicode - $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ - $(Platform)\$(Configuration)\$(ProjectName)\ - - - false - true - false - v141 - Unicode - $(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)\ - $(Platform)\$(Configuration)\$(ProjectName)\ - - - - - MaxSpeed - true - true - true - MultiThreaded - - - true - true - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - MultiThreadedDebug - /bigobj %(AdditionalOptions) - - - - - MaxSpeed - true - true - true - MultiThreaded - - - true - true - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - MultiThreadedDebug - /bigobj %(AdditionalOptions) - - - - - - Level3 - NotUsing - /utf-8 %(AdditionalOptions) - 4018;4221;4244;4267;4715;4805; - true - ZMQ_STATIC;NOMINMAX;WIN32;HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_CONSOLE;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions) - ..\..\src;..\..\src\univalue\include;..\..\src\secp256k1\include;..\..\src\leveldb\include;..\..\src\leveldb\helpers\memenv;%(AdditionalIncludeDirectories) - - - Console - true - crypt32.lib;Iphlpapi.lib;ws2_32.lib;Shlwapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - - - /ignore:4221 - - - - diff --git a/build_msvc/common.vcxproj b/build_msvc/common.vcxproj deleted file mode 100644 index 4bbcc3767f..0000000000 --- a/build_msvc/common.vcxproj +++ /dev/null @@ -1,12 +0,0 @@ - - -$(BuildDependsOn);CopyBuildArtifacts - - - - - - - - - diff --git a/build_msvc/defi.sln b/build_msvc/defi.sln deleted file mode 100644 index 8977079555..0000000000 --- a/build_msvc/defi.sln +++ /dev/null @@ -1,210 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.452 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdeficonsensus", "libdeficonsensus\libdeficonsensus.vcxproj", "{2B384FA8-9EE1-4544-93CB-0D733C25E8CE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testconsensus", "testconsensus\testconsensus.vcxproj", "{E78473E9-B850-456C-9120-276301E04C06}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "defid", "defid\defid.vcxproj", "{D4513DDF-6013-44DC-ADCC-12EAF6D1F038}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdefi_util", "libdefi_util\libdefi_util.vcxproj", "{B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdefi_common", "libdefi_common\libdefi_common.vcxproj", "{7C87E378-DF58-482E-AA2F-1BC129BC19CE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdefi_crypto", "libdefi_crypto\libdefi_crypto.vcxproj", "{6190199C-6CF4-4DAD-BFBD-93FA72A760C1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdefi_server", "libdefi_server\libdefi_server.vcxproj", "{460FEE33-1FE1-483F-B3BF-931FF8E969A5}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libunivalue", "libunivalue\libunivalue.vcxproj", "{5724BA7D-A09A-4BA8-800B-C4C1561B3D69}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdefi_wallet", "libdefi_wallet\libdefi_wallet.vcxproj", "{93B86837-B543-48A5-A89B-7C87ABB77DF2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdefi_zmq", "libdefi_zmq\libdefi_zmq.vcxproj", "{792D487F-F14C-49FC-A9DE-3FC150F31C3F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_defi", "test_defi\test_defi.vcxproj", "{A56B73DB-D46D-4882-8374-1FE3FFA08F07}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdefi_cli", "libdefi_cli\libdefi_cli.vcxproj", "{0667528C-D734-4009-ADF9-C0D6C4A5A5A6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "defi-cli", "defi-cli\defi-cli.vcxproj", "{0B2D7431-F876-4A58-87BF-F748338CD3BF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bench_defi", "bench_defi\bench_defi.vcxproj", "{1125654E-E1B2-4431-8B5C-62EA9A2FEECB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "defi-tx", "defi-tx\defi-tx.vcxproj", "{D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "defi-wallet", "defi-wallet\defi-wallet.vcxproj", "{84DE8790-EDE3-4483-81AC-C32F15E861F4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdefi_wallet_tool", "libdefi_wallet_tool\libdefi_wallet_tool.vcxproj", "{F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsecp256k1", "libsecp256k1\libsecp256k1.vcxproj", "{BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libleveldb", "libleveldb\libleveldb.vcxproj", "{18430FEF-6B61-4C53-B396-718E02850F1B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE}.Debug|x64.ActiveCfg = Debug|x64 - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE}.Debug|x64.Build.0 = Debug|x64 - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE}.Debug|x86.ActiveCfg = Debug|Win32 - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE}.Debug|x86.Build.0 = Debug|Win32 - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE}.Release|x64.ActiveCfg = Release|x64 - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE}.Release|x64.Build.0 = Release|x64 - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE}.Release|x86.ActiveCfg = Release|Win32 - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE}.Release|x86.Build.0 = Release|Win32 - {E78473E9-B850-456C-9120-276301E04C06}.Debug|x64.ActiveCfg = Debug|x64 - {E78473E9-B850-456C-9120-276301E04C06}.Debug|x64.Build.0 = Debug|x64 - {E78473E9-B850-456C-9120-276301E04C06}.Debug|x86.ActiveCfg = Debug|Win32 - {E78473E9-B850-456C-9120-276301E04C06}.Debug|x86.Build.0 = Debug|Win32 - {E78473E9-B850-456C-9120-276301E04C06}.Release|x64.ActiveCfg = Release|x64 - {E78473E9-B850-456C-9120-276301E04C06}.Release|x64.Build.0 = Release|x64 - {E78473E9-B850-456C-9120-276301E04C06}.Release|x86.ActiveCfg = Release|Win32 - {E78473E9-B850-456C-9120-276301E04C06}.Release|x86.Build.0 = Release|Win32 - {D4513DDF-6013-44DC-ADCC-12EAF6D1F038}.Debug|x64.ActiveCfg = Debug|x64 - {D4513DDF-6013-44DC-ADCC-12EAF6D1F038}.Debug|x64.Build.0 = Debug|x64 - {D4513DDF-6013-44DC-ADCC-12EAF6D1F038}.Debug|x86.ActiveCfg = Debug|Win32 - {D4513DDF-6013-44DC-ADCC-12EAF6D1F038}.Debug|x86.Build.0 = Debug|Win32 - {D4513DDF-6013-44DC-ADCC-12EAF6D1F038}.Release|x64.ActiveCfg = Release|x64 - {D4513DDF-6013-44DC-ADCC-12EAF6D1F038}.Release|x64.Build.0 = Release|x64 - {D4513DDF-6013-44DC-ADCC-12EAF6D1F038}.Release|x86.ActiveCfg = Release|Win32 - {D4513DDF-6013-44DC-ADCC-12EAF6D1F038}.Release|x86.Build.0 = Release|Win32 - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}.Debug|x64.ActiveCfg = Debug|x64 - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}.Debug|x64.Build.0 = Debug|x64 - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}.Debug|x86.ActiveCfg = Debug|Win32 - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}.Debug|x86.Build.0 = Debug|Win32 - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}.Release|x64.ActiveCfg = Release|x64 - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}.Release|x64.Build.0 = Release|x64 - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}.Release|x86.ActiveCfg = Release|Win32 - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754}.Release|x86.Build.0 = Release|Win32 - {7C87E378-DF58-482E-AA2F-1BC129BC19CE}.Debug|x64.ActiveCfg = Debug|x64 - {7C87E378-DF58-482E-AA2F-1BC129BC19CE}.Debug|x64.Build.0 = Debug|x64 - {7C87E378-DF58-482E-AA2F-1BC129BC19CE}.Debug|x86.ActiveCfg = Debug|Win32 - {7C87E378-DF58-482E-AA2F-1BC129BC19CE}.Debug|x86.Build.0 = Debug|Win32 - {7C87E378-DF58-482E-AA2F-1BC129BC19CE}.Release|x64.ActiveCfg = Release|x64 - {7C87E378-DF58-482E-AA2F-1BC129BC19CE}.Release|x64.Build.0 = Release|x64 - {7C87E378-DF58-482E-AA2F-1BC129BC19CE}.Release|x86.ActiveCfg = Release|Win32 - {7C87E378-DF58-482E-AA2F-1BC129BC19CE}.Release|x86.Build.0 = Release|Win32 - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1}.Debug|x64.ActiveCfg = Debug|x64 - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1}.Debug|x64.Build.0 = Debug|x64 - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1}.Debug|x86.ActiveCfg = Debug|Win32 - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1}.Debug|x86.Build.0 = Debug|Win32 - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1}.Release|x64.ActiveCfg = Release|x64 - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1}.Release|x64.Build.0 = Release|x64 - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1}.Release|x86.ActiveCfg = Release|Win32 - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1}.Release|x86.Build.0 = Release|Win32 - {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Debug|x64.ActiveCfg = Debug|x64 - {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Debug|x64.Build.0 = Debug|x64 - {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Debug|x86.ActiveCfg = Debug|Win32 - {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Debug|x86.Build.0 = Debug|Win32 - {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Release|x64.ActiveCfg = Release|x64 - {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Release|x64.Build.0 = Release|x64 - {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Release|x86.ActiveCfg = Release|Win32 - {460FEE33-1FE1-483F-B3BF-931FF8E969A5}.Release|x86.Build.0 = Release|Win32 - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Debug|x64.ActiveCfg = Debug|x64 - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Debug|x64.Build.0 = Debug|x64 - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Debug|x86.ActiveCfg = Debug|Win32 - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Debug|x86.Build.0 = Debug|Win32 - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Release|x64.ActiveCfg = Release|x64 - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Release|x64.Build.0 = Release|x64 - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Release|x86.ActiveCfg = Release|Win32 - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69}.Release|x86.Build.0 = Release|Win32 - {93B86837-B543-48A5-A89B-7C87ABB77DF2}.Debug|x64.ActiveCfg = Debug|x64 - {93B86837-B543-48A5-A89B-7C87ABB77DF2}.Debug|x64.Build.0 = Debug|x64 - {93B86837-B543-48A5-A89B-7C87ABB77DF2}.Debug|x86.ActiveCfg = Debug|Win32 - {93B86837-B543-48A5-A89B-7C87ABB77DF2}.Debug|x86.Build.0 = Debug|Win32 - {93B86837-B543-48A5-A89B-7C87ABB77DF2}.Release|x64.ActiveCfg = Release|x64 - {93B86837-B543-48A5-A89B-7C87ABB77DF2}.Release|x64.Build.0 = Release|x64 - {93B86837-B543-48A5-A89B-7C87ABB77DF2}.Release|x86.ActiveCfg = Release|Win32 - {93B86837-B543-48A5-A89B-7C87ABB77DF2}.Release|x86.Build.0 = Release|Win32 - {792D487F-F14C-49FC-A9DE-3FC150F31C3F}.Debug|x64.ActiveCfg = Debug|x64 - {792D487F-F14C-49FC-A9DE-3FC150F31C3F}.Debug|x64.Build.0 = Debug|x64 - {792D487F-F14C-49FC-A9DE-3FC150F31C3F}.Debug|x86.ActiveCfg = Debug|Win32 - {792D487F-F14C-49FC-A9DE-3FC150F31C3F}.Debug|x86.Build.0 = Debug|Win32 - {792D487F-F14C-49FC-A9DE-3FC150F31C3F}.Release|x64.ActiveCfg = Release|x64 - {792D487F-F14C-49FC-A9DE-3FC150F31C3F}.Release|x64.Build.0 = Release|x64 - {792D487F-F14C-49FC-A9DE-3FC150F31C3F}.Release|x86.ActiveCfg = Release|Win32 - {792D487F-F14C-49FC-A9DE-3FC150F31C3F}.Release|x86.Build.0 = Release|Win32 - {A56B73DB-D46D-4882-8374-1FE3FFA08F07}.Debug|x64.ActiveCfg = Debug|x64 - {A56B73DB-D46D-4882-8374-1FE3FFA08F07}.Debug|x64.Build.0 = Debug|x64 - {A56B73DB-D46D-4882-8374-1FE3FFA08F07}.Debug|x86.ActiveCfg = Debug|Win32 - {A56B73DB-D46D-4882-8374-1FE3FFA08F07}.Debug|x86.Build.0 = Debug|Win32 - {A56B73DB-D46D-4882-8374-1FE3FFA08F07}.Release|x64.ActiveCfg = Release|x64 - {A56B73DB-D46D-4882-8374-1FE3FFA08F07}.Release|x64.Build.0 = Release|x64 - {A56B73DB-D46D-4882-8374-1FE3FFA08F07}.Release|x86.ActiveCfg = Release|Win32 - {A56B73DB-D46D-4882-8374-1FE3FFA08F07}.Release|x86.Build.0 = Release|Win32 - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6}.Debug|x64.ActiveCfg = Debug|x64 - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6}.Debug|x64.Build.0 = Debug|x64 - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6}.Debug|x86.ActiveCfg = Debug|Win32 - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6}.Debug|x86.Build.0 = Debug|Win32 - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6}.Release|x64.ActiveCfg = Release|x64 - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6}.Release|x64.Build.0 = Release|x64 - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6}.Release|x86.ActiveCfg = Release|Win32 - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6}.Release|x86.Build.0 = Release|Win32 - {0B2D7431-F876-4A58-87BF-F748338CD3BF}.Debug|x64.ActiveCfg = Debug|x64 - {0B2D7431-F876-4A58-87BF-F748338CD3BF}.Debug|x64.Build.0 = Debug|x64 - {0B2D7431-F876-4A58-87BF-F748338CD3BF}.Debug|x86.ActiveCfg = Debug|Win32 - {0B2D7431-F876-4A58-87BF-F748338CD3BF}.Debug|x86.Build.0 = Debug|Win32 - {0B2D7431-F876-4A58-87BF-F748338CD3BF}.Release|x64.ActiveCfg = Release|x64 - {0B2D7431-F876-4A58-87BF-F748338CD3BF}.Release|x64.Build.0 = Release|x64 - {0B2D7431-F876-4A58-87BF-F748338CD3BF}.Release|x86.ActiveCfg = Release|Win32 - {0B2D7431-F876-4A58-87BF-F748338CD3BF}.Release|x86.Build.0 = Release|Win32 - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB}.Debug|x64.ActiveCfg = Debug|x64 - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB}.Debug|x64.Build.0 = Debug|x64 - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB}.Debug|x86.ActiveCfg = Debug|Win32 - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB}.Debug|x86.Build.0 = Debug|Win32 - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB}.Release|x64.ActiveCfg = Release|x64 - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB}.Release|x64.Build.0 = Release|x64 - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB}.Release|x86.ActiveCfg = Release|Win32 - {1125654E-E1B2-4431-8B5C-62EA9A2FEECB}.Release|x86.Build.0 = Release|Win32 - {D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}.Debug|x64.ActiveCfg = Debug|x64 - {D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}.Debug|x64.Build.0 = Debug|x64 - {D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}.Debug|x86.ActiveCfg = Debug|Win32 - {D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}.Debug|x86.Build.0 = Debug|Win32 - {D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}.Release|x64.ActiveCfg = Release|x64 - {D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}.Release|x64.Build.0 = Release|x64 - {D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}.Release|x86.ActiveCfg = Release|Win32 - {D3022AF6-AD33-4CE3-B358-87CB6A1B29CF}.Release|x86.Build.0 = Release|Win32 - {84DE8790-EDE3-4483-81AC-C32F15E861F4}.Debug|x64.ActiveCfg = Debug|x64 - {84DE8790-EDE3-4483-81AC-C32F15E861F4}.Debug|x64.Build.0 = Debug|x64 - {84DE8790-EDE3-4483-81AC-C32F15E861F4}.Debug|x86.ActiveCfg = Debug|Win32 - {84DE8790-EDE3-4483-81AC-C32F15E861F4}.Debug|x86.Build.0 = Debug|Win32 - {84DE8790-EDE3-4483-81AC-C32F15E861F4}.Release|x64.ActiveCfg = Release|x64 - {84DE8790-EDE3-4483-81AC-C32F15E861F4}.Release|x64.Build.0 = Release|x64 - {84DE8790-EDE3-4483-81AC-C32F15E861F4}.Release|x86.ActiveCfg = Release|Win32 - {84DE8790-EDE3-4483-81AC-C32F15E861F4}.Release|x86.Build.0 = Release|Win32 - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}.Debug|x64.ActiveCfg = Debug|x64 - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}.Debug|x64.Build.0 = Debug|x64 - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}.Debug|x86.ActiveCfg = Debug|Win32 - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}.Debug|x86.Build.0 = Debug|Win32 - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}.Release|x64.ActiveCfg = Release|x64 - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}.Release|x64.Build.0 = Release|x64 - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}.Release|x86.ActiveCfg = Release|Win32 - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93}.Release|x86.Build.0 = Release|Win32 - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}.Debug|x64.ActiveCfg = Debug|x64 - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}.Debug|x64.Build.0 = Debug|x64 - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}.Debug|x86.ActiveCfg = Debug|Win32 - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}.Debug|x86.Build.0 = Debug|Win32 - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}.Release|x64.ActiveCfg = Release|x64 - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}.Release|x64.Build.0 = Release|x64 - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}.Release|x86.ActiveCfg = Release|Win32 - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6}.Release|x86.Build.0 = Release|Win32 - {18430FEF-6B61-4C53-B396-718E02850F1B}.Debug|x64.ActiveCfg = Debug|x64 - {18430FEF-6B61-4C53-B396-718E02850F1B}.Debug|x64.Build.0 = Debug|x64 - {18430FEF-6B61-4C53-B396-718E02850F1B}.Debug|x86.ActiveCfg = Debug|Win32 - {18430FEF-6B61-4C53-B396-718E02850F1B}.Debug|x86.Build.0 = Debug|Win32 - {18430FEF-6B61-4C53-B396-718E02850F1B}.Release|x64.ActiveCfg = Release|x64 - {18430FEF-6B61-4C53-B396-718E02850F1B}.Release|x64.Build.0 = Release|x64 - {18430FEF-6B61-4C53-B396-718E02850F1B}.Release|x86.ActiveCfg = Release|Win32 - {18430FEF-6B61-4C53-B396-718E02850F1B}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {DA7D16A6-E5F0-45B3-B194-C3FE64F1BFCD} - EndGlobalSection -EndGlobal diff --git a/build_msvc/defi_config.h b/build_msvc/defi_config.h deleted file mode 100644 index 02f91daed8..0000000000 --- a/build_msvc/defi_config.h +++ /dev/null @@ -1,422 +0,0 @@ -#ifndef DEFI_DEFI_CONFIG_H -#define DEFI_DEFI_CONFIG_H - -/* Define if building universal (internal helper macro) */ -/* #undef AC_APPLE_UNIVERSAL_BUILD */ - -/* Version Build */ -#define CLIENT_VERSION_BUILD 0 - -/* Version is release */ -#define CLIENT_VERSION_IS_RELEASE false - -/* Major version */ -#define CLIENT_VERSION_MAJOR 1 - -/* Minor version */ -#define CLIENT_VERSION_MINOR 7 - -/* Build revision */ -#define CLIENT_VERSION_REVISION 11 - -/* Copyright holder(s) before %s replacement */ -#define COPYRIGHT_HOLDERS "The %s Developers" - -/* Copyright holder(s) */ -#define COPYRIGHT_HOLDERS_FINAL "The DeFi Blockchain Developers" - -/* Replacement for %s in copyright holders string */ -#define COPYRIGHT_HOLDERS_SUBSTITUTION "DeFi Blockchain" - -/* Copyright year */ -#define COPYRIGHT_YEAR 2021 - -/* Define to 1 to enable wallet functions */ -#define ENABLE_WALLET 1 - -/* Define to 1 to enable ZMQ functions */ -#define ENABLE_ZMQ 1 - -/* parameter and return value type for __fdelt_chk */ -/* #undef FDELT_TYPE */ - -/* define if the Boost library is available */ -#define HAVE_BOOST /**/ - -/* define if the Boost::Filesystem library is available */ -#define HAVE_BOOST_FILESYSTEM /**/ - -/* define if the Boost::PROGRAM_OPTIONS library is available */ -#define HAVE_BOOST_PROGRAM_OPTIONS /**/ - -/* define if the Boost::System library is available */ -#define HAVE_BOOST_SYSTEM /**/ - -/* define if the Boost::Unit_Test_Framework library is available */ -#define HAVE_BOOST_UNIT_TEST_FRAMEWORK /**/ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_BYTESWAP_H */ - -/* Define this symbol if the consensus lib has been built */ -#define HAVE_CONSENSUS_LIB 1 - -/* define if the compiler supports basic C++11 syntax */ -#define HAVE_CXX11 1 - -/* Define to 1 if you have the declaration of `be16toh', and to 0 if you - don't. */ -#define HAVE_DECL_BE16TOH 0 - -/* Define to 1 if you have the declaration of `be32toh', and to 0 if you - don't. */ -#define HAVE_DECL_BE32TOH 0 - -/* Define to 1 if you have the declaration of `be64toh', and to 0 if you - don't. */ -#define HAVE_DECL_BE64TOH 0 - -/* Define to 1 if you have the declaration of `bswap_16', and to 0 if you - don't. */ -#define HAVE_DECL_BSWAP_16 0 - -/* Define to 1 if you have the declaration of `bswap_32', and to 0 if you - don't. */ -#define HAVE_DECL_BSWAP_32 0 - -/* Define to 1 if you have the declaration of `bswap_64', and to 0 if you - don't. */ -#define HAVE_DECL_BSWAP_64 0 - -/* Define to 1 if you have the declaration of `daemon', and to 0 if you don't. - */ -#define HAVE_DECL_DAEMON 0 - -/* Define to 1 if you have the declaration of `EVP_MD_CTX_new', and to 0 if - you don't. */ -//#define HAVE_DECL_EVP_MD_CTX_NEW 1 - -/* Define to 1 if you have the declaration of `htobe16', and to 0 if you - don't. */ -#define HAVE_DECL_HTOBE16 0 - -/* Define to 1 if you have the declaration of `htobe32', and to 0 if you - don't. */ -#define HAVE_DECL_HTOBE32 0 - -/* Define to 1 if you have the declaration of `htobe64', and to 0 if you - don't. */ -#define HAVE_DECL_HTOBE64 0 - -/* Define to 1 if you have the declaration of `htole16', and to 0 if you - don't. */ -#define HAVE_DECL_HTOLE16 0 - -/* Define to 1 if you have the declaration of `htole32', and to 0 if you - don't. */ -#define HAVE_DECL_HTOLE32 0 - -/* Define to 1 if you have the declaration of `htole64', and to 0 if you - don't. */ -#define HAVE_DECL_HTOLE64 0 - -/* Define to 1 if you have the declaration of `le16toh', and to 0 if you - don't. */ -#define HAVE_DECL_LE16TOH 0 - -/* Define to 1 if you have the declaration of `le32toh', and to 0 if you - don't. */ -#define HAVE_DECL_LE32TOH 0 - -/* Define to 1 if you have the declaration of `le64toh', and to 0 if you - don't. */ -#define HAVE_DECL_LE64TOH 0 - -/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you - don't. */ -#define HAVE_DECL_STRERROR_R 0 - -/* Define to 1 if you have the declaration of `strnlen', and to 0 if you - don't. */ -#define HAVE_DECL_STRNLEN 1 - -/* Define to 1 if you have the declaration of `__builtin_clz', and to 0 if you - don't. */ -//#define HAVE_DECL___BUILTIN_CLZ 1 - -/* Define to 1 if you have the declaration of `__builtin_clzl', and to 0 if - you don't. */ -//#define HAVE_DECL___BUILTIN_CLZL 1 - -/* Define to 1 if you have the declaration of `__builtin_clzll', and to 0 if - you don't. */ -//#define HAVE_DECL___BUILTIN_CLZLL 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DLFCN_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ENDIAN_H */ - -/* Define to 1 if the system has the `dllexport' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_DLLEXPORT 1 - -/* Define to 1 if the system has the `dllimport' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_DLLIMPORT 1 - -/* Define to 1 if the system has the `visibility' function attribute */ -#define HAVE_FUNC_ATTRIBUTE_VISIBILITY 1 - -/* Define this symbol if the BSD getentropy system call is available */ -/* #undef HAVE_GETENTROPY */ - -/* Define this symbol if the BSD getentropy system call is available with - sys/random.h */ -/* #undef HAVE_GETENTROPY_RAND */ - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `advapi32' library (-ladvapi32). */ -#define HAVE_LIBADVAPI32 1 - -/* Define to 1 if you have the `comctl32' library (-lcomctl32). */ -#define HAVE_LIBCOMCTL32 1 - -/* Define to 1 if you have the `comdlg32' library (-lcomdlg32). */ -#define HAVE_LIBCOMDLG32 1 - -/* Define to 1 if you have the `crypt32' library (-lcrypt32). */ -#define HAVE_LIBCRYPT32 1 - -/* Define to 1 if you have the `gdi32' library (-lgdi32). */ -#define HAVE_LIBGDI32 1 - -/* Define to 1 if you have the `imm32' library (-limm32). */ -#define HAVE_LIBIMM32 1 - -/* Define to 1 if you have the `iphlpapi' library (-liphlpapi). */ -#define HAVE_LIBIPHLPAPI 1 - -/* Define to 1 if you have the `kernel32' library (-lkernel32). */ -#define HAVE_LIBKERNEL32 1 - -/* Define to 1 if you have the `mingwthrd' library (-lmingwthrd). */ -#define HAVE_LIBMINGWTHRD 1 - -/* Define to 1 if you have the `mswsock' library (-lmswsock). */ -#define HAVE_LIBMSWSOCK 1 - -/* Define to 1 if you have the `ole32' library (-lole32). */ -#define HAVE_LIBOLE32 1 - -/* Define to 1 if you have the `oleaut32' library (-loleaut32). */ -#define HAVE_LIBOLEAUT32 1 - -/* Define to 1 if you have the `rpcrt4' library (-lrpcrt4). */ -#define HAVE_LIBRPCRT4 1 - -/* Define to 1 if you have the `rt' library (-lrt). */ -/* #undef HAVE_LIBRT */ - -/* Define to 1 if you have the `shell32' library (-lshell32). */ -#define HAVE_LIBSHELL32 1 - -/* Define to 1 if you have the `shlwapi' library (-lshlwapi). */ -#define HAVE_LIBSHLWAPI 1 - -/* Define to 1 if you have the `ssp' library (-lssp). */ -#define HAVE_LIBSSP 1 - -/* Define to 1 if you have the `user32' library (-luser32). */ -#define HAVE_LIBUSER32 1 - -/* Define to 1 if you have the `uuid' library (-luuid). */ -#define HAVE_LIBUUID 1 - -/* Define to 1 if you have the `winmm' library (-lwinmm). */ -#define HAVE_LIBWINMM 1 - -/* Define to 1 if you have the `winspool' library (-lwinspool). */ -#define HAVE_LIBWINSPOOL 1 - -/* Define to 1 if you have the `ws2_32' library (-lws2_32). */ -#define HAVE_LIBWS2_32 1 - -/* Define to 1 if you have the `z ' library (-lz ). */ -#define HAVE_LIBZ_ 1 - -/* Define this symbol if you have malloc_info */ -/* #undef HAVE_MALLOC_INFO */ - -/* Define this symbol if you have mallopt with M_ARENA_MAX */ -/* #undef HAVE_MALLOPT_ARENA_MAX */ - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MINIUPNPC_MINIUPNPC_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MINIUPNPC_MINIWGET_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MINIUPNPC_UPNPCOMMANDS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MINIUPNPC_UPNPERRORS_H 1 - -/* Define this symbol if you have MSG_DONTWAIT */ -/* #undef HAVE_MSG_DONTWAIT */ - -/* Define this symbol if you have MSG_NOSIGNAL */ -/* #undef HAVE_MSG_NOSIGNAL */ - -/* Define if you have POSIX threads libraries and header files. */ -//#define HAVE_PTHREAD 1 - -/* Have PTHREAD_PRIO_INHERIT. */ -//#define HAVE_PTHREAD_PRIO_INHERIT 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDIO_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the `strerror_r' function. */ -/* #undef HAVE_STRERROR_R */ - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define this symbol if the BSD sysctl(KERN_ARND) is available */ -/* #undef HAVE_SYSCTL_ARND */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_ENDIAN_H */ - -/* Define this symbol if the Linux getrandom system call is available */ -/* #undef HAVE_SYS_GETRANDOM */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_PRCTL_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_SELECT_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -//#define HAVE_UNISTD_H 1 - -/* Define if the visibility attribute is supported. */ -#define HAVE_VISIBILITY_ATTRIBUTE 1 - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#define LT_OBJDIR ".libs/" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "https://github.com/defich/ain/issues" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "DeFi Blockchain" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "DeFi Blockchain 1.2.0" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "defi" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "https://defichain.io/" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "1.2.0" - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -/* #undef PTHREAD_CREATE_JOINABLE */ - -/* Define this symbol if the qt platform is cocoa */ -/* #undef QT_QPA_PLATFORM_COCOA */ - -/* Define this symbol if the minimal qt platform exists */ -#define QT_QPA_PLATFORM_MINIMAL 1 - -/* Define this symbol if the qt platform is windows */ -#define QT_QPA_PLATFORM_WINDOWS 1 - -/* Define this symbol if the qt platform is xcb */ -/* #undef QT_QPA_PLATFORM_XCB */ - -/* Define this symbol if qt plugins are static */ -#define QT_STATICPLUGIN 1 - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define to 1 if strerror_r returns char *. */ -/* #undef STRERROR_R_CHAR_P */ - -/* Define this symbol to build in assembly routines */ -//#define USE_ASM 1 - -/* Define this symbol if coverage is enabled */ -/* #undef USE_COVERAGE */ - -/* Define if dbus support should be compiled in */ -/* #undef USE_DBUS */ - -/* Define if QR support should be compiled in */ -//#define USE_QRCODE 1 - -/* UPnP support not compiled if undefined, otherwise value (0 or 1) determines - default state */ -//#define USE_UPNP 0 - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -/* # undef WORDS_BIGENDIAN */ -# endif -#endif - -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -#define _FILE_OFFSET_BITS 64 - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ - -/* Windows Universal Platform constraints */ -#if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) -/* Either a desktop application without API restrictions, or and older system - before these macros were defined. */ - -/* ::wsystem is available */ -#define HAVE_SYSTEM 1 - -#endif // !WINAPI_FAMILY || WINAPI_FAMILY_DESKTOP_APP - -#endif //DEFI_DEFI_CONFIG_H diff --git a/build_msvc/libdefi_cli/libdefi_cli.vcxproj.in b/build_msvc/libdefi_cli/libdefi_cli.vcxproj.in deleted file mode 100644 index 620df72a2f..0000000000 --- a/build_msvc/libdefi_cli/libdefi_cli.vcxproj.in +++ /dev/null @@ -1,16 +0,0 @@ - - - - - {0667528C-D734-4009-ADF9-C0D6C4A5A5A6} - - - StaticLibrary - - -@SOURCE_FILES@ - - - - - diff --git a/build_msvc/libdefi_common/libdefi_common.vcxproj.in b/build_msvc/libdefi_common/libdefi_common.vcxproj.in deleted file mode 100644 index b47d62b295..0000000000 --- a/build_msvc/libdefi_common/libdefi_common.vcxproj.in +++ /dev/null @@ -1,16 +0,0 @@ - - - - - {7C87E378-DF58-482E-AA2F-1BC129BC19CE} - - - StaticLibrary - - -@SOURCE_FILES@ - - - - - diff --git a/build_msvc/libdefi_crypto/libdefi_crypto.vcxproj.in b/build_msvc/libdefi_crypto/libdefi_crypto.vcxproj.in deleted file mode 100644 index 32cb75bf87..0000000000 --- a/build_msvc/libdefi_crypto/libdefi_crypto.vcxproj.in +++ /dev/null @@ -1,16 +0,0 @@ - - - - - {6190199C-6CF4-4DAD-BFBD-93FA72A760C1} - - - StaticLibrary - - -@SOURCE_FILES@ - - - - - diff --git a/build_msvc/libdefi_server/libdefi_server.vcxproj.in b/build_msvc/libdefi_server/libdefi_server.vcxproj.in deleted file mode 100644 index 58e90dbaeb..0000000000 --- a/build_msvc/libdefi_server/libdefi_server.vcxproj.in +++ /dev/null @@ -1,19 +0,0 @@ - - - - - {460FEE33-1FE1-483F-B3BF-931FF8E969A5} - - - StaticLibrary - - -@SOURCE_FILES@ - - $(IntDir)wallet_init.obj - - - - - - \ No newline at end of file diff --git a/build_msvc/libdefi_util/libdefi_util.vcxproj.in b/build_msvc/libdefi_util/libdefi_util.vcxproj.in deleted file mode 100644 index adf4fa0354..0000000000 --- a/build_msvc/libdefi_util/libdefi_util.vcxproj.in +++ /dev/null @@ -1,16 +0,0 @@ - - - - - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754} - - - StaticLibrary - - -@SOURCE_FILES@ - - - - - diff --git a/build_msvc/libdefi_wallet/libdefi_wallet.vcxproj.in b/build_msvc/libdefi_wallet/libdefi_wallet.vcxproj.in deleted file mode 100644 index 9c8279c72a..0000000000 --- a/build_msvc/libdefi_wallet/libdefi_wallet.vcxproj.in +++ /dev/null @@ -1,16 +0,0 @@ - - - - - {93B86837-B543-48A5-A89B-7C87ABB77DF2} - - - StaticLibrary - - -@SOURCE_FILES@ - - - - - diff --git a/build_msvc/libdefi_wallet_tool/libdefi_wallet_tool.vcxproj.in b/build_msvc/libdefi_wallet_tool/libdefi_wallet_tool.vcxproj.in deleted file mode 100644 index 1a6b7b6b92..0000000000 --- a/build_msvc/libdefi_wallet_tool/libdefi_wallet_tool.vcxproj.in +++ /dev/null @@ -1,16 +0,0 @@ - - - - - {F91AC55E-6F5E-4C58-9AC5-B40DB7DEEF93} - - - StaticLibrary - - -@SOURCE_FILES@ - - - - - diff --git a/build_msvc/libdefi_zmq/libdefi_zmq.vcxproj.in b/build_msvc/libdefi_zmq/libdefi_zmq.vcxproj.in deleted file mode 100644 index e86eea81e6..0000000000 --- a/build_msvc/libdefi_zmq/libdefi_zmq.vcxproj.in +++ /dev/null @@ -1,16 +0,0 @@ - - - - - {792D487F-F14C-49FC-A9DE-3FC150F31C3F} - - - StaticLibrary - - -@SOURCE_FILES@ - - - - - diff --git a/build_msvc/libleveldb/libleveldb.vcxproj b/build_msvc/libleveldb/libleveldb.vcxproj deleted file mode 100644 index f855923c62..0000000000 --- a/build_msvc/libleveldb/libleveldb.vcxproj +++ /dev/null @@ -1,63 +0,0 @@ - - - - - {18430FEF-6B61-4C53-B396-718E02850F1B} - - - StaticLibrary - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _CRT_NONSTDC_NO_DEPRECATE;LEVELDB_PLATFORM_WINDOWS;LEVELDB_ATOMIC_PRESENT;%(PreprocessorDefinitions) - 4244;4267;4312; - ..\..\src\leveldb;..\..\src\leveldb\include;%(AdditionalIncludeDirectories) - - - - - - diff --git a/build_msvc/libsecp256k1/libsecp256k1.vcxproj b/build_msvc/libsecp256k1/libsecp256k1.vcxproj deleted file mode 100644 index 99fb63fb02..0000000000 --- a/build_msvc/libsecp256k1/libsecp256k1.vcxproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6} - - - StaticLibrary - - - - - - - ENABLE_MODULE_ECDH;ENABLE_MODULE_RECOVERY;%(PreprocessorDefinitions) - ..\..\src\secp256k1;%(AdditionalIncludeDirectories) - - - - - - \ No newline at end of file diff --git a/build_msvc/libsecp256k1_config.h b/build_msvc/libsecp256k1_config.h deleted file mode 100644 index 2c4b22ee83..0000000000 --- a/build_msvc/libsecp256k1_config.h +++ /dev/null @@ -1,29 +0,0 @@ -/********************************************************************** - * Copyright (c) 2013, 2014 Pieter Wuille * - * Distributed under the MIT software license, see the accompanying * - * file LICENSE or http://www.opensource.org/licenses/mit-license.php.* - **********************************************************************/ - -#ifndef DEFI_LIBSECP256K1_CONFIG_H -#define DEFI_LIBSECP256K1_CONFIG_H - -#undef USE_ASM_X86_64 -#undef USE_ENDOMORPHISM -#undef USE_FIELD_10X26 -#undef USE_FIELD_5X52 -#undef USE_FIELD_INV_BUILTIN -#undef USE_FIELD_INV_NUM -#undef USE_NUM_GMP -#undef USE_NUM_NONE -#undef USE_SCALAR_4X64 -#undef USE_SCALAR_8X32 -#undef USE_SCALAR_INV_BUILTIN -#undef USE_SCALAR_INV_NUM - -#define USE_NUM_NONE 1 -#define USE_FIELD_INV_BUILTIN 1 -#define USE_SCALAR_INV_BUILTIN 1 -#define USE_FIELD_10X26 1 -#define USE_SCALAR_8X32 1 - -#endif /* DEFI_LIBSECP256K1_CONFIG_H */ diff --git a/build_msvc/libunivalue/libunivalue.vcxproj b/build_msvc/libunivalue/libunivalue.vcxproj deleted file mode 100644 index 0f13a57241..0000000000 --- a/build_msvc/libunivalue/libunivalue.vcxproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - - {5724BA7D-A09A-4BA8-800B-C4C1561B3D69} - - - StaticLibrary - - - - - - - - - - - diff --git a/build_msvc/msbuild/tasks/hexdump.targets b/build_msvc/msbuild/tasks/hexdump.targets deleted file mode 100644 index 12868a9874..0000000000 --- a/build_msvc/msbuild/tasks/hexdump.targets +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - outFileInfo.LastWriteTime) - { - using (Stream inStm = File.OpenRead(RawFilePath)) - { - using (StreamWriter sw = new StreamWriter(HeaderFilePath)) - { - sw.WriteLine(SourceHeader); - int count = 0; - int rawChar = inStm.ReadByte(); - while(rawChar != -1) - { - sw.Write("0x{0:x2}, ", rawChar); - count++; - if(count % 8 == 0) - { - sw.WriteLine(); - } - rawChar = inStm.ReadByte(); - } - sw.WriteLine(SourceFooter); - } - } - } -} -]]> - - - - \ No newline at end of file diff --git a/build_msvc/msbuild/tasks/replaceinfile.targets b/build_msvc/msbuild/tasks/replaceinfile.targets deleted file mode 100644 index 2ccb8b30e0..0000000000 --- a/build_msvc/msbuild/tasks/replaceinfile.targets +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/build_msvc/msvc-autogen.py b/build_msvc/msvc-autogen.py deleted file mode 100644 index 08eefa712b..0000000000 --- a/build_msvc/msvc-autogen.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env python3 - -import os -import re -import argparse -from shutil import copyfile - -SOURCE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'src')) -DEFAULT_PLATFORM_TOOLSET = R'v141' - -libs = [ - 'libdefi_cli', - 'libdefi_common', - 'libdefi_crypto', - 'libdefi_server', - 'libdefi_util', - 'libdefi_wallet_tool', - 'libdefi_wallet', - 'libdefi_zmq', - 'bench_defi', -] - -ignore_list = [ -] - -lib_sources = {} - - -def parse_makefile(makefile): - with open(makefile, 'r', encoding='utf-8') as file: - current_lib = '' - for line in file.read().splitlines(): - if current_lib: - source = line.split()[0] - if source.endswith('.cpp') and not source.startswith('$') and source not in ignore_list: - source_filename = source.replace('/', '\\') - object_filename = source.replace('/', '_')[:-4] + ".obj" - lib_sources[current_lib].append((source_filename, object_filename)) - if not line.endswith('\\'): - current_lib = '' - continue - for lib in libs: - _lib = lib.replace('-', '_') - if re.search(_lib + '.*_SOURCES \\= \\\\', line): - current_lib = lib - lib_sources[current_lib] = [] - break - -def set_common_properties(toolset): - with open(os.path.join(SOURCE_DIR, '../build_msvc/common.init.vcxproj'), 'r', encoding='utf-8') as rfile: - s = rfile.read() - s = re.sub('.*?', ''+toolset+'', s) - with open(os.path.join(SOURCE_DIR, '../build_msvc/common.init.vcxproj'), 'w', encoding='utf-8',newline='\n') as wfile: - wfile.write(s) - -def main(): - parser = argparse.ArgumentParser(description='Defi-core msbuild configuration initialiser.') - parser.add_argument('-toolset', nargs='?',help='Optionally sets the msbuild platform toolset, e.g. v142 for Visual Studio 2019.' - ' default is %s.'%DEFAULT_PLATFORM_TOOLSET) - args = parser.parse_args() - if args.toolset: - set_common_properties(args.toolset) - - for makefile_name in os.listdir(SOURCE_DIR): - if 'Makefile' in makefile_name: - parse_makefile(os.path.join(SOURCE_DIR, makefile_name)) - for key, value in lib_sources.items(): - vcxproj_filename = os.path.abspath(os.path.join(os.path.dirname(__file__), key, key + '.vcxproj')) - content = '' - for source_filename, object_filename in value: - content += ' \n' - content += ' $(IntDir)' + object_filename + '\n' - content += ' \n' - with open(vcxproj_filename + '.in', 'r', encoding='utf-8') as vcxproj_in_file: - with open(vcxproj_filename, 'w', encoding='utf-8') as vcxproj_file: - vcxproj_file.write(vcxproj_in_file.read().replace( - '@SOURCE_FILES@\n', content)) - copyfile(os.path.join(SOURCE_DIR,'../build_msvc/defi_config.h'), os.path.join(SOURCE_DIR, 'config/defi-config.h')) - copyfile(os.path.join(SOURCE_DIR,'../build_msvc/libsecp256k1_config.h'), os.path.join(SOURCE_DIR, 'secp256k1/src/libsecp256k1-config.h')) - -if __name__ == '__main__': - main() diff --git a/build_msvc/testconsensus/testconsensus.cpp b/build_msvc/testconsensus/testconsensus.cpp deleted file mode 100644 index 9b25686d42..0000000000 --- a/build_msvc/testconsensus/testconsensus.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include - -// defi includes. -#include <..\src\script\deficonsensus.h> -#include <..\src\primitives\transaction.h> -#include <..\src\script\script.h> -#include <..\src\streams.h> -#include <..\src\version.h> - -CMutableTransaction BuildSpendingTransaction(const CScript& scriptSig, const CScriptWitness& scriptWitness, int nValue = 0) -{ - CMutableTransaction txSpend; - txSpend.nVersion = 1; - txSpend.nLockTime = 0; - txSpend.vin.resize(1); - txSpend.vout.resize(1); - txSpend.vin[0].scriptWitness = scriptWitness; - txSpend.vin[0].prevout.hash = uint256(); - txSpend.vin[0].prevout.n = 0; - txSpend.vin[0].scriptSig = scriptSig; - txSpend.vin[0].nSequence = CTxIn::SEQUENCE_FINAL; - txSpend.vout[0].scriptPubKey = CScript(); - txSpend.vout[0].nValue = nValue; - - return txSpend; -} - -int main() -{ - std::cout << "deficonsensus version: " << deficonsensus_version() << std::endl; - - CScript pubKeyScript; - pubKeyScript << OP_1 << OP_0 << OP_1; - - int amount = 0; // 600000000; - - CScript scriptSig; - CScriptWitness scriptWitness; - CTransaction vanillaSpendTx = BuildSpendingTransaction(scriptSig, scriptWitness, amount); - CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); - stream << vanillaSpendTx; - - deficonsensus_error err; - auto op0Result = deficonsensus_verify_script_with_amount(pubKeyScript.data(), pubKeyScript.size(), amount, (const unsigned char*)&stream[0], stream.size(), 0, deficonsensus_SCRIPT_FLAGS_VERIFY_ALL, &err); - std::cout << "Op0 result: " << op0Result << ", error code " << err << std::endl; - - getchar(); - - return 0; -} diff --git a/build_msvc/testconsensus/testconsensus.vcxproj b/build_msvc/testconsensus/testconsensus.vcxproj deleted file mode 100644 index dd20dcbbf1..0000000000 --- a/build_msvc/testconsensus/testconsensus.vcxproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - - {E78473E9-B850-456C-9120-276301E04C06} - - - Application - $(SolutionDir)$(Platform)\$(Configuration)\ - - - - - - - {2B384FA8-9EE1-4544-93CB-0D733C25E8CE} - - - {B53A5535-EE9D-4C6F-9A26-F79EE3BC3754} - - - {BB493552-3B8C-4A8C-BF69-A6E7A51D2EA6} - - - - - - diff --git a/ci/README.md b/ci/README.md index 16c481158f..2d2aa8e252 100644 --- a/ci/README.md +++ b/ci/README.md @@ -1,31 +1,13 @@ -## ci scripts +# ci scripts This directory contains scripts for each build step in each build stage. -Currently three stages `lint`, `extended_lint` and `test` are defined. Each stage has its own lifecycle, similar to the -[Travis CI lifecycle](https://docs.travis-ci.com/user/job-lifecycle#the-job-lifecycle). Every script in here is named -and numbered according to which stage and lifecycle step it belongs to. - -### Running a stage locally - -To allow for a wide range of tested environments, but also ensure reproducibility to some extent, the test stage -requires `docker` to be installed. To install all requirements on Ubuntu, run - -``` -sudo apt install docker.io ccache bash git -``` +Currently defined types: -To run the default test stage, +- `lint` +- `extended_lint` +- `test` +- `sync` -``` -./ci/test_run_all.sh -``` - -To run the test stage with a specific configuration, - -``` -FILE_ENV="./ci/test/00_setup_env_arm.sh" ./ci/test_run_all.sh -``` - -Be aware that the tests will be build and run in-place, so please run at your own risk. -If the repository is not a fresh git clone, you might have to clean files from previous builds or test runs first. +Each stage has its own lifecycle. Every script in here is named +and numbered according to which stage and lifecycle step it belongs to. diff --git a/ci/extended_lint/04_install.sh b/ci/extended_lint/04_install.sh deleted file mode 100755 index cfcaaa87be..0000000000 --- a/ci/extended_lint/04_install.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C - -CPPCHECK_VERSION=1.86 -curl -s https://codeload.github.com/danmar/cppcheck/tar.gz/${CPPCHECK_VERSION} | tar -zxf - --directory /tmp/ -(cd /tmp/cppcheck-${CPPCHECK_VERSION}/ && make CFGDIR=/tmp/cppcheck-${CPPCHECK_VERSION}/cfg/ > /dev/null) -export PATH="$PATH:/tmp/cppcheck-${CPPCHECK_VERSION}/" diff --git a/ci/extended_lint/06_script.sh b/ci/extended_lint/06_script.sh deleted file mode 100755 index 13416519b5..0000000000 --- a/ci/extended_lint/06_script.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C - -test/lint/extended-lint-all.sh diff --git a/ci/extended_lint/deps.sh b/ci/extended_lint/deps.sh new file mode 100755 index 0000000000..b438bce6a8 --- /dev/null +++ b/ci/extended_lint/deps.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +export LC_ALL=C.UTF-8 +set -Eeuo pipefail + +main() { + echo "::group::install-extended-lint-deps" + + CPPCHECK_VERSION=2.10 + curl -s https://codeload.github.com/danmar/cppcheck/tar.gz/${CPPCHECK_VERSION} | tar -zxf - --directory /tmp/ + (cd /tmp/cppcheck-${CPPCHECK_VERSION}/ && make CFGDIR=/tmp/cppcheck-${CPPCHECK_VERSION}/cfg/ > /dev/null) + export PATH="$PATH:/tmp/cppcheck-${CPPCHECK_VERSION}/" + + echo "::endgroup::" +} + +main "$@" diff --git a/ci/extended_lint/lint.sh b/ci/extended_lint/lint.sh new file mode 100755 index 0000000000..a8545dc329 --- /dev/null +++ b/ci/extended_lint/lint.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +export LC_ALL=C.UTF-8 +set -Eeuo pipefail + +main() { + _ensure_script_dir + trap _cleanup 0 1 2 3 6 15 ERR + cd "$_SCRIPT_DIR/../../" + + test/lint/extended-lint-all.sh +} + +_ensure_script_dir() { + _WORKING_DIR="$(pwd)" + local dir + dir="$(dirname "${BASH_SOURCE[0]}")" + _SCRIPT_DIR="$(cd "${dir}/" && pwd)" +} + +_cleanup() { + cd "$_WORKING_DIR" +} + +main "$@" + + diff --git a/ci/extended_lint/main.sh b/ci/extended_lint/main.sh new file mode 100755 index 0000000000..c0ec0679a7 --- /dev/null +++ b/ci/extended_lint/main.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +export LC_ALL=C.UTF-8 +set -Eeuo pipefail + +main() { + _ensure_script_dir + trap _cleanup 0 1 2 3 6 15 ERR + cd "$_SCRIPT_DIR" + + ./deps.sh + ./lint.sh +} + +_ensure_script_dir() { + _WORKING_DIR="$(pwd)" + local dir + dir="$(dirname "${BASH_SOURCE[0]}")" + _SCRIPT_DIR="$(cd "${dir}/" && pwd)" +} + +_cleanup() { + cd "$_WORKING_DIR" +} + +main "$@" \ No newline at end of file diff --git a/ci/lint/04_install.sh b/ci/lint/04_install.sh deleted file mode 100755 index e0d1af6d69..0000000000 --- a/ci/lint/04_install.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C - -PATH=$PATH:~/.local/bin - -curl -fsSL -o- https://bootstrap.pypa.io/get-pip.py | python3 -pip3 install codespell==2.2.4 -pip3 install flake8==6.0.0 -pip3 install vulture==2.7 - -SHELLCHECK_VERSION=v0.7.1 -curl -L -s "https://github.com/koalaman/shellcheck/releases/download/${SHELLCHECK_VERSION}/shellcheck-${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | tar --xz -xf - --directory /tmp/ -export PATH="/tmp/shellcheck-${SHELLCHECK_VERSION}:${PATH}" diff --git a/ci/lint/05_before_script.sh b/ci/lint/05_before_script.sh deleted file mode 100755 index d226d24213..0000000000 --- a/ci/lint/05_before_script.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C - -git fetch --depth=10000 diff --git a/ci/lint/06_script.sh b/ci/lint/06_script.sh deleted file mode 100755 index ea3a822dbb..0000000000 --- a/ci/lint/06_script.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C - -if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then - test/lint/commit-script-check.sh $TRAVIS_COMMIT_RANGE -fi - -test/lint/git-subtree-check.sh src/crypto/ctaes -test/lint/git-subtree-check.sh src/secp256k1 -test/lint/git-subtree-check.sh src/univalue -test/lint/git-subtree-check.sh src/leveldb -test/lint/check-doc.py -test/lint/check-rpc-mappings.py . -test/lint/lint-all.sh - -if [ "$TRAVIS_REPO_SLUG" = "defich/ain" ] && [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then - git log --merges --before="2 days ago" -1 --format='%H' > ./contrib/verify-commits/trusted-sha512-root-commit - gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $( "$PRE_ROLLBACK_LOG" - - $DEFI_CLI_CMD stop -} - -# Start defid -start_node () { - echo "Syncing to block height: $STOP_BLOCK" - $DEFID_CMD -interrupt-block=$((STOP_BLOCK + 1)) - sleep 30 -} - -main() { - setup_vars - print_info - create_pre_sync_rollback_log - start_node - - # Sync to target block height - while [ "$BLOCK" -lt "$STOP_BLOCK" ]; do - if [ "$ATTEMPTS" -gt "$MAX_ATTEMPTS" ]; then - if [ "$NODE_RESTARTS" -lt "$MAX_NODE_RESTARTS" ]; then - echo "Node Stuck After $ATTEMPTS attempts, restarting node" - $DEFI_CLI_CMD stop - sleep 20 - start_node - NODE_RESTARTS=$((NODE_RESTARTS + 1)) - ATTEMPTS=0 - else - exit 1 - fi - fi - CUR_BLOCK=$($DEFI_CLI_CMD getblockcount || echo $BLOCK) - if [ "$CUR_BLOCK" -eq "$BLOCK" ]; then - ATTEMPTS=$((ATTEMPTS + 1)) - - # # Handle odd case where node get stuck on previously invalidated block - $DEFI_CLI_CMD reconsiderblock "$($DEFI_CLI_CMD getbestblockhash)" || true - else - ATTEMPTS=0 - fi - BLOCK=${CUR_BLOCK:-$BLOCK} - echo "Current block: $BLOCK" - sleep 20 - done - - # Create temporary log file - get_full_log >> "$TMP_LOG" - - # Download reference log file - echo "Downloading reference log file : $REF_LOG_PATH" - $FETCH "$REF_LOG_PATH" - - # Create rollback log after sync - rollback_and_log > "$POST_ROLLBACK_LOG" - - $DEFI_CLI_CMD stop -} - -main "$@" diff --git a/ci/retry/README.md b/ci/retry/README.md deleted file mode 100644 index 983a498070..0000000000 --- a/ci/retry/README.md +++ /dev/null @@ -1,123 +0,0 @@ -retry - The command line retry tool ------------------------------------------- - -Retry any shell command with exponential backoff or constant delay. - -### Instructions - -Install: - -retry is a shell script, so drop it somewhere and make sure it's added to your $PATH. Or you can use the following one-liner: - -```sh -sudo sh -c "curl https://raw.githubusercontent.com/kadwanev/retry/master/retry -o /usr/local/bin/retry && chmod +x /usr/local/bin/retry" -``` - -If you're on OS X, retry is also on Homebrew: - -``` -brew pull 27283 -brew install retry -``` -Not popular enough for homebrew-core. Please star this project to help. - -### Usage - -Help: - -`retry -?` - - Usage: retry [options] -- execute command - -h, -?, --help - -v, --verbose Verbose output - -t, --tries=# Set max retries: Default 10 - -s, --sleep=secs Constant sleep amount (seconds) - -m, --min=secs Exponenetial Backoff: minimum sleep amount (seconds): Default 0.3 - -x, --max=secs Exponenetial Backoff: maximum sleep amount (seconds): Default 60 - -f, --fail="script +cmds" Fail Script: run in case of final failure - -### Examples - -No problem: - -`retry echo u work good` - - u work good - -Test functionality: - -`retry 'echo "y u no work"; false'` - - y u no work - Before retry #1: sleeping 0.3 seconds - y u no work - Before retry #2: sleeping 0.6 seconds - y u no work - Before retry #3: sleeping 1.2 seconds - y u no work - Before retry #4: sleeping 2.4 seconds - y u no work - Before retry #5: sleeping 4.8 seconds - y u no work - Before retry #6: sleeping 9.6 seconds - y u no work - Before retry #7: sleeping 19.2 seconds - y u no work - Before retry #8: sleeping 38.4 seconds - y u no work - Before retry #9: sleeping 60.0 seconds - y u no work - Before retry #10: sleeping 60.0 seconds - y u no work - etc.. - -Limit retries: - -`retry -t 4 'echo "y u no work"; false'` - - y u no work - Before retry #1: sleeping 0.3 seconds - y u no work - Before retry #2: sleeping 0.6 seconds - y u no work - Before retry #3: sleeping 1.2 seconds - y u no work - Before retry #4: sleeping 2.4 seconds - y u no work - Retries exhausted - -Bad command: - -`retry poop` - - bash: poop: command not found - -Fail command: - -`retry -t 3 -f 'echo "oh poopsickles"' 'echo "y u no work"; false'` - - y u no work - Before retry #1: sleeping 0.3 seconds - y u no work - Before retry #2: sleeping 0.6 seconds - y u no work - Before retry #3: sleeping 1.2 seconds - y u no work - Retries exhausted, running fail script - oh poopsickles - -Last attempt passed: - -`retry -t 3 -- 'if [ $RETRY_ATTEMPT -eq 3 ]; then echo Passed at attempt $RETRY_ATTEMPT; true; else echo Failed at attempt $RETRY_ATTEMPT; false; fi;'` - - Failed at attempt 0 - Before retry #1: sleeping 0.3 seconds - Failed at attempt 1 - Before retry #2: sleeping 0.6 seconds - Failed at attempt 2 - Before retry #3: sleeping 1.2 seconds - Passed at attempt 3 - -### License - -Apache 2.0 - go nuts diff --git a/ci/retry/retry b/ci/retry/retry deleted file mode 100755 index 0e5f6e9701..0000000000 --- a/ci/retry/retry +++ /dev/null @@ -1,163 +0,0 @@ -#!/usr/bin/env bash - -GETOPT_BIN=$IN_GETOPT_BIN -GETOPT_BIN=${GETOPT_BIN:-getopt} - -__sleep_amount() { - if [ -n "$constant_sleep" ]; then - sleep_time=$constant_sleep - else - #TODO: check for awk - #TODO: check if user would rather use one of the other possible dependencies: python, ruby, bc, dc - sleep_time=`awk "BEGIN {t = $min_sleep * $(( (1<<($attempts -1)) )); print (t > $max_sleep ? $max_sleep : t)}"` - fi -} - -__log_out() { - echo "$1" 1>&2 -} - -# Paramters: max_tries min_sleep max_sleep constant_sleep fail_script EXECUTION_COMMAND -retry() -{ - local max_tries="$1"; shift - local min_sleep="$1"; shift - local max_sleep="$1"; shift - local constant_sleep="$1"; shift - local fail_script="$1"; shift - if [ -n "$VERBOSE" ]; then - __log_out "Retry Parameters: max_tries=$max_tries min_sleep=$min_sleep max_sleep=$max_sleep constant_sleep=$constant_sleep" - if [ -n "$fail_script" ]; then __log_out "Fail script: $fail_script"; fi - __log_out "" - __log_out "Execution Command: $*" - __log_out "" - fi - - local attempts=0 - local return_code=1 - - - while [[ $return_code -ne 0 && $attempts -le $max_tries ]]; do - if [ $attempts -gt 0 ]; then - __sleep_amount - __log_out "Before retry #$attempts: sleeping $sleep_time seconds" - sleep $sleep_time - fi - - P="$1" - for param in "${@:2}"; do P="$P '$param'"; done - #TODO: replace single quotes in each arg with '"'"' ? - export RETRY_ATTEMPT=$attempts - bash -c "$P" - return_code=$? - #__log_out "Process returned $return_code on attempt $attempts" - if [ $return_code -eq 127 ]; then - # command not found - exit $return_code - elif [ $return_code -ne 0 ]; then - attempts=$[$attempts +1] - fi - done - - if [ $attempts -gt $max_tries ]; then - if [ -n "$fail_script" ]; then - __log_out "Retries exhausted, running fail script" - eval $fail_script - else - __log_out "Retries exhausted" - fi - fi - - exit $return_code -} - -# If we're being sourced, don't worry about such things -if [ "$BASH_SOURCE" == "$0" ]; then - # Prints the help text - help() - { - local retry=$(basename $0) - cat < /dev/null - if [[ $? -ne 4 ]]; then - echo "I’m sorry, 'getopt --test' failed in this environment. Please load GNU getopt." - exit 1 - fi - - OPTIONS=vt:s:m:x:f: - LONGOPTIONS=verbose,tries:,sleep:,min:,max:,fail: - - PARSED=$($GETOPT_BIN --options="$OPTIONS" --longoptions="$LONGOPTIONS" --name "$0" -- "$@") - if [[ $? -ne 0 ]]; then - # e.g. $? == 1 - # then getopt has complained about wrong arguments to stdout - exit 2 - fi - # read getopt’s output this way to handle the quoting right: - eval set -- "$PARSED" - - max_tries=10 - min_sleep=0.3 - max_sleep=60.0 - constant_sleep= - fail_script= - - # now enjoy the options in order and nicely split until we see -- - while true; do - case "$1" in - -v|--verbose) - VERBOSE=true - shift - ;; - -t|--tries) - max_tries="$2" - shift 2 - ;; - -s|--sleep) - constant_sleep="$2" - shift 2 - ;; - -m|--min) - min_sleep="$2" - shift 2 - ;; - -x|--max) - max_sleep="$2" - shift 2 - ;; - -f|--fail) - fail_script="$2" - shift 2 - ;; - --) - shift - break - ;; - *) - echo "Programming error" - exit 3 - ;; - esac - done - - retry "$max_tries" "$min_sleep" "$max_sleep" "$constant_sleep" "$fail_script" "$@" - -fi diff --git a/ci/sync/main.sh b/ci/sync/main.sh new file mode 100755 index 0000000000..828ad556fe --- /dev/null +++ b/ci/sync/main.sh @@ -0,0 +1,179 @@ +#!/bin/bash + +export LC_ALL=C.UTF-8 +set -Eeuo pipefail + +setup_vars() { + # Binaries + DEFID_BIN=${DEFID_BIN:-"./defid"} + DEFI_CLI_BIN=${DEFI_CLI_BIN:-"./defi-cli"} + + # Files and directories + DATADIR=${DATADIR:-".defi"} + DEBUG_FILE="$DATADIR/debug.log" + CONF_FILE="$DATADIR/defi.conf" + TMP_LOG=debug-tmp-$STOP_BLOCK.log + PRE_ROLLBACK_LOG="debug-pre-rollback.log" + POST_ROLLBACK_LOG="debug-post-rollback.log" + BASE_REF=${BASE_REF:-"master"} + BASE_PATH=https://storage.googleapis.com + BUCKET=team-drop + REF_LOG=debug-$STOP_BLOCK.log + REF_LOG_PATH=$BASE_PATH/$BUCKET/$REF_LOG_DIR/$REF_LOG + + # Commands + DEFID_CMD="$DEFID_BIN -datadir=$DATADIR -daemon -debug=accountchange -spv -checkpoints=0" + DEFI_CLI_CMD="$DEFI_CLI_BIN -datadir=$DATADIR" + FETCH="aria2c -x16 -s16" + GREP="grep" + + BLOCK=0 + ROLLBACK_BLOCK=$START_BLOCK + ATTEMPTS=0 + MAX_ATTEMPTS=10 + MAX_NODE_RESTARTS=5 + NODE_RESTARTS=0 +} + +_ensure_script_dir() { + _WORKING_DIR="$(pwd)" + local dir + dir="$(dirname "${BASH_SOURCE[0]}")" + _SCRIPT_DIR="$(cd "${dir}/" && pwd)" +} + +_cleanup() { + cd "$_WORKING_DIR" +} + +print_info() { + echo "======== Sync Test Info ========== + - Block range: $START_BLOCK - $STOP_BLOCK + + - Reference log: + $REF_LOG_PATH + + - snapshot: + https://storage.googleapis.com/team-drop/$BASE_REF-datadir/datadir-$START_BLOCK.tar.gz + + - defid: + $DEFID_CMD + + - defi-cli: + $DEFI_CLI_CMD + + - Create log commands: + $GREP \"AccountChange:\" \"$DEBUG_FILE\" | cut -d\" \" -f2- + $DEFI_CLI_CMD logaccountbalances + $DEFI_CLI_CMD spv_listanchors + $DEFI_CLI_CMD logstoredinterests + $DEFI_CLI_CMD listvaults '{\"verbose\": true}' '{\"limit\":1000000}' + $DEFI_CLI_CMD listtokens '{\"limit\":1000000}' + $DEFI_CLI_CMD getburninfo + + - defi.conf: + $(cat "$CONF_FILE") + " +} + +get_full_log() { + { $GREP "AccountChange:" "$DEBUG_FILE" || test $? = 1; } | cut -d" " -f2- + echo "-- logaccountbalances --" + $DEFI_CLI_CMD logaccountbalances + echo "-- spv_listanchors --" + $DEFI_CLI_CMD spv_listanchors + echo "-- logstoredinterests --" + $DEFI_CLI_CMD logstoredinterests + echo "-- listvaults --" + $DEFI_CLI_CMD listvaults '{"verbose": true}' '{"limit":1000000}' + echo "-- listtokens --" + $DEFI_CLI_CMD listtokens '{"limit":1000000}' + echo "-- getburninfo --" + $DEFI_CLI_CMD getburninfo +} + +rollback_and_log() { + echo "ROLLBACK_BLOCK : $ROLLBACK_BLOCK" + ROLLBACK_HASH=$($DEFI_CLI_CMD getblockhash $((ROLLBACK_BLOCK))) + echo "ROLLBACK_HASH : $ROLLBACK_HASH" + $DEFI_CLI_CMD invalidateblock "$ROLLBACK_HASH" + echo "Rolled back to block : $($DEFI_CLI_CMD getblockcount)" + + get_full_log | grep -v "AccountChange" +} + +create_pre_sync_rollback_log() { + local DATADIR_ROLLBACK="$DATADIR-rollback" + local DEFID_CMD="$DEFID_BIN -datadir=$DATADIR_ROLLBACK -daemon -debug=accountchange -spv -rpcport=9999 -port=9998 -connect=0 -checkpoints=0 -interrupt-block=$((START_BLOCK + 1))" + local DEFI_CLI_CMD="$DEFI_CLI_BIN -datadir=$DATADIR_ROLLBACK -rpcport=9999" + local DEBUG_FILE="$DATADIR_ROLLBACK/debug.log" + + cp -r "$DATADIR" "$DATADIR_ROLLBACK" + rm -f "$DEBUG_FILE" + $DEFID_CMD + sleep 90 + + rollback_and_log >"$PRE_ROLLBACK_LOG" + + $DEFI_CLI_CMD stop +} + +# Start defid +start_node() { + echo "Syncing to block height: $STOP_BLOCK" + $DEFID_CMD -interrupt-block=$((STOP_BLOCK + 1)) + sleep 30 +} + +main() { + _ensure_script_dir + trap _cleanup 0 1 2 3 6 15 ERR + cd "$_SCRIPT_DIR" + + setup_vars + print_info + create_pre_sync_rollback_log + start_node + + # Sync to target block height + while [ "$BLOCK" -lt "$STOP_BLOCK" ]; do + if [ "$ATTEMPTS" -gt "$MAX_ATTEMPTS" ]; then + if [ "$NODE_RESTARTS" -lt "$MAX_NODE_RESTARTS" ]; then + echo "Node Stuck After $ATTEMPTS attempts, restarting node" + $DEFI_CLI_CMD stop + sleep 20 + start_node + NODE_RESTARTS=$((NODE_RESTARTS + 1)) + ATTEMPTS=0 + else + exit 1 + fi + fi + CUR_BLOCK=$($DEFI_CLI_CMD getblockcount || echo $BLOCK) + if [ "$CUR_BLOCK" -eq "$BLOCK" ]; then + ATTEMPTS=$((ATTEMPTS + 1)) + + # # Handle odd case where node get stuck on previously invalidated block + $DEFI_CLI_CMD reconsiderblock "$($DEFI_CLI_CMD getbestblockhash)" || true + else + ATTEMPTS=0 + fi + BLOCK=${CUR_BLOCK:-$BLOCK} + echo "Current block: $BLOCK" + sleep 20 + done + + # Create temporary log file + get_full_log >>"$TMP_LOG" + + # Download reference log file + echo "Downloading reference log file : $REF_LOG_PATH" + $FETCH "$REF_LOG_PATH" + + # Create rollback log after sync + rollback_and_log >"$POST_ROLLBACK_LOG" + + $DEFI_CLI_CMD stop +} + +main "$@" diff --git a/ci/test/00_setup_env.sh b/ci/test/00_setup_env.sh deleted file mode 100755 index bbe3e9cdf3..0000000000 --- a/ci/test/00_setup_env.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -echo "Setting default values in env" - -BASE_ROOT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../../ >/dev/null 2>&1 && pwd ) - -export BASE_ROOT_DIR -export MAKEJOBS=${MAKEJOBS:--j4} -export BASE_SCRATCH_DIR=${BASE_SCRATCH_DIR:-$BASE_ROOT_DIR/ci/scratch/} -export HOST=${HOST:-x86_64-unknown-linux-gnu} -export RUN_UNIT_TESTS=${RUN_UNIT_TESTS:-true} -export RUN_FUNCTIONAL_TESTS=${RUN_FUNCTIONAL_TESTS:-true} -export RUN_FUZZ_TESTS=${RUN_FUZZ_TESTS:-false} -export DOCKER_NAME_TAG=${DOCKER_NAME_TAG:-ubuntu:20.04} -export BOOST_TEST_RANDOM=${BOOST_TEST_RANDOM:-1$TRAVIS_BUILD_ID} -export CCACHE_SIZE=${CCACHE_SIZE:-100M} -export CCACHE_TEMPDIR=${CCACHE_TEMPDIR:-/tmp/.ccache-temp} -export CCACHE_COMPRESS=${CCACHE_COMPRESS:-1} -export CCACHE_DIR=${CCACHE_DIR:-$BASE_SCRATCH_DIR/.ccache} -export BASE_BUILD_DIR=${BASE_BUILD_DIR:-${TRAVIS_BUILD_DIR:-$BASE_ROOT_DIR}} -export BASE_OUTDIR=${BASE_OUTDIR:-$BASE_BUILD_DIR/out/$HOST} -export SDK_URL=${SDK_URL:-https://bitcoincore.org/depends-sources/sdks} -export WINEDEBUG=${WINEDEBUG:-fixme-all} -export DOCKER_PACKAGES=${DOCKER_PACKAGES:-build-essential libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates ccache python3 unzip} -export GOAL=${GOAL:-install} -export DIR_QA_ASSETS=${DIR_QA_ASSETS:-${BASE_BUILD_DIR}/qa-assets} -export PATH=${BASE_ROOT_DIR}/ci/retry:$PATH -export CI_RETRY_EXE=${CI_RETRY_EXE:retry} - -# This is required so Github actions can see the env vars in the next step -{ - echo "BASE_ROOT_DIR=${BASE_ROOT_DIR}" - echo "MAKEJOBS=${MAKEJOBS}" - echo "BASE_SCRATCH_DIR=${BASE_SCRATCH_DIR}" - echo "HOST=${HOST}" - echo "RUN_UNIT_TESTS=${RUN_UNIT_TESTS}" - echo "RUN_FUNCTIONAL_TESTS=${RUN_FUNCTIONAL_TESTS}" - echo "RUN_FUZZ_TESTS=${RUN_FUZZ_TESTS}" - echo "DOCKER_NAME_TAG=${DOCKER_NAME_TAG}" - echo "BOOST_TEST_RANDOM=${BOOST_TEST_RANDOM}" - echo "CCACHE_SIZE=${CCACHE_SIZE}" - echo "CCACHE_TEMPDIR=${CCACHE_TEMPDIR}" - echo "CCACHE_COMPRESS=${CCACHE_COMPRESS}" - echo "CCACHE_DIR=${CCACHE_DIR}" - echo "BASE_BUILD_DIR=${BASE_BUILD_DIR}" - echo "BASE_OUTDIR=${BASE_OUTDIR}" - echo "SDK_URL=${SDK_URL}" - echo "WINEDEBUG=${WINEDEBUG}" - echo "DOCKER_PACKAGES=${DOCKER_PACKAGES}" - echo "GOAL=${GOAL}" - echo "DIR_QA_ASSETS=${DIR_QA_ASSETS}" - echo "PATH=${PATH}" - echo "CI_RETRY_EXE=${CI_RETRY_EXE}" -} >> $GITHUB_ENV - -echo "Setting specific values in env" -if [ -n "${FILE_ENV}" ]; then - set -o errexit; - # shellcheck disable=SC1090 - source "${FILE_ENV}" -fi diff --git a/ci/test/00_setup_env_amd64_asan.sh b/ci/test/00_setup_env_amd64_asan.sh deleted file mode 100644 index a524e276d9..0000000000 --- a/ci/test/00_setup_env_amd64_asan.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=x86_64-unknown-linux-gnu -export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libssl1.0-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-test-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev" -export NO_DEPENDS=1 -export GOAL="install" -export DEFI_CONFIG="--enable-zmq --with-incompatible-bdb CPPFLAGS=-DDEBUG_LOCKORDER --with-sanitizers=address,integer,undefined CC=clang CXX=clang++" -export RUN_CI_ON_HOST="1" diff --git a/ci/test/00_setup_env_amd64_fuzz.sh b/ci/test/00_setup_env_amd64_fuzz.sh deleted file mode 100644 index 33081a1ab4..0000000000 --- a/ci/test/00_setup_env_amd64_fuzz.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=x86_64-unknown-linux-gnu -export PACKAGES="clang llvm python3 libssl1.0-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-test-dev" -export NO_DEPENDS=1 -export RUN_UNIT_TESTS=false -export RUN_FUNCTIONAL_TESTS=false -export RUN_FUZZ_TESTS=true -export GOAL="install" -export DEFI_CONFIG="--enable-fuzz --with-sanitizers=fuzzer,address CC=clang CXX=clang++" diff --git a/ci/test/00_setup_env_amd64_nowallet.sh b/ci/test/00_setup_env_amd64_nowallet.sh deleted file mode 100644 index a55748af6d..0000000000 --- a/ci/test/00_setup_env_amd64_nowallet.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=x86_64-unknown-linux-gnu -export PACKAGES="python3-zmq" -export DEP_OPTS="NO_WALLET=1" -export GOAL="install" -export DEFI_CONFIG="--enable-glibc-back-compat --enable-reduce-exports" diff --git a/ci/test/00_setup_env_amd64_trusty.sh b/ci/test/00_setup_env_amd64_trusty.sh deleted file mode 100644 index 9d37cdbf5c..0000000000 --- a/ci/test/00_setup_env_amd64_trusty.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=x86_64-unknown-linux-gnu -export DOCKER_NAME_TAG=ubuntu:14.04 -export PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools libicu-dev libpng-dev libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-test-dev libdb5.1++-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev" -export NO_DEPENDS=1 -export RUN_FUNCTIONAL_TESTS=false -export GOAL="install" -export DEFI_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=no" diff --git a/ci/test/00_setup_env_amd64_tsan.sh b/ci/test/00_setup_env_amd64_tsan.sh deleted file mode 100644 index 6dec401dd0..0000000000 --- a/ci/test/00_setup_env_amd64_tsan.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=x86_64-unknown-linux-gnu -export DOCKER_NAME_TAG=ubuntu:16.04 -export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-test-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev" -export NO_DEPENDS=1 -export GOAL="install" -export DEFI_CONFIG="--enable-zmq --disable-wallet CPPFLAGS=-DDEBUG_LOCKORDER --with-sanitizers=thread --disable-hardening --disable-asm CC=clang CXX=clang++" diff --git a/ci/test/00_setup_env_arm.sh b/ci/test/00_setup_env_arm.sh deleted file mode 100644 index 59ffa02f68..0000000000 --- a/ci/test/00_setup_env_arm.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=arm-linux-gnueabihf -export PACKAGES="python3 g++-arm-linux-gnueabihf" -export RUN_UNIT_TESTS=false -export RUN_FUNCTIONAL_TESTS=false -export GOAL="install" -# -Wno-psabi is to disable ABI warnings: "note: parameter passing for argument of type ... changed in GCC 7.1" -# This could be removed once the ABI change warning does not show up by default -export DEFI_CONFIG="--enable-glibc-back-compat --enable-reduce-exports CXXFLAGS=-Wno-psabi" diff --git a/ci/test/00_setup_env_i686.sh b/ci/test/00_setup_env_i686.sh deleted file mode 100644 index c9270daf23..0000000000 --- a/ci/test/00_setup_env_i686.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=i686-pc-linux-gnu -export PACKAGES="g++-multilib python3-zmq" -export GOAL="install" -export DEFI_CONFIG="--enable-zmq --disable-bip70 --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" -export CONFIG_SHELL="/bin/dash" diff --git a/ci/test/00_setup_env_mac.sh b/ci/test/00_setup_env_mac.sh deleted file mode 100644 index e6bfbd6169..0000000000 --- a/ci/test/00_setup_env_mac.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=x86_64-apple-darwin18 -export PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python3-dev python3-setuptools" -export XCODE_VERSION=11.3.1 -export XCODE_BUILD_ID=11C505 -export RUN_UNIT_TESTS=false -export RUN_FUNCTIONAL_TESTS=false -export GOAL="deploy" -export DEFI_CONFIG="--enable-reduce-exports --enable-werror" diff --git a/ci/test/00_setup_env_win64.sh b/ci/test/00_setup_env_win64.sh deleted file mode 100644 index 07ab975c10..0000000000 --- a/ci/test/00_setup_env_win64.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=x86_64-w64-mingw32 -export PACKAGES="python3 nsis g++-mingw-w64-x86-64 wine-binfmt wine64" -export RUN_FUNCTIONAL_TESTS=false -export GOAL="deploy" -export DEFI_CONFIG="--enable-reduce-exports" diff --git a/ci/test/03_before_install.sh b/ci/test/03_before_install.sh deleted file mode 100755 index e5ccbb5faa..0000000000 --- a/ci/test/03_before_install.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -# Add llvm-symbolizer directory to PATH. Needed to get symbolized stack traces from the sanitizers. -PATH=$PATH:/usr/lib/llvm-6.0/bin/ -export PATH - -BEGIN_FOLD () { - echo "" - CURRENT_FOLD_NAME=$1 - echo "travis_fold:start:${CURRENT_FOLD_NAME}" -} - -END_FOLD () { - RET=$? - echo "travis_fold:end:${CURRENT_FOLD_NAME}" - if [ $RET != 0 ]; then - echo "${CURRENT_FOLD_NAME} failed with status code ${RET}" - fi -} - diff --git a/ci/test/04_install.sh b/ci/test/04_install.sh deleted file mode 100755 index fdcabdb5b5..0000000000 --- a/ci/test/04_install.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -mkdir -p "${BASE_SCRATCH_DIR}" -#ccache echo "Creating ccache dir if it didn't already exist" -mkdir -p "${CCACHE_DIR}" - -if [ ! -d ${DIR_QA_ASSETS} ] && [ "$RUN_FUZZ_TESTS" = "true" ]; then - git clone https://github.com/bitcoin-core/qa-assets ${DIR_QA_ASSETS} -fi -export DIR_FUZZ_IN=${DIR_QA_ASSETS}/fuzz_seed_corpus/ - -mkdir -p "${BASE_BUILD_DIR}/sanitizer-output/" -export ASAN_OPTIONS="" -export LSAN_OPTIONS="suppressions=${BASE_BUILD_DIR}/test/sanitizer_suppressions/lsan" -export TSAN_OPTIONS="suppressions=${BASE_BUILD_DIR}/test/sanitizer_suppressions/tsan:log_path=${BASE_BUILD_DIR}/sanitizer-output/tsan" -export UBSAN_OPTIONS="suppressions=${BASE_BUILD_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1" -env | grep -E '^(DEFI_CONFIG|CCACHE_|WINEDEBUG|LC_ALL|BOOST_TEST_RANDOM|CONFIG_SHELL|(ASAN|LSAN|TSAN|UBSAN)_OPTIONS)' | tee /tmp/env -if [[ $HOST = *-mingw32 ]]; then - DOCKER_ADMIN="--cap-add SYS_ADMIN" -elif [[ $DEFI_CONFIG = *--with-sanitizers=*address* ]]; then # If ran with (ASan + LSan), Docker needs access to ptrace (https://github.com/google/sanitizers/issues/764) - DOCKER_ADMIN="--cap-add SYS_PTRACE" -fi - -if [ -z "$RUN_CI_ON_HOST" ]; then - echo "Creating $DOCKER_NAME_TAG container to run in" - ${CI_RETRY_EXE} docker pull "$DOCKER_NAME_TAG" - - DOCKER_ID=$(docker run $DOCKER_ADMIN -idt --mount type=bind,src=$BASE_BUILD_DIR,dst=$BASE_BUILD_DIR --mount type=bind,src=$CCACHE_DIR,dst=$CCACHE_DIR -w $BASE_BUILD_DIR --env-file /tmp/env $DOCKER_NAME_TAG) - - DOCKER_EXEC () { - docker exec $DOCKER_ID bash -c "cd $PWD && $*" - } -else - echo "Running on host system without docker wrapper" - DOCKER_EXEC () { - sudo bash -c "cd $PWD && $*" - } -fi - -DOCKER_EXEC free -m -h -DOCKER_EXEC echo "Number of CPUs \(nproc\): $(nproc)" - -${CI_RETRY_EXE} DOCKER_EXEC apt-get update -${CI_RETRY_EXE} DOCKER_EXEC apt-get install --no-install-recommends --no-upgrade -qq $PACKAGES $DOCKER_PACKAGES - -# Install Rust toolchain -DOCKER_EXEC "curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y" -DOCKER_EXEC ln -s /root/.cargo/bin/cargo /usr/bin/cargo -DOCKER_EXEC ln -s /root/.cargo/bin/rustc /usr/bin/rustc -DOCKER_EXEC ln -s /root/.cargo/bin/rustup /usr/bin/rustup -DOCKER_EXEC rustup target add x86_64-unknown-linux-gnu - -DOCKER_EXEC "curl -L https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/protoc-3.20.0-linux-x86_64.zip -o /tmp/proto.zip" -DOCKER_EXEC "unzip -o /tmp/proto.zip -d /tmp/proto" -DOCKER_EXEC "chmod 755 -R /tmp/proto/bin" -DOCKER_EXEC "cp /tmp/proto/bin/protoc /usr/local/bin/" -DOCKER_EXEC "cp -R /tmp/proto/include/* /usr/local/include/" diff --git a/ci/test/05_before_script.sh b/ci/test/05_before_script.sh deleted file mode 100755 index 7b97902919..0000000000 --- a/ci/test/05_before_script.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -DOCKER_EXEC echo \> \$HOME/.defi # Make sure default datadir does not exist and is never read by creating a dummy file - -mkdir -p depends/SDKs depends/sdk-sources - -OSX_SDK_BASENAME="Xcode-${XCODE_VERSION}-${XCODE_BUILD_ID}-extracted-SDK-with-libcxx-headers.tar.gz" -OSX_SDK_PATH="${DEPENDS_DIR}/sdk-sources/${OSX_SDK_BASENAME}" - -if [ -n "$XCODE_VERSION" ] && [ ! -f "$OSX_SDK_PATH" ]; then - curl --location --fail "${SDK_URL}/${OSX_SDK_BASENAME}" -o "$OSX_SDK_PATH" -fi -if [ -n "$XCODE_VERSION" ] && [ -f "$OSX_SDK_PATH" ]; then - DOCKER_EXEC tar -C "${DEPENDS_DIR}/SDKs" -xf "$OSX_SDK_PATH" -fi -if [[ $HOST = *-mingw32 ]]; then - DOCKER_EXEC update-alternatives --set $HOST-g++ \$\(which $HOST-g++-posix\) -fi -if [ -z "$NO_DEPENDS" ]; then - DOCKER_EXEC CONFIG_SHELL= make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS -fi diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh deleted file mode 100755 index 1b56dc350a..0000000000 --- a/ci/test/06_script_a.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -DEFI_CONFIG_ALL="--disable-dependency-tracking --prefix=$BASE_BUILD_DIR/depends/$HOST --bindir=$BASE_OUTDIR/bin --libdir=$BASE_OUTDIR/lib" -if [ -z "$NO_DEPENDS" ]; then - DOCKER_EXEC ccache --max-size=$CCACHE_SIZE -fi - -BEGIN_FOLD autogen -if [ -n "$CONFIG_SHELL" ]; then - DOCKER_EXEC "$CONFIG_SHELL" -c "./autogen.sh" -else - DOCKER_EXEC ./autogen.sh -fi -END_FOLD - -mkdir -p build -cd build || (echo "could not enter build directory"; exit 1) - -BEGIN_FOLD configure -DOCKER_EXEC ../configure --cache-file=config.cache $DEFI_CONFIG_ALL $DEFI_CONFIG || ( cat config.log && false) -END_FOLD - -BEGIN_FOLD distdir -DOCKER_EXEC make distdir VERSION=$HOST -DOCKER_EXEC cp -r ../share "defi-$HOST/" -DOCKER_EXEC cp -r ../contrib "defi-$HOST/" -END_FOLD - -cd "defi-$HOST" || (echo "could not enter distdir defi-$HOST"; exit 1) - -BEGIN_FOLD configure -DOCKER_EXEC ./configure --cache-file=../config.cache $DEFI_CONFIG_ALL $DEFI_CONFIG || ( cat config.log && false) -END_FOLD - -set -o errtrace -trap 'DOCKER_EXEC "cat ${BASE_BUILD_DIR}/sanitizer-output/* 2> /dev/null"' ERR - -BEGIN_FOLD build -DOCKER_EXEC make $MAKEJOBS $GOAL || ( echo "Build failure. Verbose build follows." && DOCKER_EXEC make $GOAL V=1 ; false ) -END_FOLD - -cd ${BASE_BUILD_DIR} || (echo "could not enter travis build dir $BASE_BUILD_DIR"; exit 1) diff --git a/ci/test/06_script_b.sh b/ci/test/06_script_b.sh deleted file mode 100755 index 17a5ba276a..0000000000 --- a/ci/test/06_script_b.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -cd "build/defi-$HOST" || (echo "could not enter distdir build/defi-$HOST"; exit 1) - -if [ "$RUN_UNIT_TESTS" = "true" ]; then - BEGIN_FOLD unit-tests - DOCKER_EXEC LD_LIBRARY_PATH=$BASE_BUILD_DIR/depends/$HOST/lib make $MAKEJOBS check VERBOSE=1 - END_FOLD -fi - -if [ "$RUN_FUNCTIONAL_TESTS" = "true" ]; then - BEGIN_FOLD functional-tests - DOCKER_EXEC test/functional/test_runner.py --ci $MAKEJOBS --tmpdirprefix "${BASE_SCRATCH_DIR}/test_runner/" --ansi --combinedlogslen=4000 ${TEST_RUNNER_EXTRA} --quiet --failfast - END_FOLD -fi - -if [ "$RUN_FUZZ_TESTS" = "true" ]; then - BEGIN_FOLD fuzz-tests - DOCKER_EXEC test/fuzz/test_runner.py -l DEBUG ${DIR_FUZZ_IN} - END_FOLD -fi - -cd ${BASE_BUILD_DIR} || (echo "could not enter travis build dir $BASE_BUILD_DIR"; exit 1) diff --git a/ci/test/main.sh b/ci/test/main.sh new file mode 100755 index 0000000000..cb1832f866 --- /dev/null +++ b/ci/test/main.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +export LC_ALL=C.UTF-8 +set -Eeuo pipefail + +main() { + _ensure_script_dir + trap _cleanup 0 1 2 3 6 15 ERR + cd "$_SCRIPT_DIR/../../" + + sudo ./make.sh pkg-install-deps + sudo ./make.sh pkg-install-llvm + ./make.sh build + ./make.sh test +} + +_ensure_script_dir() { + _WORKING_DIR="$(pwd)" + local dir + dir="$(dirname "${BASH_SOURCE[0]}")" + _SCRIPT_DIR="$(cd "${dir}/" && pwd)" +} + +_cleanup() { + cd "$_WORKING_DIR" +} + +main "$@" diff --git a/ci/test_run_all.sh b/ci/test_run_all.sh deleted file mode 100755 index a0290e01ea..0000000000 --- a/ci/test_run_all.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -set -o errexit; source ./ci/test/00_setup_env.sh -set -o errexit; source ./ci/test/03_before_install.sh -set -o errexit; source ./ci/test/04_install.sh -set -o errexit; source ./ci/test/05_before_script.sh -set -o errexit; source ./ci/test/06_script_a.sh -set -o errexit; source ./ci/test/06_script_b.sh diff --git a/configure.ac b/configure.ac index 91d122a453..a33c93fa28 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,6 @@ AC_CONFIG_MACRO_DIR([build-aux/m4]) DEFI_DAEMON_NAME=defid DEFI_CLI_NAME=defi-cli DEFI_TX_NAME=defi-tx -DEFI_WALLET_TOOL_NAME=defi-wallet dnl Unless the user specified ARFLAGS, force it to be cr AC_ARG_VAR(ARFLAGS, [Flags for the archiver, defaults to if not set]) @@ -213,12 +212,6 @@ AC_ARG_ENABLE([zmq], [use_zmq=$enableval], [use_zmq=yes]) -AC_ARG_ENABLE(man, - [AS_HELP_STRING([--disable-man], - [do not install man pages (default is to install)])],, - enable_man=yes) -AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no) - # Enable debug AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], @@ -432,7 +425,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #error "crc32c library does not support hardware acceleration on 32-bit ARM" #endif ]])], - [ AC_MSG_RESULT(yes); enable_arm_crc=yes; ], + [ AC_MSG_RESULT(yes); enable_arm_crc=yes; AC_DEFINE(ENABLE_ARM_CRC, 1, [Define this symbol to build code that uses ARM CRC intrinsics]) ], [ AC_MSG_RESULT(no)] ) CXXFLAGS="$TEMP_CXXFLAGS" @@ -443,7 +436,7 @@ CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS" AC_ARG_WITH([utils], [AS_HELP_STRING([--with-utils], - [build defi-cli defi-tx defi-wallet (default=yes)])], + [build defi-cli defi-tx (default=yes)])], [build_defi_utils=$withval], [build_defi_utils=yes]) @@ -467,9 +460,7 @@ AC_ARG_ENABLE([util-wallet], AC_ARG_WITH([libs], [AS_HELP_STRING([--with-libs], - [build libraries (default=yes)])], - [build_defi_libs=$withval], - [build_defi_libs=yes]) + [build libraries (default=yes)])]) AC_ARG_WITH([daemon], [AS_HELP_STRING([--with-daemon], @@ -504,16 +495,12 @@ case $host in AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(libshlwapi missing)) AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(libiphlpapi missing)) AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(libcrypt32 missing)) + AC_CHECK_LIB([bcrypt], [main],, AC_MSG_ERROR(libbcrypt missing)) # -static is interpreted by libtool, where it has a different meaning. # In libtool-speak, it's -all-static. AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"]) - AC_PATH_PROG([MAKENSIS], [makensis], none) - if test x$MAKENSIS = xnone; then - AC_MSG_WARN("makensis not found. Cannot create installer.") - fi - AC_PATH_TOOL(WINDRES, windres, none) if test x$WINDRES = xnone; then AC_MSG_ERROR("windres not found") @@ -594,27 +581,6 @@ case $host in TARGET_OS=linux LEVELDB_TARGET_FLAGS="-DOS_LINUX" ;; - *kfreebsd*) - LEVELDB_TARGET_FLAGS="-DOS_KFREEBSD" - ;; - *freebsd*) - LEVELDB_TARGET_FLAGS="-DOS_FREEBSD" - ;; - *openbsd*) - LEVELDB_TARGET_FLAGS="-DOS_OPENBSD" - ;; - *netbsd*) - LEVELDB_TARGET_FLAGS="-DOS_NETBSD" - ;; - *dragonfly*) - LEVELDB_TARGET_FLAGS="-DOS_DRAGONFLYBSD" - ;; - *solaris*) - LEVELDB_TARGET_FLAGS="-DOS_SOLARIS" - ;; - *hpux*) - LEVELDB_TARGET_FLAGS="-DOS_HPUX" - ;; *) AC_MSG_ERROR(Cannot build leveldb for $host. Please file a bug report.) ;; @@ -857,11 +823,6 @@ if test "x$use_thread_local" = xyes || { test "x$use_thread_local" = xauto && te # supported (per https://stackoverflow.com/a/29929949) AC_MSG_RESULT(no) ;; - *freebsd*) - # FreeBSD's implementation of thread_local is also buggy (per - # https://groups.google.com/d/msg/bsdmailinglist/22ncTZAbDp4/Dii_pII5AwAJ) - AC_MSG_RESULT(no) - ;; *) AC_DEFINE(HAVE_THREAD_LOCAL,1,[Define if thread_local is supported.]) AC_MSG_RESULT(yes) @@ -1024,7 +985,6 @@ if test "x$enable_fuzz" = "xyes"; then build_defi_tx=no build_defi_wallet=no build_defid=no - build_defi_libs=no enable_wallet=no use_bench=no use_upnp=no @@ -1074,12 +1034,12 @@ fi if test x$use_boost = xyes; then dnl Minimum required Boost version -define(MINIMUM_REQUIRED_BOOST, 1.47.0) +define(MINIMUM_REQUIRED_BOOST, 1.77.0) dnl Check for boost libs AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST]) if test x$want_boost = xno; then - AC_MSG_ERROR([[only libdeficonsensus can be built without boost]]) + AC_MSG_ERROR([[cannot be built without boost]]) fi AX_BOOST_SYSTEM AX_BOOST_FILESYSTEM @@ -1089,25 +1049,6 @@ dnl counter implementations. In 1.63 and later the std::atomic approach is defau m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro BOOST_CPPFLAGS="-DBOOST_MPL_CFG_NO_PREPROCESSED_HEADERS -DBOOST_MPL_LIMIT_LIST_SIZE=50 -DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS" -if test x$use_reduce_exports = xyes; then - AC_MSG_CHECKING([for working boost reduced exports]) - TEMP_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$BOOST_CPPFLAGS $CPPFLAGS" - AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ - @%:@include - ]], [[ - #if BOOST_VERSION >= 104900 - // Everything is okay - #else - # error Boost version is too old - #endif - ]])],[ - AC_MSG_RESULT(yes) - ],[ - AC_MSG_ERROR([boost versions < 1.49 are known to be broken with reduced exports. Use --disable-reduce-exports.]) - ]) - CPPFLAGS="$TEMP_CPPFLAGS" -fi fi if test x$use_reduce_exports = xyes; then @@ -1150,42 +1091,8 @@ fi if test x$use_boost = xyes; then BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB" - - -dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums -dnl using c++98 constructs. Unfortunately, this implementation detail leaked into -dnl the abi. This was fixed in 1.57. - -dnl When building against that installed version using c++11, the headers pick up -dnl on the native c++11 scoped enum support and enable it, however it will fail to -dnl link. This can be worked around by disabling c++11 scoped enums if linking will -dnl fail. -dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51. - -TEMP_LIBS="$LIBS" LIBS="$BOOST_LIBS $LIBS" -TEMP_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" -AC_MSG_CHECKING([for mismatched boost c++11 scoped enums]) -AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #include - #include - #if !defined(BOOST_NO_SCOPED_ENUMS) && !defined(BOOST_NO_CXX11_SCOPED_ENUMS) && BOOST_VERSION < 105700 - #define BOOST_NO_SCOPED_ENUMS - #define BOOST_NO_CXX11_SCOPED_ENUMS - #define CHECK - #endif - #include - ]],[[ - #if defined(CHECK) - boost::filesystem::copy_file("foo", "bar"); - #else - choke; - #endif - ]])], - [AC_MSG_RESULT(mismatched); BOOST_CPPFLAGS="$BOOST_CPPFLAGS -DBOOST_NO_SCOPED_ENUMS -DBOOST_NO_CXX11_SCOPED_ENUMS"], [AC_MSG_RESULT(ok)]) -LIBS="$TEMP_LIBS" -CPPFLAGS="$TEMP_CPPFLAGS" fi @@ -1326,13 +1233,6 @@ AC_MSG_CHECKING([whether to build defi-wallet]) AM_CONDITIONAL([BUILD_DEFI_WALLET], [test x$build_defi_wallet = xyes]) AC_MSG_RESULT($build_defi_wallet) -AC_MSG_CHECKING([whether to build libraries]) -AM_CONDITIONAL([BUILD_DEFI_LIBS], [test x$build_defi_libs = xyes]) -if test x$build_defi_libs = xyes; then - AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built]) - AC_CONFIG_FILES([libdeficonsensus.pc:libdeficonsensus.pc.in]) -fi -AC_MSG_RESULT($build_defi_libs) AC_LANG_POP @@ -1411,7 +1311,7 @@ else AC_MSG_RESULT([no]) fi -if test x$build_defi_wallet$build_defi_cli$build_defi_tx$build_defi_libs$build_defid$use_bench$use_tests = xnononononononono; then +if test x$build_defi_wallet$build_defi_cli$build_defi_tx$build_defid$use_bench$use_tests = xnonononononono; then AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --enable-bench or --enable-tests]) fi @@ -1424,7 +1324,7 @@ AM_CONDITIONAL([TARGET_NOT_WINDOWS], [test x$TARGET_OS != xwindows]) AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes]) AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes]) AM_CONDITIONAL([ENABLE_FUZZ],[test x$enable_fuzz = xyes]) -AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes]) +AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xno]) AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes]) AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes]) AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes]) @@ -1458,7 +1358,6 @@ AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL") AC_SUBST(DEFI_DAEMON_NAME) AC_SUBST(DEFI_CLI_NAME) AC_SUBST(DEFI_TX_NAME) -AC_SUBST(DEFI_WALLET_TOOL_NAME) AC_SUBST(RELDFLAGS) AC_SUBST(DEBUG_CPPFLAGS) @@ -1480,6 +1379,7 @@ AC_SUBST(SSE42_CXXFLAGS) AC_SUBST(SSE41_CXXFLAGS) AC_SUBST(AVX2_CXXFLAGS) AC_SUBST(SHANI_CXXFLAGS) +AC_SUBST(ARM_CRC_CXXFLAGS) AC_SUBST(LIBTOOL_APP_LDFLAGS) AC_SUBST(USE_UPNP) AC_SUBST(USE_QRCODE) @@ -1499,7 +1399,29 @@ AC_SUBST(HAVE_O_CLOEXEC) AC_SUBST(HAVE_BUILTIN_PREFETCH) AC_SUBST(HAVE_MM_PREFETCH) AC_SUBST(HAVE_STRONG_GETAUXVAL) -AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi test/config.ini]) + +case $host in + x86_64-pc-linux-gnu) + AC_SUBST(RUST_TARGET,x86_64-unknown-linux-gnu) + ;; + aarch64-linux-gnu) + AC_SUBST(RUST_TARGET,aarch64-unknown-linux-gnu) + ;; + arm-linux-gnueabihf) + AC_SUBST(RUST_TARGET,armv7-unknown-linux-gnueabihf) + ;; + x86_64-apple-darwin) + AC_SUBST(RUST_TARGET,x86_64-apple-darwin) + ;; + aarch64-apple-darwin) + AC_SUBST(RUST_TARGET,aarch64-apple-darwin) + ;; + x86_64-w64-mingw32) + AC_SUBST(RUST_TARGET,x86_64-pc-windows-gnu) + ;; +esac + +AC_CONFIG_FILES([Makefile src/Makefile src/rust/Makefile test/config.ini]) AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh]) AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/Doxyfile])]) AC_CONFIG_LINKS([contrib/filter-lcov.py:contrib/filter-lcov.py]) diff --git a/contrib/README.md b/contrib/README.md index e9e72f6686..cdf703f733 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -5,9 +5,6 @@ Repository Tools Specific tools for developers working on this repository. Additional tools, including the `github-merge.py` script, are available in the [maintainer-tools](https://github.com/bitcoin-core/bitcoin-maintainer-tools) repository. -### [Verify-Commits](/contrib/verify-commits) ### -Tool to verify that every merge commit was signed by a developer using the `github-merge.py` script. - ### [Linearize](/contrib/linearize) ### Construct a linear, no-fork, best version of the blockchain. @@ -18,31 +15,8 @@ A Linux bash script that will set up traffic control (tc) to limit the outgoing ### [Seeds](/contrib/seeds) ### Utility to generate the pnSeed[] array that is compiled into the client. -Build Tools and Keys ---------------------- - -### Packaging ### -The [Debian](/contrib/debian) subfolder contains the copyright file. - -All other packaging related files can be found in the [bitcoin-core/packaging](https://github.com/bitcoin-core/packaging) repository. - -### [Gitian-descriptors](/contrib/gitian-descriptors) ### -Files used during the gitian build process. For more information about gitian, see the [the Bitcoin Core documentation repository](https://github.com/bitcoin-core/docs). - -### [Gitian-keys](/contrib/gitian-keys) -PGP keys used for signing Bitcoin Core [Gitian release](/doc/release-process.md) results. - -### [MacDeploy](/contrib/macdeploy) ### -Scripts and notes for Mac builds. - -### [Gitian-build](/contrib/gitian-build.py) ### -Script for running full Gitian builds. - Test and Verify Tools --------------------- ### [TestGen](/contrib/testgen) ### Utilities to generate test vectors for the data-driven Bitcoin tests. - -### [Verify Binaries](/contrib/verifybinaries) ### -This script attempts to download and verify the signature file SHA256SUMS.asc from bitcoin.org. diff --git a/contrib/defi-cli.bash-completion b/contrib/bash-completion/defi-cli.bash-completion similarity index 100% rename from contrib/defi-cli.bash-completion rename to contrib/bash-completion/defi-cli.bash-completion diff --git a/contrib/defi-tx.bash-completion b/contrib/bash-completion/defi-tx.bash-completion similarity index 100% rename from contrib/defi-tx.bash-completion rename to contrib/bash-completion/defi-tx.bash-completion diff --git a/contrib/defid.bash-completion b/contrib/bash-completion/defid.bash-completion similarity index 100% rename from contrib/defid.bash-completion rename to contrib/bash-completion/defid.bash-completion diff --git a/share/examples/default.conf b/contrib/conf-examples/default.conf similarity index 97% rename from share/examples/default.conf rename to contrib/conf-examples/default.conf index 580bf18f4a..fcd27430bd 100644 --- a/share/examples/default.conf +++ b/contrib/conf-examples/default.conf @@ -81,9 +81,9 @@ # If not, you must set rpcuser and rpcpassword to secure the JSON-RPC API. # # The config option `rpcauth` can be added to server startup argument. It is set at initialization time -# using the output from the script in share/rpcauth/rpcauth.py after providing a username: +# using the output from the script in contrib/rpcauth/rpcauth.py after providing a username: # -# ./share/rpcauth/rpcauth.py alice +# ./contrib/rpcauth/rpcauth.py alice # String to be appended to defi.conf: # rpcauth=alice:f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae # Your password: diff --git a/share/examples/pruned.conf b/contrib/conf-examples/pruned.conf similarity index 97% rename from share/examples/pruned.conf rename to contrib/conf-examples/pruned.conf index b779d80cb7..1c80037f44 100644 --- a/share/examples/pruned.conf +++ b/contrib/conf-examples/pruned.conf @@ -81,9 +81,9 @@ # If not, you must set rpcuser and rpcpassword to secure the JSON-RPC API. # # The config option `rpcauth` can be added to server startup argument. It is set at initialization time -# using the output from the script in share/rpcauth/rpcauth.py after providing a username: +# using the output from the script in contrib/rpcauth/rpcauth.py after providing a username: # -# ./share/rpcauth/rpcauth.py alice +# ./contrib/rpcauth/rpcauth.py alice # String to be appended to defi.conf: # rpcauth=alice:f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae # Your password: diff --git a/contrib/debian/copyright b/contrib/debian/copyright deleted file mode 100644 index ee71dce87b..0000000000 --- a/contrib/debian/copyright +++ /dev/null @@ -1,146 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: Bitcoin -Upstream-Contact: Satoshi Nakamoto - irc://#bitcoin@freenode.net -Source: https://github.com/bitcoin/bitcoin - -Files: * -Copyright: 2009-2019, Bitcoin Core Developers -License: Expat -Comment: The Bitcoin Core Developers encompasses the current developers listed on bitcoin.org, - as well as the numerous contributors to the project. - -Files: debian/* -Copyright: 2010-2011, Jonas Smedegaard - 2011, Matt Corallo -License: GPL-2+ - -Files: src/secp256k1/build-aux/m4/ax_jni_include_dir.m4 -Copyright: 2008 Don Anderson -License: GNU-All-permissive-License - -Files: src/secp256k1/build-aux/m4/ax_prog_cc_for_build.m4 -Copyright: 2008 Paolo Bonzini -License: GNU-All-permissive-License - -Files: src/qt/res/icons/add.png - src/qt/res/icons/address-book.png - src/qt/res/icons/chevron.png - src/qt/res/icons/edit.png - src/qt/res/icons/editcopy.png - src/qt/res/icons/editpaste.png - src/qt/res/icons/export.png - src/qt/res/icons/eye.png - src/qt/res/icons/history.png - src/qt/res/icons/lock_*.png - src/qt/res/icons/overview.png - src/qt/res/icons/receive.png - src/qt/res/icons/remove.png - src/qt/res/icons/send.png - src/qt/res/icons/synced.png - src/qt/res/icons/transaction*.png - src/qt/res/icons/tx_output.png - src/qt/res/icons/warning.png -Copyright: Stephen Hutchings (and more) - http://typicons.com -License: Expat -Comment: Site: https://github.com/stephenhutchings/typicons.font - -Files: src/qt/res/icons/connect*.png - src/qt/res/src/connect-*.svg - src/qt/res/icons/network_disabled.png - src/qt/res/src/network_disabled.svg -Copyright: Marco Falke - Luke Dashjr -License: Expat -Comment: Inspired by Stephen Hutchings' Typicons - -Files: src/qt/res/icons/tx_mined.png - src/qt/res/src/mine.svg - src/qt/res/icons/fontbigger.png - src/qt/res/icons/fontsmaller.png - src/qt/res/icons/hd_disabled.png - src/qt/res/src/hd_disabled.svg - src/qt/res/icons/hd_enabled.png - src/qt/res/src/hd_enabled.svg -Copyright: Jonas Schnelli -License: Expat - -Files: src/qt/res/icons/clock*.png - src/qt/res/icons/eye_*.png - src/qt/res/icons/tx_in*.png - src/qt/res/src/clock_*.svg - src/qt/res/src/tx_*.svg -Copyright: Stephen Hutchings, Jonas Schnelli -License: Expat -Comment: Modifications of Stephen Hutchings' Typicons - -Files: src/qt/res/icons/defi.* - share/pixmaps/defi* - src/qt/res/src/defi.svg -Copyright: Bitboy, Jonas Schnelli -License: public-domain -Comment: Site: https://bitcointalk.org/?topic=1756.0 - -Files: src/qt/res/icons/proxy.png - src/qt/res/src/proxy.svg -Copyright: Cristian Mircea Messel -License: public-domain - - -License: Expat - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - . - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - . - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE 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. - -License: GNU-All-permissive-License - Copying and distribution of this file, with or without modification, are - permitted in any medium without royalty provided the copyright notice - and this notice are preserved. This file is offered as-is, without any - warranty. - -License: GPL-2+ - This program 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 2, 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. -Comment: - On Debian systems the GNU General Public License (GPL) version 2 is - located in '/usr/share/common-licenses/GPL-2'. - . - You should have received a copy of the GNU General Public License along - with this program. If not, see . - -License: GPL-3+ - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU General Public License, Version 3 or any - later version published by the Free Software Foundation. -Comment: - On Debian systems the GNU General Public License (GPL) version 3 is - located in '/usr/share/common-licenses/GPL-3'. - . - You should have received a copy of the GNU General Public License along - with this program. If not, see . - -License: public-domain - This work is in the public domain. diff --git a/contrib/defi-qt.pro b/contrib/defi-qt.pro deleted file mode 100644 index ace6148378..0000000000 --- a/contrib/defi-qt.pro +++ /dev/null @@ -1,21 +0,0 @@ -FORMS += \ - ../src/qt/forms/aboutdialog.ui \ - ../src/qt/forms/addressbookpage.ui \ - ../src/qt/forms/askpassphrasedialog.ui \ - ../src/qt/forms/coincontroldialog.ui \ - ../src/qt/forms/editaddressdialog.ui \ - ../src/qt/forms/helpmessagedialog.ui \ - ../src/qt/forms/intro.ui \ - ../src/qt/forms/openuridialog.ui \ - ../src/qt/forms/optionsdialog.ui \ - ../src/qt/forms/overviewpage.ui \ - ../src/qt/forms/receivecoinsdialog.ui \ - ../src/qt/forms/receiverequestdialog.ui \ - ../src/qt/forms/debugwindow.ui \ - ../src/qt/forms/sendcoinsdialog.ui \ - ../src/qt/forms/sendcoinsentry.ui \ - ../src/qt/forms/signverifymessagedialog.ui \ - ../src/qt/forms/transactiondescdialog.ui \ - -RESOURCES += \ - ../src/qt/defi.qrc diff --git a/contrib/devtools/README.md b/contrib/devtools/README.md index 3136585ecc..16e38b986e 100644 --- a/contrib/devtools/README.md +++ b/contrib/devtools/README.md @@ -75,20 +75,6 @@ year rather than two hyphenated years. If the file already has a copyright for `The Bitcoin Core developers`, the script will exit. -gen-manpages.sh -=============== - -A small script to automatically create manpages in ../../doc/man by running the release binaries with the -help option. -This requires help2man which can be found at: https://www.gnu.org/software/help2man/ - -With in-tree builds this tool can be run from any directory within the -repostitory. To use this tool with out-of-tree builds set `BUILDDIR`. For -example: - -```bash -BUILDDIR=$PWD/build contrib/devtools/gen-manpages.sh -``` - optimize-pngs.py ================ diff --git a/contrib/devtools/gen-manpages.sh b/contrib/devtools/gen-manpages.sh deleted file mode 100755 index 79a9ebbbb4..0000000000 --- a/contrib/devtools/gen-manpages.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -export LC_ALL=C -TOPDIR=${TOPDIR:-$(git rev-parse --show-toplevel)} -BUILDDIR=${BUILDDIR:-$TOPDIR} - -BINDIR=${BINDIR:-$BUILDDIR/src} -MANDIR=${MANDIR:-$TOPDIR/doc/man} - -DEFID=${DEFID:-$BINDIR/defid} -DEFICLI=${DEFICLI:-$BINDIR/defi-cli} -DEFITX=${DEFITX:-$BINDIR/defi-tx} -WALLET_TOOL=${WALLET_TOOL:-$BINDIR/defi-wallet} -DEFIQT=${DEFIQT:-$BINDIR/qt/defi-qt} - -[ ! -x $DEFID ] && echo "$DEFID not found or not executable." && exit 1 - -# The autodetected version git tag can screw up manpage output a little bit -read -r -a BTCVER <<< "$($DEFICLI --version | head -n1 | awk -F'[ -]' '{ print $6, $7 }')" - -# Create a footer file with copyright content. -# This gets autodetected fine for defid if --version-string is not set, -# but has different outcomes for defi-qt and defi-cli. -echo "[COPYRIGHT]" > footer.h2m -$DEFID --version | sed -n '1!p' >> footer.h2m - -for cmd in $DEFID $DEFICLI $DEFITX $WALLET_TOOL $DEFIQT; do - cmdname="${cmd##*/}" - help2man -N --version-string=${BTCVER[0]} --include=footer.h2m -o ${MANDIR}/${cmdname}.1 ${cmd} - sed -i "s/\\\-${BTCVER[1]}//g" ${MANDIR}/${cmdname}.1 -done - -rm -f footer.h2m diff --git a/contrib/devtools/optimize-pngs.py b/contrib/devtools/optimize-pngs.py index 461d46f69c..ad9c83c3fd 100755 --- a/contrib/devtools/optimize-pngs.py +++ b/contrib/devtools/optimize-pngs.py @@ -26,7 +26,7 @@ def content_hash(filename): pngcrush = 'pngcrush' git = 'git' -folders = ["src/qt/res/movies", "src/qt/res/icons", "share/pixmaps"] +folders = ["contrib/pixmaps"] basePath = subprocess.check_output([git, 'rev-parse', '--show-toplevel'], universal_newlines=True, encoding='utf8').rstrip('\n') totalSaveBytes = 0 noHashChange = True diff --git a/contrib/dockerfiles/aarch64-linux-gnu.dockerfile b/contrib/dockerfiles/aarch64-linux-gnu.dockerfile new file mode 100644 index 0000000000..2cbd6f017f --- /dev/null +++ b/contrib/dockerfiles/aarch64-linux-gnu.dockerfile @@ -0,0 +1,44 @@ +ARG TARGET=aarch64-linux-gnu + +# ----------- +FROM ubuntu:latest as builder +ARG TARGET +LABEL org.defichain.name="defichain-builder" +LABEL org.defichain.arch=${TARGET} + +WORKDIR /work +COPY ./make.sh . + +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_update_base +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps_arm64 + +COPY . . +RUN ./make.sh clean-depends && ./make.sh build-deps +RUN ./make.sh clean-conf && ./make.sh build-conf +RUN ./make.sh build-make + +RUN mkdir /app && cd build/${TARGET} && \ + make -s prefix=/ DESTDIR=/app install + +# ----------- +### Actual image that contains defi binaries +FROM --platform=linux/arm64 ubuntu:latest +ARG TARGET +LABEL org.defichain.name="defichain" +LABEL org.defichain.arch=${TARGET} + +WORKDIR /app +COPY --from=builder /app/. ./ + +RUN useradd --create-home defi && \ + mkdir -p /data && \ + chown defi:defi /data && \ + ln -s /data /home/defi/.defi + +VOLUME ["/data"] + +USER defi:defi +CMD [ "/app/bin/defid" ] + +EXPOSE 8555 8554 18555 18554 19555 19554 20555 20554 diff --git a/contrib/dockerfiles/arm-linux-gnueabihf.dockerfile b/contrib/dockerfiles/arm-linux-gnueabihf.dockerfile index 7e417205df..26c268cafe 100644 --- a/contrib/dockerfiles/arm-linux-gnueabihf.dockerfile +++ b/contrib/dockerfiles/arm-linux-gnueabihf.dockerfile @@ -1,69 +1,44 @@ ARG TARGET=arm-linux-gnueabihf # ----------- -FROM ubuntu:20.04 as builder-base -ARG TARGET -LABEL org.defichain.name="defichain-builder-base" -LABEL org.defichain.arch=${TARGET} - -RUN apt update && apt dist-upgrade -y - -# Setup DeFiChain build dependencies. Refer to depends/README.md and doc/build-unix.md -# from the source root for info on the builder setup - -RUN apt install -y software-properties-common build-essential git libtool autotools-dev automake \ -pkg-config bsdmainutils python3 libssl-dev libevent-dev libboost-system-dev \ -libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev \ -libminiupnpc-dev libzmq3-dev libqrencode-dev \ -curl cmake \ -g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf - -# For Berkeley DB - but we don't need as we do a depends build. -# RUN apt install -y libdb-dev - -# ----------- -FROM builder-base as depends-builder -ARG TARGET -LABEL org.defichain.name="defichain-depends-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work/depends -COPY ./depends . -# XREF: #make-deps -RUN make HOST=${TARGET} -j $(nproc) - -# ----------- -FROM builder-base as builder +FROM ubuntu:latest as builder ARG TARGET LABEL org.defichain.name="defichain-builder" LABEL org.defichain.arch=${TARGET} WORKDIR /work +COPY ./make.sh . -COPY --from=depends-builder /work/depends ./depends -COPY . . - -RUN ./autogen.sh - -# XREF: #make-configure -RUN ./configure --prefix=`pwd`/depends/${TARGET} \ - --enable-glibc-back-compat \ - --enable-reduce-exports \ - LDFLAGS="-static-libstdc++" +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_update_base +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps_armhf -ARG BUILD_VERSION= +COPY . . +RUN ./make.sh clean-depends && ./make.sh build-deps +RUN ./make.sh clean-conf && ./make.sh build-conf +RUN ./make.sh build-make -RUN make -j $(nproc) -RUN mkdir /app && make prefix=/ DESTDIR=/app install && cp /work/README.md /app/. +RUN mkdir /app && cd build/${TARGET} && \ + make -s prefix=/ DESTDIR=/app install # ----------- ### Actual image that contains defi binaries -FROM arm32v7/ubuntu:20.04 +FROM --platform=linux/arm/v7 ubuntu:latest ARG TARGET LABEL org.defichain.name="defichain" LABEL org.defichain.arch=${TARGET} WORKDIR /app - COPY --from=builder /app/. ./ +RUN useradd --create-home defi && \ + mkdir -p /data && \ + chown defi:defi /data && \ + ln -s /data /home/defi/.defi + +VOLUME ["/data"] + +USER defi:defi +CMD [ "/app/bin/defid" ] + +EXPOSE 8555 8554 18555 18554 19555 19554 20555 20554 \ No newline at end of file diff --git a/contrib/dockerfiles/dockerhub/x86_64-pc-linux-gnu.dockerfile b/contrib/dockerfiles/dockerhub/x86_64-pc-linux-gnu.dockerfile deleted file mode 100644 index 36585cf543..0000000000 --- a/contrib/dockerfiles/dockerhub/x86_64-pc-linux-gnu.dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM defichain-x86_64-pc-linux-gnu:dockerhub-latest as dh-build - -FROM debian:10-slim -ENV PATH=/app/bin:$PATH -WORKDIR /app - -COPY --from=dh-build /app/. ./ - -RUN useradd --create-home defi && \ - mkdir -p /data && \ - chown defi:defi /data && \ - ln -s /data /home/defi/.defi - -VOLUME ["/data"] - -USER defi:defi -CMD [ "/app/bin/defid" ] - -EXPOSE 8555 8554 18555 18554 19555 19554 20555 20554 diff --git a/contrib/dockerfiles/x86_64-alpine-linux-musl.dockerfile b/contrib/dockerfiles/draft/x86_64-alpine-linux-musl.dockerfile similarity index 100% rename from contrib/dockerfiles/x86_64-alpine-linux-musl.dockerfile rename to contrib/dockerfiles/draft/x86_64-alpine-linux-musl.dockerfile diff --git a/contrib/dockerfiles/x86_64-apple-darwin.dockerfile b/contrib/dockerfiles/x86_64-apple-darwin.dockerfile new file mode 100644 index 0000000000..bd64484409 --- /dev/null +++ b/contrib/dockerfiles/x86_64-apple-darwin.dockerfile @@ -0,0 +1,24 @@ +ARG TARGET=x86_64-apple-darwin + +# ----------- +FROM ubuntu:latest as builder +ARG TARGET +LABEL org.defichain.name="defichain-builder" +LABEL org.defichain.arch=${TARGET} + +WORKDIR /work +COPY ./make.sh . + +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_update_base +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps_osx_tools + +COPY . . +RUN ./make.sh clean-depends && ./make.sh build-deps +RUN ./make.sh clean-conf && ./make.sh build-conf +RUN ./make.sh build-make + +RUN mkdir /app && cd build/${TARGET} && \ + make -s prefix=/ DESTDIR=/app install + +# NOTE: These are not runnable images. So we do not add into a scratch base image. diff --git a/contrib/dockerfiles/x86_64-apple-darwin18.dockerfile b/contrib/dockerfiles/x86_64-apple-darwin18.dockerfile deleted file mode 100644 index bfa0cc5468..0000000000 --- a/contrib/dockerfiles/x86_64-apple-darwin18.dockerfile +++ /dev/null @@ -1,86 +0,0 @@ -ARG TARGET=x86_64-apple-darwin18 - -# ----------- -FROM ubuntu:20.04 as builder-base -ARG TARGET -LABEL org.defichain.name="defichain-builder-base" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work -COPY ./make.sh . - -RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone - -RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_base - -# Setup DeFiChain build dependencies. Refer to depends/README.md and doc/build-unix.md -# from the source root for info on the builder setup - -RUN export DEBIAN_FRONTEND=noninteractive && apt install -y software-properties-common build-essential git libtool autotools-dev automake \ -pkg-config bsdmainutils python3 libssl-dev libevent-dev libboost-system-dev \ -libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev \ -libminiupnpc-dev libzmq3-dev libqrencode-dev \ -curl cmake unzip \ -python3-dev python3-pip libcap-dev libbz2-dev libz-dev fonts-tuffy librsvg2-bin libtiff-tools imagemagick - -RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg-install-deps-x86_64 -RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_mac_sdk_deps - -# install protobuf -RUN curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/protoc-3.20.0-linux-x86_64.zip -RUN unzip -o protoc-3.20.0-linux-x86_64.zip -d ./proto -RUN chmod 755 -R ./proto/bin -RUN cp ./proto/bin/protoc /usr/local/bin/ -RUN cp -R ./proto/include/* /usr/local/include/ - -# install rustlang -RUN curl https://sh.rustup.rs -sSf | \ - sh -s -- --default-toolchain stable -y -ENV PATH=/root/.cargo/bin:$PATH -RUN rustup target add x86_64-apple-darwin - -# For Berkeley DB - but we don't need as we do a depends build. -# RUN apt install -y libdb-dev - -# ----------- -FROM builder-base as depends-builder -ARG TARGET -LABEL org.defichain.name="defichain-depends-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work/depends -COPY ./depends . -# XREF: #make-deps -RUN make HOST=${TARGET} -j $(nproc) - -# ----------- -FROM builder-base as builder -ARG TARGET -LABEL org.defichain.name="defichain-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work - -COPY --from=depends-builder /work/depends ./depends -COPY . . - -RUN ./autogen.sh - -# XREF: #make-configure -RUN ./configure --prefix=`pwd`/depends/${TARGET} ${MAKE_CONF_ARGS} - -ARG BUILD_VERSION= - -RUN make -j $(nproc) -RUN mkdir /app && make prefix=/ DESTDIR=/app install && cp /work/README.md /app/. - -# ----------- -### Actual image that contains defi binaries -FROM ubuntu:20.04 -ARG TARGET -LABEL org.defichain.name="defichain" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /app - -COPY --from=builder /app/. ./ diff --git a/contrib/dockerfiles/x86_64-pc-linux-gnu-clang.dockerfile b/contrib/dockerfiles/x86_64-pc-linux-gnu-clang.dockerfile index 1dc3f84d2b..cd1e18f61d 100644 --- a/contrib/dockerfiles/x86_64-pc-linux-gnu-clang.dockerfile +++ b/contrib/dockerfiles/x86_64-pc-linux-gnu-clang.dockerfile @@ -1,72 +1,52 @@ ARG TARGET=x86_64-pc-linux-gnu # ----------- -FROM ubuntu:20.04 as builder-base +FROM debian:10 as builder ARG TARGET -LABEL org.defichain.name="defichain-builder-base" +ARG CLANG_VERSION=15 +LABEL org.defichain.name="defichain-builder" LABEL org.defichain.arch=${TARGET} WORKDIR /work COPY ./make.sh . -RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone - -RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_base -RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg-install-deps-x86_64 +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_update_base +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_llvm -# install protobuf -RUN curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/protoc-3.20.0-linux-x86_64.zip -RUN unzip -o protoc-3.20.0-linux-x86_64.zip -d ./proto -RUN chmod 755 -R ./proto/bin -RUN cp ./proto/bin/protoc /usr/local/bin/ -RUN cp -R ./proto/include/* /usr/local/include/ - -# install rustlang -RUN curl https://sh.rustup.rs -sSf | \ - sh -s -- --default-toolchain stable -y -ENV PATH=/root/.cargo/bin:$PATH -RUN rustup target add x86_64-unknown-linux-gnu - -# ----------- -FROM builder-base as depends-builder -ARG TARGET -LABEL org.defichain.name="defichain-depends-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work -COPY ./depends ./depends - -RUN ./make.sh clean-depends && ./make.sh build-deps - -# ----------- -FROM builder-base as builder -ARG TARGET -ARG BUILD_VERSION= - -LABEL org.defichain.name="defichain-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work - COPY . . -RUN ./make.sh purge && rm -rf ./depends -COPY --from=depends-builder /work/depends ./depends - -RUN ./make.sh clean && ./autogen.sh -RUN export MAKE_COMPILER="CC=clang-16 CXX=clang++-16" && \ - ./make.sh build-conf && ./make.sh build-make - -RUN mkdir /app && make prefix=/ DESTDIR=/app install && cp /work/README.md /app/. +RUN ./make.sh clean-depends && \ + export MAKE_DEPS_ARGS="\ + x86_64_linux_CC=clang-${CLANG_VERSION} \ + x86_64_linux_CXX=clang++-${CLANG_VERSION}" && \ + ./make.sh build-deps +RUN export MAKE_CONF_ARGS="\ + CC=clang-${CLANG_VERSION} \ + CXX=clang++-${CLANG_VERSION}" && \ + ./make.sh clean-conf && ./make.sh build-conf +RUN ./make.sh build-make + +RUN mkdir /app && cd build/${TARGET} && \ + make -s prefix=/ DESTDIR=/app install # ----------- ### Actual image that contains defi binaries -FROM ubuntu:20.04 +FROM debian:10 ARG TARGET LABEL org.defichain.name="defichain" LABEL org.defichain.arch=${TARGET} WORKDIR /app - COPY --from=builder /app/. ./ +RUN useradd --create-home defi && \ + mkdir -p /data && \ + chown defi:defi /data && \ + ln -s /data /home/defi/.defi + +VOLUME ["/data"] + +USER defi:defi +CMD [ "/app/bin/defid" ] + +EXPOSE 8555 8554 18555 18554 19555 19554 20555 20554 \ No newline at end of file diff --git a/contrib/dockerfiles/x86_64-pc-linux-gnu-dev.dockerfile b/contrib/dockerfiles/x86_64-pc-linux-gnu-dev.dockerfile deleted file mode 100644 index 96c47db783..0000000000 --- a/contrib/dockerfiles/x86_64-pc-linux-gnu-dev.dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -ARG TARGET=x86_64-pc-linux-gnu - -FROM defichain-builder-base-${TARGET} -ARG TARGET -LABEL org.defichain.name="defichain-dev" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /data -COPY . . - -VOLUME [ "/data" ] -CMD [ "bash", "-c", "./make.sh release" ] \ No newline at end of file diff --git a/contrib/dockerfiles/x86_64-pc-linux-gnu.dockerfile b/contrib/dockerfiles/x86_64-pc-linux-gnu.dockerfile index 1407e90f3d..53d8cbbe86 100644 --- a/contrib/dockerfiles/x86_64-pc-linux-gnu.dockerfile +++ b/contrib/dockerfiles/x86_64-pc-linux-gnu.dockerfile @@ -1,67 +1,44 @@ ARG TARGET=x86_64-pc-linux-gnu # ----------- -FROM ubuntu:20.04 as builder-base +FROM ubuntu:latest as builder ARG TARGET -LABEL org.defichain.name="defichain-builder-base" +LABEL org.defichain.name="defichain-builder" LABEL org.defichain.arch=${TARGET} WORKDIR /work COPY ./make.sh . -RUN apt update && apt install -y apt-transport-https -RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg-install-deps-x86_64 - -# install protobuf -RUN curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/protoc-3.20.0-linux-x86_64.zip -RUN unzip -o protoc-3.20.0-linux-x86_64.zip -d ./proto -RUN chmod 755 -R ./proto/bin -RUN cp ./proto/bin/protoc /usr/local/bin/ -RUN cp -R ./proto/include/* /usr/local/include/ - -# install rustlang -RUN curl https://sh.rustup.rs -sSf | \ - sh -s -- --default-toolchain stable -y -ENV PATH=/root/.cargo/bin:$PATH -RUN rustup target add x86_64-unknown-linux-gnu - -# ----------- -FROM builder-base as depends-builder -ARG TARGET -LABEL org.defichain.name="defichain-depends-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work -COPY ./depends ./depends - -RUN ./make.sh clean-depends && ./make.sh build-deps - -# ----------- -FROM builder-base as builder -ARG TARGET -ARG BUILD_VERSION= - -LABEL org.defichain.name="defichain-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_update_base +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps COPY . . -RUN ./make.sh purge && rm -rf ./depends -COPY --from=depends-builder /work/depends ./depends - -RUN export MAKE_COMPILER="CC=gcc CXX=g++" && \ - ./make.sh build-conf && ./make.sh build-make +RUN ./make.sh clean-depends && ./make.sh build-deps +RUN export MAKE_CONF_ARGS="CC=gcc CXX=g++" && \ + ./make.sh clean-conf && ./make.sh build-conf +RUN ./make.sh build-make -RUN mkdir /app && make prefix=/ DESTDIR=/app install && cp /work/README.md /app/. +RUN mkdir /app && cd build/${TARGET} && \ + make -s prefix=/ DESTDIR=/app install # ----------- ### Actual image that contains defi binaries -FROM ubuntu:20.04 +FROM ubuntu:latest ARG TARGET LABEL org.defichain.name="defichain" LABEL org.defichain.arch=${TARGET} WORKDIR /app - COPY --from=builder /app/. ./ + +RUN useradd --create-home defi && \ + mkdir -p /data && \ + chown defi:defi /data && \ + ln -s /data /home/defi/.defi + +VOLUME ["/data"] + +USER defi:defi +CMD [ "/app/bin/defid" ] + +EXPOSE 8555 8554 18555 18554 19555 19554 20555 20554 \ No newline at end of file diff --git a/contrib/dockerfiles/x86_64-w64-mingw32.dockerfile b/contrib/dockerfiles/x86_64-w64-mingw32.dockerfile index 9051105234..d6af1ddb85 100644 --- a/contrib/dockerfiles/x86_64-w64-mingw32.dockerfile +++ b/contrib/dockerfiles/x86_64-w64-mingw32.dockerfile @@ -1,93 +1,27 @@ ARG TARGET=x86_64-w64-mingw32 # ----------- -FROM ubuntu:20.04 as builder-base +FROM ubuntu:latest as builder ARG TARGET -LABEL org.defichain.name="defichain-builder-base" +LABEL org.defichain.name="defichain-builder" LABEL org.defichain.arch=${TARGET} WORKDIR /work COPY ./make.sh . -RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone - -RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_base - -# Setup DeFiChain build dependencies. Refer to depends/README.md and doc/build-unix.md -# from the source root for info on the builder setup - -RUN export DEBIAN_FRONTEND=noninteractive && apt install -y software-properties-common build-essential git libtool autotools-dev automake \ -pkg-config bsdmainutils python3 libssl-dev libevent-dev libboost-system-dev \ -libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev \ -libminiupnpc-dev libzmq3-dev libqrencode-dev \ -curl cmake unzip \ -g++-mingw-w64-x86-64 mingw-w64-x86-64-dev nsis - -RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg-install-deps-x86_64 +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_update_base +RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps RUN export DEBIAN_FRONTEND=noninteractive && ./make.sh pkg_install_deps_mingw_x86_64 -# install protobuf -RUN curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/protoc-3.20.0-linux-x86_64.zip -RUN unzip -o protoc-3.20.0-linux-x86_64.zip -d ./proto -RUN chmod 755 -R ./proto/bin -RUN cp ./proto/bin/protoc /usr/local/bin/ -RUN cp -R ./proto/include/* /usr/local/include/ - -# install rustlang -RUN curl https://sh.rustup.rs -sSf | \ - sh -s -- --default-toolchain stable -y -ENV PATH=/root/.cargo/bin:$PATH -RUN rustup target add x86_64-pc-windows-gnu -RUN printf '\n\ - [target.x86_64-pc-windows-gnu]\n\ - linker = "x86_64-w64-mingw32-gcc"\n\ - ar = "x86_64-w64-mingw32-ar"\n' > /root/.cargo/config - -# Set the default mingw32 g++ compiler option to posix. +RUN update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix RUN update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix -# For Berkeley DB - but we don't need as we do a depends build. -# RUN apt install -y libdb-dev - -# ----------- -FROM builder-base as depends-builder -ARG TARGET -LABEL org.defichain.name="defichain-depends-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work/depends -COPY ./depends . -# XREF: #make-deps -RUN make HOST=${TARGET} -j $(nproc) - -# ----------- -FROM builder-base as builder -ARG TARGET -LABEL org.defichain.name="defichain-builder" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /work - -COPY --from=depends-builder /work/depends ./depends COPY . . +RUN ./make.sh clean-depends && ./make.sh build-deps +RUN ./make.sh clean-conf && ./make.sh build-conf +RUN ./make.sh build-make -RUN ./autogen.sh - -# XREF: #make-configure -RUN CONFIG_SITE=`pwd`/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix=/ ${MAKE_CONF_ARGS} - -ARG BUILD_VERSION= - -RUN make -j $(nproc) -RUN mkdir /app && make prefix=/ DESTDIR=/app install && cp /work/README.md /app/. - -# ----------- -### Actual image that contains defi binaries -FROM ubuntu:20.04 -ARG TARGET -LABEL org.defichain.name="defichain" -LABEL org.defichain.arch=${TARGET} - -WORKDIR /app +RUN mkdir /app && cd build/${TARGET} && \ + make -s prefix=/ DESTDIR=/app install -COPY --from=builder /app/. ./ +# NOTE: These are not runnable images. So we do not add into a scratch base image. \ No newline at end of file diff --git a/share/genbuild.sh b/contrib/genbuild.sh similarity index 92% rename from share/genbuild.sh rename to contrib/genbuild.sh index 8e8370fb99..caec3c664f 100755 --- a/share/genbuild.sh +++ b/contrib/genbuild.sh @@ -25,7 +25,7 @@ git_check_in_repo() { DESC="" SUFFIX="" CURRENT_BRANCH="" -if [ "${BITCOIN_GENBUILD_NO_GIT}" != "1" ] && [ -e "$(command -v git)" ] && [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ] && git_check_in_repo share/genbuild.sh; then +if [ "${BITCOIN_GENBUILD_NO_GIT}" != "1" ] && [ -e "$(command -v git)" ] && [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ] && git_check_in_repo contrib/genbuild.sh; then # clean 'dirty' status of touched files that haven't been modified git diff >/dev/null 2>/dev/null @@ -54,10 +54,6 @@ if [ "${BITCOIN_GENBUILD_NO_GIT}" != "1" ] && [ -e "$(command -v git)" ] && [ "$ fi fi -echo "BUILD_DESC: $DESC" -echo "BUILD_GIT_BRANCH: $CURRENT_BRANCH" -echo "BUILD_SUFFIX: $SUFFIX" - if [ -n "$DESC" ]; then NEWINFO="#define BUILD_DESC \"$DESC\"" elif [ -n "$SUFFIX" ]; then @@ -69,5 +65,4 @@ fi # only update build.h if necessary if [ "$INFO" != "$NEWINFO" ]; then echo "$NEWINFO" >"$FILE" - echo "BUILD_INFO: $NEWINFO" fi diff --git a/contrib/gitian-build.py b/contrib/gitian-build.py deleted file mode 100755 index 53f3d0aa4d..0000000000 --- a/contrib/gitian-build.py +++ /dev/null @@ -1,261 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import os -import subprocess -import sys - -def setup(): - global args, workdir - programs = ['ruby', 'git', 'make', 'wget', 'curl'] - if args.kvm: - programs += ['apt-cacher-ng', 'python-vm-builder', 'qemu-kvm', 'qemu-utils'] - elif args.docker and not os.path.isfile('/lib/systemd/system/docker.service'): - dockers = ['docker.io', 'docker-ce'] - for i in dockers: - return_code = subprocess.call(['sudo', 'apt-get', 'install', '-qq', i]) - if return_code == 0: - break - if return_code != 0: - print('Cannot find any way to install Docker.', file=sys.stderr) - sys.exit(1) - else: - programs += ['apt-cacher-ng', 'lxc', 'debootstrap'] - subprocess.check_call(['sudo', 'apt-get', 'install', '-qq'] + programs) - if not os.path.isdir('gitian.sigs'): - subprocess.check_call(['git', 'clone', 'https://github.com/bitcoin-core/gitian.sigs.git']) - if not os.path.isdir('defi-detached-sigs'): - subprocess.check_call(['git', 'clone', 'https://github.com/bitcoin-core/bitcoin-detached-sigs.git']) - if not os.path.isdir('gitian-builder'): - subprocess.check_call(['git', 'clone', 'https://github.com/devrandom/gitian-builder.git']) - if not os.path.isdir('defi'): - subprocess.check_call(['git', 'clone', 'https://github.com/bitcoin/bitcoin.git']) - os.chdir('gitian-builder') - make_image_prog = ['bin/make-base-vm', '--suite', 'bionic', '--arch', 'amd64'] - if args.docker: - make_image_prog += ['--docker'] - elif not args.kvm: - make_image_prog += ['--lxc'] - subprocess.check_call(make_image_prog) - os.chdir(workdir) - if args.is_bionic and not args.kvm and not args.docker: - subprocess.check_call(['sudo', 'sed', '-i', 's/lxcbr0/br0/', '/etc/default/lxc-net']) - print('Reboot is required') - sys.exit(0) - -def build(): - global args, workdir - - os.makedirs('defi-binaries/' + args.version, exist_ok=True) - print('\nBuilding Dependencies\n') - os.chdir('gitian-builder') - os.makedirs('inputs', exist_ok=True) - - subprocess.check_call(['wget', '-N', '-P', 'inputs', 'https://downloads.sourceforge.net/project/osslsigncode/osslsigncode/osslsigncode-1.7.1.tar.gz']) - subprocess.check_call(['wget', '-N', '-P', 'inputs', 'https://bitcoincore.org/cfields/osslsigncode-Backports-to-1.7.1.patch']) - subprocess.check_call(["echo 'a8c4e9cafba922f89de0df1f2152e7be286aba73f78505169bc351a7938dd911 inputs/osslsigncode-Backports-to-1.7.1.patch' | sha256sum -c"], shell=True) - subprocess.check_call(["echo 'f9a8cdb38b9c309326764ebc937cba1523a3a751a7ab05df3ecc99d18ae466c9 inputs/osslsigncode-1.7.1.tar.gz' | sha256sum -c"], shell=True) - subprocess.check_call(['make', '-C', '../defi/depends', 'download', 'SOURCES_PATH=' + os.getcwd() + '/cache/common']) - - if args.linux: - print('\nCompiling ' + args.version + ' Linux') - subprocess.check_call(['bin/gbuild', '-j', args.jobs, '-m', args.memory, '--commit', 'defi='+args.commit, '--url', 'defi='+args.url, '../defi/contrib/gitian-descriptors/gitian-linux.yml']) - subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-linux', '--destination', '../gitian.sigs/', '../defi/contrib/gitian-descriptors/gitian-linux.yml']) - subprocess.check_call('mv build/out/defi-*.tar.gz build/out/src/defi-*.tar.gz ../defi-binaries/'+args.version, shell=True) - - if args.windows: - print('\nCompiling ' + args.version + ' Windows') - subprocess.check_call(['bin/gbuild', '-j', args.jobs, '-m', args.memory, '--commit', 'defi='+args.commit, '--url', 'defi='+args.url, '../defi/contrib/gitian-descriptors/gitian-win.yml']) - subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-win-unsigned', '--destination', '../gitian.sigs/', '../defi/contrib/gitian-descriptors/gitian-win.yml']) - subprocess.check_call('mv build/out/defi-*-win-unsigned.tar.gz inputs/', shell=True) - subprocess.check_call('mv build/out/defi-*.zip build/out/defi-*.exe build/out/src/defi-*.tar.gz ../defi-binaries/'+args.version, shell=True) - - if args.macos: - print('\nCompiling ' + args.version + ' MacOS') - subprocess.check_call(['bin/gbuild', '-j', args.jobs, '-m', args.memory, '--commit', 'defi='+args.commit, '--url', 'defi='+args.url, '../defi/contrib/gitian-descriptors/gitian-osx.yml']) - subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-osx-unsigned', '--destination', '../gitian.sigs/', '../defi/contrib/gitian-descriptors/gitian-osx.yml']) - subprocess.check_call('mv build/out/defi-*-osx-unsigned.tar.gz inputs/', shell=True) - subprocess.check_call('mv build/out/defi-*.tar.gz build/out/defi-*.dmg build/out/src/defi-*.tar.gz ../defi-binaries/'+args.version, shell=True) - - os.chdir(workdir) - - if args.commit_files: - print('\nCommitting '+args.version+' Unsigned Sigs\n') - os.chdir('gitian.sigs') - subprocess.check_call(['git', 'add', args.version+'-linux/'+args.signer]) - subprocess.check_call(['git', 'add', args.version+'-win-unsigned/'+args.signer]) - subprocess.check_call(['git', 'add', args.version+'-osx-unsigned/'+args.signer]) - subprocess.check_call(['git', 'commit', '-m', 'Add '+args.version+' unsigned sigs for '+args.signer]) - os.chdir(workdir) - -def sign(): - global args, workdir - os.chdir('gitian-builder') - - if args.windows: - print('\nSigning ' + args.version + ' Windows') - subprocess.check_call('cp inputs/defi-' + args.version + '-win-unsigned.tar.gz inputs/defi-win-unsigned.tar.gz', shell=True) - subprocess.check_call(['bin/gbuild', '--skip-image', '--upgrade', '--commit', 'signature='+args.commit, '../defi/contrib/gitian-descriptors/gitian-win-signer.yml']) - subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-win-signed', '--destination', '../gitian.sigs/', '../defi/contrib/gitian-descriptors/gitian-win-signer.yml']) - subprocess.check_call('mv build/out/defi-*win64-setup.exe ../defi-binaries/'+args.version, shell=True) - - if args.macos: - print('\nSigning ' + args.version + ' MacOS') - subprocess.check_call('cp inputs/defi-' + args.version + '-osx-unsigned.tar.gz inputs/defi-osx-unsigned.tar.gz', shell=True) - subprocess.check_call(['bin/gbuild', '--skip-image', '--upgrade', '--commit', 'signature='+args.commit, '../defi/contrib/gitian-descriptors/gitian-osx-signer.yml']) - subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-osx-signed', '--destination', '../gitian.sigs/', '../defi/contrib/gitian-descriptors/gitian-osx-signer.yml']) - subprocess.check_call('mv build/out/defi-osx-signed.dmg ../defi-binaries/'+args.version+'/defi-'+args.version+'-osx.dmg', shell=True) - - os.chdir(workdir) - - if args.commit_files: - print('\nCommitting '+args.version+' Signed Sigs\n') - os.chdir('gitian.sigs') - subprocess.check_call(['git', 'add', args.version+'-win-signed/'+args.signer]) - subprocess.check_call(['git', 'add', args.version+'-osx-signed/'+args.signer]) - subprocess.check_call(['git', 'commit', '-a', '-m', 'Add '+args.version+' signed binary sigs for '+args.signer]) - os.chdir(workdir) - -def verify(): - global args, workdir - rc = 0 - os.chdir('gitian-builder') - - print('\nVerifying v'+args.version+' Linux\n') - if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-linux', '../defi/contrib/gitian-descriptors/gitian-linux.yml']): - print('Verifying v'+args.version+' Linux FAILED\n') - rc = 1 - - print('\nVerifying v'+args.version+' Windows\n') - if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-win-unsigned', '../defi/contrib/gitian-descriptors/gitian-win.yml']): - print('Verifying v'+args.version+' Windows FAILED\n') - rc = 1 - - print('\nVerifying v'+args.version+' MacOS\n') - if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-osx-unsigned', '../defi/contrib/gitian-descriptors/gitian-osx.yml']): - print('Verifying v'+args.version+' MacOS FAILED\n') - rc = 1 - - print('\nVerifying v'+args.version+' Signed Windows\n') - if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-win-signed', '../defi/contrib/gitian-descriptors/gitian-win-signer.yml']): - print('Verifying v'+args.version+' Signed Windows FAILED\n') - rc = 1 - - print('\nVerifying v'+args.version+' Signed MacOS\n') - if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-osx-signed', '../defi/contrib/gitian-descriptors/gitian-osx-signer.yml']): - print('Verifying v'+args.version+' Signed MacOS FAILED\n') - rc = 1 - - os.chdir(workdir) - return rc - -def main(): - global args, workdir - - parser = argparse.ArgumentParser(description='Script for running full Gitian builds.') - parser.add_argument('-c', '--commit', action='store_true', dest='commit', help='Indicate that the version argument is for a commit or branch') - parser.add_argument('-p', '--pull', action='store_true', dest='pull', help='Indicate that the version argument is the number of a github repository pull request') - parser.add_argument('-u', '--url', dest='url', default='https://github.com/bitcoin/bitcoin', help='Specify the URL of the repository. Default is %(default)s') - parser.add_argument('-v', '--verify', action='store_true', dest='verify', help='Verify the Gitian build') - parser.add_argument('-b', '--build', action='store_true', dest='build', help='Do a Gitian build') - parser.add_argument('-s', '--sign', action='store_true', dest='sign', help='Make signed binaries for Windows and MacOS') - parser.add_argument('-B', '--buildsign', action='store_true', dest='buildsign', help='Build both signed and unsigned binaries') - parser.add_argument('-o', '--os', dest='os', default='lwm', help='Specify which Operating Systems the build is for. Default is %(default)s. l for Linux, w for Windows, m for MacOS') - parser.add_argument('-j', '--jobs', dest='jobs', default='2', help='Number of processes to use. Default %(default)s') - parser.add_argument('-m', '--memory', dest='memory', default='2000', help='Memory to allocate in MiB. Default %(default)s') - parser.add_argument('-k', '--kvm', action='store_true', dest='kvm', help='Use KVM instead of LXC') - parser.add_argument('-d', '--docker', action='store_true', dest='docker', help='Use Docker instead of LXC') - parser.add_argument('-S', '--setup', action='store_true', dest='setup', help='Set up the Gitian building environment. Only works on Debian-based systems (Ubuntu, Debian)') - parser.add_argument('-D', '--detach-sign', action='store_true', dest='detach_sign', help='Create the assert file for detached signing. Will not commit anything.') - parser.add_argument('-n', '--no-commit', action='store_false', dest='commit_files', help='Do not commit anything to git') - parser.add_argument('signer', nargs='?', help='GPG signer to sign each build assert file') - parser.add_argument('version', nargs='?', help='Version number, commit, or branch to build. If building a commit or branch, the -c option must be specified') - - args = parser.parse_args() - workdir = os.getcwd() - - args.is_bionic = b'bionic' in subprocess.check_output(['lsb_release', '-cs']) - - if args.kvm and args.docker: - raise Exception('Error: cannot have both kvm and docker') - - # Ensure no more than one environment variable for gitian-builder (USE_LXC, USE_VBOX, USE_DOCKER) is set as they - # can interfere (e.g., USE_LXC being set shadows USE_DOCKER; for details see gitian-builder/libexec/make-clean-vm). - os.environ['USE_LXC'] = '' - os.environ['USE_VBOX'] = '' - os.environ['USE_DOCKER'] = '' - if args.docker: - os.environ['USE_DOCKER'] = '1' - elif not args.kvm: - os.environ['USE_LXC'] = '1' - if 'GITIAN_HOST_IP' not in os.environ.keys(): - os.environ['GITIAN_HOST_IP'] = '10.0.3.1' - if 'LXC_GUEST_IP' not in os.environ.keys(): - os.environ['LXC_GUEST_IP'] = '10.0.3.5' - - if args.setup: - setup() - - if args.buildsign: - args.build = True - args.sign = True - - if not args.build and not args.sign and not args.verify: - sys.exit(0) - - args.linux = 'l' in args.os - args.windows = 'w' in args.os - args.macos = 'm' in args.os - - # Disable for MacOS if no SDK found - if args.macos and not os.path.isfile('gitian-builder/inputs/MacOSX10.11.sdk.tar.gz'): - print('Cannot build for MacOS, SDK does not exist. Will build for other OSes') - args.macos = False - - args.sign_prog = 'true' if args.detach_sign else 'gpg --detach-sign' - - script_name = os.path.basename(sys.argv[0]) - if not args.signer: - print(script_name+': Missing signer') - print('Try '+script_name+' --help for more information') - sys.exit(1) - if not args.version: - print(script_name+': Missing version') - print('Try '+script_name+' --help for more information') - sys.exit(1) - - # Add leading 'v' for tags - if args.commit and args.pull: - raise Exception('Cannot have both commit and pull') - args.commit = ('' if args.commit else 'v') + args.version - - os.chdir('defi') - if args.pull: - subprocess.check_call(['git', 'fetch', args.url, 'refs/pull/'+args.version+'/merge']) - os.chdir('../gitian-builder/inputs/defi') - subprocess.check_call(['git', 'fetch', args.url, 'refs/pull/'+args.version+'/merge']) - args.commit = subprocess.check_output(['git', 'show', '-s', '--format=%H', 'FETCH_HEAD'], universal_newlines=True, encoding='utf8').strip() - args.version = 'pull-' + args.version - print(args.commit) - subprocess.check_call(['git', 'fetch']) - subprocess.check_call(['git', 'checkout', args.commit]) - os.chdir(workdir) - - os.chdir('gitian-builder') - subprocess.check_call(['git', 'pull']) - os.chdir(workdir) - - if args.build: - build() - - if args.sign: - sign() - - if args.verify: - os.chdir('gitian.sigs') - subprocess.check_call(['git', 'pull']) - os.chdir(workdir) - sys.exit(verify()) - -if __name__ == '__main__': - main() diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml deleted file mode 100644 index 3a37bb1908..0000000000 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ /dev/null @@ -1,191 +0,0 @@ ---- -name: "defi-core-linux-0.19" -enable_cache: true -distro: "ubuntu" -suites: -- "bionic" -architectures: -- "amd64" -packages: -- "curl" -- "g++-aarch64-linux-gnu" -- "g++-8-aarch64-linux-gnu" -- "gcc-8-aarch64-linux-gnu" -- "binutils-aarch64-linux-gnu" -- "g++-arm-linux-gnueabihf" -- "g++-8-arm-linux-gnueabihf" -- "gcc-8-arm-linux-gnueabihf" -- "binutils-arm-linux-gnueabihf" -- "g++-riscv64-linux-gnu" -- "g++-8-riscv64-linux-gnu" -- "gcc-8-riscv64-linux-gnu" -- "binutils-riscv64-linux-gnu" -- "g++-8-multilib" -- "gcc-8-multilib" -- "binutils-gold" -- "git" -- "pkg-config" -- "autoconf" -- "libtool" -- "automake" -- "faketime" -- "bsdmainutils" -- "ca-certificates" -- "python3" -remotes: -- "url": "https://github.com/bitcoin/bitcoin.git" - "dir": "defi" -files: [] -script: | - set -e -o pipefail - - WRAP_DIR=$HOME/wrapped - HOSTS="i686-pc-linux-gnu x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu riscv64-linux-gnu" - CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --disable-gui-tests" - FAKETIME_HOST_PROGS="gcc g++" - FAKETIME_PROGS="date ar ranlib nm" - HOST_CFLAGS="-O2 -g" - HOST_CXXFLAGS="-O2 -g" - HOST_LDFLAGS=-static-libstdc++ - - export QT_RCC_TEST=1 - export QT_RCC_SOURCE_DATE_OVERRIDE=1 - export TZ="UTC" - export BUILD_DIR=`pwd` - mkdir -p ${WRAP_DIR} - if test -n "$GBUILD_CACHE_ENABLED"; then - export SOURCES_PATH=${GBUILD_COMMON_CACHE} - export BASE_CACHE=${GBUILD_PACKAGE_CACHE} - mkdir -p ${BASE_CACHE} ${SOURCES_PATH} - fi - - function create_global_faketime_wrappers { - for prog in ${FAKETIME_PROGS}; do - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} - echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} - echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${prog} - chmod +x ${WRAP_DIR}/${prog} - done - } - - function create_per-host_faketime_wrappers { - for i in $HOSTS; do - for prog in ${FAKETIME_HOST_PROGS}; do - if which ${i}-${prog}-8 - then - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} - echo "REAL=\`which -a ${i}-${prog}-8 | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} - echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog} - chmod +x ${WRAP_DIR}/${i}-${prog} - fi - done - done - } - - # Faketime for depends so intermediate results are comparable - export PATH_orig=${PATH} - create_global_faketime_wrappers "2000-01-01 12:00:00" - create_per-host_faketime_wrappers "2000-01-01 12:00:00" - export PATH=${WRAP_DIR}:${PATH} - - EXTRA_INCLUDES_BASE=$WRAP_DIR/extra_includes - mkdir -p $EXTRA_INCLUDES_BASE - - # x86 needs /usr/include/i386-linux-gnu/asm pointed to /usr/include/x86_64-linux-gnu/asm, - # but we can't write there. Instead, create a link here and force it to be included in the - # search paths by wrapping gcc/g++. - - mkdir -p $EXTRA_INCLUDES_BASE/i686-pc-linux-gnu - rm -f $WRAP_DIR/extra_includes/i686-pc-linux-gnu/asm - ln -s /usr/include/x86_64-linux-gnu/asm $EXTRA_INCLUDES_BASE/i686-pc-linux-gnu/asm - - for prog in gcc g++; do - rm -f ${WRAP_DIR}/${prog} - cat << EOF > ${WRAP_DIR}/${prog} - #!/usr/bin/env bash - REAL="`which -a ${prog}-8 | grep -v ${WRAP_DIR}/${prog} | head -1`" - for var in "\$@" - do - if [ "\$var" = "-m32" ]; then - export C_INCLUDE_PATH="$EXTRA_INCLUDES_BASE/i686-pc-linux-gnu" - export CPLUS_INCLUDE_PATH="$EXTRA_INCLUDES_BASE/i686-pc-linux-gnu" - break - fi - done - \$REAL \$@ - EOF - chmod +x ${WRAP_DIR}/${prog} - done - - cd defi - BASEPREFIX=`pwd`/depends - # Build dependencies for each host - for i in $HOSTS; do - EXTRA_INCLUDES="$EXTRA_INCLUDES_BASE/$i" - if [ -d "$EXTRA_INCLUDES" ]; then - export HOST_ID_SALT="$EXTRA_INCLUDES" - fi - make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" - unset HOST_ID_SALT - done - - # Faketime for binaries - export PATH=${PATH_orig} - create_global_faketime_wrappers "${REFERENCE_DATETIME}" - create_per-host_faketime_wrappers "${REFERENCE_DATETIME}" - export PATH=${WRAP_DIR}:${PATH} - - # Create the release tarball using (arbitrarily) the first host - ./autogen.sh - CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/ - make dist - SOURCEDIST=`echo defi-*.tar.gz` - DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'` - # Correct tar file order - mkdir -p temp - pushd temp - tar -xf ../$SOURCEDIST - find defi-* | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST - popd - - # Workaround for tarball not building with the bare tag version (prep) - make -C src obj/build.h - - ORIGPATH="$PATH" - # Extract the release tarball into a dir for each host and build - for i in ${HOSTS}; do - export PATH=${BASEPREFIX}/${i}/native/bin:${ORIGPATH} - mkdir -p distsrc-${i} - cd distsrc-${i} - INSTALLPATH=`pwd`/installed/${DISTNAME} - mkdir -p ${INSTALLPATH} - tar --strip-components=1 -xf ../$SOURCEDIST - - # Workaround for tarball not building with the bare tag version - echo '#!/bin/true' >share/genbuild.sh - mkdir src/obj - cp ../src/obj/build.h src/obj/ - - CONFIG_SITE=${BASEPREFIX}/${i}/share/config.site ./configure --prefix=/ --disable-ccache --disable-maintainer-mode --disable-dependency-tracking ${CONFIGFLAGS} CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" LDFLAGS="${HOST_LDFLAGS}" - make ${MAKEOPTS} - make ${MAKEOPTS} -C src check-security - make ${MAKEOPTS} -C src check-symbols - make install DESTDIR=${INSTALLPATH} - cd installed - find . -name "lib*.la" -delete - find . -name "lib*.a" -delete - rm -rf ${DISTNAME}/lib/pkgconfig - find ${DISTNAME}/bin -type f -executable -print0 | xargs -0 -n1 -I{} ../contrib/devtools/split-debug.sh {} {} {}.dbg - find ${DISTNAME}/lib -type f -print0 | xargs -0 -n1 -I{} ../contrib/devtools/split-debug.sh {} {} {}.dbg - cp ../doc/README.md ${DISTNAME}/ - find ${DISTNAME} -not -name "*.dbg" | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz - find ${DISTNAME} -name "*.dbg" | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}-debug.tar.gz - cd ../../ - rm -rf distsrc-${i} - done - mkdir -p $OUTDIR/src - mv $SOURCEDIST $OUTDIR/src diff --git a/contrib/gitian-descriptors/gitian-osx-signer.yml b/contrib/gitian-descriptors/gitian-osx-signer.yml deleted file mode 100644 index 9d54374684..0000000000 --- a/contrib/gitian-descriptors/gitian-osx-signer.yml +++ /dev/null @@ -1,40 +0,0 @@ ---- -name: "defi-dmg-signer" -distro: "ubuntu" -suites: -- "bionic" -architectures: -- "amd64" -packages: -- "faketime" -remotes: -- "url": "https://github.com/bitcoin-core/bitcoin-detached-sigs.git" - "dir": "signature" -files: -- "defi-osx-unsigned.tar.gz" -script: | - set -e -o pipefail - - WRAP_DIR=$HOME/wrapped - mkdir -p ${WRAP_DIR} - export PATH=`pwd`:$PATH - FAKETIME_PROGS="dmg genisoimage" - - # Create global faketime wrappers - for prog in ${FAKETIME_PROGS}; do - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} - echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} - echo "export FAKETIME=\"${REFERENCE_DATETIME}\"" >> ${WRAP_DIR}/${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${prog} - chmod +x ${WRAP_DIR}/${prog} - done - - UNSIGNED=defi-osx-unsigned.tar.gz - SIGNED=defi-osx-signed.dmg - - tar -xf ${UNSIGNED} - OSX_VOLNAME="$(cat osx_volname)" - ./detached-sig-apply.sh ${UNSIGNED} signature/osx - ${WRAP_DIR}/genisoimage -no-cache-inodes -D -l -probe -V "${OSX_VOLNAME}" -no-pad -r -dir-mode 0755 -apple -o uncompressed.dmg signed-app - ${WRAP_DIR}/dmg dmg uncompressed.dmg ${OUTDIR}/${SIGNED} diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml deleted file mode 100644 index 372d387474..0000000000 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ /dev/null @@ -1,168 +0,0 @@ ---- -name: "defi-core-osx-0.19" -enable_cache: true -distro: "ubuntu" -suites: -- "bionic" -architectures: -- "amd64" -packages: -- "ca-certificates" -- "curl" -- "g++" -- "git" -- "pkg-config" -- "autoconf" -- "librsvg2-bin" -- "libtiff-tools" -- "libtool" -- "automake" -- "faketime" -- "bsdmainutils" -- "cmake" -- "imagemagick" -- "libcap-dev" -- "libz-dev" -- "libbz2-dev" -- "python3" -- "python3-dev" -- "python3-setuptools" -- "fonts-tuffy" -remotes: -- "url": "https://github.com/bitcoin/bitcoin.git" - "dir": "defi" -files: -- "MacOSX10.11.sdk.tar.gz" -script: | - set -e -o pipefail - - WRAP_DIR=$HOME/wrapped - HOSTS="x86_64-apple-darwin14" - CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests GENISOIMAGE=$WRAP_DIR/genisoimage" - FAKETIME_HOST_PROGS="" - FAKETIME_PROGS="ar ranlib date dmg genisoimage" - - export QT_RCC_TEST=1 - export QT_RCC_SOURCE_DATE_OVERRIDE=1 - export TZ="UTC" - export BUILD_DIR=`pwd` - mkdir -p ${WRAP_DIR} - if test -n "$GBUILD_CACHE_ENABLED"; then - export SOURCES_PATH=${GBUILD_COMMON_CACHE} - export BASE_CACHE=${GBUILD_PACKAGE_CACHE} - mkdir -p ${BASE_CACHE} ${SOURCES_PATH} - fi - - export ZERO_AR_DATE=1 - - function create_global_faketime_wrappers { - for prog in ${FAKETIME_PROGS}; do - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} - echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} - echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${prog} - chmod +x ${WRAP_DIR}/${prog} - done - } - - function create_per-host_faketime_wrappers { - for i in $HOSTS; do - for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} - echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} - echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog} - chmod +x ${WRAP_DIR}/${i}-${prog} - done - done - } - - # Faketime for depends so intermediate results are comparable - export PATH_orig=${PATH} - create_global_faketime_wrappers "2000-01-01 12:00:00" - create_per-host_faketime_wrappers "2000-01-01 12:00:00" - export PATH=${WRAP_DIR}:${PATH} - - cd defi - BASEPREFIX=`pwd`/depends - - mkdir -p ${BASEPREFIX}/SDKs - tar -C ${BASEPREFIX}/SDKs -xf ${BUILD_DIR}/MacOSX10.11.sdk.tar.gz - - # Build dependencies for each host - for i in $HOSTS; do - make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" - done - - # Faketime for binaries - export PATH=${PATH_orig} - create_global_faketime_wrappers "${REFERENCE_DATETIME}" - create_per-host_faketime_wrappers "${REFERENCE_DATETIME}" - export PATH=${WRAP_DIR}:${PATH} - - # Create the release tarball using (arbitrarily) the first host - ./autogen.sh - CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/ - make dist - SOURCEDIST=`echo defi-*.tar.gz` - DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'` - - # Correct tar file order - mkdir -p temp - pushd temp - tar -xf ../$SOURCEDIST - find defi-* | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST - popd - - # Workaround for tarball not building with the bare tag version (prep) - make -C src obj/build.h - - ORIGPATH="$PATH" - # Extract the release tarball into a dir for each host and build - for i in ${HOSTS}; do - export PATH=${BASEPREFIX}/${i}/native/bin:${ORIGPATH} - mkdir -p distsrc-${i} - cd distsrc-${i} - INSTALLPATH=`pwd`/installed/${DISTNAME} - mkdir -p ${INSTALLPATH} - tar --strip-components=1 -xf ../$SOURCEDIST - - # Workaround for tarball not building with the bare tag version - echo '#!/bin/true' >share/genbuild.sh - mkdir src/obj - cp ../src/obj/build.h src/obj/ - - CONFIG_SITE=${BASEPREFIX}/${i}/share/config.site ./configure --prefix=/ --disable-ccache --disable-maintainer-mode --disable-dependency-tracking ${CONFIGFLAGS} - make ${MAKEOPTS} - make install-strip DESTDIR=${INSTALLPATH} - - make osx_volname - make deploydir - OSX_VOLNAME="$(cat osx_volname)" - mkdir -p unsigned-app-${i} - cp osx_volname unsigned-app-${i}/ - cp contrib/macdeploy/detached-sig-apply.sh unsigned-app-${i} - cp contrib/macdeploy/detached-sig-create.sh unsigned-app-${i} - cp ${BASEPREFIX}/${i}/native/bin/dmg ${BASEPREFIX}/${i}/native/bin/genisoimage unsigned-app-${i} - cp ${BASEPREFIX}/${i}/native/bin/${i}-codesign_allocate unsigned-app-${i}/codesign_allocate - cp ${BASEPREFIX}/${i}/native/bin/${i}-pagestuff unsigned-app-${i}/pagestuff - mv dist unsigned-app-${i} - pushd unsigned-app-${i} - find . | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-osx-unsigned.tar.gz - popd - - make deploy - ${WRAP_DIR}/dmg dmg "${OSX_VOLNAME}.dmg" ${OUTDIR}/${DISTNAME}-osx-unsigned.dmg - - cd installed - find . -name "lib*.la" -delete - find . -name "lib*.a" -delete - rm -rf ${DISTNAME}/lib/pkgconfig - find ${DISTNAME} | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz - cd ../../ - done - mkdir -p $OUTDIR/src - mv $SOURCEDIST $OUTDIR/src - mv ${OUTDIR}/${DISTNAME}-x86_64-*.tar.gz ${OUTDIR}/${DISTNAME}-osx64.tar.gz diff --git a/contrib/gitian-descriptors/gitian-win-signer.yml b/contrib/gitian-descriptors/gitian-win-signer.yml deleted file mode 100644 index 5e6fdd08f5..0000000000 --- a/contrib/gitian-descriptors/gitian-win-signer.yml +++ /dev/null @@ -1,42 +0,0 @@ ---- -name: "defi-win-signer" -distro: "ubuntu" -suites: -- "bionic" -architectures: -- "amd64" -packages: -# Once osslsigncode supports openssl 1.1, we can change this back to libssl-dev -- "libssl1.0-dev" -- "autoconf" -remotes: -- "url": "https://github.com/bitcoin-core/bitcoin-detached-sigs.git" - "dir": "signature" -files: -- "osslsigncode-1.7.1.tar.gz" -- "osslsigncode-Backports-to-1.7.1.patch" -- "defi-win-unsigned.tar.gz" -script: | - set -e -o pipefail - - BUILD_DIR=`pwd` - SIGDIR=${BUILD_DIR}/signature/win - UNSIGNED_DIR=${BUILD_DIR}/unsigned - - echo "f9a8cdb38b9c309326764ebc937cba1523a3a751a7ab05df3ecc99d18ae466c9 osslsigncode-1.7.1.tar.gz" | sha256sum -c - echo "a8c4e9cafba922f89de0df1f2152e7be286aba73f78505169bc351a7938dd911 osslsigncode-Backports-to-1.7.1.patch" | sha256sum -c - - mkdir -p ${UNSIGNED_DIR} - tar -C ${UNSIGNED_DIR} -xf defi-win-unsigned.tar.gz - - tar xf osslsigncode-1.7.1.tar.gz - cd osslsigncode-1.7.1 - patch -p1 < ${BUILD_DIR}/osslsigncode-Backports-to-1.7.1.patch - - ./configure --without-gsf --without-curl --disable-dependency-tracking - make - find ${UNSIGNED_DIR} -name "*-unsigned.exe" | while read i; do - INFILE="`basename "${i}"`" - OUTFILE="`echo "${INFILE}" | sed s/-unsigned//`" - ./osslsigncode attach-signature -in "${i}" -out "${OUTDIR}/${OUTFILE}" -sigin "${SIGDIR}/${INFILE}.pem" - done diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml deleted file mode 100644 index 41b86d9aa8..0000000000 --- a/contrib/gitian-descriptors/gitian-win.yml +++ /dev/null @@ -1,180 +0,0 @@ ---- -name: "defi-core-win-0.19" -enable_cache: true -distro: "ubuntu" -suites: -- "bionic" -architectures: -- "amd64" -packages: -- "curl" -- "g++" -- "git" -- "pkg-config" -- "autoconf" -- "libtool" -- "automake" -- "faketime" -- "bsdmainutils" -- "mingw-w64" -- "g++-mingw-w64" -- "nsis" -- "zip" -- "ca-certificates" -- "python3" -- "rename" -remotes: -- "url": "https://github.com/bitcoin/bitcoin.git" - "dir": "defi" -files: [] -script: | - set -e -o pipefail - - WRAP_DIR=$HOME/wrapped - HOSTS="x86_64-w64-mingw32" - CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests" - FAKETIME_HOST_PROGS="ar ranlib nm windres strip objcopy" - FAKETIME_PROGS="date makensis zip" - HOST_CFLAGS="-O2 -g" - HOST_CXXFLAGS="-O2 -g" - - export QT_RCC_TEST=1 - export QT_RCC_SOURCE_DATE_OVERRIDE=1 - export TZ="UTC" - export BUILD_DIR=`pwd` - mkdir -p ${WRAP_DIR} - if test -n "$GBUILD_CACHE_ENABLED"; then - export SOURCES_PATH=${GBUILD_COMMON_CACHE} - export BASE_CACHE=${GBUILD_PACKAGE_CACHE} - mkdir -p ${BASE_CACHE} ${SOURCES_PATH} - fi - - function create_global_faketime_wrappers { - for prog in ${FAKETIME_PROGS}; do - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} - echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} - echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${prog} - chmod +x ${WRAP_DIR}/${prog} - done - } - - function create_per-host_faketime_wrappers { - for i in $HOSTS; do - for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} - echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} - echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog} - chmod +x ${WRAP_DIR}/${i}-${prog} - done - done - } - - function create_per-host_linker_wrapper { - # This is only needed for trusty, as the mingw linker leaks a few bytes of - # heap, causing non-determinism. See discussion in https://github.com/bitcoin/bitcoin/pull/6900 - for i in $HOSTS; do - mkdir -p ${WRAP_DIR}/${i} - for prog in collect2; do - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}/${prog} - REAL=$(${i}-gcc -print-prog-name=${prog}) - echo "export MALLOC_PERTURB_=255" >> ${WRAP_DIR}/${i}/${prog} - echo "${REAL} \$@" >> $WRAP_DIR/${i}/${prog} - chmod +x ${WRAP_DIR}/${i}/${prog} - done - for prog in gcc g++; do - echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} - echo "REAL=\`which -a ${i}-${prog}-posix | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} - echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} - echo "export COMPILER_PATH=${WRAP_DIR}/${i}" >> ${WRAP_DIR}/${i}-${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog} - chmod +x ${WRAP_DIR}/${i}-${prog} - done - done - } - - # Faketime for depends so intermediate results are comparable - export PATH_orig=${PATH} - create_global_faketime_wrappers "2000-01-01 12:00:00" - create_per-host_faketime_wrappers "2000-01-01 12:00:00" - create_per-host_linker_wrapper "2000-01-01 12:00:00" - export PATH=${WRAP_DIR}:${PATH} - - cd defi - BASEPREFIX=`pwd`/depends - # Build dependencies for each host - for i in $HOSTS; do - make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" - done - - # Faketime for binaries - export PATH=${PATH_orig} - create_global_faketime_wrappers "${REFERENCE_DATETIME}" - create_per-host_faketime_wrappers "${REFERENCE_DATETIME}" - create_per-host_linker_wrapper "${REFERENCE_DATETIME}" - export PATH=${WRAP_DIR}:${PATH} - - # Create the release tarball using (arbitrarily) the first host - ./autogen.sh - CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/ - make dist - SOURCEDIST=`echo defi-*.tar.gz` - DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'` - - # Correct tar file order - mkdir -p temp - pushd temp - tar -xf ../$SOURCEDIST - find defi-* | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST - mkdir -p $OUTDIR/src - cp ../$SOURCEDIST $OUTDIR/src - popd - - # Workaround for tarball not building with the bare tag version (prep) - make -C src obj/build.h - - ORIGPATH="$PATH" - # Extract the release tarball into a dir for each host and build - for i in ${HOSTS}; do - export PATH=${BASEPREFIX}/${i}/native/bin:${ORIGPATH} - mkdir -p distsrc-${i} - cd distsrc-${i} - INSTALLPATH=`pwd`/installed/${DISTNAME} - mkdir -p ${INSTALLPATH} - tar --strip-components=1 -xf ../$SOURCEDIST - - # Workaround for tarball not building with the bare tag version - echo '#!/bin/true' >share/genbuild.sh - mkdir src/obj - cp ../src/obj/build.h src/obj/ - - CONFIG_SITE=${BASEPREFIX}/${i}/share/config.site ./configure --prefix=/ --disable-ccache --disable-maintainer-mode --disable-dependency-tracking ${CONFIGFLAGS} CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" - make ${MAKEOPTS} - make ${MAKEOPTS} -C src check-security - make deploy - make install DESTDIR=${INSTALLPATH} - rename 's/-setup\.exe$/-setup-unsigned.exe/' *-setup.exe - cp -f defi-*setup*.exe $OUTDIR/ - cd installed - mv ${DISTNAME}/bin/*.dll ${DISTNAME}/lib/ - find . -name "lib*.la" -delete - find . -name "lib*.a" -delete - rm -rf ${DISTNAME}/lib/pkgconfig - find ${DISTNAME}/bin -type f -executable -exec ${i}-objcopy --only-keep-debug {} {}.dbg \; -exec ${i}-strip -s {} \; -exec ${i}-objcopy --add-gnu-debuglink={}.dbg {} \; - find ${DISTNAME}/lib -type f -exec ${i}-objcopy --only-keep-debug {} {}.dbg \; -exec ${i}-strip -s {} \; -exec ${i}-objcopy --add-gnu-debuglink={}.dbg {} \; - find ${DISTNAME} -not -name "*.dbg" -type f | sort | zip -X@ ${OUTDIR}/${DISTNAME}-${i}.zip - find ${DISTNAME} -name "*.dbg" -type f | sort | zip -X@ ${OUTDIR}/${DISTNAME}-${i}-debug.zip - cd ../../ - rm -rf distsrc-${i} - done - cp -rf contrib/windeploy $BUILD_DIR - cd $BUILD_DIR/windeploy - mkdir unsigned - cp $OUTDIR/defi-*setup-unsigned.exe unsigned/ - find . | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-win-unsigned.tar.gz - mv ${OUTDIR}/${DISTNAME}-x86_64-*-debug.zip ${OUTDIR}/${DISTNAME}-win64-debug.zip - mv ${OUTDIR}/${DISTNAME}-x86_64-*.zip ${OUTDIR}/${DISTNAME}-win64.zip diff --git a/contrib/gitian-keys/README.md b/contrib/gitian-keys/README.md deleted file mode 100644 index 08212870c1..0000000000 --- a/contrib/gitian-keys/README.md +++ /dev/null @@ -1,29 +0,0 @@ -## PGP keys of Gitian builders and Developers - -> NOTE: This section is a work in progress for DeFi Blockchain, and may not be applicable at it's current state. - -The file `keys.txt` contains fingerprints of the public keys of Gitian builders -and active developers. - -The associated keys are mainly used to sign git commits or the build results -of Gitian builds. - -The most recent version of each pgp key can be found on most pgp key servers. - -Fetch the latest version from the key server to see if any key was revoked in -the meantime. -To fetch the latest version of all pgp keys in your gpg homedir, - -```sh -gpg --refresh-keys -``` - -To fetch keys of Gitian builders and active developers, feed the list of -fingerprints of the primary keys into gpg: - -```sh -while read fingerprint keyholder_name; do gpg --keyserver hkp://subset.pool.sks-keyservers.net --recv-keys ${fingerprint}; done < ./keys.txt -``` - -Add your key to the list if you provided Gitian signatures for two major or -minor releases of Bitcoin Core. diff --git a/contrib/gitian-keys/keys.txt b/contrib/gitian-keys/keys.txt deleted file mode 100644 index 9222a40b17..0000000000 --- a/contrib/gitian-keys/keys.txt +++ /dev/null @@ -1,33 +0,0 @@ -9D3CC86A72F8494342EA5FD10A41BDC3F4FAFF1C Aaron Clauson (sipsorcery) -617C90010B3BD370B0AC7D424BB42E31C79111B8 Akira Takizawa -E944AE667CF960B1004BC32FCA662BE18B877A60 Andreas Schildbach -152812300785C96444D3334D17565732E08E5E41 Andrew Chow -912FD3228387123DC97E0E57D5566241A0295FA9 BtcDrak -C519EBCF3B926298946783EFF6430754120EC2F4 Christian Decker (cdecker) -F20F56EF6A067F70E8A5C99FFF95FAA971697405 centaur -C060A6635913D98A3587D7DB1C2491FFEB0EF770 Cory Fields -BF6273FAEF7CC0BA1F562E50989F6B3048A116B5 Dev Random -6D3170C1DC2C6FD0AEEBCA6743811D1A26623924 Douglas Roark -9A1689B60D1B3CCE9262307A2F40A9BF167FBA47 Erik Mossberg (erkmos) -D35176BE9264832E4ACA8986BF0792FBE95DC863 fivepiece -01CDF4627A3B88AAE4A571C87588242FBE38D3A8 Gavin Andresen -D1DBF2C4B96F2DEBF4C16654410108112E7EA81F Hennadii Stepanov (hebasto) -D3CC177286005BB8FF673294C5242A1AB3936517 jl2012 -32EE5C4C3FA15CCADB46ABE529D4BCB6416F53EC Jonas Schnelli -4B4E840451149DD7FB0D633477DFAB5C3108B9A8 Jorge Timon -C42AFF7C61B3E44A1454CD3557AF762DB3353322 Karl-Johan Alm (kallewoof) -E463A93F5F3117EEDE6C7316BD02942421F4889F Luke Dashjr -B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B Marco Falke -07DF3E57A548CCFB7530709189BBB8663E2E65CE Matt Corallo (BlueMatt) -CA03882CB1FC067B5D3ACFE4D300116E1C875A3D MeshCollider -E777299FC265DD04793070EB944D35F9AC3DB76A Michael Ford -9692B91BBF0E8D34DFD33B1882C5C009628ECF0C Michagogo -77E72E69DA7EE0A148C06B21B34821D4944DE5F7 Nils Schneider -D62A803E27E7F43486035ADBBCD04D8E9CCCAC2A Paul Rabahy -37EC7D7B0A217CDB4B4E007E7FAB114267E4FA04 Peter Todd -D762373D24904A3E42F33B08B9A408E71DAAC974 Pieter Wuille (Location: Leuven, Belgium) -133EAC179436F14A5CF1B794860FEB804E669320 Pieter Wuille -ED9BDF7AD6A55E232E84524257FF9BDBCC301009 Sjors Provoost -AEC1884398647C47413C1C3FB1179EB7347DC10D Warren Togami -79D00BAC68B56D422F945A8F8E3A8F3247DBCBBF Willy Ko -71A3B16735405025D447E8F274810B012346C9A6 Wladimir J. van der Laan diff --git a/contrib/guix/README.md b/contrib/guix/README.md deleted file mode 100644 index 4dfa1729a5..0000000000 --- a/contrib/guix/README.md +++ /dev/null @@ -1,229 +0,0 @@ -# Bootstrappable Bitcoin Core Builds - -This directory contains the files necessary to perform bootstrappable Bitcoin -Core builds. - -[Bootstrappability][b17e] furthers our binary security guarantees by allowing us -to _audit and reproduce_ our toolchain instead of blindly _trusting_ binary -downloads. - -We achieve bootstrappability by using Guix as a functional package manager. - -## Requirements - -Conservatively, a x86_64 machine with: - -- 2 or more logical cores -- 4GB of free disk space on the partition that /gnu/store will reside in -- 24GB of free disk space on the partition that the Bitcoin Core git repository - resides in - -> Note: these requirements are slightly less onerous than those of Gitian builds - -## Setup - -### Installing Guix - -If you're just testing this out, you can use the -[Dockerfile][fanquake/guix-docker] for convenience. It automatically speeds up -your builds by [using substitutes](#speeding-up-builds-with-substitute-servers). -If you don't want this behaviour, refer to the [next -section](#choosing-your-security-model). - -Otherwise, follow the [Guix installation guide][guix/bin-install]. - -> Note: For those who like to keep their filesystems clean, Guix is designed to -> be very standalone and _will not_ conflict with your system's package -> manager/existing setup. It _only_ touches `/var/guix`, `/gnu`, and -> `~/.config/guix`. - -### Choosing your security model - -Guix allows us to achieve better binary security by using our CPU time to build -everything from scratch. However, it doesn't sacrifice user choice in pursuit of -this: users can decide whether or not to bootstrap and to use substitutes. - -After installation, you may want to consider [adding substitute -servers](#speeding-up-builds-with-substitute-servers) to speed up your build if -that fits your security model (say, if you're just testing that this works). -This is skippable if you're using the [Dockerfile][fanquake/guix-docker]. - -If you prefer not to use any substitutes, make sure to set -`ADDITIONAL_GUIX_ENVIRONMENT_FLAGS` like the following snippet. The first build -will take a while, but the resulting packages will be cached for future builds. - -```sh -export ADDITIONAL_GUIX_ENVIRONMENT_FLAGS='--no-substitutes' -``` - -Likewise, to perform a bootstrapped build (takes even longer): - -```sh -export ADDITIONAL_GUIX_ENVIRONMENT_FLAGS='--bootstrap --no-substitutes' -``` - -### Using the right Guix - -Once Guix is installed, deploy our patched version into your current Guix -profile. The changes there are slowly being upstreamed. - -```sh -guix pull --url=https://github.com/dongcarl/guix.git \ - --commit=82c77e52b8b46e0a3aad2cb12307c2e30547deec \ - --max-jobs=4 # change accordingly -``` - -Make sure that you are using your current profile. (You are prompted to do this -at the end of the `guix pull`) - -```bash -export PATH="${HOME}/.config/guix/current/bin${PATH:+:}$PATH" -``` - -> Note: There is ongoing work to eliminate this entire section using Guix -> [inferiors][guix/inferiors] and [channels][guix/channels]. - -## Usage - -### As a Development Environment - -For a Bitcoin Core depends development environment, simply invoke - -```sh -guix environment --manifest=contrib/guix/manifest.scm -``` - -And you'll land back in your shell with all the build dependencies required for -a `depends` build injected into your environment. - -### As a Tool for Deterministic Builds - -From the top of a clean Bitcoin Core repository: - -```sh -./contrib/guix/guix-build.sh -``` - -After the build finishes successfully (check the status code please), compare -hashes: - -```sh -find output/ -type f -print0 | sort -z | xargs -r0 sha256sum -``` - -#### Recognized environment variables - -* _**HOSTS**_ - - Override the space-separated list of platform triples for which to perform a - bootstrappable build. _(defaults to "i686-linux-gnu x86\_64-linux-gnu - arm-linux-gnueabihf aarch64-linux-gnu riscv64-linux-gnu")_ - - > Windows and OS X platform triplet support are WIP. - -* _**SOURCES_PATH**_ - - Set the depends tree download cache for sources. This is passed through to the - depends tree. Setting this to the same directory across multiple builds of the - depends tree can eliminate unnecessary redownloading of package sources. - -* _**MAX_JOBS**_ - - Override the maximum number of jobs to run simultaneously, you might want to - do so on a memory-limited machine. This may be passed to `make` as in `make - --jobs="$MAX_JOBS"` or `xargs` as in `xargs -P"$MAX_JOBS"`. _(defaults to the - value of `nproc` outside the container)_ - -* _**SOURCE_DATE_EPOCH**_ - - Override the reference UNIX timestamp used for bit-for-bit reproducibility, - the variable name conforms to [standard][r12e/source-date-epoch]. _(defaults - to the output of `$(git log --format=%at -1)`)_ - -* _**V**_ - - If non-empty, will pass `V=1` to all `make` invocations, making `make` output - verbose. - -* _**ADDITIONAL_GUIX_ENVIRONMENT_FLAGS**_ - - Additional flags to be passed to `guix environment`. For a fully-bootstrapped - build, set this to `--bootstrap --no-substitutes` (refer to the [security - model section](#choosing-your-security-model) for more details). Note that a - fully-bootstrapped build will take quite a long time on the first run. - -## Tips and Tricks - -### Speeding up builds with substitute servers - -_This whole section is automatically done in the convenience -[Dockerfiles][fanquake/guix-docker]_ - -For those who are used to life in the fast _(and trustful)_ lane, you can use -[substitute servers][guix/substitutes] to enable binary downloads of packages. - -> For those who only want to use substitutes from the official Guix build farm -> and have authorized the build farm's signing key during Guix's installation, -> you don't need to do anything. - -#### Authorize the signing keys - -For the official Guix build farm at https://ci.guix.gnu.org, run as root: - -``` -guix archive --authorize < ~root/.config/guix/current/share/guix/ci.guix.gnu.org.pub -``` - -For dongcarl's substitute server at https://guix.carldong.io, run as root: - -```sh -wget -qO- 'https://guix.carldong.io/signing-key.pub' | guix archive --authorize -``` - -#### Use the substitute servers - -The official Guix build farm at https://ci.guix.gnu.org is automatically used -unless the `--no-substitutes` flag is supplied. - -This can be overridden for all `guix` invocations by passing the -`--substitute-urls` option to your invocation of `guix-daemon`. This can also be -overridden on a call-by-call basis by passing the same `--substitute-urls` -option to client tools such at `guix environment`. - -To use dongcarl's substitute server for Bitcoin Core builds after having -[authorized his signing key](#authorize-the-signing-keys): - -``` -export ADDITIONAL_GUIX_ENVIRONMENT_FLAGS='--substitute-urls="https://guix.carldong.io https://ci.guix.gnu.org"' -``` - -## FAQ - -### How can I trust the binary installation? - -As mentioned at the bottom of [this manual page][guix/bin-install]: - -> The binary installation tarballs can be (re)produced and verified simply by -> running the following command in the Guix source tree: -> -> make guix-binary.x86_64-linux.tar.xz - -### When will Guix be packaged in debian? - -Vagrant Cascadian has been making good progress on this -[here][debian/guix-package]. We have all the pieces needed to put up an APT -repository and will likely put one up soon. - -[b17e]: http://bootstrappable.org/ -[r12e/source-date-epoch]: https://reproducible-builds.org/docs/source-date-epoch/ - -[guix/install.sh]: https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh -[guix/bin-install]: https://www.gnu.org/software/guix/manual/en/html_node/Binary-Installation.html -[guix/env-setup]: https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html -[guix/substitutes]: https://www.gnu.org/software/guix/manual/en/html_node/Substitutes.html -[guix/substitute-server-auth]: https://www.gnu.org/software/guix/manual/en/html_node/Substitute-Server-Authorization.html -[guix/inferiors]: https://www.gnu.org/software/guix/manual/en/html_node/Inferiors.html -[guix/channels]: https://www.gnu.org/software/guix/manual/en/html_node/Channels.html - -[debian/guix-package]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=850644 -[fanquake/guix-docker]: https://github.com/fanquake/core-review/tree/master/guix diff --git a/contrib/guix/guix-build.sh b/contrib/guix/guix-build.sh deleted file mode 100755 index 26ddd0c982..0000000000 --- a/contrib/guix/guix-build.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash -export LC_ALL=C -set -e -o pipefail - -# Determine the maximum number of jobs to run simultaneously (overridable by -# environment) -MAX_JOBS="${MAX_JOBS:-$(nproc)}" - -# Download the depends sources now as we won't have internet access in the build -# container -make -C "${PWD}/depends" -j"$MAX_JOBS" download ${V:+V=1} ${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"} - -# Determine the reference time used for determinism (overridable by environment) -SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(git log --format=%at -1)}" - -# Deterministically build Bitcoin Core for HOSTs (overriable by environment) -for host in ${HOSTS=i686-linux-gnu x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu riscv64-linux-gnu}; do - - # Display proper warning when the user interrupts the build - trap 'echo "** INT received while building ${host}, you may want to clean up the relevant output and distsrc-* directories before rebuilding"' INT - - # Run the build script 'contrib/guix/libexec/build.sh' in the build - # container specified by 'contrib/guix/manifest.scm' - # shellcheck disable=SC2086 - guix environment --manifest="${PWD}/contrib/guix/manifest.scm" \ - --container \ - --pure \ - --no-cwd \ - --share="$PWD"=/defi \ - ${SOURCES_PATH:+--share="$SOURCES_PATH"} \ - ${ADDITIONAL_GUIX_ENVIRONMENT_FLAGS} \ - -- env HOST="$host" \ - MAX_JOBS="$MAX_JOBS" \ - SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:?unable to determine value}" \ - ${V:+V=1} \ - ${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"} \ - bash -c "cd /defi && bash contrib/guix/libexec/build.sh" - -done diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh deleted file mode 100644 index 55ed731518..0000000000 --- a/contrib/guix/libexec/build.sh +++ /dev/null @@ -1,206 +0,0 @@ -#!/usr/bin/env bash -export LC_ALL=C -set -e -o pipefail - -# Check that environment variables assumed to be set by the environment are set -echo "Building for platform triple ${HOST:?not set} with reference timestamp ${SOURCE_DATE_EPOCH:?not set}..." -echo "At most ${MAX_JOBS:?not set} jobs will run at once..." - -##################### -# Environment Setup # -##################### - -# The depends folder also serves as a base-prefix for depends packages for -# $HOSTs after successfully building. -BASEPREFIX="${PWD}/depends" - -# Setup an output directory for our build -OUTDIR="${OUTDIR:-${PWD}/output}" -[ -e "$OUTDIR" ] || mkdir -p "$OUTDIR" - -# Setup the directory where our DeFi Blockchain build for HOST will occur -DISTSRC="${DISTSRC:-${PWD}/distsrc-${HOST}}" -if [ -e "$DISTSRC" ]; then - echo "DISTSRC directory '${DISTSRC}' exists, probably because of previous builds... Aborting..." - exit 1 -else - mkdir -p "$DISTSRC" -fi - -# Given a package name and an output name, return the path of that output in our -# current guix environment -store_path() { - grep --extended-regexp "/[^-]{32}-${1}-cross-${HOST}-[^-]+${2:+-${2}}" "${GUIX_ENVIRONMENT}/manifest" \ - | head --lines=1 \ - | sed --expression='s|^[[:space:]]*"||' \ - --expression='s|"[[:space:]]*$||' -} - -# Determine output paths to use in CROSS_* environment variables -CROSS_GLIBC="$(store_path glibc)" -CROSS_GLIBC_STATIC="$(store_path glibc static)" -CROSS_KERNEL="$(store_path linux-libre-headers)" -CROSS_GCC="$(store_path gcc)" - -# Set environment variables to point Guix's cross-toolchain to the right -# includes/libs for $HOST -export CROSS_C_INCLUDE_PATH="${CROSS_GCC}/include:${CROSS_GLIBC}/include:${CROSS_KERNEL}/include" -export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GLIBC}/include:${CROSS_KERNEL}/include" -export CROSS_LIBRARY_PATH="${CROSS_GLIBC}/lib:${CROSS_GLIBC_STATIC}/lib:${CROSS_GCC}/lib:${CROSS_GCC}/${HOST}/lib:${CROSS_KERNEL}/lib" - -# Disable Guix ld auto-rpath behavior -export GUIX_LD_WRAPPER_DISABLE_RPATH=yes - -# Make /usr/bin if it doesn't exist -[ -e /usr/bin ] || mkdir -p /usr/bin - -# Symlink file and env to a conventional path -[ -e /usr/bin/file ] || ln -s --no-dereference "$(command -v file)" /usr/bin/file -[ -e /usr/bin/env ] || ln -s --no-dereference "$(command -v env)" /usr/bin/env - -# Determine the correct value for -Wl,--dynamic-linker for the current $HOST -glibc_dynamic_linker=$( - case "$HOST" in - i686-linux-gnu) echo /lib/ld-linux.so.2 ;; - x86_64-linux-gnu) echo /lib64/ld-linux-x86-64.so.2 ;; - arm-linux-gnueabihf) echo /lib/ld-linux-armhf.so.3 ;; - aarch64-linux-gnu) echo /lib/ld-linux-aarch64.so.1 ;; - riscv64-linux-gnu) echo /lib/ld-linux-riscv64-lp64d.so.1 ;; - *) exit 1 ;; - esac -) - -# Environment variables for determinism -export QT_RCC_TEST=1 -export QT_RCC_SOURCE_DATE_OVERRIDE=1 -export TAR_OPTIONS="--owner=0 --group=0 --numeric-owner --mtime='@${SOURCE_DATE_EPOCH}' --sort=name" -export TZ="UTC" - -#################### -# Depends Building # -#################### - -# Build the depends tree, overriding variables that assume multilib gcc -make -C depends --jobs="$MAX_JOBS" HOST="$HOST" \ - ${V:+V=1} \ - ${SOURCES_PATH+SOURCES_PATH="$SOURCES_PATH"} \ - i686_linux_CC=i686-linux-gnu-gcc \ - i686_linux_CXX=i686-linux-gnu-g++ \ - i686_linux_AR=i686-linux-gnu-ar \ - i686_linux_RANLIB=i686-linux-gnu-ranlib \ - i686_linux_NM=i686-linux-gnu-nm \ - i686_linux_STRIP=i686-linux-gnu-strip \ - x86_64_linux_CC=x86_64-linux-gnu-gcc \ - x86_64_linux_CXX=x86_64-linux-gnu-g++ \ - x86_64_linux_AR=x86_64-linux-gnu-ar \ - x86_64_linux_RANLIB=x86_64-linux-gnu-ranlib \ - x86_64_linux_NM=x86_64-linux-gnu-nm \ - x86_64_linux_STRIP=x86_64-linux-gnu-strip \ - qt_config_opts_i686_linux='-platform linux-g++ -xplatform defi-linux-g++' - - -########################### -# Source Tarball Building # -########################### - -# Create the source tarball and move it to "${OUTDIR}/src" if not already there -if [ -z "$(find "${OUTDIR}/src" -name 'defi-*.tar.gz')" ]; then - ./autogen.sh - env CONFIG_SITE="${BASEPREFIX}/${HOST}/share/config.site" ./configure --prefix=/ - make dist GZIP_ENV='-9n' ${V:+V=1} - mkdir -p "${OUTDIR}/src" - mv "$(find "${PWD}" -name 'defi-*.tar.gz')" "${OUTDIR}/src/" -fi - -# Determine the full path to our source tarball -SOURCEDIST="$(find "${OUTDIR}/src" -name 'defi-*.tar.gz')" -# Determine our distribution name (e.g. defi-0.18.0) -DISTNAME="$(basename "$SOURCEDIST" '.tar.gz')" - -########################### -# Binary Tarball Building # -########################### - -# Create a spec file to normalize ssp linking behaviour -spec_file="$(mktemp)" -cat << EOF > "$spec_file" -*link_ssp: -%{fstack-protector|fstack-protector-all|fstack-protector-strong|fstack-protector-explicit:} -EOF - -# Similar flags to Gitian -CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --disable-gui-tests" -HOST_CFLAGS="-O2 -g -specs=${spec_file} -ffile-prefix-map=${PWD}=." -HOST_CXXFLAGS="-O2 -g -specs=${spec_file} -ffile-prefix-map=${PWD}=." -HOST_LDFLAGS="-Wl,--as-needed -Wl,--dynamic-linker=$glibc_dynamic_linker -static-libstdc++" - -# Make $HOST-specific native binaries from depends available in $PATH -export PATH="${BASEPREFIX}/${HOST}/native/bin:${PATH}" -( - cd "$DISTSRC" - - # Extract the source tarball - tar --strip-components=1 -xf "${SOURCEDIST}" - - # Configure this DISTSRC for $HOST - # shellcheck disable=SC2086 - env CONFIG_SITE="${BASEPREFIX}/${HOST}/share/config.site" \ - ./configure --prefix=/ \ - --disable-ccache \ - --disable-maintainer-mode \ - --disable-dependency-tracking \ - ${CONFIGFLAGS} \ - CFLAGS="${HOST_CFLAGS}" \ - CXXFLAGS="${HOST_CXXFLAGS}" \ - LDFLAGS="${HOST_LDFLAGS}" - - sed -i.old 's/-lstdc++ //g' config.status libtool src/univalue/config.status src/univalue/libtool - - # Build DeFi Blockchain - make --jobs="$MAX_JOBS" ${V:+V=1} - - # Perform basic ELF security checks on a series of executables. - make -C src --jobs=1 check-security ${V:+V=1} - # Check that executables only contain allowed gcc, glibc and libstdc++ - # version symbols for Linux distro back-compatibility. - make -C src --jobs=1 check-symbols ${V:+V=1} - - # Setup the directory where our DeFi Blockchain build for HOST will be - # installed. This directory will also later serve as the input for our - # binary tarballs. - INSTALLPATH="${PWD}/installed/${DISTNAME}" - mkdir -p "${INSTALLPATH}" - # Install built DeFi Blockchain to $INSTALLPATH - make install DESTDIR="${INSTALLPATH}" ${V:+V=1} - ( - cd installed - - # Prune libtool and object archives - find . -name "lib*.la" -delete - find . -name "lib*.a" -delete - - # Prune pkg-config files - rm -r "${DISTNAME}/lib/pkgconfig" - - # Split binaries and libraries from their debug symbols - { - find "${DISTNAME}/bin" -type f -executable -print0 - find "${DISTNAME}/lib" -type f -print0 - } | xargs -0 -n1 -P"$MAX_JOBS" -I{} "${DISTSRC}/contrib/devtools/split-debug.sh" {} {} {}.dbg - - cp "${DISTSRC}/doc/README.md" "${DISTNAME}/" - - # Finally, deterministically produce {non-,}debug binary tarballs ready - # for release - find "${DISTNAME}" -not -name "*.dbg" -print0 \ - | sort --zero-terminated \ - | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ - | gzip -9n > "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz" \ - || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz" && exit 1 ) - find "${DISTNAME}" -name "*.dbg" -print0 \ - | sort --zero-terminated \ - | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ - | gzip -9n > "${OUTDIR}/${DISTNAME}-${HOST}-debug.tar.gz" \ - || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}-debug.tar.gz" && exit 1 ) - ) -) diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm deleted file mode 100644 index aaba37f1e9..0000000000 --- a/contrib/guix/manifest.scm +++ /dev/null @@ -1,158 +0,0 @@ -(use-modules (gnu) - (gnu packages) - (gnu packages autotools) - (gnu packages base) - (gnu packages bash) - (gnu packages check) - (gnu packages commencement) - (gnu packages compression) - (gnu packages cross-base) - (gnu packages file) - (gnu packages gawk) - (gnu packages gcc) - (gnu packages linux) - (gnu packages perl) - (gnu packages pkg-config) - (gnu packages python) - (gnu packages shells) - (guix build-system trivial) - (guix gexp) - (guix packages) - (guix profiles) - (guix utils)) - -(define (make-ssp-fixed-gcc xgcc) - "Given a XGCC package, return a modified package that uses the SSP function -from glibc instead of from libssp.so. Taken from: -http://www.linuxfromscratch.org/hlfs/view/development/chapter05/gcc-pass1.html" - (package - (inherit xgcc) - (arguments - (substitute-keyword-arguments (package-arguments xgcc) - ((#:make-flags flags) - `(cons "gcc_cv_libc_provides_ssp=yes" ,flags)))))) - -(define (make-gcc-rpath-link xgcc) - "Given a XGCC package, return a modified package that replace each instance of --rpath in the default system spec that's inserted by Guix with -rpath-link" - (package - (inherit xgcc) - (arguments - (substitute-keyword-arguments (package-arguments xgcc) - ((#:phases phases) - `(modify-phases ,phases - (add-after 'pre-configure 'replace-rpath-with-rpath-link - (lambda _ - (substitute* (cons "gcc/config/rs6000/sysv4.h" - (find-files "gcc/config" - "^gnu-user.*\\.h$")) - (("-rpath=") "-rpath-link=")) - #t)))))))) - -(define (make-cross-toolchain target - base-gcc-for-libc - base-kernel-headers - base-libc - base-gcc) - "Create a cross-compilation toolchain package for TARGET" - (let* ((xbinutils (cross-binutils target)) - ;; 1. Build a cross-compiling gcc without targeting any libc, derived - ;; from BASE-GCC-FOR-LIBC - (xgcc-sans-libc (cross-gcc target - #:xgcc base-gcc-for-libc - #:xbinutils xbinutils)) - ;; 2. Build cross-compiled kernel headers with XGCC-SANS-LIBC, derived - ;; from BASE-KERNEL-HEADERS - (xkernel (cross-kernel-headers target - base-kernel-headers - xgcc-sans-libc - xbinutils)) - ;; 3. Build a cross-compiled libc with XGCC-SANS-LIBC and XKERNEL, - ;; derived from BASE-LIBC - (xlibc (cross-libc target - base-libc - xgcc-sans-libc - xbinutils - xkernel)) - ;; 4. Build a cross-compiling gcc targeting XLIBC, derived from - ;; BASE-GCC - (xgcc (cross-gcc target - #:xgcc base-gcc - #:xbinutils xbinutils - #:libc xlibc))) - ;; Define a meta-package that propagates the resulting XBINUTILS, XLIBC, and - ;; XGCC - (package - (name (string-append target "-toolchain")) - (version (package-version xgcc)) - (source #f) - (build-system trivial-build-system) - (arguments '(#:builder (begin (mkdir %output) #t))) - (propagated-inputs - `(("binutils" ,xbinutils) - ("libc" ,xlibc) - ("libc:static" ,xlibc "static") - ("gcc" ,xgcc))) - (synopsis (string-append "Complete GCC tool chain for " target)) - (description (string-append "This package provides a complete GCC tool -chain for " target " development.")) - (home-page (package-home-page xgcc)) - (license (package-license xgcc))))) - -(define* (make-defi-cross-toolchain target - #:key - (base-gcc-for-libc gcc-5) - (base-kernel-headers linux-libre-headers-4.19) - (base-libc glibc-2.27) - (base-gcc (make-gcc-rpath-link - (make-ssp-fixed-gcc gcc-9)))) - "Convienience wrapper around MAKE-CROSS-TOOLCHAIN with default values -desirable for building DeFi Blockchain release binaries." - (make-cross-toolchain target - base-gcc-for-libc - base-kernel-headers - base-libc - base-gcc)) - -(packages->manifest - (list ;; The Basics - bash-minimal - which - coreutils - util-linux - ;; File(system) inspection - file - grep - diffutils - findutils - ;; File transformation - patch - gawk - sed - ;; Compression and archiving - tar - bzip2 - gzip - xz - zlib - ;; Build tools - gnu-make - libtool - autoconf - automake - pkg-config - ;; Scripting - perl - python-3.7 - ;; Native gcc 9 toolchain targeting glibc 2.27 - (make-gcc-toolchain gcc-9 glibc-2.27) - ;; Cross gcc 9 toolchains targeting glibc 2.27 - (make-defi-cross-toolchain "i686-linux-gnu") - (make-defi-cross-toolchain "x86_64-linux-gnu") - (make-defi-cross-toolchain "aarch64-linux-gnu") - (make-defi-cross-toolchain "arm-linux-gnueabihf") - ;; The glibc 2.27 for riscv64 needs gcc 7 to successfully build (see: - ;; https://www.gnu.org/software/gcc/gcc-7/changes.html#riscv). The final - ;; toolchain is still a gcc 9 toolchain targeting glibc 2.27. - (make-defi-cross-toolchain "riscv64-linux-gnu" - #:base-gcc-for-libc gcc-7))) diff --git a/contrib/init/README.md b/contrib/init/README.md index 268834fea0..cbac5c7957 100644 --- a/contrib/init/README.md +++ b/contrib/init/README.md @@ -1,7 +1,6 @@ Sample configuration files for: ``` SystemD: defid.service -Upstart: defid.conf OpenRC: defid.openrc defid.openrcconf CentOS: defid.init diff --git a/contrib/init/defid.conf b/contrib/init/defid.conf deleted file mode 100644 index c6ea8003ca..0000000000 --- a/contrib/init/defid.conf +++ /dev/null @@ -1,65 +0,0 @@ -description "DeFi Blockchain Daemon" - -start on runlevel [2345] -stop on starting rc RUNLEVEL=[016] - -env DEFID_BIN="/usr/bin/defid" -env DEFID_USER="defi" -env DEFID_GROUP="defi" -env DEFID_PIDDIR="/var/run/defid" -# upstart can't handle variables constructed with other variables -env DEFID_PIDFILE="/var/run/defid/defid.pid" -env DEFID_CONFIGFILE="/etc/defi/defi.conf" -env DEFID_DATADIR="/var/lib/defi" - -expect fork - -respawn -respawn limit 5 120 -kill timeout 60 - -pre-start script - # this will catch non-existent config files - # defid will check and exit with this very warning, but it can do so - # long after forking, leaving upstart to think everything started fine. - # since this is a commonly encountered case on install, just check and - # warn here. - if ! grep -qs '^rpcpassword=' "$DEFID_CONFIGFILE" ; then - echo "ERROR: You must set a secure rpcpassword to run defid." - echo "The setting must appear in $DEFID_CONFIGFILE" - echo - echo "This password is security critical to securing wallets " - echo "and must not be the same as the rpcuser setting." - echo "You can generate a suitable random password using the following " - echo "command from the shell:" - echo - echo "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'" - echo - echo "It is recommended that you also set alertnotify so you are " - echo "notified of problems:" - echo - echo "ie: alertnotify=echo %%s | mail -s \"DeFi Blockchain Alert\"" \ - "admin@foo.com" - echo - exit 1 - fi - - mkdir -p "$DEFID_PIDDIR" - chmod 0755 "$DEFID_PIDDIR" - chown $DEFID_USER:$DEFID_GROUP "$DEFID_PIDDIR" - chown $DEFID_USER:$DEFID_GROUP "$DEFID_CONFIGFILE" - chmod 0660 "$DEFID_CONFIGFILE" -end script - -exec start-stop-daemon \ - --start \ - --pidfile "$DEFID_PIDFILE" \ - --chuid $DEFID_USER:$DEFID_GROUP \ - --exec "$DEFID_BIN" \ - -- \ - -pid="$DEFID_PIDFILE" \ - -conf="$DEFID_CONFIGFILE" \ - -datadir="$DEFID_DATADIR" \ - -disablewallet \ - -daemon - diff --git a/contrib/macdeploy/LICENSE b/contrib/macdeploy/LICENSE deleted file mode 100644 index 94a9ed024d..0000000000 --- a/contrib/macdeploy/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU 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 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 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 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. - - - Copyright (C) - - This program 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - 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 GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/contrib/macdeploy/README.md b/contrib/macdeploy/README.md deleted file mode 100644 index aae58b49a4..0000000000 --- a/contrib/macdeploy/README.md +++ /dev/null @@ -1,15 +0,0 @@ -### MacDeploy ### - -For Snow Leopard (which uses [Python 2.6](http://www.python.org/download/releases/2.6/)), you will need the param_parser package: - - sudo easy_install argparse - -This script should not be run manually, instead, after building as usual: - - make deploy - -During the process, the disk image window will pop up briefly where the fancy -settings are applied. This is normal, please do not interfere. - -When finished, it will produce `Defi-Core.dmg`. - diff --git a/contrib/macdeploy/background.svg b/contrib/macdeploy/background.svg deleted file mode 100644 index 119b10378f..0000000000 --- a/contrib/macdeploy/background.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - PACKAGE_NAME - - - - - diff --git a/contrib/macdeploy/custom_dsstore.py b/contrib/macdeploy/custom_dsstore.py deleted file mode 100755 index 6306f6be3d..0000000000 --- a/contrib/macdeploy/custom_dsstore.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) 2013-2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. -import biplist -from ds_store import DSStore -from mac_alias import Alias -import sys - -output_file = sys.argv[1] -package_name_ns = sys.argv[2] - -ds = DSStore.open(output_file, 'w+') -ds['.']['bwsp'] = { - 'ShowStatusBar': False, - 'WindowBounds': '{{300, 280}, {500, 343}}', - 'ContainerShowSidebar': False, - 'SidebarWidth': 0, - 'ShowTabView': False, - 'PreviewPaneVisibility': False, - 'ShowToolbar': False, - 'ShowSidebar': False, - 'ShowPathbar': True -} - -icvp = { - 'gridOffsetX': 0.0, - 'textSize': 12.0, - 'viewOptionsVersion': 1, - 'backgroundImageAlias': b'\x00\x00\x00\x00\x02\x1e\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x94\\\xb0H+\x00\x05\x00\x00\x00\x98\x0fbackground.tiff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\xd19\xb0\xf8\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\r\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b.background\x00\x00\x10\x00\x08\x00\x00\xd1\x94\\\xb0\x00\x00\x00\x11\x00\x08\x00\x00\xd19\xb0\xf8\x00\x00\x00\x01\x00\x04\x00\x00\x00\x98\x00\x0e\x00 \x00\x0f\x00b\x00a\x00c\x00k\x00g\x00r\x00o\x00u\x00n\x00d\x00.\x00t\x00i\x00f\x00f\x00\x0f\x00\x02\x00\x00\x00\x12\x00\x1c/.background/background.tiff\x00\x14\x01\x06\x00\x00\x00\x00\x01\x06\x00\x02\x00\x00\x0cMacintosh HD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x97\xab\xc3H+\x00\x00\x01\x88[\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02u\xab\x8d\xd1\x94\\\xb0devrddsk\xff\xff\xff\xff\x00\x00\t \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07defi\x00\x00\x10\x00\x08\x00\x00\xce\x97\xab\xc3\x00\x00\x00\x11\x00\x08\x00\x00\xd1\x94\\\xb0\x00\x00\x00\x01\x00\x14\x01\x88[\x88\x00\x16\xa9\t\x00\x08\xfaR\x00\x08\xfaQ\x00\x02d\x8e\x00\x0e\x00\x02\x00\x00\x00\x0f\x00\x1a\x00\x0c\x00M\x00a\x00c\x00i\x00n\x00t\x00o\x00s\x00h\x00 \x00H\x00D\x00\x13\x00\x01/\x00\x00\x15\x00\x02\x00\x14\xff\xff\x00\x00\xff\xff\x00\x00', - 'backgroundColorBlue': 1.0, - 'iconSize': 96.0, - 'backgroundColorGreen': 1.0, - 'arrangeBy': 'none', - 'showIconPreview': True, - 'gridSpacing': 100.0, - 'gridOffsetY': 0.0, - 'showItemInfo': False, - 'labelOnBottom': True, - 'backgroundType': 2, - 'backgroundColorRed': 1.0 -} -alias = Alias.from_bytes(icvp['backgroundImageAlias']) -alias.volume.name = package_name_ns -alias.volume.posix_path = '/Volumes/' + package_name_ns -alias.volume.disk_image_alias.target.filename = package_name_ns + '.temp.dmg' -alias.volume.disk_image_alias.target.carbon_path = 'Macintosh HD:Users:\x00defi:\x00Documents:\x00defi:\x00' + package_name_ns + '.temp.dmg' -alias.volume.disk_image_alias.target.posix_path = 'Users/defi/Documents/defi/' + package_name_ns + '.temp.dmg' -alias.target.carbon_path = package_name_ns + ':.background:\x00background.tiff' -icvp['backgroundImageAlias'] = biplist.Data(alias.to_bytes()) -ds['.']['icvp'] = icvp - -ds['.']['vSrn'] = ('long', 1) - -ds['Applications']['Iloc'] = (370, 156) -ds['Defi-Qt.app']['Iloc'] = (128, 156) - -ds.flush() -ds.close() diff --git a/contrib/macdeploy/detached-sig-apply.sh b/contrib/macdeploy/detached-sig-apply.sh deleted file mode 100755 index 30b70a261a..0000000000 --- a/contrib/macdeploy/detached-sig-apply.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh -# Copyright (c) 2014-2015 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C -set -e - -UNSIGNED="$1" -SIGNATURE="$2" -ARCH=x86_64 -ROOTDIR=dist -TEMPDIR=signed.temp -OUTDIR=signed-app - -if [ -z "$UNSIGNED" ]; then - echo "usage: $0 " - exit 1 -fi - -if [ -z "$SIGNATURE" ]; then - echo "usage: $0 " - exit 1 -fi - -rm -rf ${TEMPDIR} && mkdir -p ${TEMPDIR} -tar -C ${TEMPDIR} -xf ${UNSIGNED} -cp -rf "${SIGNATURE}"/* ${TEMPDIR} - -if [ -z "${PAGESTUFF}" ]; then - PAGESTUFF=${TEMPDIR}/pagestuff -fi - -if [ -z "${CODESIGN_ALLOCATE}" ]; then - CODESIGN_ALLOCATE=${TEMPDIR}/codesign_allocate -fi - -find ${TEMPDIR} -name "*.sign" | while read i; do - SIZE=$(stat -c %s "${i}") - TARGET_FILE="$(echo "${i}" | sed 's/\.sign$//')" - - echo "Allocating space for the signature of size ${SIZE} in ${TARGET_FILE}" - ${CODESIGN_ALLOCATE} -i "${TARGET_FILE}" -a ${ARCH} ${SIZE} -o "${i}.tmp" - - OFFSET=$(${PAGESTUFF} "${i}.tmp" -p | tail -2 | grep offset | sed 's/[^0-9]*//g') - if [ -z ${QUIET} ]; then - echo "Attaching signature at offset ${OFFSET}" - fi - - dd if="$i" of="${i}.tmp" bs=1 seek=${OFFSET} count=${SIZE} 2>/dev/null - mv "${i}.tmp" "${TARGET_FILE}" - rm "${i}" - echo "Success." -done -mv ${TEMPDIR}/${ROOTDIR} ${OUTDIR} -rm -rf ${TEMPDIR} -echo "Signed: ${OUTDIR}" diff --git a/contrib/macdeploy/detached-sig-create.sh b/contrib/macdeploy/detached-sig-create.sh deleted file mode 100755 index 8585ed28c0..0000000000 --- a/contrib/macdeploy/detached-sig-create.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh -# Copyright (c) 2014-2015 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C -set -e - -ROOTDIR=dist -BUNDLE="${ROOTDIR}/Defi-Qt.app" -CODESIGN=codesign -TEMPDIR=sign.temp -TEMPLIST=${TEMPDIR}/signatures.txt -OUT=signature-osx.tar.gz -OUTROOT=osx - -if [ -z "$1" ]; then - echo "usage: $0 " - echo "example: $0 -s MyIdentity" - exit 1 -fi - -rm -rf ${TEMPDIR} ${TEMPLIST} -mkdir -p ${TEMPDIR} - -${CODESIGN} -f --file-list ${TEMPLIST} "$@" "${BUNDLE}" - -grep -v CodeResources < "${TEMPLIST}" | while read i; do - TARGETFILE="${BUNDLE}/$(echo "${i}" | sed "s|.*${BUNDLE}/||")" - SIZE=$(pagestuff "$i" -p | tail -2 | grep size | sed 's/[^0-9]*//g') - OFFSET=$(pagestuff "$i" -p | tail -2 | grep offset | sed 's/[^0-9]*//g') - SIGNFILE="${TEMPDIR}/${OUTROOT}/${TARGETFILE}.sign" - DIRNAME="$(dirname "${SIGNFILE}")" - mkdir -p "${DIRNAME}" - echo "Adding detached signature for: ${TARGETFILE}. Size: ${SIZE}. Offset: ${OFFSET}" - dd if="$i" of="${SIGNFILE}" bs=1 skip=${OFFSET} count=${SIZE} 2>/dev/null -done - -grep CodeResources < "${TEMPLIST}" | while read i; do - TARGETFILE="${BUNDLE}/$(echo "${i}" | sed "s|.*${BUNDLE}/||")" - RESOURCE="${TEMPDIR}/${OUTROOT}/${TARGETFILE}" - DIRNAME="$(dirname "${RESOURCE}")" - mkdir -p "${DIRNAME}" - echo "Adding resource for: \"${TARGETFILE}\"" - cp "${i}" "${RESOURCE}" -done - -rm ${TEMPLIST} - -tar -C "${TEMPDIR}" -czf "${OUT}" . -rm -rf "${TEMPDIR}" -echo "Created ${OUT}" diff --git a/contrib/macdeploy/extract-osx-sdk.sh b/contrib/macdeploy/extract-osx-sdk.sh deleted file mode 100755 index 11979b5d95..0000000000 --- a/contrib/macdeploy/extract-osx-sdk.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -# Copyright (c) 2016 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C -set -e - -INPUTFILE="Xcode_7.3.1.dmg" -HFSFILENAME="5.hfs" -SDKDIR="Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk" - -7z x "${INPUTFILE}" "${HFSFILENAME}" -SDKNAME="$(basename "${SDKDIR}")" -SDKDIRINODE=$(ifind -n "${SDKDIR}" "${HFSFILENAME}") -fls "${HFSFILENAME}" -rpF ${SDKDIRINODE} | - while read type inode filename; do - inode="${inode::-1}" - if [ "${filename:0:14}" = "usr/share/man/" ]; then - continue - fi - filename="${SDKNAME}/$filename" - echo "Extracting $filename ..." - mkdir -p "$(dirname "$filename")" - if [ "$type" = "l/l" ]; then - ln -s "$(icat "${HFSFILENAME}" $inode)" "$filename" - else - icat "${HFSFILENAME}" $inode >"$filename" - fi -done -echo "Building ${SDKNAME}.tar.gz ..." -MTIME="$(istat "${HFSFILENAME}" "${SDKDIRINODE}" | perl -nle 'm/Content Modified:\s+(.*?)\s\(/ && print $1')" -find "${SDKNAME}" | sort | tar --no-recursion --mtime="${MTIME}" --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > "${SDKNAME}.tar.gz" -echo 'All done!' diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist deleted file mode 100644 index 8691c1afd1..0000000000 --- a/contrib/macdeploy/fancy.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - window_bounds - - 300 - 300 - 800 - 620 - - background_picture - background.tiff - icon_size - 96 - applications_symlink - - items_position - - Applications - - 370 - 156 - - Defi-Qt.app - - 128 - 156 - - - - diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus deleted file mode 100755 index 28b26ebe28..0000000000 --- a/contrib/macdeploy/macdeployqtplus +++ /dev/null @@ -1,866 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (C) 2011 Patrick "p2k" Schneider -# -# This program 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 . -# - -import subprocess, sys, re, os, shutil, stat, os.path, time -from string import Template -from argparse import ArgumentParser - -# This is ported from the original macdeployqt with modifications - -class FrameworkInfo(object): - def __init__(self): - self.frameworkDirectory = "" - self.frameworkName = "" - self.frameworkPath = "" - self.binaryDirectory = "" - self.binaryName = "" - self.binaryPath = "" - self.version = "" - self.installName = "" - self.deployedInstallName = "" - self.sourceFilePath = "" - self.destinationDirectory = "" - self.sourceResourcesDirectory = "" - self.sourceVersionContentsDirectory = "" - self.sourceContentsDirectory = "" - self.destinationResourcesDirectory = "" - self.destinationVersionContentsDirectory = "" - - def __eq__(self, other): - if self.__class__ == other.__class__: - return self.__dict__ == other.__dict__ - else: - return False - - def __str__(self): - return """ Framework name: %s - Framework directory: %s - Framework path: %s - Binary name: %s - Binary directory: %s - Binary path: %s - Version: %s - Install name: %s - Deployed install name: %s - Source file Path: %s - Deployed Directory (relative to bundle): %s -""" % (self.frameworkName, - self.frameworkDirectory, - self.frameworkPath, - self.binaryName, - self.binaryDirectory, - self.binaryPath, - self.version, - self.installName, - self.deployedInstallName, - self.sourceFilePath, - self.destinationDirectory) - - def isDylib(self): - return self.frameworkName.endswith(".dylib") - - def isQtFramework(self): - if self.isDylib(): - return self.frameworkName.startswith("libQt") - else: - return self.frameworkName.startswith("Qt") - - reOLine = re.compile(r'^(.+) \(compatibility version [0-9.]+, current version [0-9.]+\)$') - bundleFrameworkDirectory = "Contents/Frameworks" - bundleBinaryDirectory = "Contents/MacOS" - - @classmethod - def fromOtoolLibraryLine(cls, line): - # Note: line must be trimmed - if line == "": - return None - - # Don't deploy system libraries (exception for libQtuitools and libQtlucene). - if line.startswith("/System/Library/") or line.startswith("@executable_path") or (line.startswith("/usr/lib/") and "libQt" not in line): - return None - - m = cls.reOLine.match(line) - if m is None: - raise RuntimeError("otool line could not be parsed: " + line) - - path = m.group(1) - - info = cls() - info.sourceFilePath = path - info.installName = path - - if path.endswith(".dylib"): - dirname, filename = os.path.split(path) - info.frameworkName = filename - info.frameworkDirectory = dirname - info.frameworkPath = path - - info.binaryDirectory = dirname - info.binaryName = filename - info.binaryPath = path - info.version = "-" - - info.installName = path - info.deployedInstallName = "@executable_path/../Frameworks/" + info.binaryName - info.sourceFilePath = path - info.destinationDirectory = cls.bundleFrameworkDirectory - else: - parts = path.split("/") - i = 0 - # Search for the .framework directory - for part in parts: - if part.endswith(".framework"): - break - i += 1 - if i == len(parts): - raise RuntimeError("Could not find .framework or .dylib in otool line: " + line) - - info.frameworkName = parts[i] - info.frameworkDirectory = "/".join(parts[:i]) - info.frameworkPath = os.path.join(info.frameworkDirectory, info.frameworkName) - - info.binaryName = parts[i+3] - info.binaryDirectory = "/".join(parts[i+1:i+3]) - info.binaryPath = os.path.join(info.binaryDirectory, info.binaryName) - info.version = parts[i+2] - - info.deployedInstallName = "@executable_path/../Frameworks/" + os.path.join(info.frameworkName, info.binaryPath) - info.destinationDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, info.binaryDirectory) - - info.sourceResourcesDirectory = os.path.join(info.frameworkPath, "Resources") - info.sourceContentsDirectory = os.path.join(info.frameworkPath, "Contents") - info.sourceVersionContentsDirectory = os.path.join(info.frameworkPath, "Versions", info.version, "Contents") - info.destinationResourcesDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Resources") - info.destinationContentsDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Contents") - info.destinationVersionContentsDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Versions", info.version, "Contents") - - return info - -class ApplicationBundleInfo(object): - def __init__(self, path): - self.path = path - appName = "Defi-Qt" - self.binaryPath = os.path.join(path, "Contents", "MacOS", appName) - if not os.path.exists(self.binaryPath): - raise RuntimeError("Could not find bundle binary for " + path) - self.resourcesPath = os.path.join(path, "Contents", "Resources") - self.pluginPath = os.path.join(path, "Contents", "PlugIns") - -class DeploymentInfo(object): - def __init__(self): - self.qtPath = None - self.pluginPath = None - self.deployedFrameworks = [] - - def detectQtPath(self, frameworkDirectory): - parentDir = os.path.dirname(frameworkDirectory) - if os.path.exists(os.path.join(parentDir, "translations")): - # Classic layout, e.g. "/usr/local/Trolltech/Qt-4.x.x" - self.qtPath = parentDir - else: - self.qtPath = os.getenv("QTDIR", None) - - if self.qtPath is not None: - pluginPath = os.path.join(self.qtPath, "plugins") - if os.path.exists(pluginPath): - self.pluginPath = pluginPath - - def usesFramework(self, name): - nameDot = "%s." % name - libNameDot = "lib%s." % name - for framework in self.deployedFrameworks: - if framework.endswith(".framework"): - if framework.startswith(nameDot): - return True - elif framework.endswith(".dylib"): - if framework.startswith(libNameDot): - return True - return False - -def getFrameworks(binaryPath, verbose): - if verbose >= 3: - print("Inspecting with otool: " + binaryPath) - otoolbin=os.getenv("OTOOL", "otool") - otool = subprocess.Popen([otoolbin, "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) - o_stdout, o_stderr = otool.communicate() - if otool.returncode != 0: - if verbose >= 1: - sys.stderr.write(o_stderr) - sys.stderr.flush() - raise RuntimeError("otool failed with return code %d" % otool.returncode) - - otoolLines = o_stdout.split("\n") - otoolLines.pop(0) # First line is the inspected binary - if ".framework" in binaryPath or binaryPath.endswith(".dylib"): - otoolLines.pop(0) # Frameworks and dylibs list themselves as a dependency. - - libraries = [] - for line in otoolLines: - line = line.replace("@loader_path", os.path.dirname(binaryPath)) - info = FrameworkInfo.fromOtoolLibraryLine(line.strip()) - if info is not None: - if verbose >= 3: - print("Found framework:") - print(info) - libraries.append(info) - - return libraries - -def runInstallNameTool(action, *args): - installnametoolbin=os.getenv("INSTALLNAMETOOL", "install_name_tool") - subprocess.check_call([installnametoolbin, "-"+action] + list(args)) - -def changeInstallName(oldName, newName, binaryPath, verbose): - if verbose >= 3: - print("Using install_name_tool:") - print(" in", binaryPath) - print(" change reference", oldName) - print(" to", newName) - runInstallNameTool("change", oldName, newName, binaryPath) - -def changeIdentification(id, binaryPath, verbose): - if verbose >= 3: - print("Using install_name_tool:") - print(" change identification in", binaryPath) - print(" to", id) - runInstallNameTool("id", id, binaryPath) - -def runStrip(binaryPath, verbose): - stripbin=os.getenv("STRIP", "strip") - if verbose >= 3: - print("Using strip:") - print(" stripped", binaryPath) - subprocess.check_call([stripbin, "-x", binaryPath]) - -def copyFramework(framework, path, verbose): - if framework.sourceFilePath.startswith("Qt"): - #standard place for Nokia Qt installer's frameworks - fromPath = "/Library/Frameworks/" + framework.sourceFilePath - else: - fromPath = framework.sourceFilePath - toDir = os.path.join(path, framework.destinationDirectory) - toPath = os.path.join(toDir, framework.binaryName) - - if not os.path.exists(fromPath): - raise RuntimeError("No file at " + fromPath) - - if os.path.exists(toPath): - return None # Already there - - if not os.path.exists(toDir): - os.makedirs(toDir) - - shutil.copy2(fromPath, toPath) - if verbose >= 3: - print("Copied:", fromPath) - print(" to:", toPath) - - permissions = os.stat(toPath) - if not permissions.st_mode & stat.S_IWRITE: - os.chmod(toPath, permissions.st_mode | stat.S_IWRITE) - - if not framework.isDylib(): # Copy resources for real frameworks - - linkfrom = os.path.join(path, "Contents","Frameworks", framework.frameworkName, "Versions", "Current") - linkto = framework.version - if not os.path.exists(linkfrom): - os.symlink(linkto, linkfrom) - if verbose >= 2: - print("Linked:", linkfrom, "->", linkto) - fromResourcesDir = framework.sourceResourcesDirectory - if os.path.exists(fromResourcesDir): - toResourcesDir = os.path.join(path, framework.destinationResourcesDirectory) - shutil.copytree(fromResourcesDir, toResourcesDir, symlinks=True) - if verbose >= 3: - print("Copied resources:", fromResourcesDir) - print(" to:", toResourcesDir) - fromContentsDir = framework.sourceVersionContentsDirectory - if not os.path.exists(fromContentsDir): - fromContentsDir = framework.sourceContentsDirectory - if os.path.exists(fromContentsDir): - toContentsDir = os.path.join(path, framework.destinationVersionContentsDirectory) - shutil.copytree(fromContentsDir, toContentsDir, symlinks=True) - if verbose >= 3: - print("Copied Contents:", fromContentsDir) - print(" to:", toContentsDir) - elif framework.frameworkName.startswith("libQtGui"): # Copy qt_menu.nib (applies to non-framework layout) - qtMenuNibSourcePath = os.path.join(framework.frameworkDirectory, "Resources", "qt_menu.nib") - qtMenuNibDestinationPath = os.path.join(path, "Contents", "Resources", "qt_menu.nib") - if os.path.exists(qtMenuNibSourcePath) and not os.path.exists(qtMenuNibDestinationPath): - shutil.copytree(qtMenuNibSourcePath, qtMenuNibDestinationPath, symlinks=True) - if verbose >= 3: - print("Copied for libQtGui:", qtMenuNibSourcePath) - print(" to:", qtMenuNibDestinationPath) - - return toPath - -def deployFrameworks(frameworks, bundlePath, binaryPath, strip, verbose, deploymentInfo=None): - if deploymentInfo is None: - deploymentInfo = DeploymentInfo() - - while len(frameworks) > 0: - framework = frameworks.pop(0) - deploymentInfo.deployedFrameworks.append(framework.frameworkName) - - if verbose >= 2: - print("Processing", framework.frameworkName, "...") - - # Get the Qt path from one of the Qt frameworks - if deploymentInfo.qtPath is None and framework.isQtFramework(): - deploymentInfo.detectQtPath(framework.frameworkDirectory) - - if framework.installName.startswith("@executable_path") or framework.installName.startswith(bundlePath): - if verbose >= 2: - print(framework.frameworkName, "already deployed, skipping.") - continue - - # install_name_tool the new id into the binary - changeInstallName(framework.installName, framework.deployedInstallName, binaryPath, verbose) - - # Copy framework to app bundle. - deployedBinaryPath = copyFramework(framework, bundlePath, verbose) - # Skip the rest if already was deployed. - if deployedBinaryPath is None: - continue - - if strip: - runStrip(deployedBinaryPath, verbose) - - # install_name_tool it a new id. - changeIdentification(framework.deployedInstallName, deployedBinaryPath, verbose) - # Check for framework dependencies - dependencies = getFrameworks(deployedBinaryPath, verbose) - - for dependency in dependencies: - changeInstallName(dependency.installName, dependency.deployedInstallName, deployedBinaryPath, verbose) - - # Deploy framework if necessary. - if dependency.frameworkName not in deploymentInfo.deployedFrameworks and dependency not in frameworks: - frameworks.append(dependency) - - return deploymentInfo - -def deployFrameworksForAppBundle(applicationBundle, strip, verbose): - frameworks = getFrameworks(applicationBundle.binaryPath, verbose) - if len(frameworks) == 0 and verbose >= 1: - print("Warning: Could not find any external frameworks to deploy in %s." % (applicationBundle.path)) - return DeploymentInfo() - else: - return deployFrameworks(frameworks, applicationBundle.path, applicationBundle.binaryPath, strip, verbose) - -def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): - # Lookup available plugins, exclude unneeded - plugins = [] - if deploymentInfo.pluginPath is None: - return - for dirpath, dirnames, filenames in os.walk(deploymentInfo.pluginPath): - pluginDirectory = os.path.relpath(dirpath, deploymentInfo.pluginPath) - if pluginDirectory == "designer": - # Skip designer plugins - continue - elif pluginDirectory == "phonon" or pluginDirectory == "phonon_backend": - # Deploy the phonon plugins only if phonon is in use - if not deploymentInfo.usesFramework("phonon"): - continue - elif pluginDirectory == "sqldrivers": - # Deploy the sql plugins only if QtSql is in use - if not deploymentInfo.usesFramework("QtSql"): - continue - elif pluginDirectory == "script": - # Deploy the script plugins only if QtScript is in use - if not deploymentInfo.usesFramework("QtScript"): - continue - elif pluginDirectory == "qmltooling" or pluginDirectory == "qml1tooling": - # Deploy the qml plugins only if QtDeclarative is in use - if not deploymentInfo.usesFramework("QtDeclarative"): - continue - elif pluginDirectory == "bearer": - # Deploy the bearer plugins only if QtNetwork is in use - if not deploymentInfo.usesFramework("QtNetwork"): - continue - elif pluginDirectory == "position": - # Deploy the position plugins only if QtPositioning is in use - if not deploymentInfo.usesFramework("QtPositioning"): - continue - elif pluginDirectory == "sensors" or pluginDirectory == "sensorgestures": - # Deploy the sensor plugins only if QtSensors is in use - if not deploymentInfo.usesFramework("QtSensors"): - continue - elif pluginDirectory == "audio" or pluginDirectory == "playlistformats": - # Deploy the audio plugins only if QtMultimedia is in use - if not deploymentInfo.usesFramework("QtMultimedia"): - continue - elif pluginDirectory == "mediaservice": - # Deploy the mediaservice plugins only if QtMultimediaWidgets is in use - if not deploymentInfo.usesFramework("QtMultimediaWidgets"): - continue - - for pluginName in filenames: - pluginPath = os.path.join(pluginDirectory, pluginName) - if pluginName.endswith("_debug.dylib"): - # Skip debug plugins - continue - elif pluginPath == "imageformats/libqsvg.dylib" or pluginPath == "iconengines/libqsvgicon.dylib": - # Deploy the svg plugins only if QtSvg is in use - if not deploymentInfo.usesFramework("QtSvg"): - continue - elif pluginPath == "accessible/libqtaccessiblecompatwidgets.dylib": - # Deploy accessibility for Qt3Support only if the Qt3Support is in use - if not deploymentInfo.usesFramework("Qt3Support"): - continue - elif pluginPath == "graphicssystems/libqglgraphicssystem.dylib": - # Deploy the opengl graphicssystem plugin only if QtOpenGL is in use - if not deploymentInfo.usesFramework("QtOpenGL"): - continue - elif pluginPath == "accessible/libqtaccessiblequick.dylib": - # Deploy the accessible qtquick plugin only if QtQuick is in use - if not deploymentInfo.usesFramework("QtQuick"): - continue - - plugins.append((pluginDirectory, pluginName)) - - for pluginDirectory, pluginName in plugins: - if verbose >= 2: - print("Processing plugin", os.path.join(pluginDirectory, pluginName), "...") - - sourcePath = os.path.join(deploymentInfo.pluginPath, pluginDirectory, pluginName) - destinationDirectory = os.path.join(appBundleInfo.pluginPath, pluginDirectory) - if not os.path.exists(destinationDirectory): - os.makedirs(destinationDirectory) - - destinationPath = os.path.join(destinationDirectory, pluginName) - shutil.copy2(sourcePath, destinationPath) - if verbose >= 3: - print("Copied:", sourcePath) - print(" to:", destinationPath) - - if strip: - runStrip(destinationPath, verbose) - - dependencies = getFrameworks(destinationPath, verbose) - - for dependency in dependencies: - changeInstallName(dependency.installName, dependency.deployedInstallName, destinationPath, verbose) - - # Deploy framework if necessary. - if dependency.frameworkName not in deploymentInfo.deployedFrameworks: - deployFrameworks([dependency], appBundleInfo.path, destinationPath, strip, verbose, deploymentInfo) - -qt_conf="""[Paths] -Translations=Resources -Plugins=PlugIns -""" - -ap = ArgumentParser(description="""Improved version of macdeployqt. - -Outputs a ready-to-deploy app in a folder "dist" and optionally wraps it in a .dmg file. -Note, that the "dist" folder will be deleted before deploying on each run. - -Optionally, Qt translation files (.qm) and additional resources can be added to the bundle. - -Also optionally signs the .app bundle; set the CODESIGNARGS environment variable to pass arguments -to the codesign tool. -E.g. CODESIGNARGS='--sign "Developer ID Application: ..." --keychain /encrypted/foo.keychain'""") - -ap.add_argument("app_bundle", nargs=1, metavar="app-bundle", help="application bundle to be deployed") -ap.add_argument("-verbose", type=int, nargs=1, default=[1], metavar="<0-3>", help="0 = no output, 1 = error/warning (default), 2 = normal, 3 = debug") -ap.add_argument("-no-plugins", dest="plugins", action="store_false", default=True, help="skip plugin deployment") -ap.add_argument("-no-strip", dest="strip", action="store_false", default=True, help="don't run 'strip' on the binaries") -ap.add_argument("-sign", dest="sign", action="store_true", default=False, help="sign .app bundle with codesign tool") -ap.add_argument("-dmg", nargs="?", const="", metavar="basename", help="create a .dmg disk image; if basename is not specified, a camel-cased version of the app name is used") -ap.add_argument("-fancy", nargs=1, metavar="plist", default=[], help="make a fancy looking disk image using the given plist file with instructions; requires -dmg to work") -ap.add_argument("-add-qt-tr", nargs=1, metavar="languages", default=[], help="add Qt translation files to the bundle's resources; the language list must be separated with commas, not with whitespace") -ap.add_argument("-translations-dir", nargs=1, metavar="path", default=None, help="Path to Qt's translation files") -ap.add_argument("-add-resources", nargs="+", metavar="path", default=[], help="list of additional files or folders to be copied into the bundle's resources; must be the last argument") -ap.add_argument("-volname", nargs=1, metavar="volname", default=[], help="custom volume name for dmg") - -config = ap.parse_args() - -verbose = config.verbose[0] - -# ------------------------------------------------ - -app_bundle = config.app_bundle[0] - -if not os.path.exists(app_bundle): - if verbose >= 1: - sys.stderr.write("Error: Could not find app bundle \"%s\"\n" % (app_bundle)) - sys.exit(1) - -app_bundle_name = os.path.splitext(os.path.basename(app_bundle))[0] - -# ------------------------------------------------ -translations_dir = None -if config.translations_dir and config.translations_dir[0]: - if os.path.exists(config.translations_dir[0]): - translations_dir = config.translations_dir[0] - else: - if verbose >= 1: - sys.stderr.write("Error: Could not find translation dir \"%s\"\n" % (translations_dir)) - sys.exit(1) -# ------------------------------------------------ - -for p in config.add_resources: - if verbose >= 3: - print("Checking for \"%s\"..." % p) - if not os.path.exists(p): - if verbose >= 1: - sys.stderr.write("Error: Could not find additional resource file \"%s\"\n" % (p)) - sys.exit(1) - -# ------------------------------------------------ - -if len(config.fancy) == 1: - if verbose >= 3: - print("Fancy: Importing plistlib...") - try: - import plistlib - except ImportError: - if verbose >= 1: - sys.stderr.write("Error: Could not import plistlib which is required for fancy disk images.\n") - sys.exit(1) - - p = config.fancy[0] - if verbose >= 3: - print("Fancy: Loading \"%s\"..." % p) - if not os.path.exists(p): - if verbose >= 1: - sys.stderr.write("Error: Could not find fancy disk image plist at \"%s\"\n" % (p)) - sys.exit(1) - - try: - fancy = plistlib.readPlist(p) - except: - if verbose >= 1: - sys.stderr.write("Error: Could not parse fancy disk image plist at \"%s\"\n" % (p)) - sys.exit(1) - - try: - assert "window_bounds" not in fancy or (isinstance(fancy["window_bounds"], list) and len(fancy["window_bounds"]) == 4) - assert "background_picture" not in fancy or isinstance(fancy["background_picture"], str) - assert "icon_size" not in fancy or isinstance(fancy["icon_size"], int) - assert "applications_symlink" not in fancy or isinstance(fancy["applications_symlink"], bool) - if "items_position" in fancy: - assert isinstance(fancy["items_position"], dict) - for key, value in fancy["items_position"].items(): - assert isinstance(value, list) and len(value) == 2 and isinstance(value[0], int) and isinstance(value[1], int) - except: - if verbose >= 1: - sys.stderr.write("Error: Bad format of fancy disk image plist at \"%s\"\n" % (p)) - sys.exit(1) - - if "background_picture" in fancy: - bp = fancy["background_picture"] - if verbose >= 3: - print("Fancy: Resolving background picture \"%s\"..." % bp) - if not os.path.exists(bp): - bp = os.path.join(os.path.dirname(p), bp) - if not os.path.exists(bp): - if verbose >= 1: - sys.stderr.write("Error: Could not find background picture at \"%s\" or \"%s\"\n" % (fancy["background_picture"], bp)) - sys.exit(1) - else: - fancy["background_picture"] = bp -else: - fancy = None - -# ------------------------------------------------ - -if os.path.exists("dist"): - if verbose >= 2: - print("+ Removing old dist folder +") - - shutil.rmtree("dist") - -# ------------------------------------------------ - -if len(config.volname) == 1: - volname = config.volname[0] -else: - volname = app_bundle_name - -# ------------------------------------------------ - -target = os.path.join("dist", "Defi-Qt.app") - -if verbose >= 2: - print("+ Copying source bundle +") -if verbose >= 3: - print(app_bundle, "->", target) - -os.mkdir("dist") -shutil.copytree(app_bundle, target, symlinks=True) - -applicationBundle = ApplicationBundleInfo(target) - -# ------------------------------------------------ - -if verbose >= 2: - print("+ Deploying frameworks +") - -try: - deploymentInfo = deployFrameworksForAppBundle(applicationBundle, config.strip, verbose) - if deploymentInfo.qtPath is None: - deploymentInfo.qtPath = os.getenv("QTDIR", None) - if deploymentInfo.qtPath is None: - if verbose >= 1: - sys.stderr.write("Warning: Could not detect Qt's path, skipping plugin deployment!\n") - config.plugins = False -except RuntimeError as e: - if verbose >= 1: - sys.stderr.write("Error: %s\n" % str(e)) - sys.exit(1) - -# ------------------------------------------------ - -if config.plugins: - if verbose >= 2: - print("+ Deploying plugins +") - - try: - deployPlugins(applicationBundle, deploymentInfo, config.strip, verbose) - except RuntimeError as e: - if verbose >= 1: - sys.stderr.write("Error: %s\n" % str(e)) - sys.exit(1) - -# ------------------------------------------------ - -if len(config.add_qt_tr) == 0: - add_qt_tr = [] -else: - if translations_dir is not None: - qt_tr_dir = translations_dir - else: - if deploymentInfo.qtPath is not None: - qt_tr_dir = os.path.join(deploymentInfo.qtPath, "translations") - else: - sys.stderr.write("Error: Could not find Qt translation path\n") - sys.exit(1) - add_qt_tr = ["qt_%s.qm" % lng for lng in config.add_qt_tr[0].split(",")] - for lng_file in add_qt_tr: - p = os.path.join(qt_tr_dir, lng_file) - if verbose >= 3: - print("Checking for \"%s\"..." % p) - if not os.path.exists(p): - if verbose >= 1: - sys.stderr.write("Error: Could not find Qt translation file \"%s\"\n" % (lng_file)) - sys.exit(1) - -# ------------------------------------------------ - -if verbose >= 2: - print("+ Installing qt.conf +") - -with open(os.path.join(applicationBundle.resourcesPath, "qt.conf"), "wb") as f: - f.write(qt_conf.encode()) - -# ------------------------------------------------ - -if len(add_qt_tr) > 0 and verbose >= 2: - print("+ Adding Qt translations +") - -for lng_file in add_qt_tr: - if verbose >= 3: - print(os.path.join(qt_tr_dir, lng_file), "->", os.path.join(applicationBundle.resourcesPath, lng_file)) - shutil.copy2(os.path.join(qt_tr_dir, lng_file), os.path.join(applicationBundle.resourcesPath, lng_file)) - -# ------------------------------------------------ - -if len(config.add_resources) > 0 and verbose >= 2: - print("+ Adding additional resources +") - -for p in config.add_resources: - t = os.path.join(applicationBundle.resourcesPath, os.path.basename(p)) - if verbose >= 3: - print(p, "->", t) - if os.path.isdir(p): - shutil.copytree(p, t, symlinks=True) - else: - shutil.copy2(p, t) - -# ------------------------------------------------ - -if config.sign and 'CODESIGNARGS' not in os.environ: - print("You must set the CODESIGNARGS environment variable. Skipping signing.") -elif config.sign: - if verbose >= 1: - print("Code-signing app bundle %s"%(target,)) - subprocess.check_call("codesign --force %s %s"%(os.environ['CODESIGNARGS'], target), shell=True) - -# ------------------------------------------------ - -if config.dmg is not None: - - def runHDIUtil(verb, image_basename, **kwargs): - hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"] - if "capture_stdout" in kwargs: - del kwargs["capture_stdout"] - run = subprocess.check_output - else: - if verbose < 2: - hdiutil_args.append("-quiet") - elif verbose >= 3: - hdiutil_args.append("-verbose") - run = subprocess.check_call - - for key, value in kwargs.items(): - hdiutil_args.append("-" + key) - if not value is True: - hdiutil_args.append(str(value)) - - return run(hdiutil_args, universal_newlines=True) - - if verbose >= 2: - if fancy is None: - print("+ Creating .dmg disk image +") - else: - print("+ Preparing .dmg disk image +") - - if config.dmg != "": - dmg_name = config.dmg - else: - spl = app_bundle_name.split(" ") - dmg_name = spl[0] + "".join(p.capitalize() for p in spl[1:]) - - if fancy is None: - try: - runHDIUtil("create", dmg_name, srcfolder="dist", format="UDBZ", volname=volname, ov=True) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) - else: - if verbose >= 3: - print("Determining size of \"dist\"...") - size = 0 - for path, dirs, files in os.walk("dist"): - for file in files: - size += os.path.getsize(os.path.join(path, file)) - size += int(size * 0.15) - - if verbose >= 3: - print("Creating temp image for modification...") - try: - runHDIUtil("create", dmg_name + ".temp", srcfolder="dist", format="UDRW", size=size, volname=volname, ov=True) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) - - if verbose >= 3: - print("Attaching temp image...") - try: - output = runHDIUtil("attach", dmg_name + ".temp", readwrite=True, noverify=True, noautoopen=True, capture_stdout=True) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) - - m = re.search("/Volumes/(.+$)", output) - disk_root = m.group(0) - disk_name = m.group(1) - - if verbose >= 2: - print("+ Applying fancy settings +") - - if "background_picture" in fancy: - bg_path = os.path.join(disk_root, ".background", os.path.basename(fancy["background_picture"])) - os.mkdir(os.path.dirname(bg_path)) - if verbose >= 3: - print(fancy["background_picture"], "->", bg_path) - shutil.copy2(fancy["background_picture"], bg_path) - else: - bg_path = None - - if fancy.get("applications_symlink", False): - os.symlink("/Applications", os.path.join(disk_root, "Applications")) - - # The Python appscript package broke with OSX 10.8 and isn't being fixed. - # So we now build up an AppleScript string and use the osascript command - # to make the .dmg file pretty: - appscript = Template( """ - on run argv - tell application "Finder" - tell disk "$disk" - open - set current view of container window to icon view - set toolbar visible of container window to false - set statusbar visible of container window to false - set the bounds of container window to {$window_bounds} - set theViewOptions to the icon view options of container window - set arrangement of theViewOptions to not arranged - set icon size of theViewOptions to $icon_size - $background_commands - $items_positions - close -- close/reopen works around a bug... - open - update without registering applications - delay 5 - eject - end tell - end tell - end run - """) - - itemscript = Template('set position of item "${item}" of container window to {${position}}') - items_positions = [] - if "items_position" in fancy: - for name, position in fancy["items_position"].items(): - params = { "item" : name, "position" : ",".join([str(p) for p in position]) } - items_positions.append(itemscript.substitute(params)) - - params = { - "disk" : volname, - "window_bounds" : "300,300,800,620", - "icon_size" : "96", - "background_commands" : "", - "items_positions" : "\n ".join(items_positions) - } - if "window_bounds" in fancy: - params["window_bounds"] = ",".join([str(p) for p in fancy["window_bounds"]]) - if "icon_size" in fancy: - params["icon_size"] = str(fancy["icon_size"]) - if bg_path is not None: - # Set background file, then call SetFile to make it invisible. - # (note: making it invisible first makes set background picture fail) - bgscript = Template("""set background picture of theViewOptions to file ".background:$bgpic" - do shell script "SetFile -a V /Volumes/$disk/.background/$bgpic" """) - params["background_commands"] = bgscript.substitute({"bgpic" : os.path.basename(bg_path), "disk" : params["disk"]}) - - s = appscript.substitute(params) - if verbose >= 2: - print("Running AppleScript:") - print(s) - - p = subprocess.Popen(['osascript', '-'], stdin=subprocess.PIPE) - p.communicate(input=s.encode('utf-8')) - if p.returncode: - print("Error running osascript.") - - if verbose >= 2: - print("+ Finalizing .dmg disk image +") - time.sleep(5) - - try: - runHDIUtil("convert", dmg_name + ".temp", format="UDBZ", o=dmg_name + ".dmg", ov=True) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) - - os.unlink(dmg_name + ".temp.dmg") - -# ------------------------------------------------ - -if verbose >= 2: - print("+ Done +") - -sys.exit(0) diff --git a/share/pixmaps/defi.ico b/contrib/pixmaps/defi.ico similarity index 100% rename from share/pixmaps/defi.ico rename to contrib/pixmaps/defi.ico diff --git a/share/pixmaps/defi128.png b/contrib/pixmaps/defi128.png similarity index 100% rename from share/pixmaps/defi128.png rename to contrib/pixmaps/defi128.png diff --git a/share/pixmaps/defi128.xpm b/contrib/pixmaps/defi128.xpm similarity index 100% rename from share/pixmaps/defi128.xpm rename to contrib/pixmaps/defi128.xpm diff --git a/share/pixmaps/defi16.png b/contrib/pixmaps/defi16.png similarity index 100% rename from share/pixmaps/defi16.png rename to contrib/pixmaps/defi16.png diff --git a/share/pixmaps/defi16.xpm b/contrib/pixmaps/defi16.xpm similarity index 100% rename from share/pixmaps/defi16.xpm rename to contrib/pixmaps/defi16.xpm diff --git a/share/pixmaps/defi256.png b/contrib/pixmaps/defi256.png similarity index 100% rename from share/pixmaps/defi256.png rename to contrib/pixmaps/defi256.png diff --git a/share/pixmaps/defi256.xpm b/contrib/pixmaps/defi256.xpm similarity index 100% rename from share/pixmaps/defi256.xpm rename to contrib/pixmaps/defi256.xpm diff --git a/share/pixmaps/defi32.png b/contrib/pixmaps/defi32.png similarity index 100% rename from share/pixmaps/defi32.png rename to contrib/pixmaps/defi32.png diff --git a/share/pixmaps/defi32.xpm b/contrib/pixmaps/defi32.xpm similarity index 100% rename from share/pixmaps/defi32.xpm rename to contrib/pixmaps/defi32.xpm diff --git a/share/pixmaps/defi64.png b/contrib/pixmaps/defi64.png similarity index 100% rename from share/pixmaps/defi64.png rename to contrib/pixmaps/defi64.png diff --git a/share/pixmaps/defi64.xpm b/contrib/pixmaps/defi64.xpm similarity index 100% rename from share/pixmaps/defi64.xpm rename to contrib/pixmaps/defi64.xpm diff --git a/share/rpcauth/README.md b/contrib/rpcauth/README.md similarity index 91% rename from share/rpcauth/README.md rename to contrib/rpcauth/README.md index 6f627b867b..49f197a13a 100644 --- a/share/rpcauth/README.md +++ b/contrib/rpcauth/README.md @@ -1,7 +1,7 @@ RPC Tools --------------------- -### [RPCAuth](/share/rpcauth) ### +### [RPCAuth](/contrib/rpcauth) ### ``` usage: rpcauth.py [-h] username [password] diff --git a/share/rpcauth/rpcauth.py b/contrib/rpcauth/rpcauth.py similarity index 100% rename from share/rpcauth/rpcauth.py rename to contrib/rpcauth/rpcauth.py diff --git a/contrib/verify-commits/README.md b/contrib/verify-commits/README.md deleted file mode 100644 index bb60d7cc6a..0000000000 --- a/contrib/verify-commits/README.md +++ /dev/null @@ -1,57 +0,0 @@ -Tooling for verification of PGP signed commits ----------------------------------------------- - -This is an incomplete work in progress, but currently includes a pre-push hook -script (`pre-push-hook.sh`) for maintainers to ensure that their own commits -are PGP signed (nearly always merge commits), as well as a Python 3 script to verify -commits against a trusted keys list. - - -Using verify-commits.py safely ------------------------------- - -Remember that you can't use an untrusted script to verify itself. This means -that checking out code, then running `verify-commits.py` against `HEAD` is -_not_ safe, because the version of `verify-commits.py` that you just ran could -be backdoored. Instead, you need to use a trusted version of verify-commits -prior to checkout to make sure you're checking out only code signed by trusted -keys: - - ```sh - git fetch origin && \ - ./contrib/verify-commits/verify-commits.py origin/master && \ - git checkout origin/master - ``` - -Note that the above isn't a good UI/UX yet, and needs significant improvements -to make it more convenient and reduce the chance of errors; pull-reqs -improving this process would be much appreciated. - -Configuration files -------------------- - -* `trusted-git-root`: This file should contain a single git commit hash which is the first unsigned git commit (hence it is the "root of trust"). -* `trusted-sha512-root-commit`: This file should contain a single git commit hash which is the first commit without a SHA512 root commitment. -* `trusted-keys`: This file should contain a \n-delimited list of all PGP fingerprints of authorized commit signers (primary, not subkeys). -* `allow-revsig-commits`: This file should contain a \n-delimited list of git commit hashes. See next section for more info. - -Import trusted keys -------------------- -In order to check the commit signatures, you must add the trusted PGP keys to your machine. [GnuPG](https://gnupg.org/) may be used to import the trusted keys by running the following command: - -```sh -gpg --recv-keys $(/dev/null)" -else - # Note how we've disabled SHA1 with the --weak-digest option, disabling - # signatures - including selfsigs - that use SHA1. While you might think that - # collision attacks shouldn't be an issue as they'd be an attack on yourself, - # in fact because what's being signed is a commit object that's - # semi-deterministically generated by untrusted input (the pull-req) in theory - # an attacker could construct a pull-req that results in a commit object that - # they've created a collision for. Not the most likely attack, but preventing - # it is pretty easy so we do so as a "belt-and-suspenders" measure. - GPG_RES="" - for LINE in $(gpg --version); do - case "$LINE" in - "gpg (GnuPG) 1.4.1"*|"gpg (GnuPG) 2.0."*) - echo "Please upgrade to at least gpg 2.1.10 to check for weak signatures" > /dev/stderr - GPG_RES="$(printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/dev/null)" - ;; - # We assume if you're running 2.1+, you're probably running 2.1.10+ - # gpg will fail otherwise - # We assume if you're running 1.X, it is either 1.4.1X or 1.4.20+ - # gpg will fail otherwise - esac - done - [ "$GPG_RES" = "" ] && GPG_RES="$(printf '%s\n' "$INPUT" | gpg --trust-model always --weak-digest sha1 "$@" 2>/dev/null)" -fi -for LINE in $GPG_RES; do - case "$LINE" in - "[GNUPG:] VALIDSIG "*) - while read KEY; do - [ "${LINE#?GNUPG:? VALIDSIG * * * * * * * * * }" = "$KEY" ] && VALID=true - done < ./contrib/verify-commits/trusted-keys - ;; - "[GNUPG:] REVKEYSIG "*) - [ "$DEFI_VERIFY_COMMITS_ALLOW_REVSIG" != 1 ] && exit 1 - REVSIG=true - GOODREVSIG="[GNUPG:] GOODSIG ${LINE#* * *}" - ;; - "[GNUPG:] EXPKEYSIG "*) - [ "$DEFI_VERIFY_COMMITS_ALLOW_REVSIG" != 1 ] && exit 1 - REVSIG=true - GOODREVSIG="[GNUPG:] GOODSIG ${LINE#* * *}" - ;; - esac -done -if ! $VALID; then - exit 1 -fi -if $VALID && $REVSIG; then - printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/dev/null | grep "^\[GNUPG:\] \(NEWSIG\|SIG_ID\|VALIDSIG\)" - echo "$GOODREVSIG" -else - printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/dev/null -fi diff --git a/contrib/verify-commits/pre-push-hook.sh b/contrib/verify-commits/pre-push-hook.sh deleted file mode 100755 index d59c6c8a4a..0000000000 --- a/contrib/verify-commits/pre-push-hook.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -# Copyright (c) 2014-2015 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C -if ! [[ "$2" =~ ^(git@)?(www.)?github.com(:|/)bitcoin/bitcoin(.git)?$ ]]; then - exit 0 -fi - -while read LINE; do - set -- A $LINE - if [ "$4" != "refs/heads/master" ]; then - continue - fi - if ! ./contrib/verify-commits/verify-commits.py $3 > /dev/null 2>&1; then - echo "ERROR: A commit is not signed, can't push" - ./contrib/verify-commits/verify-commits.py - exit 1 - fi -done < /dev/stdin diff --git a/contrib/verify-commits/trusted-git-root b/contrib/verify-commits/trusted-git-root deleted file mode 100644 index c60f8ab695..0000000000 --- a/contrib/verify-commits/trusted-git-root +++ /dev/null @@ -1 +0,0 @@ -82bcf405f6db1d55b684a1f63a4aabad376cdad7 diff --git a/contrib/verify-commits/trusted-keys b/contrib/verify-commits/trusted-keys deleted file mode 100644 index 27fede6277..0000000000 --- a/contrib/verify-commits/trusted-keys +++ /dev/null @@ -1,6 +0,0 @@ -71A3B16735405025D447E8F274810B012346C9A6 -133EAC179436F14A5CF1B794860FEB804E669320 -32EE5C4C3FA15CCADB46ABE529D4BCB6416F53EC -B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B -CA03882CB1FC067B5D3ACFE4D300116E1C875A3D -E777299FC265DD04793070EB944D35F9AC3DB76A diff --git a/contrib/verify-commits/trusted-sha512-root-commit b/contrib/verify-commits/trusted-sha512-root-commit deleted file mode 100644 index 7d41f90ad7..0000000000 --- a/contrib/verify-commits/trusted-sha512-root-commit +++ /dev/null @@ -1 +0,0 @@ -309bf16257b2395ce502017be627186b749ee749 diff --git a/contrib/verify-commits/verify-commits.py b/contrib/verify-commits/verify-commits.py deleted file mode 100755 index efab98025e..0000000000 --- a/contrib/verify-commits/verify-commits.py +++ /dev/null @@ -1,165 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. -"""Verify commits against a trusted keys list.""" -import argparse -import hashlib -import logging -import os -import subprocess -import sys -import time - -GIT = os.getenv('GIT', 'git') - -def tree_sha512sum(commit='HEAD'): - """Calculate the Tree-sha512 for the commit. - - This is copied from github-merge.py. See https://github.com/bitcoin-core/bitcoin-maintainer-tools.""" - - # request metadata for entire tree, recursively - files = [] - blob_by_name = {} - for line in subprocess.check_output([GIT, 'ls-tree', '--full-tree', '-r', commit]).splitlines(): - name_sep = line.index(b'\t') - metadata = line[:name_sep].split() # perms, 'blob', blobid - assert metadata[1] == b'blob' - name = line[name_sep + 1:] - files.append(name) - blob_by_name[name] = metadata[2] - - files.sort() - # open connection to git-cat-file in batch mode to request data for all blobs - # this is much faster than launching it per file - p = subprocess.Popen([GIT, 'cat-file', '--batch'], stdout=subprocess.PIPE, stdin=subprocess.PIPE) - overall = hashlib.sha512() - for f in files: - blob = blob_by_name[f] - # request blob - p.stdin.write(blob + b'\n') - p.stdin.flush() - # read header: blob, "blob", size - reply = p.stdout.readline().split() - assert reply[0] == blob and reply[1] == b'blob' - size = int(reply[2]) - # hash the blob data - intern = hashlib.sha512() - ptr = 0 - while ptr < size: - bs = min(65536, size - ptr) - piece = p.stdout.read(bs) - if len(piece) == bs: - intern.update(piece) - else: - raise IOError('Premature EOF reading git cat-file output') - ptr += bs - dig = intern.hexdigest() - assert p.stdout.read(1) == b'\n' # ignore LF that follows blob data - # update overall hash with file hash - overall.update(dig.encode("utf-8")) - overall.update(" ".encode("utf-8")) - overall.update(f) - overall.update("\n".encode("utf-8")) - p.stdin.close() - if p.wait(): - raise IOError('Non-zero return value executing git cat-file') - return overall.hexdigest() - -def main(): - - # Enable debug logging if running in CI - if 'CI' in os.environ and os.environ['CI'].lower() == "true": - logging.getLogger().setLevel(logging.DEBUG) - - # Parse arguments - parser = argparse.ArgumentParser(usage='%(prog)s [options] [commit id]') - parser.add_argument('--disable-tree-check', action='store_false', dest='verify_tree', help='disable SHA-512 tree check') - parser.add_argument('--clean-merge', type=float, dest='clean_merge', default=float('inf'), help='Only check clean merge after days ago (default: %(default)s)', metavar='NUMBER') - parser.add_argument('commit', nargs='?', default='HEAD', help='Check clean merge up to commit ') - args = parser.parse_args() - - # get directory of this program and read data files - dirname = os.path.dirname(os.path.abspath(__file__)) - print("Using verify-commits data from " + dirname) - verified_root = open(dirname + "/trusted-git-root", "r", encoding="utf8").read().splitlines()[0] - verified_sha512_root = open(dirname + "/trusted-sha512-root-commit", "r", encoding="utf8").read().splitlines()[0] - revsig_allowed = open(dirname + "/allow-revsig-commits", "r", encoding="utf-8").read().splitlines() - unclean_merge_allowed = open(dirname + "/allow-unclean-merge-commits", "r", encoding="utf-8").read().splitlines() - incorrect_sha512_allowed = open(dirname + "/allow-incorrect-sha512-commits", "r", encoding="utf-8").read().splitlines() - - # Set commit and branch and set variables - current_commit = args.commit - if ' ' in current_commit: - print("Commit must not contain spaces", file=sys.stderr) - sys.exit(1) - verify_tree = args.verify_tree - no_sha1 = True - prev_commit = "" - initial_commit = current_commit - branch = subprocess.check_output([GIT, 'show', '-s', '--format=%H', initial_commit]).decode('utf8').splitlines()[0] - - # Iterate through commits - while True: - - # Log a message to prevent Travis from timing out - logging.debug("verify-commits: [in-progress] processing commit {}".format(current_commit[:8])) - - if current_commit == verified_root: - print('There is a valid path from "{}" to {} where all commits are signed!'.format(initial_commit, verified_root)) - sys.exit(0) - if current_commit == verified_sha512_root: - if verify_tree: - print("All Tree-SHA512s matched up to {}".format(verified_sha512_root), file=sys.stderr) - verify_tree = False - no_sha1 = False - - os.environ['DEFI_VERIFY_COMMITS_ALLOW_SHA1'] = "0" if no_sha1 else "1" - os.environ['DEFI_VERIFY_COMMITS_ALLOW_REVSIG'] = "1" if current_commit in revsig_allowed else "0" - - # Check that the commit (and parents) was signed with a trusted key - if subprocess.call([GIT, '-c', 'gpg.program={}/gpg.sh'.format(dirname), 'verify-commit', current_commit], stdout=subprocess.DEVNULL): - if prev_commit != "": - print("No parent of {} was signed with a trusted key!".format(prev_commit), file=sys.stderr) - print("Parents are:", file=sys.stderr) - parents = subprocess.check_output([GIT, 'show', '-s', '--format=format:%P', prev_commit]).decode('utf8').splitlines()[0].split(' ') - for parent in parents: - subprocess.call([GIT, 'show', '-s', parent], stdout=sys.stderr) - else: - print("{} was not signed with a trusted key!".format(current_commit), file=sys.stderr) - sys.exit(1) - - # Check the Tree-SHA512 - if (verify_tree or prev_commit == "") and current_commit not in incorrect_sha512_allowed: - tree_hash = tree_sha512sum(current_commit) - if ("Tree-SHA512: {}".format(tree_hash)) not in subprocess.check_output([GIT, 'show', '-s', '--format=format:%B', current_commit]).decode('utf8').splitlines(): - print("Tree-SHA512 did not match for commit " + current_commit, file=sys.stderr) - sys.exit(1) - - # Merge commits should only have two parents - parents = subprocess.check_output([GIT, 'show', '-s', '--format=format:%P', current_commit]).decode('utf8').splitlines()[0].split(' ') - if len(parents) > 2: - print("Commit {} is an octopus merge".format(current_commit), file=sys.stderr) - sys.exit(1) - - # Check that the merge commit is clean - commit_time = int(subprocess.check_output([GIT, 'show', '-s', '--format=format:%ct', current_commit]).decode('utf8').splitlines()[0]) - check_merge = commit_time > time.time() - args.clean_merge * 24 * 60 * 60 # Only check commits in clean_merge days - allow_unclean = current_commit in unclean_merge_allowed - if len(parents) == 2 and check_merge and not allow_unclean: - current_tree = subprocess.check_output([GIT, 'show', '--format=%T', current_commit]).decode('utf8').splitlines()[0] - subprocess.call([GIT, 'checkout', '--force', '--quiet', parents[0]]) - subprocess.call([GIT, 'merge', '--no-ff', '--quiet', '--no-gpg-sign', parents[1]], stdout=subprocess.DEVNULL) - recreated_tree = subprocess.check_output([GIT, 'show', '--format=format:%T', 'HEAD']).decode('utf8').splitlines()[0] - if current_tree != recreated_tree: - print("Merge commit {} is not clean".format(current_commit), file=sys.stderr) - subprocess.call([GIT, 'diff', current_commit]) - subprocess.call([GIT, 'checkout', '--force', '--quiet', branch]) - sys.exit(1) - subprocess.call([GIT, 'checkout', '--force', '--quiet', branch]) - - prev_commit = current_commit - current_commit = parents[0] - -if __name__ == '__main__': - main() diff --git a/contrib/verifybinaries/README.md b/contrib/verifybinaries/README.md deleted file mode 100644 index 5978006cd8..0000000000 --- a/contrib/verifybinaries/README.md +++ /dev/null @@ -1,43 +0,0 @@ -### Verify Binaries - -> NOTE: This section is a work in progress for DeFi Blockchain, and may not be applicable at it's current state. - -#### Preparation: - -Make sure you obtain the proper release signing key and verify the fingerprint with several independent sources. - -```sh -$ gpg --fingerprint "DeFi Blockchain binary release signing key" -pub 4096R/36C2E964 2015-06-24 [expires: YYYY-MM-DD] - Key fingerprint = 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964 -uid DeFi Blockchain Team (DeFi Blockchain binary release signing key) -``` - -#### Usage: - -This script attempts to download the signature file `SHA256SUMS.asc` from https://bitcoin.org. - -It first checks if the signature passes, and then downloads the files specified in the file, and checks if the hashes of these files match those that are specified in the signature file. - -The script returns 0 if everything passes the checks. It returns 1 if either the signature check or the hash check doesn't pass. If an error occurs the return value is 2. - - -```sh -./verify.sh defi-core-0.11.2 -./verify.sh defi-core-0.12.0 -./verify.sh defi-core-0.13.0-rc3 -``` - -If you only want to download the binaries of certain platform, add the corresponding suffix, e.g.: - -```sh -./verify.sh defi-core-0.11.2-osx -./verify.sh 0.12.0-linux -./verify.sh defi-core-0.13.0-rc3-win64 -``` - -If you do not want to keep the downloaded binaries, specify anything as the second parameter. - -```sh -./verify.sh defi-core-0.13.0 delete -``` diff --git a/contrib/verifybinaries/verify.sh b/contrib/verifybinaries/verify.sh deleted file mode 100755 index dc0f76e2bb..0000000000 --- a/contrib/verifybinaries/verify.sh +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/env bash -# Copyright (c) 2016 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -### This script attempts to download the signature file SHA256SUMS.asc from -### bitcoincore.org and bitcoin.org and compares them. -### It first checks if the signature passes, and then downloads the files specified in -### the file, and checks if the hashes of these files match those that are specified -### in the signature file. -### The script returns 0 if everything passes the checks. It returns 1 if either the -### signature check or the hash check doesn't pass. If an error occurs the return value is 2 - -export LC_ALL=C -function clean_up { - for file in "$@" - do - rm "$file" 2> /dev/null - done -} - -WORKINGDIR="/tmp/defi_verify_binaries" -TMPFILE="hashes.tmp" - -SIGNATUREFILENAME="SHA256SUMS.asc" -RCSUBDIR="test" -HOST1="https://bitcoincore.org" -HOST2="https://bitcoin.org" -BASEDIR="/bin/" -VERSIONPREFIX="defi-core-" -RCVERSIONSTRING="rc" - -if [ ! -d "$WORKINGDIR" ]; then - mkdir "$WORKINGDIR" -fi - -cd "$WORKINGDIR" || exit 1 - -#test if a version number has been passed as an argument -if [ -n "$1" ]; then - #let's also check if the version number includes the prefix 'defi-', - # and add this prefix if it doesn't - if [[ $1 == "$VERSIONPREFIX"* ]]; then - VERSION="$1" - else - VERSION="$VERSIONPREFIX$1" - fi - - STRIPPEDLAST="${VERSION%-*}" - - #now let's see if the version string contains "rc" or a platform name (e.g. "osx") - if [[ "$STRIPPEDLAST-" == "$VERSIONPREFIX" ]]; then - BASEDIR="$BASEDIR$VERSION/" - else - # let's examine the last part to see if it's rc and/or platform name - STRIPPEDNEXTTOLAST="${STRIPPEDLAST%-*}" - if [[ "$STRIPPEDNEXTTOLAST-" == "$VERSIONPREFIX" ]]; then - - LASTSUFFIX="${VERSION##*-}" - VERSION="$STRIPPEDLAST" - - if [[ $LASTSUFFIX == *"$RCVERSIONSTRING"* ]]; then - RCVERSION="$LASTSUFFIX" - else - PLATFORM="$LASTSUFFIX" - fi - - else - RCVERSION="${STRIPPEDLAST##*-}" - PLATFORM="${VERSION##*-}" - - VERSION="$STRIPPEDNEXTTOLAST" - fi - - BASEDIR="$BASEDIR$VERSION/" - if [[ $RCVERSION == *"$RCVERSIONSTRING"* ]]; then - BASEDIR="$BASEDIR$RCSUBDIR.$RCVERSION/" - fi - fi -else - echo "Error: need to specify a version on the command line" - exit 2 -fi - -if ! WGETOUT=$(wget -N "$HOST1$BASEDIR$SIGNATUREFILENAME" 2>&1); then - echo "Error: couldn't fetch signature file. Have you specified the version number in the following format?" - # shellcheck disable=SC1087 - echo "[$VERSIONPREFIX]-[$RCVERSIONSTRING[0-9]] (example: ${VERSIONPREFIX}0.10.4-${RCVERSIONSTRING}1)" - echo "wget output:" - # shellcheck disable=SC2001 - echo "$WGETOUT"|sed 's/^/\t/g' - exit 2 -fi - -if ! WGETOUT=$(wget -N -O "$SIGNATUREFILENAME.2" "$HOST2$BASEDIR$SIGNATUREFILENAME" 2>&1); then - echo "bitcoin.org failed to provide signature file, but bitcoincore.org did?" - echo "wget output:" - # shellcheck disable=SC2001 - echo "$WGETOUT"|sed 's/^/\t/g' - clean_up $SIGNATUREFILENAME - exit 3 -fi - -SIGFILEDIFFS="$(diff $SIGNATUREFILENAME $SIGNATUREFILENAME.2)" -if [ "$SIGFILEDIFFS" != "" ]; then - echo "bitcoin.org and bitcoincore.org signature files were not equal?" - clean_up $SIGNATUREFILENAME $SIGNATUREFILENAME.2 - exit 4 -fi - -#then we check it -GPGOUT=$(gpg --yes --decrypt --output "$TMPFILE" "$SIGNATUREFILENAME" 2>&1) - -#return value 0: good signature -#return value 1: bad signature -#return value 2: gpg error - -RET="$?" -if [ $RET -ne 0 ]; then - if [ $RET -eq 1 ]; then - #and notify the user if it's bad - echo "Bad signature." - elif [ $RET -eq 2 ]; then - #or if a gpg error has occurred - echo "gpg error. Do you have the DeFi Blockchain binary release signing key installed?" - fi - - echo "gpg output:" - # shellcheck disable=SC2001 - echo "$GPGOUT"|sed 's/^/\t/g' - clean_up $SIGNATUREFILENAME $SIGNATUREFILENAME.2 $TMPFILE - exit "$RET" -fi - -if [ -n "$PLATFORM" ]; then - grep $PLATFORM $TMPFILE > "$TMPFILE-plat" - TMPFILESIZE=$(stat -c%s "$TMPFILE-plat") - if [ $TMPFILESIZE -eq 0 ]; then - echo "error: no files matched the platform specified" && exit 3 - fi - mv "$TMPFILE-plat" $TMPFILE -fi - -#here we extract the filenames from the signature file -FILES=$(awk '{print $2}' "$TMPFILE") - -#and download these one by one -for file in $FILES -do - echo "Downloading $file" - wget --quiet -N "$HOST1$BASEDIR$file" -done - -#check hashes -DIFF=$(diff <(sha256sum $FILES) "$TMPFILE") - -if [ $? -eq 1 ]; then - echo "Hashes don't match." - echo "Offending files:" - echo "$DIFF"|grep "^<"|awk '{print "\t"$3}' - exit 1 -elif [ $? -gt 1 ]; then - echo "Error executing 'diff'" - exit 2 -fi - -if [ -n "$2" ]; then - echo "Clean up the binaries" - clean_up $FILES $SIGNATUREFILENAME $SIGNATUREFILENAME.2 $TMPFILE -else - echo "Keep the binaries in $WORKINGDIR" - clean_up $TMPFILE -fi - -echo -e "Verified hashes of \n$FILES" - -exit 0 diff --git a/contrib/windeploy/detached-sig-create.sh b/contrib/windeploy/detached-sig-create.sh deleted file mode 100755 index 1ebc43c981..0000000000 --- a/contrib/windeploy/detached-sig-create.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# Copyright (c) 2014-2015 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C -if [ -z "$OSSLSIGNCODE" ]; then - OSSLSIGNCODE=osslsigncode -fi - -if [ -z "$1" ]; then - echo "usage: $0 " - echo "example: $0 -key codesign.key" - exit 1 -fi - -OUT=signature-win.tar.gz -SRCDIR=unsigned -WORKDIR=./.tmp -OUTDIR="${WORKDIR}/out" -OUTSUBDIR="${OUTDIR}/win" -TIMESERVER=http://timestamp.comodoca.com -CERTFILE="win-codesign.cert" - -mkdir -p "${OUTSUBDIR}" -basename -a $(ls -1 "${SRCDIR}"/*-unsigned.exe) | while read UNSIGNED; do - echo Signing "${UNSIGNED}" - "${OSSLSIGNCODE}" sign -certs "${CERTFILE}" -t "${TIMESERVER}" -in "${SRCDIR}/${UNSIGNED}" -out "${WORKDIR}/${UNSIGNED}" "$@" - "${OSSLSIGNCODE}" extract-signature -pem -in "${WORKDIR}/${UNSIGNED}" -out "${OUTSUBDIR}/${UNSIGNED}.pem" && rm "${WORKDIR}/${UNSIGNED}" -done - -rm -f "${OUT}" -tar -C "${OUTDIR}" -czf "${OUT}" . -rm -rf "${WORKDIR}" -echo "Created ${OUT}" diff --git a/contrib/windeploy/win-codesign.cert b/contrib/windeploy/win-codesign.cert deleted file mode 100644 index 5bc5dc5809..0000000000 --- a/contrib/windeploy/win-codesign.cert +++ /dev/null @@ -1,100 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFcTCCBFmgAwIBAgIRALWcUnSOxv9FQW3xdaMDO6swDQYJKoZIhvcNAQELBQAw -fDELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSQwIgYDVQQD -ExtTZWN0aWdvIFJTQSBDb2RlIFNpZ25pbmcgQ0EwHhcNMTkwMzI3MDAwMDAwWhcN -MjAwMzI2MjM1OTU5WjCBtDELMAkGA1UEBhMCQ0gxDTALBgNVBBEMBDgwMDUxCzAJ -BgNVBAgMAlpIMRAwDgYDVQQHDAdaw7xyaWNoMRcwFQYDVQQJDA5NYXR0ZW5nYXNz -ZSAyNzEuMCwGA1UECgwlQml0Y29pbiBDb3JlIENvZGUgU2lnbmluZyBBc3NvY2lh -dGlvbjEuMCwGA1UEAwwlQml0Y29pbiBDb3JlIENvZGUgU2lnbmluZyBBc3NvY2lh -dGlvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK04VDwiY1wxcW3E -WTTGmnbciCwETwC96DG4qcoH2PPNsVy3dfwGh0C02Qj2vL64IfwIGUFSgREvyjZk -CNhEuJO2e0nO0rKNNH5v/JO+P7/VYPZkF5a3uUz9ulmihULXioieHB/q0l6BmiJL -+cYaMVfidL9Y+IJwgiTqjnpRhv1Ik083SPsu6GcfQT9MJfY/+xse2EP0l4GfdFE6 -DRcWjiC8UHpfpGYcImzSFZZpbFbqoAyhueCl28QU4f8QAbS6BqNfaAK9MMACWDcK -eTz3C5JK6CiUxOnGIxilXhljuybFUjR4jGl5eTRpuPWk95NTTYS36q+bx/1nYelx -0n4nnDMCAwEAAaOCAbMwggGvMB8GA1UdIwQYMBaAFA7hOqhTOjHVir7Bu61nGgOF -rTQOMB0GA1UdDgQWBBRbN7ECrPCdVvh58enwy3Dix46h2jAOBgNVHQ8BAf8EBAMC -B4AwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDAzARBglghkgBhvhC -AQEEBAMCBBAwQAYDVR0gBDkwNzA1BgwrBgEEAbIxAQIBAwIwJTAjBggrBgEFBQcC -ARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwQwYDVR0fBDwwOjA4oDagNIYyaHR0 -cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdvUlNBQ29kZVNpZ25pbmdDQS5jcmww -cwYIKwYBBQUHAQEEZzBlMD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LnNlY3RpZ28u -Y29tL1NlY3RpZ29SU0FDb2RlU2lnbmluZ0NBLmNydDAjBggrBgEFBQcwAYYXaHR0 -cDovL29jc3Auc2VjdGlnby5jb20wKwYDVR0RBCQwIoEgam9uYXNAYml0Y29pbmNv -cmVjb2Rlc2lnbmluZy5vcmcwDQYJKoZIhvcNAQELBQADggEBAF/AIXcFBWCC2Red -SHN4Cvko5mdSkDNgzjVFc+OwAJ5RdOgbERde4PnHm3Qmrnx+uMetVnmrC8Fv1Iwb -kkR0bdbWBj6lF6zMsClIN6WJEfY+qfj1qi7wyucu+3OElYRC9bm5Lf0mEHQr8lJ1 -lGvAjPh+/hmxoVNbHFMZ1Ea+BrbjVwiSznt0gzdMh0CispBZKLWCIwRwi+hFjQrw -Z7RLH8HeCJ5Ojl/OTDQqh6AylQ7l9w9KHsUt4Jqy/AnCCyAj2/6xjdwnuo3tCZwb -g/9CydiAacD/83odphEeC2iBa+0wsj9bWmyYKY7S9n0u+wm3wBfZbSVMDDPk/la1 -3qCUDLk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF9TCCA92gAwIBAgIQHaJIMG+bJhjQguCWfTPTajANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgx -MTAyMDAwMDAwWhcNMzAxMjMxMjM1OTU5WjB8MQswCQYDVQQGEwJHQjEbMBkGA1UE -CBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQK -Ew9TZWN0aWdvIExpbWl0ZWQxJDAiBgNVBAMTG1NlY3RpZ28gUlNBIENvZGUgU2ln -bmluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIYijTKFehif -SfCWL2MIHi3cfJ8Uz+MmtiVmKUCGVEZ0MWLFEO2yhyemmcuVMMBW9aR1xqkOUGKl -UZEQauBLYq798PgYrKf/7i4zIPoMGYmobHutAMNhodxpZW0fbieW15dRhqb0J+V8 -aouVHltg1X7XFpKcAC9o95ftanK+ODtj3o+/bkxBXRIgCFnoOc2P0tbPBrRXBbZO -oT5Xax+YvMRi1hsLjcdmG0qfnYHEckC14l/vC0X/o84Xpi1VsLewvFRqnbyNVlPG -8Lp5UEks9wO5/i9lNfIi6iwHr0bZ+UYc3Ix8cSjz/qfGFN1VkW6KEQ3fBiSVfQ+n -oXw62oY1YdMCAwEAAaOCAWQwggFgMB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvA -nfKyA2bLMB0GA1UdDgQWBBQO4TqoUzox1Yq+wbutZxoDha00DjAOBgNVHQ8BAf8E -BAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHSUEFjAUBggrBgEFBQcDAwYI -KwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6 -Ly9jcnQudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAl -BggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0B -AQwFAAOCAgEATWNQ7Uc0SmGk295qKoyb8QAAHh1iezrXMsL2s+Bjs/thAIiaG20Q -BwRPvrjqiXgi6w9G7PNGXkBGiRL0C3danCpBOvzW9Ovn9xWVM8Ohgyi33i/klPeF -M4MtSkBIv5rCT0qxjyT0s4E307dksKYjalloUkJf/wTr4XRleQj1qZPea3FAmZa6 -ePG5yOLDCBaxq2NayBWAbXReSnV+pbjDbLXP30p5h1zHQE1jNfYw08+1Cg4LBH+g -S667o6XQhACTPlNdNKUANWlsvp8gJRANGftQkGG+OY96jk32nw4e/gdREmaDJhlI -lc5KycF/8zoFm/lv34h/wCOe0h5DekUxwZxNqfBZslkZ6GqNKQQCd3xLS81wvjqy -VVp4Pry7bwMQJXcVNIr5NsxDkuS6T/FikyglVyn7URnHoSVAaoRXxrKdsbwcCtp8 -Z359LukoTBh+xHsxQXGaSynsCz1XUNLK3f2eBVHlRHjdAd6xdZgNVCT98E7j4viD -vXK6yz067vBeF5Jobchh+abxKgoLpbn0nu6YMgWFnuv5gynTxix9vTp3Los3QqBq -gu07SqqUEKThDfgXxbZaeTMYkuO1dfih6Y4KJR7kHvGfWocj/5+kUZ77OYARzdu1 -xKeogG/lU9Tg46LC0lsa+jImLWpXcBw8pFguo/NbSwfcMlnzh6cabVg= ------END CERTIFICATE----- diff --git a/depends/.dockerignore b/depends/.dockerignore new file mode 100644 index 0000000000..72734102c5 --- /dev/null +++ b/depends/.dockerignore @@ -0,0 +1,12 @@ +SDKs/ +work/ +built/ +sources/ +config.site +x86_64* +i686* +mips* +arm* +aarch64* +riscv32* +riscv64* diff --git a/depends/Makefile b/depends/Makefile index 9ef38551e5..467131d500 100644 --- a/depends/Makefile +++ b/depends/Makefile @@ -1,9 +1,11 @@ .NOTPARALLEL : -SOURCES_PATH ?= $(BASEDIR)/sources -WORK_PATH = $(BASEDIR)/work -BASE_CACHE ?= $(BASEDIR)/built -SDK_PATH ?= $(BASEDIR)/SDKs +# DESTDIR defaults to the dir where it's called from +DESTDIR ?= $(CURDIR) +SOURCES_PATH ?= $(DESTDIR)/sources +WORK_PATH = $(DESTDIR)/work +BASE_CACHE ?= $(DESTDIR)/built +SDK_PATH ?= $(DESTDIR)/SDKs RAPIDCHECK ?= NO_WALLET ?= NO_ZMQ ?= @@ -58,7 +60,7 @@ ifeq ($(host_os),) host_os=$(full_host_os) endif -$(host_arch)_$(host_os)_prefix=$(BASEDIR)/$(host) +$(host_arch)_$(host_os)_prefix=$(DESTDIR)/$(host) $(host_arch)_$(host_os)_host=$(host) host_prefix=$($(host_arch)_$(host_os)_prefix) build_prefix=$(host_prefix)/native diff --git a/depends/README.md b/depends/README.md index e18ba57967..d63f8dc570 100644 --- a/depends/README.md +++ b/depends/README.md @@ -25,7 +25,7 @@ Common `host-platform-triplets` for cross compilation are: - `i686-pc-linux-gnu` for Linux 32 bit - `x86_64-pc-linux-gnu` for x86 Linux - `x86_64-w64-mingw32` for Win64 -- `x86_64-apple-darwin18` for macOS +- `x86_64-apple-darwin` for macOS - `arm-linux-gnueabihf` for Linux ARM 32 bit - `aarch64-linux-gnu` for Linux ARM 64 bit - `riscv32-linux-gnu` for Linux RISC-V 32 bit diff --git a/depends/config.site.in b/depends/config.site.in index 4eb47f79af..4625308d16 100644 --- a/depends/config.site.in +++ b/depends/config.site.in @@ -36,7 +36,7 @@ if test -z "@allow_host_packages@"; then export PKGCONFIG_LIBDIR= fi -CPPFLAGS="-I$depends_prefix/include/ $CPPFLAGS" +CPPFLAGS="-isystem $depends_prefix/include/ $CPPFLAGS" LDFLAGS="-L$depends_prefix/lib $LDFLAGS" if test -n "@CC@" -a -z "${CC}"; then diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index b14ce09cb8..7c880bc7c4 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -1,12 +1,13 @@ -OSX_MIN_VERSION=10.14 -OSX_SDK_VERSION=10.15.1 -XCODE_VERSION=11.3.1 -XCODE_BUILD_ID=11C505 +OSX_MIN_VERSION=10.15 +OSX_SDK_VERSION=11.0 +XCODE_VERSION=12.2 +XCODE_BUILD_ID=12B45b +LD64_VERSION=609 + OSX_SDK=$(SDK_PATH)/Xcode-$(XCODE_VERSION)-$(XCODE_BUILD_ID)-extracted-SDK-with-libcxx-headers -LD64_VERSION=530 -darwin_CC=clang -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -stdlib=libc++ +darwin_CC=clang -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -Wno-unused-command-line-argument -Wno-unused-variable +darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -stdlib=libc++ -Wno-unused-command-line-argument -Wno-unused-variable darwin_CFLAGS=-pipe darwin_CXXFLAGS=$(darwin_CFLAGS) diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk index 73f5aed3b8..7d138fbed2 100644 --- a/depends/packages/bdb.mk +++ b/depends/packages/bdb.mk @@ -10,10 +10,6 @@ define $(package)_set_vars $(package)_config_opts=--disable-shared --enable-cxx --disable-replication --enable-option-checking $(package)_config_opts_mingw32=--enable-mingw $(package)_config_opts_linux=--with-pic -$(package)_config_opts_freebsd=--with-pic -$(package)_config_opts_netbsd=--with-pic -$(package)_config_opts_openbsd=--with-pic -$(package)_config_opts_android=--with-pic $(package)_cflags+=-Wno-error=implicit-function-declaration -Wno-error=format-security $(package)_cppflags_mingw32=-DUNICODE -D_UNICODE endef diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index b799f2fb91..53f2a2e283 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -1,12 +1,6 @@ package=boost # Official version hashes -# 71: d73a8da01e8bf8c7eda40b4c84915071a8c8a0df4a6734537ddde4a8580524ee -# 72: 59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722 -# 73: 4eb3b8d442b426dc35346235c8733b5ae35ba431690e38c6a8263dce9fcbb402 -# 74: 83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1 -# 75: 953db31e016db7bb207f11432bef7df100516eeb746843fa0486a222e3fd49cb -# 76: f0397ba6e982c4450f27bf32a2a83292aba035b827a5623a14636ea583318c41 # 77: fc9f85fc030e233142908241af7a846e60630aa7388de9a5fafb1f3a26840854 # 78: 8681f175d4bdb26c52222665793eef08490d7758529330f98d3b29dd0735bccc @@ -23,7 +17,7 @@ $(package)_config_opts_debug=variant=debug $(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam $(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1 $(package)_config_opts_linux=threadapi=pthread runtime-link=shared -$(package)_config_opts_darwin=--toolset=darwin-4.2.1 runtime-link=shared +$(package)_config_opts_darwin=--toolset=darwin runtime-link=shared $(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static $(package)_config_opts_x86_64_mingw32=address-model=64 $(package)_config_opts_i686_mingw32=address-model=32 diff --git a/depends/packages/libevent.mk b/depends/packages/libevent.mk index 558de6adee..104e8b12bb 100644 --- a/depends/packages/libevent.mk +++ b/depends/packages/libevent.mk @@ -12,10 +12,6 @@ define $(package)_set_vars $(package)_config_opts += --disable-dependency-tracking --enable-option-checking $(package)_config_opts_release=--disable-debug-mode $(package)_config_opts_linux=--with-pic - $(package)_config_opts_freebsd=--with-pic - $(package)_config_opts_netbsd=--with-pic - $(package)_config_opts_openbsd=--with-pic - $(package)_config_opts_android=--with-pic $(package)_cppflags_mingw32=-D_WIN32_WINNT=0x0601 endef diff --git a/depends/packages/native_biplist.mk b/depends/packages/native_biplist.mk deleted file mode 100644 index c3054cbd1a..0000000000 --- a/depends/packages/native_biplist.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=native_biplist -$(package)_version=1.0.3 -$(package)_download_path=https://bitbucket.org/wooster/biplist/downloads -$(package)_file_name=biplist-$($(package)_version).tar.gz -$(package)_sha256_hash=4c0549764c5fe50b28042ec21aa2e14fe1a2224e239a1dae77d9e7f3932aa4c6 -$(package)_install_libdir=$(build_prefix)/lib/python3/dist-packages - -define $(package)_build_cmds - python3 setup.py build -endef - -define $(package)_stage_cmds - mkdir -p $($(package)_install_libdir) && \ - python3 setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir) -endef diff --git a/depends/packages/native_cctools.mk b/depends/packages/native_cctools.mk index 74c32c4e38..5ad2b50337 100644 --- a/depends/packages/native_cctools.mk +++ b/depends/packages/native_cctools.mk @@ -1,20 +1,20 @@ package=native_cctools -$(package)_version=4da2f3b485bcf4cef526f30c0b8c0bcda99cdbb4 +$(package)_version=f28fb5e9c31efd3d0552afcce2d2c03cae25c1ca $(package)_download_path=https://github.com/tpoechtrager/cctools-port/archive $(package)_file_name=$($(package)_version).tar.gz -$(package)_sha256_hash=a2d491c0981cef72fee2b833598f20f42a6c44a7614a61c439bda93d56446fec +$(package)_sha256_hash=4a1359b6a79738b375b39ae05852712a77ff24d7ef2a498e99d35de78fff42c7 $(package)_build_subdir=cctools -$(package)_clang_version=8.0.0 -$(package)_clang_download_path=https://releases.llvm.org/$($(package)_clang_version) -$(package)_clang_download_file=clang+llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz -$(package)_clang_file_name=clang-llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz -$(package)_clang_sha256_hash=9ef854b71949f825362a119bf2597f744836cb571131ae6b721cd102ffea8cd0 +$(package)_clang_version=15.0.6 +$(package)_clang_download_path=https://github.com/llvm/llvm-project/releases/download/llvmorg-$($(package)_clang_version) +$(package)_clang_download_file=clang+llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-18.04.tar.xz +$(package)_clang_file_name=clang-llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-18.04.tar.xz +$(package)_clang_sha256_hash=38bc7f5563642e73e69ac5626724e206d6d539fbef653541b34cae0ba9c3f036 -$(package)_libtapi_version=3efb201881e7a76a21e0554906cf306432539cef +$(package)_libtapi_version=b7b5bdbfda9e8062d405b48da3b811afad98ae76 $(package)_libtapi_download_path=https://github.com/tpoechtrager/apple-libtapi/archive $(package)_libtapi_download_file=$($(package)_libtapi_version).tar.gz $(package)_libtapi_file_name=$($(package)_libtapi_version).tar.gz -$(package)_libtapi_sha256_hash=380c1ca37cfa04a8699d0887a8d3ee1ad27f3d08baba78887c73b09485c0fbd3 +$(package)_libtapi_sha256_hash=577b86f5729f24dc10eba48995363cffd5d62bb0804c8051e1c1a2f08a710737 $(package)_extra_sources=$($(package)_clang_file_name) $(package)_extra_sources += $($(package)_libtapi_file_name) @@ -46,10 +46,21 @@ define $(package)_set_vars $(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++ endef +# Note: Works around 2 bugs: +# - DESTDIR isn't passed on in libtapi port. This patches that. +# - DESTDIR behavior is buggy, likely due to symlinks involved in the tree and also +# different behaviors on headers and lib install. +# - Attempts to install to absolute path sometimes, and sometimes in the tree with nested prefix. +# - Workaround for now: +# - DESTDIR tames it into the tree, despite having the nested prefix. +# - Then, just do a move to the right location where autoconf later expects it define $(package)_preprocess_cmds - CC=$($(package)_cc) CXX=$($(package)_cxx) INSTALLPREFIX=$($(package)_extract_dir) ./libtapi/build.sh && \ - CC=$($(package)_cc) CXX=$($(package)_cxx) INSTALLPREFIX=$($(package)_extract_dir) ./libtapi/install.sh && \ - sed -i.old "/define HAVE_PTHREADS/d" $($(package)_build_subdir)/ld64/src/ld/InputFiles.h + sed -i.old 's/$$MAKE install-libtapi/$$MAKE DESTDIR=\"$$$$INSTALLPREFIX\" install-libtapi/' ./libtapi/install.sh && \ + CC=$($(package)_cc) CXX=$($(package)_cxx) INSTALLPREFIX="$($(package)_extract_dir)" ./libtapi/build.sh && \ + CC=$($(package)_cc) CXX=$($(package)_cxx) INSTALLPREFIX="$($(package)_extract_dir)" ./libtapi/install.sh && \ + sed -i.old "/define HAVE_PTHREADS/d" $($(package)_build_subdir)/ld64/src/ld/InputFiles.h && \ + mv "$($(package)_extract_dir)/$($(package)_extract_dir)/include" $($(package)_extract_dir)/ && \ + mv "$($(package)_extract_dir)/$($(package)_extract_dir)/lib" $($(package)_extract_dir)/ endef define $(package)_config_cmds @@ -64,7 +75,7 @@ define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install && \ mkdir -p $($(package)_staging_prefix_dir)/lib/ && \ cd $($(package)_extract_dir) && \ - cp lib/libtapi.so.6 $($(package)_staging_prefix_dir)/lib/ && \ + cp lib/libtapi.so* $($(package)_staging_prefix_dir)/lib/ && \ cd $($(package)_extract_dir)/toolchain && \ mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include && \ mkdir -p $($(package)_staging_prefix_dir)/bin $($(package)_staging_prefix_dir)/include && \ @@ -74,4 +85,3 @@ define $(package)_stage_cmds cp -rf lib/clang/$($(package)_clang_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include/ && \ cp bin/dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil endef - diff --git a/depends/packages/native_cdrkit.mk b/depends/packages/native_cdrkit.mk deleted file mode 100644 index 8243458ec8..0000000000 --- a/depends/packages/native_cdrkit.mk +++ /dev/null @@ -1,26 +0,0 @@ -package=native_cdrkit -$(package)_version=1.1.11 -$(package)_download_path=https://distro.ibiblio.org/fatdog/source/600/c -$(package)_file_name=cdrkit-$($(package)_version).tar.bz2 -$(package)_sha256_hash=b50d64c214a65b1a79afe3a964c691931a4233e2ba605d793eb85d0ac3652564 -$(package)_patches=cdrkit-deterministic.patch - -define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/cdrkit-deterministic.patch -endef - -define $(package)_config_cmds - cmake -DCMAKE_INSTALL_PREFIX=$(build_prefix) -endef - -define $(package)_build_cmds - $(MAKE) genisoimage -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) -C genisoimage install -endef - -define $(package)_postprocess_cmds - rm bin/isovfy bin/isoinfo bin/isodump bin/isodebug bin/devdump -endef diff --git a/depends/packages/native_ds_store.mk b/depends/packages/native_ds_store.mk deleted file mode 100644 index f99b689ecd..0000000000 --- a/depends/packages/native_ds_store.mk +++ /dev/null @@ -1,16 +0,0 @@ -package=native_ds_store -$(package)_version=1.1.2 -$(package)_download_path=https://github.com/al45tair/ds_store/archive/ -$(package)_file_name=v$($(package)_version).tar.gz -$(package)_sha256_hash=3b3ecb7bf0a5157f5b6010bc3af7c141fb0ad3527084e63336220d22744bc20c -$(package)_install_libdir=$(build_prefix)/lib/python3/dist-packages -$(package)_dependencies=native_biplist - -define $(package)_build_cmds - python3 setup.py build -endef - -define $(package)_stage_cmds - mkdir -p $($(package)_install_libdir) && \ - python3 setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir) -endef diff --git a/depends/packages/native_libdmg-hfsplus.mk b/depends/packages/native_libdmg-hfsplus.mk deleted file mode 100644 index a4ffb6046c..0000000000 --- a/depends/packages/native_libdmg-hfsplus.mk +++ /dev/null @@ -1,22 +0,0 @@ -package=native_libdmg-hfsplus -$(package)_version=0.1 -$(package)_download_path=https://github.com/theuni/libdmg-hfsplus/archive -$(package)_file_name=libdmg-hfsplus-v$($(package)_version).tar.gz -$(package)_sha256_hash=6569a02eb31c2827080d7d59001869ea14484c281efab0ae7f2b86af5c3120b3 -$(package)_build_subdir=build - -define $(package)_preprocess_cmds - mkdir build -endef - -define $(package)_config_cmds - cmake -DCMAKE_INSTALL_PREFIX:PATH=$(build_prefix)/bin .. -endef - -define $(package)_build_cmds - $(MAKE) -C dmg -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) -C dmg install -endef diff --git a/depends/packages/native_mac_alias.mk b/depends/packages/native_mac_alias.mk deleted file mode 100644 index e60b99dccc..0000000000 --- a/depends/packages/native_mac_alias.mk +++ /dev/null @@ -1,15 +0,0 @@ -package=native_mac_alias -$(package)_version=2.0.7 -$(package)_download_path=https://github.com/al45tair/mac_alias/archive/ -$(package)_file_name=v$($(package)_version).tar.gz -$(package)_sha256_hash=6f606d3b6bccd2112aeabf1a063f5b5ece87005a5d7e97c8faca23b916e88838 -$(package)_install_libdir=$(build_prefix)/lib/python3/dist-packages - -define $(package)_build_cmds - python3 setup.py build -endef - -define $(package)_stage_cmds - mkdir -p $($(package)_install_libdir) && \ - python3 setup.py install --root=$($(package)_staging_dir) --prefix=$(build_prefix) --install-lib=$($(package)_install_libdir) -endef diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index ea003be486..ced6602ea0 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -8,8 +8,7 @@ zmq_packages=zeromq upnp_packages=miniupnpc -darwin_native_packages = native_biplist native_ds_store native_mac_alias - +darwin_native_packages = ifneq ($(build_os),darwin) -darwin_native_packages += native_cctools native_cdrkit native_libdmg-hfsplus +darwin_native_packages += native_cctools endif diff --git a/depends/packages/zeromq.mk b/depends/packages/zeromq.mk index f9b26a1bf3..9dce9c9b5f 100644 --- a/depends/packages/zeromq.mk +++ b/depends/packages/zeromq.mk @@ -1,21 +1,20 @@ package=zeromq -$(package)_version=4.3.1 +$(package)_version=4.3.4 $(package)_download_path=https://github.com/zeromq/libzmq/releases/download/v$($(package)_version)/ $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=bcbabe1e2c7d0eec4ed612e10b94b112dd5f06fcefa994a0c79a45d835cd21eb -$(package)_patches=0001-fix-build-with-older-mingw64.patch 0002-disable-pthread_set_name_np.patch +$(package)_sha256_hash=c593001a89f5a85dd2ddf564805deb860e02471171b3f204944857336295c3e5 +$(package)_patches= define $(package)_set_vars - $(package)_config_opts=--without-docs --disable-shared --disable-curve --disable-curve-keygen --disable-perf --disable-Werror --disable-drafts + $(package)_config_opts = --without-docs --disable-shared --disable-valgrind + $(package)_config_opts += --disable-perf --disable-curve-keygen --disable-curve --disable-libbsd $(package)_config_opts += --without-libsodium --without-libgssapi_krb5 --without-pgm --without-norm --without-vmci - $(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov + $(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov --disable-dependency-tracking + $(package)_config_opts += --disable-Werror --disable-drafts --enable-option-checking $(package)_config_opts_linux=--with-pic - $(package)_cxxflags=-std=c++17 endef define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/0001-fix-build-with-older-mingw64.patch && \ - patch -p1 < $($(package)_patch_dir)/0002-disable-pthread_set_name_np.patch && \ cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub config endef diff --git a/depends/patches/native_cdrkit/cdrkit-deterministic.patch b/depends/patches/native_cdrkit/cdrkit-deterministic.patch deleted file mode 100644 index 8ab0993dc4..0000000000 --- a/depends/patches/native_cdrkit/cdrkit-deterministic.patch +++ /dev/null @@ -1,86 +0,0 @@ ---- cdrkit-1.1.11.old/genisoimage/tree.c 2008-10-21 19:57:47.000000000 -0400 -+++ cdrkit-1.1.11/genisoimage/tree.c 2013-12-06 00:23:18.489622668 -0500 -@@ -1139,8 +1139,9 @@ - scan_directory_tree(struct directory *this_dir, char *path, - struct directory_entry *de) - { -- DIR *current_dir; -+ int current_file; - char whole_path[PATH_MAX]; -+ struct dirent **d_list; - struct dirent *d_entry; - struct directory *parent; - int dflag; -@@ -1164,7 +1165,8 @@ - this_dir->dir_flags |= DIR_WAS_SCANNED; - - errno = 0; /* Paranoia */ -- current_dir = opendir(path); -+ //current_dir = opendir(path); -+ current_file = scandir(path, &d_list, NULL, alphasort); - d_entry = NULL; - - /* -@@ -1173,12 +1175,12 @@ - */ - old_path = path; - -- if (current_dir) { -+ if (current_file >= 0) { - errno = 0; -- d_entry = readdir(current_dir); -+ d_entry = d_list[0]; - } - -- if (!current_dir || !d_entry) { -+ if (current_file < 0 || !d_entry) { - int ret = 1; - - #ifdef USE_LIBSCHILY -@@ -1191,8 +1193,8 @@ - de->isorec.flags[0] &= ~ISO_DIRECTORY; - ret = 0; - } -- if (current_dir) -- closedir(current_dir); -+ if(d_list) -+ free(d_list); - return (ret); - } - #ifdef ABORT_DEEP_ISO_ONLY -@@ -1208,7 +1210,7 @@ - errmsgno(EX_BAD, "use Rock Ridge extensions via -R or -r,\n"); - errmsgno(EX_BAD, "or allow deep ISO9660 directory nesting via -D.\n"); - } -- closedir(current_dir); -+ free(d_list); - return (1); - } - #endif -@@ -1250,13 +1252,13 @@ - * The first time through, skip this, since we already asked - * for the first entry when we opened the directory. - */ -- if (dflag) -- d_entry = readdir(current_dir); -+ if (dflag && current_file >= 0) -+ d_entry = d_list[current_file]; - dflag++; - -- if (!d_entry) -+ if (current_file < 0) - break; -- -+ current_file--; - /* OK, got a valid entry */ - - /* If we do not want all files, then pitch the backups. */ -@@ -1348,7 +1350,7 @@ - insert_file_entry(this_dir, whole_path, d_entry->d_name); - #endif /* APPLE_HYB */ - } -- closedir(current_dir); -+ free(d_list); - - #ifdef APPLE_HYB - /* diff --git a/depends/patches/zeromq/0001-fix-build-with-older-mingw64.patch b/depends/patches/zeromq/0001-fix-build-with-older-mingw64.patch deleted file mode 100644 index b911ac5672..0000000000 --- a/depends/patches/zeromq/0001-fix-build-with-older-mingw64.patch +++ /dev/null @@ -1,30 +0,0 @@ -From f6866b0f166ad168618aae64c7fbee8775d3eb23 Mon Sep 17 00:00:00 2001 -From: mruddy <6440430+mruddy@users.noreply.github.com> -Date: Sat, 30 Jun 2018 09:44:58 -0400 -Subject: [PATCH] fix build with older mingw64 - ---- - src/windows.hpp | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/windows.hpp b/src/windows.hpp -index 6c3839fd..2c32ec79 100644 ---- a/src/windows.hpp -+++ b/src/windows.hpp -@@ -58,6 +58,13 @@ - #include - #include - #include -+ -+#if defined __MINGW64_VERSION_MAJOR && __MINGW64_VERSION_MAJOR < 4 -+// Workaround for mingw-w64 < v4.0 which did not include ws2ipdef.h in iphlpapi.h. -+// Fixed in mingw-w64 by 9bd8fe9148924840d315b4c915dd099955ea89d1. -+#include -+#include -+#endif - #include - - #if !defined __MINGW32__ --- -2.17.1 - diff --git a/depends/patches/zeromq/0002-disable-pthread_set_name_np.patch b/depends/patches/zeromq/0002-disable-pthread_set_name_np.patch deleted file mode 100644 index 022e311977..0000000000 --- a/depends/patches/zeromq/0002-disable-pthread_set_name_np.patch +++ /dev/null @@ -1,35 +0,0 @@ -From c9bbdd6581d07acfe8971e4bcebe278a3676cf03 Mon Sep 17 00:00:00 2001 -From: mruddy <6440430+mruddy@users.noreply.github.com> -Date: Sat, 30 Jun 2018 09:57:18 -0400 -Subject: [PATCH] disable pthread_set_name_np - -pthread_set_name_np adds a Glibc requirement on >= 2.12. ---- - src/thread.cpp | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/thread.cpp b/src/thread.cpp -index a1086b0c..9943f354 100644 ---- a/src/thread.cpp -+++ b/src/thread.cpp -@@ -307,7 +307,7 @@ void zmq::thread_t::setThreadName (const char *name_) - */ - if (!name_) - return; -- -+#if 0 - #if defined(ZMQ_HAVE_PTHREAD_SETNAME_1) - int rc = pthread_setname_np (name_); - if (rc) -@@ -323,6 +323,8 @@ void zmq::thread_t::setThreadName (const char *name_) - #elif defined(ZMQ_HAVE_PTHREAD_SET_NAME) - pthread_set_name_np (descriptor, name_); - #endif -+#endif -+ return; - } - - #endif --- -2.17.1 - diff --git a/doc/.dockerignore b/doc/.dockerignore new file mode 100644 index 0000000000..38498103bb --- /dev/null +++ b/doc/.dockerignore @@ -0,0 +1 @@ +Doxyfile diff --git a/doc/JSON-RPC-interface.md b/doc/JSON-RPC-interface.md index f533135150..37f6162ea9 100644 --- a/doc/JSON-RPC-interface.md +++ b/doc/JSON-RPC-interface.md @@ -79,7 +79,7 @@ RPC interface will be abused. configuration directory, and using these credentials is the preferred RPC authentication method. If you need to generate static login credentials for your programs, you can use the script in the - `share/rpcauth` directory in the Bitcoin Core source tree. As a final + `contrib/rpcauth` directory in the Bitcoin Core source tree. As a final fallback, you can directly use manually-chosen `rpcuser` and `rpcpassword` configuration parameters---but you must ensure that you choose a strong and unique passphrase (and still don't use insecure diff --git a/doc/build-quick.md b/doc/build-quick.md index c3c57ec9a3..82c702b0ec 100644 --- a/doc/build-quick.md +++ b/doc/build-quick.md @@ -9,33 +9,112 @@ build it easily with the `./make.sh` file in the root directory. $ ./make.sh Usage: ./make.sh +`./make.sh build` or `./make.sh docker-build` are your friends :) + Commands: build + build-conf + build-deps + build-make + ci-export-vars clean + clean-conf clean-depends - clean-mac-sdk + clean-pkg-local-osx-sysroot deploy docker-build - docker-build-deploy-git - docker-clean - docker-clean-images + docker-clean-all + docker-clean-builds docker-deploy - docker-package - docker-package-git - docker-purge docker-release - docker-release-git + exec git-version help package - pkg-ensure-mac-sdk pkg-install-deps + pkg-install-deps-arm64 + pkg-install-deps-armhf + pkg-install-deps-mingw-x86-64 + pkg-install-deps-osx-tools + pkg-install-llvm + pkg-install-rust + pkg-local-ensure-osx-sysroot + pkg-update-base purge release - sign + test + +Note: All commands without docker-* prefix assume that it's run in +an environment with correct arch and pre-requisites configured. +(most pre-requisites can be installed with pkg-* commands). +``` + +## `TARGET` values + +### Supported + +- x86_64-pc-linux-gnu +- x86_64-w64-mingw32 +- x86_64-apple-darwin + +### Best effort + +- aarch64-linux-gnu +- arm-linux-gnueabihf +- arm-apple-darwin + +## Defined `env` variables + +``` + IMAGE_PREFIX=${IMAGE_PREFIX:-"defichain"} + GIT_VERSION=${GIT_VERSION:-0} + if [[ "$GIT_VERSION" == 1 ]]; then + IMAGE_VERSION=${IMAGE_VERSION:-"$(git_version 0)"} + else + IMAGE_VERSION=${IMAGE_VERSION:-"latest"} + fi + + DOCKER_ROOT_CONTEXT=${DOCKER_ROOT_CONTEXT:-"."} + DOCKERFILE=${DOCKERFILE:-""} + DOCKERFILES_DIR=${DOCKERFILES_DIR:-"./contrib/dockerfiles"} + + ROOT_DIR="$(_canonicalize "${_SCRIPT_DIR}")" + + TARGET=${TARGET:-"$(_get_default_target)"} + + RELEASE_DIR=${RELEASE_DIR:-"./build"} + RELEASE_DIR="$(_canonicalize "$RELEASE_DIR")" + RELEASE_TARGET_DIR="${RELEASE_DIR}/${TARGET}" + DEPENDS_DIR=${DEPENDS_DIR:-"${RELEASE_DIR}/depends"} + DEPENDS_DIR="$(_canonicalize "$DEPENDS_DIR")" + + CLANG_DEFAULT_VERSION=${CLANG_DEFAULT_VERSION:-"15"} + MAKE_DEBUG=${MAKE_DEBUG:-"0"} + + local default_compiler_flags="" + if [[ "${TARGET}" == "x86_64-pc-linux-gnu" ]]; then + local clang_ver="${CLANG_DEFAULT_VERSION}" + default_compiler_flags="CC=clang-${clang_ver} CXX=clang++-${clang_ver}" + fi + + MAKE_JOBS=${MAKE_JOBS:-"$(_nproc)"} + + MAKE_CONF_ARGS="$(_get_default_conf_args) ${MAKE_CONF_ARGS:-}" + MAKE_CONF_ARGS="${default_compiler_flags} ${MAKE_CONF_ARGS:-}" + if [[ "${MAKE_DEBUG}" == "1" ]]; then + MAKE_CONF_ARGS="${MAKE_CONF_ARGS} --enable-debug"; + fi + + MAKE_CONF_ARGS_OVERRIDE="${MAKE_CONF_ARGS_OVERRIDE:-}" + if [[ "${MAKE_CONF_ARGS_OVERRIDE}" ]]; then + MAKE_CONF_ARGS="${MAKE_CONF_ARGS_OVERRIDE}" + fi -Note: All non-docker commands assume that it's run on an environment -with correct arch and the pre-requisites properly configured. + MAKE_ARGS=${MAKE_ARGS:-} + MAKE_DEPS_ARGS=${MAKE_DEPS_ARGS:-} ``` -More documentation on this will be update shortly. Meanwhile, please take a look at the [UNIX build process](./build-unix.md) \ No newline at end of file +Please read the `./make.sh` file for more details on the build helpers. +[UNIX build process](./build-unix.md) should also have more info though using +`./make.sh` is recommended as it builds out-of-tree by default and supports +multiple targets. diff --git a/doc/defi-conf.md b/doc/defi-conf.md index 44dfc8e6b4..16c1df0bc0 100644 --- a/doc/defi-conf.md +++ b/doc/defi-conf.md @@ -59,4 +59,4 @@ Windows | `%APPDATA%\DeFi Blockchain\` | `C:\Users\username\AppData\Roaming\DeFi Linux | `$HOME/.defi/` | `/home/username/.defi/defi.conf` macOS | `$HOME/Library/Application Support/DeFi/` | `/Users/username/Library/Application Support/DeFi/defi.conf` -You can find an example defi.conf file in [share/examples/defi.conf](../share/examples/defi.conf). +You can find an example defi.conf file in [contrib/conf-examples/defi.conf](../contrib/conf-examples/defi.conf). diff --git a/doc/developer-notes.md b/doc/developer-notes.md index 8cefa97e62..6afb4e7024 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -754,39 +754,6 @@ GUI - *Rationale*: Blocking the GUI thread can increase latency, and lead to hangs and deadlocks. -Subtrees ----------- - -Several parts of the repository are subtrees of software maintained elsewhere. - -Some of these are maintained by active developers of Bitcoin Core, in which case changes should probably go -directly upstream without being PRed directly against the project. They will be merged back in the next -subtree merge. - -Others are external projects without a tight relationship with our project. Changes to these should also -be sent upstream, but bugfixes may also be prudent to PR against Bitcoin Core so that they can be integrated -quickly. Cosmetic changes should be purely taken upstream. - -There is a tool in `test/lint/git-subtree-check.sh` to check a subtree directory for consistency with -its upstream repository. - -Current subtrees include: - -- src/leveldb - - Upstream at https://github.com/google/leveldb ; Maintained by Google, but - open important PRs to Core to avoid delay. - - **Note**: Follow the instructions in [Upgrading LevelDB](#upgrading-leveldb) when - merging upstream changes to the LevelDB subtree. - -- src/libsecp256k1 - - Upstream at https://github.com/bitcoin-core/secp256k1/ ; actively maintained by Core contributors. - -- src/crypto/ctaes - - Upstream at https://github.com/bitcoin-core/ctaes ; actively maintained by Core contributors. - -- src/univalue - - Upstream at https://github.com/bitcoin-core/univalue ; actively maintained by Core contributors, deviates from upstream https://github.com/jgarzik/univalue - Upgrading LevelDB --------------------- diff --git a/doc/init.md b/doc/init.md index 97ec4e1da3..a2f34bd8c2 100644 --- a/doc/init.md +++ b/doc/init.md @@ -7,7 +7,6 @@ can be found in the contrib/init folder. contrib/init/defid.service: systemd service unit configuration contrib/init/defid.openrc: OpenRC compatible SysV style init script contrib/init/defid.openrcconf: OpenRC conf.d file - contrib/init/defid.conf: Upstart service configuration file contrib/init/defid.init: CentOS compatible SysV style init script Service User @@ -44,7 +43,7 @@ This allows for running defid without having to do any manual configuration. relative to the data directory. `wallet` *only* supports relative paths. For an example configuration file that describes the configuration settings, -see `share/examples/defi.conf`. +see `contrib/conf-examples/defi.conf`. Paths --------------------------------- @@ -109,16 +108,6 @@ check ownership and permissions and make it executable. Test it with `/etc/init.d/defid start` and configure it to run on startup with `rc-update add defid` -### Upstart (for Debian/Ubuntu based distributions) - -Upstart is the default init system for Debian/Ubuntu versions older than 15.04. If you are using version 15.04 or newer and haven't manually configured upstart you should follow the systemd instructions instead. - -Drop defid.conf in /etc/init. Test by running `service defid start` -it will automatically start on reboot. - -NOTE: This script is incompatible with CentOS 5 and Amazon Linux 2014 as they -use old versions of Upstart and do not supply the start-stop-daemon utility. - ### CentOS Copy defid.init to /etc/init.d/defid. Test by running `service defid start`. diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am deleted file mode 100644 index 868cec5c22..0000000000 --- a/doc/man/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ -dist_man1_MANS= - -if BUILD_DEFID - dist_man1_MANS+=defid.1 -endif - -if BUILD_DEFI_CLI - dist_man1_MANS+=defi-cli.1 -endif - -if BUILD_DEFI_TX - dist_man1_MANS+=defi-tx.1 -endif - -if ENABLE_WALLET -if BUILD_DEFI_WALLET - dist_man1_MANS+=defi-wallet.1 -endif -endif diff --git a/doc/man/defi-cli.1 b/doc/man/defi-cli.1 deleted file mode 100644 index f0c049d5bc..0000000000 --- a/doc/man/defi-cli.1 +++ /dev/null @@ -1,119 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. -.TH DEFI-CLI "1" "April 2020" "defi-cli v1.0.0" "User Commands" -.SH NAME -defi-cli \- manual page for defi-cli v1.0.0 -.SH SYNOPSIS -.B defi-cli -[\fI\,options\/\fR] \fI\, \/\fR[\fI\,params\/\fR] \fI\,Send command to DeFi Blockchain\/\fR -.br -.B defi-cli -[\fI\,options\/\fR] \fI\,-named \/\fR[\fI\,name=value\/\fR]... \fI\,Send command to DeFi Blockchain (with named arguments)\/\fR -.br -.B defi-cli -[\fI\,options\/\fR] \fI\,help List commands\/\fR -.br -.B defi-cli -[\fI\,options\/\fR] \fI\,help Get help for a command\/\fR -.SH DESCRIPTION -DeFi Blockchain RPC client version v1.0.0 -.SH OPTIONS -.HP -\-? -.IP -Print this help message and exit -.HP -\fB\-conf=\fR -.IP -Specify configuration file. Relative paths will be prefixed by datadir -location. (default: defi.conf) -.HP -\fB\-datadir=\fR -.IP -Specify data directory -.HP -\fB\-getinfo\fR -.IP -Get general information from the remote server. Note that unlike -server\-side RPC calls, the results of \fB\-getinfo\fR is the result of -multiple non\-atomic requests. Some entries in the result may -represent results from different states (e.g. wallet balance may -be as of a different block from the chain state reported) -.HP -\fB\-named\fR -.IP -Pass named instead of positional arguments (default: false) -.HP -\fB\-rpcclienttimeout=\fR -.IP -Timeout in seconds during HTTP requests, or 0 for no timeout. (default: -900) -.HP -\fB\-rpcconnect=\fR -.IP -Send commands to node running on (default: 127.0.0.1) -.HP -\fB\-rpccookiefile=\fR -.IP -Location of the auth cookie. Relative paths will be prefixed by a -net\-specific datadir location. (default: data dir) -.HP -\fB\-rpcpassword=\fR -.IP -Password for JSON\-RPC connections -.HP -\fB\-rpcport=\fR -.IP -Connect to JSON\-RPC on (default: 8554, testnet: 18554, regtest: -19554) -.HP -\fB\-rpcuser=\fR -.IP -Username for JSON\-RPC connections -.HP -\fB\-rpcwait\fR -.IP -Wait for RPC server to start -.HP -\fB\-rpcwallet=\fR -.IP -Send RPC for non\-default wallet on RPC server (needs to exactly match -corresponding \fB\-wallet\fR option passed to defid). This changes -the RPC endpoint used, e.g. -http://127.0.0.1:8554/wallet/ -.HP -\fB\-stdin\fR -.IP -Read extra arguments from standard input, one per line until EOF/Ctrl\-D -(recommended for sensitive information such as passphrases). When -combined with \fB\-stdinrpcpass\fR, the first line from standard input -is used for the RPC password. -.HP -\fB\-stdinrpcpass\fR -.IP -Read RPC password from standard input as a single line. When combined -with \fB\-stdin\fR, the first line from standard input is used for the -RPC password. -.HP -\fB\-version\fR -.IP -Print version and exit -.PP -Chain selection options: -.HP -\fB\-testnet\fR -.IP -Use the test chain -.SH COPYRIGHT -Copyright (C) 2009-2019 The Bitcoin Core developers - -Please contribute if you find DeFi Blockchain useful. Visit - for further information about the software. -The source code is available from . - -This is experimental software. -Distributed under the MIT software license, see the accompanying file LICENSE -or - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written by -Eric Young and UPnP software written by Thomas Bernard. diff --git a/doc/man/defi-qt.1 b/doc/man/defi-qt.1 deleted file mode 100644 index 6b3bfb7c34..0000000000 --- a/doc/man/defi-qt.1 +++ /dev/null @@ -1,618 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. -.TH DEFI-QT "1" "April 2020" "defi-qt v1.0.0" "User Commands" -.SH NAME -defi-qt \- manual page for defi-qt v1.0.0 -.SH SYNOPSIS -.B defi-qt -[\fI\,command-line options\/\fR] -.SH DESCRIPTION -DeFi Blockchain version v1.0.0 (64\-bit) -.SH OPTIONS -.HP -\-? -.IP -Print this help message and exit -.HP -\fB\-alertnotify=\fR -.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\-assumevalid=\fR -.IP -If this block is in the chain assume that it and its ancestors are valid -and potentially skip their script verification (0 to verify all, -default: -0000000000000000002e63058c023a9a1de233554f28c7b21380b6c9003f36a8, -testnet: -0000000000000037a8cd3e06cd5edbfe9dd1dbcc5dacab279376ef7cfc2b4c75) -.HP -\fB\-blocknotify=\fR -.IP -Execute command when the best block changes (%s in cmd is replaced by -block hash) -.HP -\fB\-blockreconstructionextratxn=\fR -.IP -Extra transactions to keep in memory for compact block reconstructions -(default: 100) -.HP -\fB\-blocksdir=\fR -.IP -Specify blocks directory (default: /blocks) -.HP -\fB\-conf=\fR -.IP -Specify configuration file. Relative paths will be prefixed by datadir -location. (default: defi.conf) -.HP -\fB\-daemon\fR -.IP -Run in the background as a daemon and accept commands -.HP -\fB\-datadir=\fR -.IP -Specify data directory -.HP -\fB\-dbcache=\fR -.IP -Set database cache size in MiB (4 to 16384, default: 450) -.HP -\fB\-debuglogfile=\fR -.IP -Specify location of debug log file. Relative paths will be prefixed by a -net\-specific datadir location. (\fB\-nodebuglogfile\fR to disable; -default: debug.log) -.HP -\fB\-includeconf=\fR -.IP -Specify additional configuration file, relative to the \fB\-datadir\fR path -(only useable from configuration file, not command line) -.HP -\fB\-loadblock=\fR -.IP -Imports blocks from external blk000??.dat file on startup -.HP -\fB\-maxmempool=\fR -.IP -Keep the transaction memory pool below megabytes (default: 300) -.HP -\fB\-maxorphantx=\fR -.IP -Keep at most unconnectable transactions in memory (default: 100) -.HP -\fB\-mempoolexpiry=\fR -.IP -Do not keep transactions in the mempool longer than hours (default: -336) -.HP -\fB\-par=\fR -.IP -Set the number of script verification threads (\fB\-8\fR to 16, 0 = auto, <0 = -leave that many cores free, default: 0) -.HP -\fB\-persistmempool\fR -.IP -Whether to save the mempool on shutdown and load on restart (default: 1) -.HP -\fB\-pid=\fR -.IP -Specify pid file. Relative paths will be prefixed by a net\-specific -datadir location. (default: defid.pid) -.HP -\fB\-prune=\fR -.IP -Reduce storage requirements by enabling pruning (deleting) of old -blocks. This allows the pruneblockchain RPC to be called to -delete specific blocks, and enables automatic pruning of old -blocks if a target size in MiB is provided. This mode is -incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this -setting requires re\-downloading the entire blockchain. (default: -0 = disable pruning blocks, 1 = allow manual pruning via RPC, ->=550 = automatically prune block files to stay under the -specified target size in MiB) -.HP -\fB\-reindex\fR -.IP -Rebuild chain state and block index from the blk*.dat files on disk -.HP -\fB\-reindex\-chainstate\fR -.IP -Rebuild chain state from the currently indexed blocks. When in pruning -mode or if blocks on disk might be corrupted, use full \fB\-reindex\fR -instead. -.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) -.HP -\fB\-version\fR -.IP -Print version and exit -.PP -Connection options: -.HP -\fB\-addnode=\fR -.IP -Add a node to connect to and attempt to keep the connection open (see -the `addnode` RPC command help for more info). This option can be -specified multiple times to add multiple nodes. -.HP -\fB\-banscore=\fR -.IP -Threshold for disconnecting misbehaving peers (default: 100) -.HP -\fB\-bantime=\fR -.IP -Number of seconds to keep misbehaving peers from reconnecting (default: -86400) -.HP -\fB\-bind=\fR -.IP -Bind to given address and always listen on it. Use [host]:port notation -for IPv6 -.HP -\fB\-connect=\fR -.IP -Connect only to the specified node; \fB\-noconnect\fR disables automatic -connections (the rules for this peer are the same as for -\fB\-addnode\fR). This option can be specified multiple times to connect -to multiple nodes. -.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 used) -.HP -\fB\-enablebip61\fR -.IP -Send reject messages per BIP61 (default: 0) -.HP -\fB\-externalip=\fR -.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\-listenonion\fR -.IP -Automatically create Tor hidden service (default: 1) -.HP -\fB\-maxconnections=\fR -.IP -Maintain at most connections to peers (default: 125) -.HP -\fB\-maxreceivebuffer=\fR -.IP -Maximum per\-connection receive buffer, *1000 bytes (default: 5000) -.HP -\fB\-maxsendbuffer=\fR -.IP -Maximum per\-connection send buffer, *1000 bytes (default: 1000) -.HP -\fB\-maxtimeadjustment\fR -.IP -Maximum allowed median peer time offset adjustment. Local perspective of -time may be influenced by peers forward or backward by this -amount. (default: 4200 seconds) -.HP -\fB\-maxuploadtarget=\fR -.IP -Tries to keep outbound traffic under the given target (in MiB per 24h), -0 = no limit (default: 0) -.HP -\fB\-onion=\fR -.IP -Use separate SOCKS5 proxy to reach peers via Tor hidden services, set -\fB\-noonion\fR to disable (default: \fB\-proxy\fR) -.HP -\fB\-onlynet=\fR -.IP -Make outgoing connections only through network (ipv4, ipv6 or -onion). Incoming connections are not affected by this option. -This option can be specified multiple times to allow multiple -networks. -.HP -\fB\-peerbloomfilters\fR -.IP -Support filtering of blocks and transaction with bloom filters (default: -1) -.HP -\fB\-permitbaremultisig\fR -.IP -Relay non\-P2SH multisig (default: 1) -.HP -\fB\-port=\fR -.IP -Listen for connections on (default: 8555, testnet: 18555, -regtest: 19555) -.HP -\fB\-proxy=\fR -.IP -Connect through SOCKS5 proxy, set \fB\-noproxy\fR to disable (default: -disabled) -.HP -\fB\-proxyrandomize\fR -.IP -Randomize credentials for every proxy connection. This enables Tor -stream isolation (default: 1) -.HP -\fB\-seednode=\fR -.IP -Connect to a node to retrieve peer addresses, and disconnect. This -option can be specified multiple times to connect to multiple -nodes. -.HP -\fB\-timeout=\fR -.IP -Specify connection timeout in milliseconds (minimum: 1, default: 5000) -.HP -\fB\-torcontrol=\fR: -.IP -Tor control port to use if onion listening enabled (default: -127.0.0.1:9051) -.HP -\fB\-torpassword=\fR -.IP -Tor control port password (default: empty) -.HP -\fB\-upnp\fR -.IP -Use UPnP to map the listening port (default: 0) -.HP -\fB\-whitebind=\fR -.IP -Bind to given address and whitelist peers connecting to it. Use -[host]:port notation for IPv6 -.HP -\fB\-whitelist=\fR -.IP -Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or -CIDR notated network (e.g. 1.2.3.0/24). 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\-addresstype\fR -.IP -What type of addresses to use ("legacy", "p2sh\-segwit", or "bech32", -default: "p2sh\-segwit") -.HP -\fB\-avoidpartialspends\fR -.IP -Group outputs by address, selecting all or none, instead of selecting on -a per\-output basis. Privacy is improved as an address is only -used once (unless someone sends to it after spending from it), -but may result in slightly higher fees as suboptimal coin -selection may result due to the added limitation (default: 0) -.HP -\fB\-changetype\fR -.IP -What type of change to use ("legacy", "p2sh\-segwit", or "bech32"). -Default is same as \fB\-addresstype\fR, except when -\fB\-addresstype\fR=\fI\,p2sh\-segwit\/\fR a native segwit output is used when -sending to a native segwit address) -.HP -\fB\-disablewallet\fR -.IP -Do not load the wallet and disable wallet RPC calls -.HP -\fB\-discardfee=\fR -.IP -The fee rate (in BTC/kB) that indicates your tolerance for discarding -change by adding it to the fee (default: 0.0001). Note: An output -is discarded if it is dust at this rate, but we will always -discard up to the dust relay fee and a discard fee above that is -limited by the fee estimate for the longest target -.HP -\fB\-fallbackfee=\fR -.IP -A fee rate (in BTC/kB) that will be used when fee estimation has -insufficient data (default: 0.0002) -.HP -\fB\-keypool=\fR -.IP -Set key pool size to (default: 1000) -.HP -\fB\-mintxfee=\fR -.IP -Fees (in BTC/kB) smaller than this are considered zero fee for -transaction creation (default: 0.00001) -.HP -\fB\-paytxfee=\fR -.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 on startup -.HP -\fB\-spendzeroconfchange\fR -.IP -Spend unconfirmed change when sending transactions (default: 1) -.HP -\fB\-txconfirmtarget=\fR -.IP -If paytxfee is not set, include enough fee so transactions begin -confirmation on average within n blocks (default: 6) -.HP -\fB\-upgradewallet\fR -.IP -Upgrade wallet to latest format on startup -.HP -\fB\-wallet=\fR -.IP -Specify wallet database path. Can be specified multiple times to load -multiple wallets. Path is interpreted relative to if -it is not absolute, and will be created if it does not exist (as -a directory containing a wallet.dat file and log files). For -backwards compatibility this will also accept names of existing -data files in .) -.HP -\fB\-walletbroadcast\fR -.IP -Make the wallet broadcast transactions (default: 1) -.HP -\fB\-walletdir=\fR -.IP -Specify directory to hold wallets (default: /wallets if it -exists, otherwise ) -.HP -\fB\-walletnotify=\fR -.IP -Execute command when a wallet transaction changes (%s in cmd is replaced -by TxID) -.HP -\fB\-walletrbf\fR -.IP -Send transactions with full\-RBF opt\-in enabled (RPC only, default: 0) -.HP -\fB\-zapwallettxes=\fR -.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. -payment request information, 2 = drop tx meta data) -.PP -ZeroMQ notification options: -.HP -\fB\-zmqpubhashblock=\fR
-.IP -Enable publish hash block in
-.HP -\fB\-zmqpubhashtx=\fR
-.IP -Enable publish hash transaction in
-.HP -\fB\-zmqpubrawblock=\fR
-.IP -Enable publish raw block in
-.HP -\fB\-zmqpubrawtx=\fR
-.IP -Enable publish raw transaction in
-.PP -Debugging/Testing options: -.HP -\fB\-debug=\fR -.IP -Output debugging information (default: \fB\-nodebug\fR, supplying is -optional). If is not supplied or if = 1, -output all debugging information. can be: net, tor, -mempool, http, bench, zmq, db, rpc, estimatefee, addrman, -selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej, -libevent, coindb, qt, leveldb. -.HP -\fB\-debugexclude=\fR -.IP -Exclude debugging information for a category. Can be used in conjunction -with \fB\-debug\fR=\fI\,1\/\fR to output debug logs for all categories except one -or more specified categories. -.HP -\fB\-help\-debug\fR -.IP -Print help message with debugging options and exit -.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\-maxtxfee=\fR -.IP -Maximum total fees (in BTC) to use in a single wallet transaction or raw -transaction; setting this too low may abort large transactions -(default: 0.10) -.HP -\fB\-printtoconsole\fR -.IP -Send trace/debug info to console (default: 1 when no \fB\-daemon\fR. To disable -logging to file, set \fB\-nodebuglogfile\fR) -.HP -\fB\-shrinkdebugfile\fR -.IP -Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR) -.HP -\fB\-uacomment=\fR -.IP -Append comment to the user agent string -.PP -Chain selection options: -.HP -\fB\-testnet\fR -.IP -Use the test chain -.PP -Node relay options: -.HP -\fB\-bytespersigop\fR -.IP -Equivalent bytes per sigop in transactions for relay and mining -(default: 20) -.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: 83) -.HP -.HP -\fB\-minrelaytxfee=\fR -.IP -Fees (in BTC/kB) smaller than this are considered zero fee for relaying, -mining and transaction creation (default: 0.00001) -.HP -\fB\-whitelistforcerelay\fR -.IP -Force relay of transactions from whitelisted peers even if they violate -local relay policy (default: 0) -.HP -\fB\-whitelistrelay\fR -.IP -Accept relayed transactions received from whitelisted peers even when -not relaying transactions (default: 1) -.PP -Block creation options: -.HP -\fB\-blockmaxweight=\fR -.IP -Set maximum BIP141 block weight (default: 3996000) -.HP -\fB\-blockmintxfee=\fR -.IP -Set lowest fee rate (in BTC/kB) for transactions to be included in block -creation. (default: 0.00001) -.PP -RPC server options: -.HP -\fB\-rest\fR -.IP -Accept public REST requests (default: 0) -.HP -\fB\-rpcallowip=\fR -.IP -Allow JSON\-RPC connections from specified source. Valid for 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\-rpcauth=\fR -.IP -Username and HMAC\-SHA\-256 hashed password for JSON\-RPC connections. The -field comes in the format: :$. A -canonical python script is included in share/rpcauth. The client -then connects normally using the -rpcuser=/rpcpassword= pair of arguments. This -option can be specified multiple times -.HP -\fB\-rpcbind=\fR[:port] -.IP -Bind to given address to listen for JSON\-RPC connections. Do not expose -the RPC server to untrusted networks such as the public internet! -This option is ignored unless \fB\-rpcallowip\fR is also passed. Port is -optional and overrides \fB\-rpcport\fR. Use [host]:port notation for -IPv6. This option can be specified multiple times (default: -127.0.0.1 and ::1 i.e., localhost) -.HP -\fB\-rpccookiefile=\fR -.IP -Location of the auth cookie. Relative paths will be prefixed by a -net\-specific datadir location. (default: data dir) -.HP -\fB\-rpcpassword=\fR -.IP -Password for JSON\-RPC connections -.HP -\fB\-rpcport=\fR -.IP -Listen for JSON\-RPC connections on (default: 8554, testnet: -18554, regtest: 19554) -.HP -\fB\-rpcserialversion\fR -.IP -Sets the serialization of raw transaction or block hex returned in -non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1) -.HP -\fB\-rpcthreads=\fR -.IP -Set the number of threads to service RPC calls (default: 4) -.HP -\fB\-rpcuser=\fR -.IP -Username for JSON\-RPC connections -.HP -\fB\-server\fR -.IP -Accept command line and JSON\-RPC commands -.PP -UI Options: -.HP -\fB\-choosedatadir\fR -.IP -Choose data directory on startup (default: 0) -.HP -\fB\-lang=\fR -.IP -Set language, for example "de_DE" (default: system locale) -.HP -\fB\-min\fR -.IP -Start minimized -.HP -\fB\-resetguisettings\fR -.IP -Reset all settings changed in the GUI -.HP -\fB\-rootcertificates=\fR -.IP -Set SSL root certificates for payment request (default: \fB\-system\-\fR) -.HP -\fB\-splash\fR -.IP -Show splash screen on startup (default: 1) -.SH COPYRIGHT -Copyright (C) 2009-2019 The Bitcoin Core developers - -Please contribute if you find DeFi Blockchain useful. Visit - for further information about the software. -The source code is available from . - -This is experimental software. -Distributed under the MIT software license, see the accompanying file LICENSE -or - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written by -Eric Young and UPnP software written by Thomas Bernard. diff --git a/doc/man/defi-tx.1 b/doc/man/defi-tx.1 deleted file mode 100644 index ca0372edde..0000000000 --- a/doc/man/defi-tx.1 +++ /dev/null @@ -1,120 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. -.TH DEFI-TX "1" "April 2020" "defi-tx v1.0.0" "User Commands" -.SH NAME -defi-tx \- manual page for defi-tx v1.0.0 -.SH SYNOPSIS -.B defi-tx -[\fI\,options\/\fR] \fI\, \/\fR[\fI\,commands\/\fR] \fI\,Update hex-encoded defi transaction\/\fR -.br -.B defi-tx -[\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] \fI\,Create hex-encoded defi transaction\/\fR -.SH DESCRIPTION -DeFi Blockchain defi\-tx utility version v1.0.0 -.SH OPTIONS -.HP -\-? -.IP -Print this help message and exit -.HP -\fB\-create\fR -.IP -Create new, empty TX. -.HP -\fB\-json\fR -.IP -Select JSON output -.HP -\fB\-txid\fR -.IP -Output only the hex\-encoded transaction id of the resultant transaction. -.PP -Chain selection options: -.HP -\fB\-testnet\fR -.IP -Use the test chain -.PP -Commands: -.IP -delin=N -.IP -Delete input N from TX -.IP -delout=N -.IP -Delete output N from TX -.IP -in=TXID:VOUT(:SEQUENCE_NUMBER) -.IP -Add input to TX -.IP -locktime=N -.IP -Set TX lock time to N -.IP -nversion=N -.IP -Set TX version to N -.IP -outaddr=VALUE:ADDRESS -.IP -Add address\-based output to TX -.IP -outdata=[VALUE:]DATA -.IP -Add data\-based output to TX -.IP -outmultisig=VALUE:REQUIRED:PUBKEYS:PUBKEY1:PUBKEY2:....[:FLAGS] -.IP -Add Pay To n\-of\-m Multi\-sig output to TX. n = REQUIRED, m = PUBKEYS. -Optionally add the "W" flag to produce a -pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to -wrap the output in a pay\-to\-script\-hash. -.IP -outpubkey=VALUE:PUBKEY[:FLAGS] -.IP -Add pay\-to\-pubkey output to TX. Optionally add the "W" flag to produce a -pay\-to\-witness\-pubkey\-hash output. Optionally add the "S" flag to -wrap the output in a pay\-to\-script\-hash. -.IP -outscript=VALUE:SCRIPT[:FLAGS] -.IP -Add raw script output to TX. Optionally add the "W" flag to produce a -pay\-to\-witness\-script\-hash output. Optionally add the "S" flag to -wrap the output in a pay\-to\-script\-hash. -.IP -replaceable(=N) -.IP -Set RBF opt\-in sequence number for input N (if not provided, opt\-in all -available inputs) -.IP -sign=SIGHASH\-FLAGS -.IP -Add zero or more signatures to transaction. This command requires JSON -registers:prevtxs=JSON object, privatekeys=JSON object. See -signrawtransactionwithkey docs for format of sighash flags, JSON -objects. -.PP -Register Commands: -.IP -load=NAME:FILENAME -.IP -Load JSON file FILENAME into register NAME -.IP -set=NAME:JSON\-STRING -.IP -Set register NAME to given JSON\-STRING -.SH COPYRIGHT -Copyright (C) 2009-2019 The Bitcoin Core developers - -Please contribute if you find DeFi Blockchain useful. Visit - for further information about the software. -The source code is available from . - -This is experimental software. -Distributed under the MIT software license, see the accompanying file LICENSE -or - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written by -Eric Young and UPnP software written by Thomas Bernard. diff --git a/doc/man/defi-wallet.1 b/doc/man/defi-wallet.1 deleted file mode 100644 index 4819f053b6..0000000000 --- a/doc/man/defi-wallet.1 +++ /dev/null @@ -1,67 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. -.TH DEFI-WALLET "1" "April 2020" "defi-wallet v1.0.0" "User Commands" -.SH NAME -defi-wallet \- manual page for defi-wallet v1.0.0 -.SH DESCRIPTION -DeFi Blockchain defi\-wallet version v1.0.0 -.PP -wallet\-tool is an offline tool for creating and interacting with DeFi Blockchain wallet files. -By default wallet\-tool will act on wallets in the default mainnet wallet directory in the datadir. -To change the target wallet, use the \fB\-datadir\fR, \fB\-wallet\fR and \fB\-testnet\fR/\-regtest arguments. -.SS "Usage:" -.IP -defi\-wallet [options] -.SH OPTIONS -.HP -\-? -.IP -Print this help message and exit -.HP -\fB\-datadir=\fR -.IP -Specify data directory -.HP -\fB\-wallet=\fR -.IP -Specify wallet name -.PP -Debugging/Testing options: -.HP -\fB\-debug=\fR -.IP -Output debugging information (default: 0). -.HP -\fB\-printtoconsole\fR -.IP -Send trace/debug info to console (default: 1 when no \fB\-debug\fR is true, 0 -otherwise. -.PP -Chain selection options: -.HP -\fB\-testnet\fR -.IP -Use the test chain -.PP -Commands: -.IP -create -.IP -Create new wallet file -.IP -info -.IP -Get wallet info -.SH COPYRIGHT -Copyright (C) 2009-2019 The Bitcoin Core developers - -Please contribute if you find DeFi Blockchain useful. Visit - for further information about the software. -The source code is available from . - -This is experimental software. -Distributed under the MIT software license, see the accompanying file LICENSE -or - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written by -Eric Young and UPnP software written by Thomas Bernard. diff --git a/doc/man/defid.1 b/doc/man/defid.1 deleted file mode 100644 index 37c359b173..0000000000 --- a/doc/man/defid.1 +++ /dev/null @@ -1,591 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.6. -.TH DEFID "1" "April 2020" "defid v1.0.0" "User Commands" -.SH NAME -defid \- manual page for defid v1.0.0 -.SH SYNOPSIS -.B defid -[\fI\,options\/\fR] \fI\,Start DeFi Blockchain Daemon\/\fR -.SH DESCRIPTION -DeFi Blockchain Daemon version v1.0.0 -.SH OPTIONS -.HP -\-? -.IP -Print this help message and exit -.HP -\fB\-alertnotify=\fR -.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\-assumevalid=\fR -.IP -If this block is in the chain assume that it and its ancestors are valid -and potentially skip their script verification (0 to verify all, -default: -0000000000000000002e63058c023a9a1de233554f28c7b21380b6c9003f36a8, -testnet: -0000000000000037a8cd3e06cd5edbfe9dd1dbcc5dacab279376ef7cfc2b4c75) -.HP -\fB\-blocknotify=\fR -.IP -Execute command when the best block changes (%s in cmd is replaced by -block hash) -.HP -\fB\-blockreconstructionextratxn=\fR -.IP -Extra transactions to keep in memory for compact block reconstructions -(default: 100) -.HP -\fB\-blocksdir=\fR -.IP -Specify blocks directory (default: /blocks) -.HP -\fB\-conf=\fR -.IP -Specify configuration file. Relative paths will be prefixed by datadir -location. (default: defi.conf) -.HP -\fB\-daemon\fR -.IP -Run in the background as a daemon and accept commands -.HP -\fB\-datadir=\fR -.IP -Specify data directory -.HP -\fB\-dbcache=\fR -.IP -Set database cache size in MiB (4 to 16384, default: 450) -.HP -\fB\-debuglogfile=\fR -.IP -Specify location of debug log file. Relative paths will be prefixed by a -net\-specific datadir location. (\fB\-nodebuglogfile\fR to disable; -default: debug.log) -.HP -\fB\-includeconf=\fR -.IP -Specify additional configuration file, relative to the \fB\-datadir\fR path -(only useable from configuration file, not command line) -.HP -\fB\-loadblock=\fR -.IP -Imports blocks from external blk000??.dat file on startup -.HP -\fB\-maxmempool=\fR -.IP -Keep the transaction memory pool below megabytes (default: 300) -.HP -\fB\-maxorphantx=\fR -.IP -Keep at most unconnectable transactions in memory (default: 100) -.HP -\fB\-mempoolexpiry=\fR -.IP -Do not keep transactions in the mempool longer than hours (default: -336) -.HP -\fB\-par=\fR -.IP -Set the number of script verification threads (\fB\-8\fR to 16, 0 = auto, <0 = -leave that many cores free, default: 0) -.HP -\fB\-persistmempool\fR -.IP -Whether to save the mempool on shutdown and load on restart (default: 1) -.HP -\fB\-pid=\fR -.IP -Specify pid file. Relative paths will be prefixed by a net\-specific -datadir location. (default: defid.pid) -.HP -\fB\-prune=\fR -.IP -Reduce storage requirements by enabling pruning (deleting) of old -blocks. This allows the pruneblockchain RPC to be called to -delete specific blocks, and enables automatic pruning of old -blocks if a target size in MiB is provided. This mode is -incompatible with \fB\-txindex\fR and \fB\-rescan\fR. Warning: Reverting this -setting requires re\-downloading the entire blockchain. (default: -0 = disable pruning blocks, 1 = allow manual pruning via RPC, ->=550 = automatically prune block files to stay under the -specified target size in MiB) -.HP -\fB\-reindex\fR -.IP -Rebuild chain state and block index from the blk*.dat files on disk -.HP -\fB\-reindex\-chainstate\fR -.IP -Rebuild chain state from the currently indexed blocks. When in pruning -mode or if blocks on disk might be corrupted, use full \fB\-reindex\fR -instead. -.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) -.HP -\fB\-version\fR -.IP -Print version and exit -.PP -Connection options: -.HP -\fB\-addnode=\fR -.IP -Add a node to connect to and attempt to keep the connection open (see -the `addnode` RPC command help for more info). This option can be -specified multiple times to add multiple nodes. -.HP -\fB\-banscore=\fR -.IP -Threshold for disconnecting misbehaving peers (default: 100) -.HP -\fB\-bantime=\fR -.IP -Number of seconds to keep misbehaving peers from reconnecting (default: -86400) -.HP -\fB\-bind=\fR -.IP -Bind to given address and always listen on it. Use [host]:port notation -for IPv6 -.HP -\fB\-connect=\fR -.IP -Connect only to the specified node; \fB\-noconnect\fR disables automatic -connections (the rules for this peer are the same as for -\fB\-addnode\fR). This option can be specified multiple times to connect -to multiple nodes. -.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 used) -.HP -\fB\-enablebip61\fR -.IP -Send reject messages per BIP61 (default: 0) -.HP -\fB\-externalip=\fR -.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\-listenonion\fR -.IP -Automatically create Tor hidden service (default: 1) -.HP -\fB\-maxconnections=\fR -.IP -Maintain at most connections to peers (default: 125) -.HP -\fB\-maxreceivebuffer=\fR -.IP -Maximum per\-connection receive buffer, *1000 bytes (default: 5000) -.HP -\fB\-maxsendbuffer=\fR -.IP -Maximum per\-connection send buffer, *1000 bytes (default: 1000) -.HP -\fB\-maxtimeadjustment\fR -.IP -Maximum allowed median peer time offset adjustment. Local perspective of -time may be influenced by peers forward or backward by this -amount. (default: 4200 seconds) -.HP -\fB\-maxuploadtarget=\fR -.IP -Tries to keep outbound traffic under the given target (in MiB per 24h), -0 = no limit (default: 0) -.HP -\fB\-onion=\fR -.IP -Use separate SOCKS5 proxy to reach peers via Tor hidden services, set -\fB\-noonion\fR to disable (default: \fB\-proxy\fR) -.HP -\fB\-onlynet=\fR -.IP -Make outgoing connections only through network (ipv4, ipv6 or -onion). Incoming connections are not affected by this option. -This option can be specified multiple times to allow multiple -networks. -.HP -\fB\-peerbloomfilters\fR -.IP -Support filtering of blocks and transaction with bloom filters (default: -1) -.HP -\fB\-permitbaremultisig\fR -.IP -Relay non\-P2SH multisig (default: 1) -.HP -\fB\-port=\fR -.IP -Listen for connections on (default: 8555, testnet: 18555, -regtest: 19555) -.HP -\fB\-proxy=\fR -.IP -Connect through SOCKS5 proxy, set \fB\-noproxy\fR to disable (default: -disabled) -.HP -\fB\-proxyrandomize\fR -.IP -Randomize credentials for every proxy connection. This enables Tor -stream isolation (default: 1) -.HP -\fB\-seednode=\fR -.IP -Connect to a node to retrieve peer addresses, and disconnect. This -option can be specified multiple times to connect to multiple -nodes. -.HP -\fB\-timeout=\fR -.IP -Specify connection timeout in milliseconds (minimum: 1, default: 5000) -.HP -\fB\-torcontrol=\fR: -.IP -Tor control port to use if onion listening enabled (default: -127.0.0.1:9051) -.HP -\fB\-torpassword=\fR -.IP -Tor control port password (default: empty) -.HP -\fB\-upnp\fR -.IP -Use UPnP to map the listening port (default: 0) -.HP -\fB\-whitebind=\fR -.IP -Bind to given address and whitelist peers connecting to it. Use -[host]:port notation for IPv6 -.HP -\fB\-whitelist=\fR -.IP -Whitelist peers connecting from the given IP address (e.g. 1.2.3.4) or -CIDR notated network (e.g. 1.2.3.0/24). 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\-addresstype\fR -.IP -What type of addresses to use ("legacy", "p2sh\-segwit", or "bech32", -default: "p2sh\-segwit") -.HP -\fB\-avoidpartialspends\fR -.IP -Group outputs by address, selecting all or none, instead of selecting on -a per\-output basis. Privacy is improved as an address is only -used once (unless someone sends to it after spending from it), -but may result in slightly higher fees as suboptimal coin -selection may result due to the added limitation (default: 0) -.HP -\fB\-changetype\fR -.IP -What type of change to use ("legacy", "p2sh\-segwit", or "bech32"). -Default is same as \fB\-addresstype\fR, except when -\fB\-addresstype\fR=\fI\,p2sh\-segwit\/\fR a native segwit output is used when -sending to a native segwit address) -.HP -\fB\-disablewallet\fR -.IP -Do not load the wallet and disable wallet RPC calls -.HP -\fB\-discardfee=\fR -.IP -The fee rate (in BTC/kB) that indicates your tolerance for discarding -change by adding it to the fee (default: 0.0001). Note: An output -is discarded if it is dust at this rate, but we will always -discard up to the dust relay fee and a discard fee above that is -limited by the fee estimate for the longest target -.HP -\fB\-fallbackfee=\fR -.IP -A fee rate (in BTC/kB) that will be used when fee estimation has -insufficient data (default: 0.0002) -.HP -\fB\-keypool=\fR -.IP -Set key pool size to (default: 1000) -.HP -\fB\-mintxfee=\fR -.IP -Fees (in BTC/kB) smaller than this are considered zero fee for -transaction creation (default: 0.00001) -.HP -\fB\-paytxfee=\fR -.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 on startup -.HP -\fB\-spendzeroconfchange\fR -.IP -Spend unconfirmed change when sending transactions (default: 1) -.HP -\fB\-txconfirmtarget=\fR -.IP -If paytxfee is not set, include enough fee so transactions begin -confirmation on average within n blocks (default: 6) -.HP -\fB\-upgradewallet\fR -.IP -Upgrade wallet to latest format on startup -.HP -\fB\-wallet=\fR -.IP -Specify wallet database path. Can be specified multiple times to load -multiple wallets. Path is interpreted relative to if -it is not absolute, and will be created if it does not exist (as -a directory containing a wallet.dat file and log files). For -backwards compatibility this will also accept names of existing -data files in .) -.HP -\fB\-walletbroadcast\fR -.IP -Make the wallet broadcast transactions (default: 1) -.HP -\fB\-walletdir=\fR -.IP -Specify directory to hold wallets (default: /wallets if it -exists, otherwise ) -.HP -\fB\-walletnotify=\fR -.IP -Execute command when a wallet transaction changes (%s in cmd is replaced -by TxID) -.HP -\fB\-walletrbf\fR -.IP -Send transactions with full\-RBF opt\-in enabled (RPC only, default: 0) -.HP -\fB\-zapwallettxes=\fR -.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. -payment request information, 2 = drop tx meta data) -.PP -ZeroMQ notification options: -.HP -\fB\-zmqpubhashblock=\fR
-.IP -Enable publish hash block in
-.HP -\fB\-zmqpubhashtx=\fR
-.IP -Enable publish hash transaction in
-.HP -\fB\-zmqpubrawblock=\fR
-.IP -Enable publish raw block in
-.HP -\fB\-zmqpubrawtx=\fR
-.IP -Enable publish raw transaction in
-.PP -Debugging/Testing options: -.HP -\fB\-debug=\fR -.IP -Output debugging information (default: \fB\-nodebug\fR, supplying is -optional). If is not supplied or if = 1, -output all debugging information. can be: net, tor, -mempool, http, bench, zmq, db, rpc, estimatefee, addrman, -selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej, -libevent, coindb, qt, leveldb. -.HP -\fB\-debugexclude=\fR -.IP -Exclude debugging information for a category. Can be used in conjunction -with \fB\-debug\fR=\fI\,1\/\fR to output debug logs for all categories except one -or more specified categories. -.HP -\fB\-help\-debug\fR -.IP -Print help message with debugging options and exit -.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\-maxtxfee=\fR -.IP -Maximum total fees (in BTC) to use in a single wallet transaction or raw -transaction; setting this too low may abort large transactions -(default: 0.10) -.HP -\fB\-printtoconsole\fR -.IP -Send trace/debug info to console (default: 1 when no \fB\-daemon\fR. To disable -logging to file, set \fB\-nodebuglogfile\fR) -.HP -\fB\-shrinkdebugfile\fR -.IP -Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR) -.HP -\fB\-uacomment=\fR -.IP -Append comment to the user agent string -.PP -Chain selection options: -.HP -\fB\-testnet\fR -.IP -Use the test chain -.PP -Node relay options: -.HP -\fB\-bytespersigop\fR -.IP -Equivalent bytes per sigop in transactions for relay and mining -(default: 20) -.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: 83) -.HP -\fB\-minrelaytxfee=\fR -.IP -Fees (in BTC/kB) smaller than this are considered zero fee for relaying, -mining and transaction creation (default: 0.00001) -.HP -\fB\-whitelistforcerelay\fR -.IP -Force relay of transactions from whitelisted peers even if they violate -local relay policy (default: 0) -.HP -\fB\-whitelistrelay\fR -.IP -Accept relayed transactions received from whitelisted peers even when -not relaying transactions (default: 1) -.PP -Block creation options: -.HP -\fB\-blockmaxweight=\fR -.IP -Set maximum BIP141 block weight (default: 3996000) -.HP -\fB\-blockmintxfee=\fR -.IP -Set lowest fee rate (in BTC/kB) for transactions to be included in block -creation. (default: 0.00001) -.PP -RPC server options: -.HP -\fB\-rest\fR -.IP -Accept public REST requests (default: 0) -.HP -\fB\-rpcallowip=\fR -.IP -Allow JSON\-RPC connections from specified source. Valid for 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\-rpcauth=\fR -.IP -Username and HMAC\-SHA\-256 hashed password for JSON\-RPC connections. The -field comes in the format: :$. A -canonical python script is included in share/rpcauth. The client -then connects normally using the -rpcuser=/rpcpassword= pair of arguments. This -option can be specified multiple times -.HP -\fB\-rpcbind=\fR[:port] -.IP -Bind to given address to listen for JSON\-RPC connections. Do not expose -the RPC server to untrusted networks such as the public internet! -This option is ignored unless \fB\-rpcallowip\fR is also passed. Port is -optional and overrides \fB\-rpcport\fR. Use [host]:port notation for -IPv6. This option can be specified multiple times (default: -127.0.0.1 and ::1 i.e., localhost) -.HP -\fB\-rpccookiefile=\fR -.IP -Location of the auth cookie. Relative paths will be prefixed by a -net\-specific datadir location. (default: data dir) -.HP -\fB\-rpcpassword=\fR -.IP -Password for JSON\-RPC connections -.HP -\fB\-rpcport=\fR -.IP -Listen for JSON\-RPC connections on (default: 8554, testnet: -18554, regtest: 19554) -.HP -\fB\-rpcserialversion\fR -.IP -Sets the serialization of raw transaction or block hex returned in -non\-verbose mode, non\-segwit(0) or segwit(1) (default: 1) -.HP -\fB\-rpcthreads=\fR -.IP -Set the number of threads to service RPC calls (default: 4) -.HP -\fB\-rpcuser=\fR -.IP -Username for JSON\-RPC connections -.HP -\fB\-server\fR -.IP -Accept command line and JSON\-RPC commands -.SH COPYRIGHT -Copyright (C) 2009-2019 The Bitcoin Core developers - -Please contribute if you find DeFi Blockchain useful. Visit - for further information about the software. -The source code is available from . - -This is experimental software. -Distributed under the MIT software license, see the accompanying file LICENSE -or - -This product includes software developed by the OpenSSL Project for use in the -OpenSSL Toolkit and cryptographic software written by -Eric Young and UPnP software written by Thomas Bernard. diff --git a/doc/release-notes/release-notes-0.10.0.md b/doc/release-notes/release-notes-0.10.0.md deleted file mode 100644 index 986b8832ec..0000000000 --- a/doc/release-notes/release-notes-0.10.0.md +++ /dev/null @@ -1,762 +0,0 @@ -Bitcoin Core version 0.10.0 is now available from: - - https://bitcoin.org/bin/0.10.0/ - -This is a new major version release, bringing both new features and -bug fixes. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrading warning ---------------------- - -Because release 0.10.0 makes use of headers-first synchronization and parallel -block download (see further), the block files and databases are not -backwards-compatible with older versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - - -Notable changes -=============== - -Faster synchronization ----------------------- - -Bitcoin Core now uses 'headers-first synchronization'. This means that we first -ask peers for block headers (a total of 27 megabytes, as of December 2014) and -validate those. In a second stage, when the headers have been discovered, we -download the blocks. However, as we already know about the whole chain in -advance, the blocks can be downloaded in parallel from all available peers. - -In practice, this means a much faster and more robust synchronization. On -recent hardware with a decent network link, it can be as little as 3 hours -for an initial full synchronization. You may notice a slower progress in the -very first few minutes, when headers are still being fetched and verified, but -it should gain speed afterwards. - -A few RPCs were added/updated as a result of this: -- `getblockchaininfo` now returns the number of validated headers in addition to -the number of validated blocks. -- `getpeerinfo` lists both the number of blocks and headers we know we have in -common with each peer. While synchronizing, the heights of the blocks that we -have requested from peers (but haven't received yet) are also listed as -'inflight'. -- A new RPC `getchaintips` lists all known branches of the block chain, -including those we only have headers for. - -Transaction fee changes ------------------------ - -This release automatically estimates how high a transaction fee (or how -high a priority) transactions require to be confirmed quickly. The default -settings will create transactions that confirm quickly; see the new -'txconfirmtarget' setting to control the tradeoff between fees and -confirmation times. Fees are added by default unless the 'sendfreetransactions' -setting is enabled. - -Prior releases used hard-coded fees (and priorities), and would -sometimes create transactions that took a very long time to confirm. - -Statistics used to estimate fees and priorities are saved in the -data directory in the `fee_estimates.dat` file just before -program shutdown, and are read in at startup. - -New command line options for transaction fee changes: -- `-txconfirmtarget=n` : create transactions that have enough fees (or priority) -so they are likely to begin confirmation within n blocks (default: 1). This setting -is over-ridden by the -paytxfee option. -- `-sendfreetransactions` : Send transactions as zero-fee transactions if possible -(default: 0) - -New RPC commands for fee estimation: -- `estimatefee nblocks` : Returns approximate fee-per-1,000-bytes needed for -a transaction to begin confirmation within nblocks. Returns -1 if not enough -transactions have been observed to compute a good estimate. -- `estimatepriority nblocks` : Returns approximate priority needed for -a zero-fee transaction to begin confirmation within nblocks. Returns -1 if not -enough free transactions have been observed to compute a good -estimate. - -RPC access control changes --------------------------- - -Subnet matching for the purpose of access control is now done -by matching the binary network address, instead of with string wildcard matching. -For the user this means that `-rpcallowip` takes a subnet specification, which can be - -- a single IP address (e.g. `1.2.3.4` or `fe80::0012:3456:789a:bcde`) -- a network/CIDR (e.g. `1.2.3.0/24` or `fe80::0000/64`) -- a network/netmask (e.g. `1.2.3.4/255.255.255.0` or `fe80::0012:3456:789a:bcde/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`) - -An arbitrary number of `-rpcallow` arguments can be given. An incoming connection will be accepted if its origin address -matches one of them. - -For example: - -| 0.9.x and before | 0.10.x | -|--------------------------------------------|---------------------------------------| -| `-rpcallowip=192.168.1.1` | `-rpcallowip=192.168.1.1` (unchanged) | -| `-rpcallowip=192.168.1.*` | `-rpcallowip=192.168.1.0/24` | -| `-rpcallowip=192.168.*` | `-rpcallowip=192.168.0.0/16` | -| `-rpcallowip=*` (dangerous!) | `-rpcallowip=::/0` (still dangerous!) | - -Using wildcards will result in the rule being rejected with the following error in debug.log: - - Error: Invalid -rpcallowip subnet specification: *. Valid 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). - - -REST interface --------------- - -A new HTTP API is exposed when running with the `-rest` flag, which allows -unauthenticated access to public node data. - -It is served on the same port as RPC, but does not need a password, and uses -plain HTTP instead of JSON-RPC. - -Assuming a local RPC server running on port 8332, it is possible to request: -- Blocks: http://localhost:8332/rest/block/*HASH*.*EXT* -- Blocks without transactions: http://localhost:8332/rest/block/notxdetails/*HASH*.*EXT* -- Transactions (requires `-txindex`): http://localhost:8332/rest/tx/*HASH*.*EXT* - -In every case, *EXT* can be `bin` (for raw binary data), `hex` (for hex-encoded -binary) or `json`. - -For more details, see the `doc/REST-interface.md` document in the repository. - -RPC Server "Warm-Up" Mode -------------------------- - -The RPC server is started earlier now, before most of the expensive -intialisations like loading the block index. It is available now almost -immediately after starting the process. However, until all initialisations -are done, it always returns an immediate error with code -28 to all calls. - -This new behaviour can be useful for clients to know that a server is already -started and will be available soon (for instance, so that they do not -have to start it themselves). - -Improved signing security -------------------------- - -For 0.10 the security of signing against unusual attacks has been -improved by making the signatures constant time and deterministic. - -This change is a result of switching signing to use libsecp256k1 -instead of OpenSSL. Libsecp256k1 is a cryptographic library -optimized for the curve Bitcoin uses which was created by Bitcoin -Core developer Pieter Wuille. - -There exist attacks[1] against most ECC implementations where an -attacker on shared virtual machine hardware could extract a private -key if they could cause a target to sign using the same key hundreds -of times. While using shared hosts and reusing keys are inadvisable -for other reasons, it's a better practice to avoid the exposure. - -OpenSSL has code in their source repository for derandomization -and reduction in timing leaks that we've eagerly wanted to use for a -long time, but this functionality has still not made its -way into a released version of OpenSSL. Libsecp256k1 achieves -significantly stronger protection: As far as we're aware this is -the only deployed implementation of constant time signing for -the curve Bitcoin uses and we have reason to believe that -libsecp256k1 is better tested and more thoroughly reviewed -than the implementation in OpenSSL. - -[1] https://eprint.iacr.org/2014/161.pdf - -Watch-only wallet support -------------------------- - -The wallet can now track transactions to and from wallets for which you know -all addresses (or scripts), even without the private keys. - -This can be used to track payments without needing the private keys online on a -possibly vulnerable system. In addition, it can help for (manual) construction -of multisig transactions where you are only one of the signers. - -One new RPC, `importaddress`, is added which functions similarly to -`importprivkey`, but instead takes an address or script (in hexadecimal) as -argument. After using it, outputs credited to this address or script are -considered to be received, and transactions consuming these outputs will be -considered to be sent. - -The following RPCs have optional support for watch-only: -`getbalance`, `listreceivedbyaddress`, `listreceivedbyaccount`, -`listtransactions`, `listaccounts`, `listsinceblock`, `gettransaction`. See the -RPC documentation for those methods for more information. - -Compared to using `getrawtransaction`, this mechanism does not require -`-txindex`, scales better, integrates better with the wallet, and is compatible -with future block chain pruning functionality. It does mean that all relevant -addresses need to added to the wallet before the payment, though. - -Consensus library ------------------ - -Starting from 0.10.0, the Bitcoin Core distribution includes a consensus library. - -The purpose of this library is to make the verification functionality that is -critical to Bitcoin's consensus available to other applications, e.g. to language -bindings such as [python-bitcoinlib](https://pypi.python.org/pypi/python-bitcoinlib) or -alternative node implementations. - -This library is called `libbitcoinconsensus.so` (or, `.dll` for Windows). -Its interface is defined in the C header [bitcoinconsensus.h](https://github.com/bitcoin/bitcoin/blob/0.10/src/script/bitcoinconsensus.h). - -In its initial version the API includes two functions: - -- `bitcoinconsensus_verify_script` verifies a script. It returns whether the indicated input of the provided serialized transaction -correctly spends the passed scriptPubKey under additional constraints indicated by flags -- `bitcoinconsensus_version` returns the API version, currently at an experimental `0` - -The functionality is planned to be extended to e.g. UTXO management in upcoming releases, but the interface -for existing methods should remain stable. - -Standard script rules relaxed for P2SH addresses ------------------------------------------------- - -The IsStandard() rules have been almost completely removed for P2SH -redemption scripts, allowing applications to make use of any valid -script type, such as "n-of-m OR y", hash-locked oracle addresses, etc. -While the Bitcoin protocol has always supported these types of script, -actually using them on mainnet has been previously inconvenient as -standard Bitcoin Core nodes wouldn't relay them to miners, nor would -most miners include them in blocks they mined. - -bitcoin-tx ----------- - -It has been observed that many of the RPC functions offered by bitcoind are -"pure functions", and operate independently of the bitcoind wallet. This -included many of the RPC "raw transaction" API functions, such as -createrawtransaction. - -bitcoin-tx is a newly introduced command line utility designed to enable easy -manipulation of bitcoin transactions. A summary of its operation may be -obtained via "bitcoin-tx --help" Transactions may be created or signed in a -manner similar to the RPC raw tx API. Transactions may be updated, deleting -inputs or outputs, or appending new inputs and outputs. Custom scripts may be -easily composed using a simple text notation, borrowed from the bitcoin test -suite. - -This tool may be used for experimenting with new transaction types, signing -multi-party transactions, and many other uses. Long term, the goal is to -deprecate and remove "pure function" RPC API calls, as those do not require a -server round-trip to execute. - -Other utilities "bitcoin-key" and "bitcoin-script" have been proposed, making -key and script operations easily accessible via command line. - -Mining and relay policy enhancements ------------------------------------- - -Bitcoin Core's block templates are now for version 3 blocks only, and any mining -software relying on its `getblocktemplate` must be updated in parallel to use -libblkmaker either version 0.4.2 or any version from 0.5.1 onward. -If you are solo mining, this will affect you the moment you upgrade Bitcoin -Core, which must be done prior to BIP66 achieving its 951/1001 status. -If you are mining with the stratum mining protocol: this does not affect you. -If you are mining with the getblocktemplate protocol to a pool: this will affect -you at the pool operator's discretion, which must be no later than BIP66 -achieving its 951/1001 status. - -The `prioritisetransaction` RPC method has been added to enable miners to -manipulate the priority of transactions on an individual basis. - -Bitcoin Core now supports BIP 22 long polling, so mining software can be -notified immediately of new templates rather than having to poll periodically. - -Support for BIP 23 block proposals is now available in Bitcoin Core's -`getblocktemplate` method. This enables miners to check the basic validity of -their next block before expending work on it, reducing risks of accidental -hardforks or mining invalid blocks. - -Two new options to control mining policy: -- `-datacarrier=0/1` : Relay and mine "data carrier" (OP_RETURN) transactions -if this is 1. -- `-datacarriersize=n` : Maximum size, in bytes, we consider acceptable for -"data carrier" outputs. - -The relay policy has changed to more properly implement the desired behavior of not -relaying free (or very low fee) transactions unless they have a priority above the -AllowFreeThreshold(), in which case they are relayed subject to the rate limiter. - -BIP 66: strict DER encoding for signatures ------------------------------------------- - -Bitcoin Core 0.10 implements BIP 66, which introduces block version 3, and a new -consensus rule, which prohibits non-DER signatures. Such transactions have been -non-standard since Bitcoin v0.8.0 (released in February 2013), but were -technically still permitted inside blocks. - -This change breaks the dependency on OpenSSL's signature parsing, and is -required if implementations would want to remove all of OpenSSL from the -consensus code. - -The same miner-voting mechanism as in BIP 34 is used: when 751 out of a -sequence of 1001 blocks have version number 3 or higher, the new consensus -rule becomes active for those blocks. When 951 out of a sequence of 1001 -blocks have version number 3 or higher, it becomes mandatory for all blocks. - -Backward compatibility with current mining software is NOT provided, thus miners -should read the first paragraph of "Mining and relay policy enhancements" above. - -0.10.0 Change log -================= - -Detailed release notes follow. This overview includes changes that affect external -behavior, not code moves, refactors or string updates. - -RPC: -- `f923c07` Support IPv6 lookup in bitcoin-cli even when IPv6 only bound on localhost -- `b641c9c` Fix addnode "onetry": Connect with OpenNetworkConnection -- `171ca77` estimatefee / estimatepriority RPC methods -- `b750cf1` Remove cli functionality from bitcoind -- `f6984e8` Add "chain" to getmininginfo, improve help in getblockchaininfo -- `99ddc6c` Add nLocalServices info to RPC getinfo -- `cf0c47b` Remove getwork() RPC call -- `2a72d45` prioritisetransaction -- `e44fea5` Add an option `-datacarrier` to allow users to disable relaying/mining data carrier transactions -- `2ec5a3d` Prevent easy RPC memory exhaustion attack -- `d4640d7` Added argument to getbalance to include watchonly addresses and fixed errors in balance calculation -- `83f3543` Added argument to listaccounts to include watchonly addresses -- `952877e` Showing 'involvesWatchonly' property for transactions returned by 'listtransactions' and 'listsinceblock'. It is only appended when the transaction involves a watchonly address -- `d7d5d23` Added argument to listtransactions and listsinceblock to include watchonly addresses -- `f87ba3d` added includeWatchonly argument to 'gettransaction' because it affects balance calculation -- `0fa2f88` added includedWatchonly argument to listreceivedbyaddress/...account -- `6c37f7f` `getrawchangeaddress`: fail when keypool exhausted and wallet locked -- `ff6a7af` getblocktemplate: longpolling support -- `c4a321f` Add peerid to getpeerinfo to allow correlation with the logs -- `1b4568c` Add vout to ListTransactions output -- `b33bd7a` Implement "getchaintips" RPC command to monitor blockchain forks -- `733177e` Remove size limit in RPC client, keep it in server -- `6b5b7cb` Categorize rpc help overview -- `6f2c26a` Closely track mempool byte total. Add "getmempoolinfo" RPC -- `aa82795` Add detailed network info to getnetworkinfo RPC -- `01094bd` Don't reveal whether password is <20 or >20 characters in RPC -- `57153d4` rpc: Compute number of confirmations of a block from block height -- `ff36cbe` getnetworkinfo: export local node's client sub-version string -- `d14d7de` SanitizeString: allow '(' and ')' -- `31d6390` Fixed setaccount accepting foreign address -- `b5ec5fe` update getnetworkinfo help with subversion -- `ad6e601` RPC additions after headers-first -- `33dfbf5` rpc: Fix leveldb iterator leak, and flush before `gettxoutsetinfo` -- `2aa6329` Enable customising node policy for datacarrier data size with a -datacarriersize option -- `f877aaa` submitblock: Use a temporary CValidationState to determine accurately the outcome of ProcessBlock -- `e69a587` submitblock: Support for returning specific rejection reasons -- `af82884` Add "warmup mode" for RPC server -- `e2655e0` Add unauthenticated HTTP REST interface to public blockchain data -- `683dc40` Disable SSLv3 (in favor of TLS) for the RPC client and server -- `44b4c0d` signrawtransaction: validate private key -- `9765a50` Implement BIP 23 Block Proposal -- `f9de17e` Add warning comment to getinfo - -Command-line options: -- `ee21912` Use netmasks instead of wildcards for IP address matching -- `deb3572` Add `-rpcbind` option to allow binding RPC port on a specific interface -- `96b733e` Add `-version` option to get just the version -- `1569353` Add `-stopafterblockimport` option -- `77cbd46` Let -zapwallettxes recover transaction meta data -- `1c750db` remove -tor compatibility code (only allow -onion) -- `4aaa017` rework help messages for fee-related options -- `4278b1d` Clarify error message when invalid -rpcallowip -- `6b407e4` -datadir is now allowed in config files -- `bdd5b58` Add option `-sysperms` to disable 077 umask (create new files with system default umask) -- `cbe39a3` Add "bitcoin-tx" command line utility and supporting modules -- `dbca89b` Trigger -alertnotify if network is upgrading without you -- `ad96e7c` Make -reindex cope with out-of-order blocks -- `16d5194` Skip reindexed blocks individually -- `ec01243` --tracerpc option for regression tests -- `f654f00` Change -genproclimit default to 1 -- `3c77714` Make -proxy set all network types, avoiding a connect leak -- `57be955` Remove -printblock, -printblocktree, and -printblockindex -- `ad3d208` remove -maxorphanblocks config parameter since it is no longer functional - -Block and transaction handling: -- `7a0e84d` ProcessGetData(): abort if a block file is missing from disk -- `8c93bf4` LoadBlockIndexDB(): Require block db reindex if any `blk*.dat` files are missing -- `77339e5` Get rid of the static chainMostWork (optimization) -- `4e0eed8` Allow ActivateBestChain to release its lock on cs_main -- `18e7216` Push cs_mains down in ProcessBlock -- `fa126ef` Avoid undefined behavior using CFlatData in CScript serialization -- `7f3b4e9` Relax IsStandard rules for pay-to-script-hash transactions -- `c9a0918` Add a skiplist to the CBlockIndex structure -- `bc42503` Use unordered_map for CCoinsViewCache with salted hash (optimization) -- `d4d3fbd` Do not flush the cache after every block outside of IBD (optimization) -- `ad08d0b` Bugfix: make CCoinsViewMemPool support pruned entries in underlying cache -- `5734d4d` Only remove actualy failed blocks from setBlockIndexValid -- `d70bc52` Rework block processing benchmark code -- `714a3e6` Only keep setBlockIndexValid entries that are possible improvements -- `ea100c7` Reduce maximum coinscache size during verification (reduce memory usage) -- `4fad8e6` Reject transactions with excessive numbers of sigops -- `b0875eb` Allow BatchWrite to destroy its input, reducing copying (optimization) -- `92bb6f2` Bypass reloading blocks from disk (optimization) -- `2e28031` Perform CVerifyDB on pcoinsdbview instead of pcoinsTip (reduce memory usage) -- `ab15b2e` Avoid copying undo data (optimization) -- `341735e` Headers-first synchronization -- `afc32c5` Fix rebuild-chainstate feature and improve its performance -- `e11b2ce` Fix large reorgs -- `ed6d1a2` Keep information about all block files in memory -- `a48f2d6` Abstract context-dependent block checking from acceptance -- `7e615f5` Fixed mempool sync after sending a transaction -- `51ce901` Improve chainstate/blockindex disk writing policy -- `a206950` Introduce separate flushing modes -- `9ec75c5` Add a locking mechanism to IsInitialBlockDownload to ensure it never goes from false to true -- `868d041` Remove coinbase-dependant transactions during reorg -- `723d12c` Remove txn which are invalidated by coinbase maturity during reorg -- `0cb8763` Check against MANDATORY flags prior to accepting to mempool -- `8446262` Reject headers that build on an invalid parent -- `008138c` Bugfix: only track UTXO modification after lookup - -P2P protocol and network code: -- `f80cffa` Do not trigger a DoS ban if SCRIPT_VERIFY_NULLDUMMY fails -- `c30329a` Add testnet DNS seed of Alex Kotenko -- `45a4baf` Add testnet DNS seed of Andreas Schildbach -- `f1920e8` Ping automatically every 2 minutes (unconditionally) -- `806fd19` Allocate receive buffers in on the fly -- `6ecf3ed` Display unknown commands received -- `aa81564` Track peers' available blocks -- `caf6150` Use async name resolving to improve net thread responsiveness -- `9f4da19` Use pong receive time rather than processing time -- `0127a9b` remove SOCKS4 support from core and GUI, use SOCKS5 -- `40f5cb8` Send rejects and apply DoS scoring for errors in direct block validation -- `dc942e6` Introduce whitelisted peers -- `c994d2e` prevent SOCKET leak in BindListenPort() -- `a60120e` Add built-in seeds for .onion -- `60dc8e4` Allow -onlynet=onion to be used -- `3a56de7` addrman: Do not propagate obviously poor addresses onto the network -- `6050ab6` netbase: Make SOCKS5 negotiation interruptible -- `604ee2a` Remove tx from AlreadyAskedFor list once we receive it, not when we process it -- `efad808` Avoid reject message feedback loops -- `71697f9` Separate protocol versioning from clientversion -- `20a5f61` Don't relay alerts to peers before version negotiation -- `b4ee0bd` Introduce preferred download peers -- `845c86d` Do not use third party services for IP detection -- `12a49ca` Limit the number of new addressses to accumulate -- `35e408f` Regard connection failures as attempt for addrman -- `a3a7317` Introduce 10 minute block download timeout -- `3022e7d` Require sufficent priority for relay of free transactions -- `58fda4d` Update seed IPs, based on bitcoin.sipa.be crawler data -- `18021d0` Remove bitnodes.io from dnsseeds. - -Validation: -- `6fd7ef2` Also switch the (unused) verification code to low-s instead of even-s -- `584a358` Do merkle root and txid duplicates check simultaneously -- `217a5c9` When transaction outputs exceed inputs, show the offending amounts so as to aid debugging -- `f74fc9b` Print input index when signature validation fails, to aid debugging -- `6fd59ee` script.h: set_vch() should shift a >32 bit value -- `d752ba8` Add SCRIPT_VERIFY_SIGPUSHONLY (BIP62 rule 2) (test only) -- `698c6ab` Add SCRIPT_VERIFY_MINIMALDATA (BIP62 rules 3 and 4) (test only) -- `ab9edbd` script: create sane error return codes for script validation and remove logging -- `219a147` script: check ScriptError values in script tests -- `0391423` Discourage NOPs reserved for soft-fork upgrades -- `98b135f` Make STRICTENC invalid pubkeys fail the script rather than the opcode -- `307f7d4` Report script evaluation failures in log and reject messages -- `ace39db` consensus: guard against openssl's new strict DER checks -- `12b7c44` Improve robustness of DER recoding code -- `76ce5c8` fail immediately on an empty signature - -Build system: -- `f25e3ad` Fix build in OS X 10.9 -- `65e8ba4` build: Switch to non-recursive make -- `460b32d` build: fix broken boost chrono check on some platforms -- `9ce0774` build: Fix windows configure when using --with-qt-libdir -- `ea96475` build: Add mention of --disable-wallet to bdb48 error messages -- `1dec09b` depends: add shared dependency builder -- `c101c76` build: Add --with-utils (bitcoin-cli and bitcoin-tx, default=yes). Help string consistency tweaks. Target sanity check fix -- `e432a5f` build: add option for reducing exports (v2) -- `6134b43` Fixing condition 'sabotaging' MSVC build -- `af0bd5e` osx: fix signing to make Gatekeeper happy (again) -- `a7d1f03` build: fix dynamic boost check when --with-boost= is used -- `d5fd094` build: fix qt test build when libprotobuf is in a non-standard path -- `2cf5f16` Add libbitcoinconsensus library -- `914868a` build: add a deterministic dmg signer -- `2d375fe` depends: bump openssl to 1.0.1k -- `b7a4ecc` Build: Only check for boost when building code that requires it - -Wallet: -- `b33d1f5` Use fee/priority estimates in wallet CreateTransaction -- `4b7b1bb` Sanity checks for estimates -- `c898846` Add support for watch-only addresses -- `d5087d1` Use script matching rather than destination matching for watch-only -- `d88af56` Fee fixes -- `a35b55b` Dont run full check every time we decrypt wallet -- `3a7c348` Fix make_change to not create half-satoshis -- `f606bb9` fix a possible memory leak in CWalletDB::Recover -- `870da77` fix possible memory leaks in CWallet::EncryptWallet -- `ccca27a` Watch-only fixes -- `9b1627d` [Wallet] Reduce minTxFee for transaction creation to 1000 satoshis -- `a53fd41` Deterministic signing -- `15ad0b5` Apply AreSane() checks to the fees from the network -- `11855c1` Enforce minRelayTxFee on wallet created tx and add a maxtxfee option - -GUI: -- `c21c74b` osx: Fix missing dock menu with qt5 -- `b90711c` Fix Transaction details shows wrong To: -- `516053c` Make links in 'About Bitcoin Core' clickable -- `bdc83e8` Ensure payment request network matches client network -- `65f78a1` Add GUI view of peer information -- `06a91d9` VerifyDB progress reporting -- `fe6bff2` Add BerkeleyDB version info to RPCConsole -- `b917555` PeerTableModel: Fix potential deadlock. #4296 -- `dff0e3b` Improve rpc console history behavior -- `95a9383` Remove CENT-fee-rule from coin control completely -- `56b07d2` Allow setting listen via GUI -- `d95ba75` Log messages with type>QtDebugMsg as non-debug -- `8969828` New status bar Unit Display Control and related changes -- `674c070` seed OpenSSL PNRG with Windows event data -- `509f926` Payment request parsing on startup now only changes network if a valid network name is specified -- `acd432b` Prevent balloon-spam after rescan -- `7007402` Implement SI-style (thin space) thoudands separator -- `91cce17` Use fixed-point arithmetic in amount spinbox -- `bdba2dd` Remove an obscure option no-one cares about -- `bd0aa10` Replace the temporary file hack currently used to change Bitcoin-Qt's dock icon (OS X) with a buffer-based solution -- `94e1b9e` Re-work overviewpage UI -- `8bfdc9a` Better looking trayicon -- `b197bf3` disable tray interactions when client model set to 0 -- `1c5f0af` Add column Watch-only to transactions list -- `21f139b` Fix tablet crash. closes #4854 -- `e84843c` Broken addresses on command line no longer trigger testnet -- `a49f11d` Change splash screen to normal window -- `1f9be98` Disable App Nap on OSX 10.9+ -- `27c3e91` Add proxy to options overridden if necessary -- `4bd1185` Allow "emergency" shutdown during startup -- `d52f072` Don't show wallet options in the preferences menu when running with -disablewallet -- `6093aa1` Qt: QProgressBar CPU-Issue workaround -- `0ed9675` [Wallet] Add global boolean whether to send free transactions (default=true) -- `ed3e5e4` [Wallet] Add global boolean whether to pay at least the custom fee (default=true) -- `e7876b2` [Wallet] Prevent user from paying a non-sense fee -- `c1c9d5b` Add Smartfee to GUI -- `e0a25c5` Make askpassphrase dialog behave more sanely -- `94b362d` On close of splashscreen interrupt verifyDB -- `b790d13` English translation update -- `8543b0d` Correct tooltip on address book page - -Tests: -- `b41e594` Fix script test handling of empty scripts -- `d3a33fc` Test CHECKMULTISIG with m == 0 and n == 0 -- `29c1749` Let tx (in)valid tests use any SCRIPT_VERIFY flag -- `6380180` Add rejection of non-null CHECKMULTISIG dummy values -- `21bf3d2` Add tests for BoostAsioToCNetAddr -- `b5ad5e7` Add Python test for -rpcbind and -rpcallowip -- `9ec0306` Add CODESEPARATOR/FindAndDelete() tests -- `75ebced` Added many rpc wallet tests -- `0193fb8` Allow multiple regression tests to run at once -- `92a6220` Hook up sanity checks -- `3820e01` Extend and move all crypto tests to crypto_tests.cpp -- `3f9a019` added list/get received by address/ account tests -- `a90689f` Remove timing-based signature cache unit test -- `236982c` Add skiplist unit tests -- `f4b00be` Add CChain::GetLocator() unit test -- `b45a6e8` Add test for getblocktemplate longpolling -- `cdf305e` Set -discover=0 in regtest framework -- `ed02282` additional test for OP_SIZE in script_valid.json -- `0072d98` script tests: BOOLAND, BOOLOR decode to integer -- `833ff16` script tests: values that overflow to 0 are true -- `4cac5db` script tests: value with trailing 0x00 is true -- `89101c6` script test: test case for 5-byte bools -- `d2d9dc0` script tests: add tests for CHECKMULTISIG limits -- `d789386` Add "it works" test for bitcoin-tx -- `df4d61e` Add bitcoin-tx tests -- `aa41ac2` Test IsPushOnly() with invalid push -- `6022b5d` Make `script_{valid,invalid}.json` validation flags configurable -- `8138cbe` Add automatic script test generation, and actual checksig tests -- `ed27e53` Add coins_tests with a large randomized CCoinViewCache test -- `9df9cf5` Make SCRIPT_VERIFY_STRICTENC compatible with BIP62 -- `dcb9846` Extend getchaintips RPC test -- `554147a` Ensure MINIMALDATA invalid tests can only fail one way -- `dfeec18` Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule -- `2b62e17` Clearly separate PUSHDATA and numeric argument MINIMALDATA tests -- `16d78bd` Add valid invert of invalid every numeric opcode tests -- `f635269` tests: enable alertnotify test for Windows -- `7a41614` tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment -- `5122ea7` tests: fix forknotify.py on windows -- `fa7f8cd` tests: remove old pull-tester scripts -- `7667850` tests: replace the old (unused since Travis) tests with new rpc test scripts -- `f4e0aef` Do signature-s negation inside the tests -- `1837987` Optimize -regtest setgenerate block generation -- `2db4c8a` Fix node ranges in the test framework -- `a8b2ce5` regression test only setmocktime RPC call -- `daf03e7` RPC tests: create initial chain with specific timestamps -- `8656dbb` Port/fix txnmall.sh regression test -- `ca81587` Test the exact order of CHECKMULTISIG sig/pubkey evaluation -- `7357893` Prioritize and display -testsafemode status in UI -- `f321d6b` Add key generation/verification to ECC sanity check -- `132ea9b` miner_tests: Disable checkpoints so they don't fail the subsidy-change test -- `bc6cb41` QA RPC tests: Add tests block block proposals -- `f67a9ce` Use deterministically generated script tests -- `11d7a7d` [RPC] add rpc-test for http keep-alive (persistent connections) -- `34318d7` RPC-test based on invalidateblock for mempool coinbase spends -- `76ec867` Use actually valid transactions for script tests -- `c8589bf` Add actual signature tests -- `e2677d7` Fix smartfees test for change to relay policy -- `263b65e` tests: run sanity checks in tests too - -Miscellaneous: -- `122549f` Fix incorrect checkpoint data for testnet3 -- `5bd02cf` Log used config file to debug.log on startup -- `68ba85f` Updated Debian example bitcoin.conf with config from wiki + removed some cruft and updated comments -- `e5ee8f0` Remove -beta suffix -- `38405ac` Add comment regarding experimental-use service bits -- `be873f6` Issue warning if collecting RandSeed data failed -- `8ae973c` Allocate more space if necessary in RandSeedAddPerfMon -- `675bcd5` Correct comment for 15-of-15 p2sh script size -- `fda3fed` libsecp256k1 integration -- `2e36866` Show nodeid instead of addresses in log (for anonymity) unless otherwise requested -- `cd01a5e` Enable paranoid corruption checks in LevelDB >= 1.16 -- `9365937` Add comment about never updating nTimeOffset past 199 samples -- `403c1bf` contrib: remove getwork-based pyminer (as getwork API call has been removed) -- `0c3e101` contrib: Added systemd .service file in order to help distributions integrate bitcoind -- `0a0878d` doc: Add new DNSseed policy -- `2887bff` Update coding style and add .clang-format -- `5cbda4f` Changed LevelDB cursors to use scoped pointers to ensure destruction when going out of scope -- `b4a72a7` contrib/linearize: split output files based on new-timestamp-year or max-file-size -- `e982b57` Use explicit fflush() instead of setvbuf() -- `234bfbf` contrib: Add init scripts and docs for Upstart and OpenRC -- `01c2807` Add warning about the merkle-tree algorithm duplicate txid flaw -- `d6712db` Also create pid file in non-daemon mode -- `772ab0e` contrib: use batched JSON-RPC in linarize-hashes (optimization) -- `7ab4358` Update bash-completion for v0.10 -- `6e6a36c` contrib: show pull # in prompt for github-merge script -- `5b9f842` Upgrade leveldb to 1.18, make chainstate databases compatible between ARM and x86 (issue #2293) -- `4e7c219` Catch UTXO set read errors and shutdown -- `867c600` Catch LevelDB errors during flush -- `06ca065` Fix CScriptID(const CScript& in) in empty script case - -Credits -======= - -Thanks to everyone who contributed to this release: - -- 21E14 -- Adam Weiss -- Aitor Pazos -- Alexander Jeng -- Alex Morcos -- Alon Muroch -- Andreas Schildbach -- Andrew Poelstra -- Andy Alness -- Ashley Holman -- Benedict Chan -- Ben Holden-Crowther -- Bryan Bishop -- BtcDrak -- Christian von Roques -- Clinton Christian -- Cory Fields -- Cozz Lovan -- daniel -- Daniel Kraft -- David Hill -- Derek701 -- dexX7 -- dllud -- Dominyk Tiller -- Doug -- elichai -- elkingtowa -- ENikS -- Eric Shaw -- Federico Bond -- Francis GASCHET -- Gavin Andresen -- Giuseppe Mazzotta -- Glenn Willen -- Gregory Maxwell -- gubatron -- HarryWu -- himynameismartin -- Huang Le -- Ian Carroll -- imharrywu -- Jameson Lopp -- Janusz Lenar -- JaSK -- Jeff Garzik -- JL2035 -- Johnathan Corgan -- Jonas Schnelli -- jtimon -- Julian Haight -- Kamil Domanski -- kazcw -- kevin -- kiwigb -- Kosta Zertsekel -- LongShao007 -- Luke Dashjr -- Mark Friedenbach -- Mathy Vanvoorden -- Matt Corallo -- Matthew Bogosian -- Micha -- Michael Ford -- Mike Hearn -- mrbandrews -- mruddy -- ntrgn -- Otto Allmendinger -- paveljanik -- Pavel Vasin -- Peter Todd -- phantomcircuit -- Philip Kaufmann -- Pieter Wuille -- pryds -- randy-waterhouse -- R E Broadley -- Rose Toomey -- Ross Nicoll -- Roy Badami -- Ruben Dario Ponticelli -- Rune K. Svendsen -- Ryan X. Charles -- Saivann -- sandakersmann -- SergioDemianLerner -- shshshsh -- sinetek -- Stuart Cardall -- Suhas Daftuar -- Tawanda Kembo -- Teran McKinney -- tm314159 -- Tom Harding -- Trevin Hofmann -- Whit J -- Wladimir J. van der Laan -- Yoichi Hirai -- Zak Wilcox - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). - diff --git a/doc/release-notes/release-notes-0.10.1.md b/doc/release-notes/release-notes-0.10.1.md deleted file mode 100644 index 8f59f1f68c..0000000000 --- a/doc/release-notes/release-notes-0.10.1.md +++ /dev/null @@ -1,143 +0,0 @@ -Bitcoin Core version 0.10.1 is now available from: - - - -This is a new minor version release, bringing bug fixes and translation -updates. It is recommended to upgrade to this version. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - -Notable changes -=============== - -This is a minor release and hence there are no notable changes. -For the notable changes in 0.10, refer to the release notes for the -0.10.0 release at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md - -0.10.1 Change log -================= - -Detailed release notes follow. This overview includes changes that affect external -behavior, not code moves, refactors or string updates. - -RPC: -- `7f502be` fix crash: createmultisig and addmultisigaddress -- `eae305f` Fix missing lock in submitblock - -Block (database) and transaction handling: -- `1d2cdd2` Fix InvalidateBlock to add chainActive.Tip to setBlockIndexCandidates -- `c91c660` fix InvalidateBlock to repopulate setBlockIndexCandidates -- `002c8a2` fix possible block db breakage during re-index -- `a1f425b` Add (optional) consistency check for the block chain data structures -- `1c62e84` Keep mempool consistent during block-reorgs -- `57d1f46` Fix CheckBlockIndex for reindex -- `bac6fca` Set nSequenceId when a block is fully linked - -P2P protocol and network code: -- `78f64ef` don't trickle for whitelisted nodes -- `ca301bf` Reduce fingerprinting through timestamps in 'addr' messages. -- `200f293` Ignore getaddr messages on Outbound connections. -- `d5d8998` Limit message sizes before transfer -- `aeb9279` Better fingerprinting protection for non-main-chain getdatas. -- `cf0218f` Make addrman's bucket placement deterministic (countermeasure 1 against eclipse attacks, see http://cs-people.bu.edu/heilman/eclipse/) -- `0c6f334` Always use a 50% chance to choose between tried and new entries (countermeasure 2 against eclipse attacks) -- `214154e` Do not bias outgoing connections towards fresh addresses (countermeasure 2 against eclipse attacks) -- `aa587d4` Scale up addrman (countermeasure 6 against eclipse attacks) -- `139cd81` Cap nAttempts penalty at 8 and switch to pow instead of a division loop - -Validation: -- `d148f62` Acquire CCheckQueue's lock to avoid race condition - -Build system: -- `8752b5c` 0.10 fix for crashes on OSX 10.6 - -Wallet: -- N/A - -GUI: -- `2c08406` some mac specifiy cleanup (memory handling, unnecessary code) -- `81145a6` fix OSX dock icon window reopening -- `786cf72` fix a issue where "command line options"-action overwrite "Preference"-action (on OSX) - -Tests: -- `1117378` add RPC test for InvalidateBlock - -Miscellaneous: -- `c9e022b` Initialization: set Boost path locale in main thread -- `23126a0` Sanitize command strings before logging them. -- `323de27` Initialization: setup environment before starting Qt tests -- `7494e09` Initialization: setup environment before starting tests -- `df45564` Initialization: set fallback locale as environment variable - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Morcos -- Cory Fields -- dexX7 -- fsb4000 -- Gavin Andresen -- Gregory Maxwell -- Ivan Pustogarov -- Jonas Schnelli -- Matt Corallo -- mrbandrews -- Pieter Wuille -- Ruben de Vries -- Suhas Daftuar -- Wladimir J. van der Laan - -And all those who contributed additional code review and/or security research: -- 21E14 -- Alison Kendler -- Aviv Zohar -- Ethan Heilman -- Evil-Knievel -- fanquake -- Jeff Garzik -- Jonas Nick -- Luke Dashjr -- Patrick Strateman -- Philip Kaufmann -- Sergio Demian Lerner -- Sharon Goldberg - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.10.2.md b/doc/release-notes/release-notes-0.10.2.md deleted file mode 100644 index 192ed69d29..0000000000 --- a/doc/release-notes/release-notes-0.10.2.md +++ /dev/null @@ -1,86 +0,0 @@ -Bitcoin Core version 0.10.2 is now available from: - - - -This is a new minor version release, bringing minor bug fixes and translation -updates. It is recommended to upgrade to this version. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - -Notable changes -=============== - -This fixes a serious problem on Windows with data directories that have non-ASCII -characters (https://github.com/bitcoin/bitcoin/issues/6078). - -For other platforms there are no notable changes. - -For the notable changes in 0.10, refer to the release notes -at https://github.com/bitcoin/bitcoin/blob/v0.10.0/doc/release-notes.md - -0.10.2 Change log -================= - -Detailed release notes follow. This overview includes changes that affect external -behavior, not code moves, refactors or string updates. - -Wallet: -- `824c011` fix boost::get usage with boost 1.58 - -Miscellaneous: -- `da65606` Avoid crash on start in TestBlockValidity with gen=1. -- `424ae66` don't imbue boost::filesystem::path with locale "C" on windows (fixes #6078) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Cory Fields -- Gregory Maxwell -- Jonas Schnelli -- Wladimir J. van der Laan - -And all those who contributed additional code review and/or security research: - -- dexX7 -- Pieter Wuille -- vayvanne - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.10.3.md b/doc/release-notes/release-notes-0.10.3.md deleted file mode 100644 index 8a110e562c..0000000000 --- a/doc/release-notes/release-notes-0.10.3.md +++ /dev/null @@ -1,165 +0,0 @@ -Bitcoin Core version 0.10.3 is now available from: - - - -This is a new minor version release, bringing security fixes and translation -updates. It is recommended to upgrade to this version as soon as possible. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - -Notable changes -=============== - -Fix buffer overflow in bundled upnp ------------------------------------- - -Bundled miniupnpc was updated to 1.9.20151008. This fixes a buffer overflow in -the XML parser during initial network discovery. - -Details can be found here: http://talosintel.com/reports/TALOS-2015-0035/ - -This applies to the distributed executables only, not when building from source or -using distribution provided packages. - -Additionally, upnp has been disabled by default. This may result in a lower -number of reachable nodes on IPv4, however this prevents future libupnpc -vulnerabilities from being a structural risk to the network -(see https://github.com/bitcoin/bitcoin/pull/6795). - -Test for LowS signatures before relaying ------------------------------------------ - -Make the node require the canonical 'low-s' encoding for ECDSA signatures when -relaying or mining. This removes a nuisance malleability vector. - -Consensus behavior is unchanged. - -If widely deployed this change would eliminate the last remaining known vector -for nuisance malleability on SIGHASH_ALL P2PKH transactions. On the down-side -it will block most transactions made by sufficiently out of date software. - -Unlike the other avenues to change txids on transactions this -one was randomly violated by all deployed bitcoin software prior to -its discovery. So, while other malleability vectors where made -non-standard as soon as they were discovered, this one has remained -permitted. Even BIP62 did not propose applying this rule to -old version transactions, but conforming implementations have become -much more common since BIP62 was initially written. - -Bitcoin Core has produced compatible signatures since a28fb70e in -September 2013, but this didn't make it into a release until 0.9 -in March 2014; Bitcoinj has done so for a similar span of time. -Bitcoinjs and electrum have been more recently updated. - -This does not replace the need for BIP62 or similar, as miners can -still cooperate to break transactions. Nor does it replace the -need for wallet software to handle malleability sanely[1]. This -only eliminates the cheap and irritating DOS attack. - -[1] On the Malleability of Bitcoin Transactions -Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski, Łukasz Mazurek -http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf - -Minimum relay fee default increase ------------------------------------ - -The default for the `-minrelaytxfee` setting has been increased from `0.00001` -to `0.00005`. - -This is necessitated by the current transaction flooding, causing -outrageous memory usage on nodes due to the mempool ballooning. This is a -temporary measure, bridging the time until a dynamic method for determining -this fee is merged (which will be in 0.12). - -(see https://github.com/bitcoin/bitcoin/pull/6793, as well as the 0.11.0 -release notes, in which this value was suggested) - -0.10.3 Change log -================= - -Detailed release notes follow. This overview includes changes that affect external -behavior, not code moves, refactors or string updates. - -- #6186 `e4a7d51` Fix two problems in CSubnet parsing -- #6153 `ebd7d8d` Parameter interaction: disable upnp if -proxy set -- #6203 `ecc96f5` Remove P2SH coinbase flag, no longer interesting -- #6226 `181771b` json: fail read_string if string contains trailing garbage -- #6244 `09334e0` configure: Detect (and reject) LibreSSL -- #6276 `0fd8464` Fix getbalance * 0 -- #6274 `be64204` Add option `-alerts` to opt out of alert system -- #6319 `3f55638` doc: update mailing list address -- #6438 `7e66e9c` openssl: avoid config file load/race -- #6439 `255eced` Updated URL location of netinstall for Debian -- #6412 `0739e6e` Test whether created sockets are select()able -- #6694 `f696ea1` [QT] fix thin space word wrap line brake issue -- #6704 `743cc9e` Backport bugfixes to 0.10 -- #6769 `1cea6b0` Test LowS in standardness, removes nuisance malleability vector. -- #6789 `093d7b5` Update miniupnpc to 1.9.20151008 -- #6795 `f2778e0` net: Disable upnp by default -- #6797 `91ef4d9` Do not store more than 200 timedata samples -- #6793 `842c48d` Bump minrelaytxfee default - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Adam Weiss -- Alex Morcos -- Casey Rodarmor -- Cory Fields -- fanquake -- Gregory Maxwell -- Jonas Schnelli -- J Ross Nicoll -- Luke Dashjr -- Pavel Vasin -- Pieter Wuille -- randy-waterhouse -- ฿tcDrak -- Tom Harding -- Veres Lajos -- Wladimir J. van der Laan - -And all those who contributed additional code review and/or security research: - -- timothy on IRC for reporting the issue -- Vulnerability in miniupnp discovered by Aleksandar Nikolic of Cisco Talos - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.10.4.md b/doc/release-notes/release-notes-0.10.4.md deleted file mode 100644 index 38a2c1347d..0000000000 --- a/doc/release-notes/release-notes-0.10.4.md +++ /dev/null @@ -1,172 +0,0 @@ -Bitcoin Core version 0.10.4 is now available from: - - - -This is a new minor version release, bringing bug fixes, the BIP65 -(CLTV) consensus change, and relay policy preparation for BIP113. It is -recommended to upgrade to this version as soon as possible. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. There are no -known problems when downgrading from 0.11.x to 0.10.x. - -Notable changes since 0.10.3 -============================ - -BIP65 soft fork to enforce OP_CHECKLOCKTIMEVERIFY opcode --------------------------------------------------------- - -This release includes several changes related to the [BIP65][] soft fork -which redefines the existing OP_NOP2 opcode as OP_CHECKLOCKTIMEVERIFY -(CLTV) so that a transaction output can be made unspendable until a -specified point in the future. - -1. This release will only relay and mine transactions spending a CLTV - output if they comply with the BIP65 rules as provided in code. - -2. This release will produce version 4 blocks by default. Please see the - *notice to miners* below. - -3. Once 951 out of a sequence of 1,001 blocks on the local node's best block - chain contain version 4 (or higher) blocks, this release will no - longer accept new version 3 blocks and it will only accept version 4 - blocks if they comply with the BIP65 rules for CLTV. - -For more information about the soft-forking change, please see - - -Graphs showing the progress towards block version 4 adoption may be -found at the URLs below: - -- Block versions over the last 50,000 blocks as progress towards BIP65 - consensus enforcement: - -- Block versions over the last 2,000 blocks showing the days to the - earliest possible BIP65 consensus-enforced block: - -**Notice to miners:** Bitcoin Core’s block templates are now for -version 4 blocks only, and any mining software relying on its -getblocktemplate must be updated in parallel to use libblkmaker either -version FIXME or any version from FIXME onward. - -- If you are solo mining, this will affect you the moment you upgrade - Bitcoin Core, which must be done prior to BIP65 achieving its 951/1001 - status. - -- If you are mining with the stratum mining protocol: this does not - affect you. - -- If you are mining with the getblocktemplate protocol to a pool: this - will affect you at the pool operator’s discretion, which must be no - later than BIP65 achieving its 951/1001 status. - -[BIP65]: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki - -Windows bug fix for corrupted UTXO database on unclean shutdowns ----------------------------------------------------------------- - -Several Windows users reported that they often need to reindex the -entire blockchain after an unclean shutdown of Bitcoin Core on Windows -(or an unclean shutdown of Windows itself). Although unclean shutdowns -remain unsafe, this release no longer relies on memory-mapped files for -the UTXO database, which significantly reduced the frequency of unclean -shutdowns leading to required reindexes during testing. - -For more information, see: - -Other fixes for database corruption on Windows are expected in the -next major release. - -0.10.4 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -- #6953 `8b3311f` alias -h for --help -- #6953 `97546fc` Change URLs to https in debian/control -- #6953 `38671bf` Update debian/changelog and slight tweak to debian/control -- #6953 `256321e` Correct spelling mistakes in doc folder -- #6953 `eae0350` Clarification of unit test build instructions -- #6953 `90897ab` Update bluematt-key, the old one is long-since revoked -- #6953 `a2f2fb6` build: disable -Wself-assign -- #6953 `cf67d8b` Bugfix: Allow mining on top of old tip blocks for testnet (fixes testnet-in-a-box use case) -- #6953 `b3964e3` Drop "with minimal dependencies" from description -- #6953 `43c2789` Split bitcoin-tx into its own package -- #6953 `dfe0d4d` Include bitcoin-tx binary on Debian/Ubuntu -- #6953 `612efe8` [Qt] Raise debug window when requested -- #6953 `3ad96bd` Fix locking in GetTransaction -- #6953 `9c81005` Fix spelling of Qt -- #6946 `94b67e5` Update LevelDB -- #6706 `5dc72f8` CLTV: Add more tests to improve coverage -- #6706 `6a1343b` Add RPC tests for the CHECKLOCKTIMEVERIFY (BIP65) soft-fork -- #6706 `4137248` Add CHECKLOCKTIMEVERIFY (BIP65) soft-fork logic -- #6706 `0e01d0f` Enable CHECKLOCKTIMEVERIFY as a standard script verify flag -- #6706 `6d01325` Replace NOP2 with CHECKLOCKTIMEVERIFY (BIP65) -- #6706 `750d54f` Move LOCKTIME_THRESHOLD to src/script/script.h -- #6706 `6897468` Make CScriptNum() take nMaxNumSize as an argument -- #6867 `5297194` Set TCP_NODELAY on P2P sockets -- #6836 `fb818b6` Bring historical release notes up to date -- #6852 `0b3fd07` build: make sure OpenSSL heeds noexecstack - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Morcos -- Daniel Cousens -- Diego Viola -- Eric Lombrozo -- Esteban Ordano -- Gregory Maxwell -- Luke Dashjr -- MarcoFalke -- Matt Corallo -- Micha -- Mitchell Cash -- Peter Todd -- Pieter Wuille -- Wladimir J. van der Laan -- Zak Wilcox - -And those who contributed additional code review and/or security research. - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.11.0.md b/doc/release-notes/release-notes-0.11.0.md deleted file mode 100644 index 28e49fb7ea..0000000000 --- a/doc/release-notes/release-notes-0.11.0.md +++ /dev/null @@ -1,505 +0,0 @@ -Bitcoin Core version 0.11.0 is now available from: - - - -This is a new major version release, bringing both new features and -bug fixes. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. There are no -known problems when downgrading from 0.11.x to 0.10.x. - -Important information -====================== - -Transaction flooding ---------------------- - -At the time of this release, the P2P network is being flooded with low-fee -transactions. This causes a ballooning of the mempool size. - -If this growth of the mempool causes problematic memory use on your node, it is -possible to change a few configuration options to work around this. The growth -of the mempool can be monitored with the RPC command `getmempoolinfo`. - -One is to increase the minimum transaction relay fee `minrelaytxfee`, which -defaults to 0.00001. This will cause transactions with fewer BTC/kB fee to be -rejected, and thus fewer transactions entering the mempool. - -The other is to restrict the relaying of free transactions with -`limitfreerelay`. This option sets the number of kB/minute at which -free transactions (with enough priority) will be accepted. It defaults to 15. -Reducing this number reduces the speed at which the mempool can grow due -to free transactions. - -For example, add the following to `bitcoin.conf`: - - minrelaytxfee=0.00005 - limitfreerelay=5 - -More robust solutions are being worked on for a follow-up release. - -Notable changes -=============== - -Block file pruning ----------------------- - -This release supports running a fully validating node without maintaining a copy -of the raw block and undo data on disk. To recap, there are four types of data -related to the blockchain in the bitcoin system: the raw blocks as received over -the network (blk???.dat), the undo data (rev???.dat), the block index and the -UTXO set (both LevelDB databases). The databases are built from the raw data. - -Block pruning allows Bitcoin Core to delete the raw block and undo data once -it's been validated and used to build the databases. At that point, the raw data -is used only to relay blocks to other nodes, to handle reorganizations, to look -up old transactions (if -txindex is enabled or via the RPC/REST interfaces), or -for rescanning the wallet. The block index continues to hold the metadata about -all blocks in the blockchain. - -The user specifies how much space to allot for block & undo files. The minimum -allowed is 550MB. Note that this is in addition to whatever is required for the -block index and UTXO databases. The minimum was chosen so that Bitcoin Core will -be able to maintain at least 288 blocks on disk (two days worth of blocks at 10 -minutes per block). In rare instances it is possible that the amount of space -used will exceed the pruning target in order to keep the required last 288 -blocks on disk. - -Block pruning works during initial sync in the same way as during steady state, -by deleting block files "as you go" whenever disk space is allocated. Thus, if -the user specifies 550MB, once that level is reached the program will begin -deleting the oldest block and undo files, while continuing to download the -blockchain. - -For now, block pruning disables block relay. In the future, nodes with block -pruning will at a minimum relay "new" blocks, meaning blocks that extend their -active chain. - -Block pruning is currently incompatible with running a wallet due to the fact -that block data is used for rescanning the wallet and importing keys or -addresses (which require a rescan.) However, running the wallet with block -pruning will be supported in the near future, subject to those limitations. - -Block pruning is also incompatible with -txindex and will automatically disable -it. - -Once you have pruned blocks, going back to unpruned state requires -re-downloading the entire blockchain. To do this, re-start the node with --reindex. Note also that any problem that would cause a user to reindex (e.g., -disk corruption) will cause a pruned node to redownload the entire blockchain. -Finally, note that when a pruned node reindexes, it will delete any blk???.dat -and rev???.dat files in the data directory prior to restarting the download. - -To enable block pruning on the command line: - -- `-prune=N`: where N is the number of MB to allot for raw block & undo data. - -Modified RPC calls: - -- `getblockchaininfo` now includes whether we are in pruned mode or not. -- `getblock` will check if the block's data has been pruned and if so, return an -error. -- `getrawtransaction` will no longer be able to locate a transaction that has a -UTXO but where its block file has been pruned. - -Pruning is disabled by default. - -Big endian support --------------------- - -Experimental support for big-endian CPU architectures was added in this -release. All little-endian specific code was replaced with endian-neutral -constructs. This has been tested on at least MIPS and PPC hosts. The build -system will automatically detect the endianness of the target. - -Memory usage optimization --------------------------- - -There have been many changes in this release to reduce the default memory usage -of a node, among which: - -- Accurate UTXO cache size accounting (#6102); this makes the option `-dbcache` - precise where this grossly underestimated memory usage before -- Reduce size of per-peer data structure (#6064 and others); this increases the - number of connections that can be supported with the same amount of memory -- Reduce the number of threads (#5964, #5679); lowers the amount of (esp. - virtual) memory needed - -Fee estimation changes ----------------------- - -This release improves the algorithm used for fee estimation. Previously, -1 -was returned when there was insufficient data to give an estimate. Now, -1 -will also be returned when there is no fee or priority high enough for the -desired confirmation target. In those cases, it can help to ask for an estimate -for a higher target number of blocks. It is not uncommon for there to be no -fee or priority high enough to be reliably (85%) included in the next block and -for this reason, the default for `-txconfirmtarget=n` has changed from 1 to 2. - -Privacy: Disable wallet transaction broadcast ----------------------------------------------- - -This release adds an option `-walletbroadcast=0` to prevent automatic -transaction broadcast and rebroadcast (#5951). This option allows separating -transaction submission from the node functionality. - -Making use of this, third-party scripts can be written to take care of -transaction (re)broadcast: - -- Send the transaction as normal, either through RPC or the GUI -- Retrieve the transaction data through RPC using `gettransaction` (NOT - `getrawtransaction`). The `hex` field of the result will contain the raw - hexadecimal representation of the transaction -- The transaction can then be broadcasted through arbitrary mechanisms - supported by the script - -One such application is selective Tor usage, where the node runs on the normal -internet but transactions are broadcasted over Tor. - -For an example script see [bitcoin-submittx](https://github.com/laanwj/bitcoin-submittx). - -Privacy: Stream isolation for Tor ----------------------------------- - -This release adds functionality to create a new circuit for every peer -connection, when the software is used with Tor. The new option, -`-proxyrandomize`, is on by default. - -When enabled, every outgoing connection will (potentially) go through a -different exit node. That significantly reduces the chance to get unlucky and -pick a single exit node that is either malicious, or widely banned from the P2P -network. This improves connection reliability as well as privacy, especially -for the initial connections. - -**Important note:** If a non-Tor SOCKS5 proxy is configured that supports -authentication, but doesn't require it, this change may cause that proxy to reject -connections. A user and password is sent where they weren't before. This setup -is exceedingly rare, but in this case `-proxyrandomize=0` can be passed to -disable the behavior. - -0.11.0 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### RPC and REST -- #5461 `5f7279a` signrawtransaction: validate private key -- #5444 `103f66b` Add /rest/headers//. -- #4964 `95ecc0a` Add scriptPubKey field to validateaddress RPC call -- #5476 `c986972` Add time offset into getpeerinfo output -- #5540 `84eba47` Add unconfirmed and immature balances to getwalletinfo -- #5599 `40e96a3` Get rid of the internal miner's hashmeter -- #5711 `87ecfb0` Push down RPC locks -- #5754 `1c4e3f9` fix getblocktemplate lock issue -- #5756 `5d901d8` Fix getblocktemplate_proposals test by mining one block -- #5548 `d48ce48` Add /rest/chaininfos -- #5992 `4c4f1b4` Push down RPC reqWallet flag -- #6036 `585b5db` Show zero value txouts in listunspent -- #5199 `6364408` Add RPC call `gettxoutproof` to generate and verify merkle blocks -- #5418 `16341cc` Report missing inputs in sendrawtransaction -- #5937 `40f5e8d` show script verification errors in signrawtransaction result -- #5420 `1fd2d39` getutxos REST command (based on Bip64) -- #6193 `42746b0` [REST] remove json input for getutxos, limit to query max. 15 outpoints -- #6226 `5901596` json: fail read_string if string contains trailing garbage - -### Configuration and command-line options -- #5636 `a353ad4` Add option `-allowselfsignedrootcertificate` to allow self signed root certs (for testing payment requests) -- #5900 `3e8a1f2` Add a consistency check `-checkblockindex` for the block chain data structures -- #5951 `7efc9cf` Make it possible to disable wallet transaction broadcast (using `-walletbroadcast=0`) -- #5911 `b6ea3bc` privacy: Stream isolation for Tor (on by default, use `-proxyrandomize=0` to disable) -- #5863 `c271304` Add autoprune functionality (`-prune=`) -- #6153 `0bcf04f` Parameter interaction: disable upnp if -proxy set -- #6274 `4d9c7fe` Add option `-alerts` to opt out of alert system - -### Block and transaction handling -- #5367 `dcc1304` Do all block index writes in a batch -- #5253 `203632d` Check against MANDATORY flags prior to accepting to mempool -- #5459 `4406c3e` Reject headers that build on an invalid parent -- #5481 `055f3ae` Apply AreSane() checks to the fees from the network -- #5580 `40d65eb` Preemptively catch a few potential bugs -- #5349 `f55c5e9` Implement test for merkle tree malleability in CPartialMerkleTree -- #5564 `a89b837` clarify obscure uses of EvalScript() -- #5521 `8e4578a` Reject non-final txs even in testnet/regtest -- #5707 `6af674e` Change hardcoded character constants to descriptive named constants for db keys -- #5286 `fcf646c` Change the default maximum OP_RETURN size to 80 bytes -- #5710 `175d86e` Add more information to errors in ReadBlockFromDisk -- #5948 `b36f1ce` Use GetAncestor to compute new target -- #5959 `a0bfc69` Add additional block index consistency checks -- #6058 `7e0e7f8` autoprune minor post-merge improvements -- #5159 `2cc1372` New fee estimation code -- #6102 `6fb90d8` Implement accurate UTXO cache size accounting -- #6129 `2a82298` Bug fix for clearing fCheckForPruning -- #5947 `e9af4e6` Alert if it is very likely we are getting a bad chain -- #6203 `c00ae64` Remove P2SH coinbase flag, no longer interesting -- #5985 `37b4e42` Fix removing of orphan transactions -- #6221 `6cb70ca` Prune: Support noncontiguous block files -- #6256 `fce474c` Use best header chain timestamps to detect partitioning -- #6233 `a587606` Advance pindexLastCommonBlock for blocks in chainActive - -### P2P protocol and network code -- #5507 `844ace9` Prevent DOS attacks on in-flight data structures -- #5770 `32a8b6a` Sanitize command strings before logging them -- #5859 `dd4ffce` Add correct bool combiner for net signals -- #5876 `8e4fd0c` Add a NODE_GETUTXO service bit and document NODE_NETWORK -- #6028 `b9311fb` Move nLastTry from CAddress to CAddrInfo -- #5662 `5048465` Change download logic to allow calling getdata on inbound peers -- #5971 `18d2832` replace absolute sleep with conditional wait -- #5918 `7bf5d5e` Use equivalent PoW for non-main-chain requests -- #6059 `f026ab6` chainparams: use SeedSpec6's rather than CAddress's for fixed seeds -- #6080 `31c0bf1` Add jonasschnellis dns seeder -- #5976 `9f7809f` Reduce download timeouts as blocks arrive -- #6172 `b4bbad1` Ignore getheaders requests when not synced -- #5875 `304892f` Be stricter in processing unrequested blocks -- #6333 `41bbc85` Hardcoded seeds update June 2015 - -### Validation -- #5143 `48e1765` Implement BIP62 rule 6 -- #5713 `41e6e4c` Implement BIP66 - -### Build system -- #5501 `c76c9d2` Add mips, mipsel and aarch64 to depends platforms -- #5334 `cf87536` libbitcoinconsensus: Add pkg-config support -- #5514 `ed11d53` Fix 'make distcheck' -- #5505 `a99ef7d` Build winshutdownmonitor.cpp on Windows only -- #5582 `e8a6639` Osx toolchain update -- #5684 `ab64022` osx: bump build sdk to 10.9 -- #5695 `23ef5b7` depends: latest config.guess and config.sub -- #5509 `31dedb4` Fixes when compiling in c++11 mode -- #5819 `f8e68f7` release: use static libstdc++ and disable reduced exports by default -- #5510 `7c3fbc3` Big endian support -- #5149 `c7abfa5` Add script to verify all merge commits are signed -- #6082 `7abbb7e` qt: disable qt tests when one of the checks for the gui fails -- #6244 `0401aa2` configure: Detect (and reject) LibreSSL -- #6269 `95aca44` gitian: Use the new bitcoin-detached-sigs git repo for OSX signatures -- #6285 `ef1d506` Fix scheduler build with some boost versions. -- #6280 `25c2216` depends: fix Boost 1.55 build on GCC 5 -- #6303 `b711599` gitian: add a gitian-win-signer descriptor -- #6246 `8ea6d37` Fix build on FreeBSD -- #6282 `daf956b` fix crash on shutdown when e.g. changing -txindex and abort action -- #6354 `bdf0d94` Gitian windows signing normalization - -### Wallet -- #2340 `811c71d` Discourage fee sniping with nLockTime -- #5485 `d01bcc4` Enforce minRelayTxFee on wallet created tx and add a maxtxfee option -- #5508 `9a5cabf` Add RandAddSeedPerfmon to MakeNewKey -- #4805 `8204e19` Do not flush the wallet in AddToWalletIfInvolvingMe(..) -- #5319 `93b7544` Clean up wallet encryption code -- #5831 `df5c246` Subtract fee from amount -- #6076 `6c97fd1` wallet: fix boost::get usage with boost 1.58 -- #5511 `23c998d` Sort pending wallet transactions before reaccepting -- #6126 `26e08a1` Change default nTxConfirmTarget to 2 -- #6183 `75a4d51` Fix off-by-one error w/ nLockTime in the wallet -- #6276 `c9fd907` Fix getbalance * 0 - -### GUI -- #5219 `f3af0c8` New icons -- #5228 `bb3c75b` HiDPI (retina) support for splash screen -- #5258 `73cbf0a` The RPC Console should be a QWidget to make window more independent -- #5488 `851dfc7` Light blue icon color for regtest -- #5547 `a39aa74` New icon for the debug window -- #5493 `e515309` Adopt style colour for button icons -- #5557 `70477a0` On close of splashscreen interrupt verifyDB -- #5559 `83be8fd` Make the command-line-args dialog better -- #5144 `c5380a9` Elaborate on signverify message dialog warning -- #5489 `d1aa3c6` Optimize PNG files -- #5649 `e0cd2f5` Use text-color icons for system tray Send/Receive menu entries -- #5651 `848f55d` Coin Control: Use U+2248 "ALMOST EQUAL TO" rather than a simple tilde -- #5626 `ab0d798` Fix icon sizes and column width -- #5683 `c7b22aa` add new osx dmg background picture -- #5620 `7823598` Payment request expiration bug fix -- #5729 `9c4a5a5` Allow unit changes for read-only BitcoinAmountField -- #5753 `0f44672` Add bitcoin logo to about screen -- #5629 `a956586` Prevent amount overflow problem with payment requests -- #5830 `215475a` Don't save geometry for options and about/help window -- #5793 `d26f0b2` Honor current network when creating autostart link -- #5847 `f238add` Startup script for centos, with documentation -- #5915 `5bd3a92` Fix a static qt5 crash when using certain versions of libxcb -- #5898 `bb56781` Fix rpc console font size to flexible metrics -- #5467 `bc8535b` Payment request / server work - part 2 -- #6161 `180c164` Remove movable option for toolbar -- #6160 `0d862c2` Overviewpage: make sure warning icons gets colored - -### Tests -- #5453 `2f2d337` Add ability to run single test manually to RPC tests -- #5421 `886eb57` Test unexecuted OP_CODESEPARATOR -- #5530 `565b300` Additional rpc tests -- #5611 `37b185c` Fix spurious windows test failures after 012598880c -- #5613 `2eda47b` Fix smartfees test for change to relay policy -- #5612 `e3f5727` Fix zapwallettxes test -- #5642 `30a5b5f` Prepare paymentservertests for new unit tests -- #5784 `e3a3cd7` Fix usage of NegateSignatureS in script_tests -- #5813 `ee9f2bf` Add unit tests for next difficulty calculations -- #5855 `d7989c0` Travis: run unit tests in different orders -- #5852 `cdae53e` Reinitialize state in between individual unit tests. -- #5883 `164d7b6` tests: add a BasicTestingSetup and apply to all tests -- #5940 `446bb70` Regression test for ResendWalletTransactions -- #6052 `cf7adad` fix and enable bip32 unit test -- #6039 `734f80a` tests: Error when setgenerate is used on regtest -- #6074 `948beaf` Correct the PUSHDATA4 minimal encoding test in script_invalid.json -- #6032 `e08886d` Stop nodes after RPC tests, even with --nocleanup -- #6075 `df1609f` Add additional script edge condition tests -- #5981 `da38dc6` Python P2P testing -- #5958 `9ef00c3` Add multisig rpc tests -- #6112 `fec5c0e` Add more script edge condition tests - -### Miscellaneous -- #5457, #5506, #5952, #6047 Update libsecp256k1 -- #5437 `84857e8` Add missing CAutoFile::IsNull() check in main -- #5490 `ec20fd7` Replace uint256/uint160 with opaque blobs where possible -- #5654, #5764 Adding jonasschnelli's GPG key -- #5477 `5f04d1d` OS X 10.10: LSSharedFileListItemResolve() is deprecated -- #5679 `beff11a` Get rid of DetectShutdownThread -- #5787 `9bd8c9b` Add fanquake PGP key -- #5366 `47a79bb` No longer check osx compatibility in RenameThread -- #5689 `07f4386` openssl: abstract out OPENSSL_cleanse -- #5708 `8b298ca` Add list of implemented BIPs -- #5809 `46bfbe7` Add bitcoin-cli man page -- #5839 `86eb461` keys: remove libsecp256k1 verification until it's actually supported -- #5749 `d734d87` Help messages correctly formatted (79 chars) -- #5884 `7077fe6` BUGFIX: Stack around the variable 'rv' was corrupted -- #5849 `41259ca` contrib/init/bitcoind.openrc: Compatibility with previous OpenRC init script variables -- #5950 `41113e3` Fix locale fallback and guard tests against invalid locale settings -- #5965 `7c6bfb1` Add git-subtree-check.sh script -- #6033 `1623f6e` FreeBSD, OpenBSD thread renaming -- #6064 `b46e7c2` Several changes to mruset -- #6104 `3e2559c` Show an init message while activating best chain -- #6125 `351f73e` Clean up parsing of bool command line args -- #5964 `b4c219b` Lightweight task scheduler -- #6116 `30dc3c1` [OSX] rename Bitcoin-Qt.app to Bitcoin-Core.app -- #6168 `b3024f0` contrib/linearize: Support linearization of testnet blocks -- #6098 `7708fcd` Update Windows resource files (and add one for bitcoin-tx) -- #6159 `e1412d3` Catch errors on datadir lock and pidfile delete -- #6186 `182686c` Fix two problems in CSubnet parsing -- #6174 `df992b9` doc: add translation strings policy -- #6210 `dfdb6dd` build: disable optional use of gmp in internal secp256k1 build -- #6264 `94cd705` Remove translation for -help-debug options -- #6286 `3902c15` Remove berkeley-db4 workaround in MacOSX build docs -- #6319 `3f8fcc9` doc: update mailing list address - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- 21E14 -- Adam Weiss -- Alex Morcos -- ayeowch -- azeteki -- Ben Holden-Crowther -- bikinibabe -- BitcoinPRReadingGroup -- Blake Jakopovic -- BtcDrak -- charlescharles -- Chris Arnesen -- Ciemon -- CohibAA -- Corinne Dashjr -- Cory Fields -- Cozz Lovan -- Daira Hopwood -- Daniel Kraft -- Dave Collins -- David A. Harding -- dexX7 -- Earlz -- Eric Lombrozo -- Eric R. Schulz -- Everett Forth -- Flavien Charlon -- fsb4000 -- Gavin Andresen -- Gregory Maxwell -- Heath -- Ivan Pustogarov -- Jacob Welsh -- Jameson Lopp -- Jason Lewicki -- Jeff Garzik -- Jonas Schnelli -- Jonathan Brown -- Jorge Timón -- joshr -- jtimon -- Julian Yap -- Luca Venturini -- Luke Dashjr -- Manuel Araoz -- MarcoFalke -- Matt Bogosian -- Matt Corallo -- Micha -- Michael Ford -- Mike Hearn -- mrbandrews -- Nicolas Benoit -- paveljanik -- Pavel Janík -- Pavel Vasin -- Peter Todd -- Philip Kaufmann -- Pieter Wuille -- pstratem -- randy-waterhouse -- rion -- Rob Van Mieghem -- Ross Nicoll -- Ruben de Vries -- sandakersmann -- Shaul Kfir -- Shawn Wilkinson -- sinetek -- Suhas Daftuar -- svost -- Thomas Zander -- Tom Harding -- UdjinM6 -- Vitalii Demianets -- Wladimir J. van der Laan - -And all those who contributed additional code review and/or security research: - -- Sergio Demian Lerner - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). - diff --git a/doc/release-notes/release-notes-0.11.1.md b/doc/release-notes/release-notes-0.11.1.md deleted file mode 100644 index 799205691e..0000000000 --- a/doc/release-notes/release-notes-0.11.1.md +++ /dev/null @@ -1,172 +0,0 @@ -Bitcoin Core version 0.11.1 is now available from: - - - -This is a new minor version release, bringing security fixes. It is recommended -to upgrade to this version as soon as possible. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. There are no -known problems when downgrading from 0.11.x to 0.10.x. - -Notable changes -=============== - -Fix buffer overflow in bundled upnp ------------------------------------- - -Bundled miniupnpc was updated to 1.9.20151008. This fixes a buffer overflow in -the XML parser during initial network discovery. - -Details can be found here: http://talosintel.com/reports/TALOS-2015-0035/ - -This applies to the distributed executables only, not when building from source or -using distribution provided packages. - -Additionally, upnp has been disabled by default. This may result in a lower -number of reachable nodes on IPv4, however this prevents future libupnpc -vulnerabilities from being a structural risk to the network -(see https://github.com/bitcoin/bitcoin/pull/6795). - -Test for LowS signatures before relaying ------------------------------------------ - -Make the node require the canonical 'low-s' encoding for ECDSA signatures when -relaying or mining. This removes a nuisance malleability vector. - -Consensus behavior is unchanged. - -If widely deployed this change would eliminate the last remaining known vector -for nuisance malleability on SIGHASH_ALL P2PKH transactions. On the down-side -it will block most transactions made by sufficiently out of date software. - -Unlike the other avenues to change txids on transactions this -one was randomly violated by all deployed bitcoin software prior to -its discovery. So, while other malleability vectors where made -non-standard as soon as they were discovered, this one has remained -permitted. Even BIP62 did not propose applying this rule to -old version transactions, but conforming implementations have become -much more common since BIP62 was initially written. - -Bitcoin Core has produced compatible signatures since a28fb70e in -September 2013, but this didn't make it into a release until 0.9 -in March 2014; Bitcoinj has done so for a similar span of time. -Bitcoinjs and electrum have been more recently updated. - -This does not replace the need for BIP62 or similar, as miners can -still cooperate to break transactions. Nor does it replace the -need for wallet software to handle malleability sanely[1]. This -only eliminates the cheap and irritating DOS attack. - -[1] On the Malleability of Bitcoin Transactions -Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski, Łukasz Mazurek -http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf - -Minimum relay fee default increase ------------------------------------ - -The default for the `-minrelaytxfee` setting has been increased from `0.00001` -to `0.00005`. - -This is necessitated by the current transaction flooding, causing -outrageous memory usage on nodes due to the mempool ballooning. This is a -temporary measure, bridging the time until a dynamic method for determining -this fee is merged (which will be in 0.12). - -(see https://github.com/bitcoin/bitcoin/pull/6793, as well as the 0.11 -release notes, in which this value was suggested) - -0.11.1 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -- #6438 `2531438` openssl: avoid config file load/race -- #6439 `980f820` Updated URL location of netinstall for Debian -- #6384 `8e5a969` qt: Force TLS1.0+ for SSL connections -- #6471 `92401c2` Depends: bump to qt 5.5 -- #6224 `93b606a` Be even stricter in processing unrequested blocks -- #6571 `100ac4e` libbitcoinconsensus: avoid a crash in multi-threaded environments -- #6545 `649f5d9` Do not store more than 200 timedata samples. -- #6694 `834e299` [QT] fix thin space word wrap line break issue -- #6703 `1cd7952` Backport bugfixes to 0.11 -- #6750 `5ed8d0b` Recent rejects backport to v0.11 -- #6769 `71cc9d9` Test LowS in standardness, removes nuisance malleability vector. -- #6789 `b4ad73f` Update miniupnpc to 1.9.20151008 -- #6785 `b4dc33e` Backport to v0.11: In (strCommand == "tx"), return if AlreadyHave() -- #6412 `0095b9a` Test whether created sockets are select()able -- #6795 `4dbcec0` net: Disable upnp by default -- #6793 `e7bcc4a` Bump minrelaytxfee default - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Adam Weiss -- Alex Morcos -- Casey Rodarmor -- Cory Fields -- fanquake -- Gregory Maxwell -- Jonas Schnelli -- J Ross Nicoll -- Luke Dashjr -- Pavel Janík -- Pavel Vasin -- Peter Todd -- Pieter Wuille -- randy-waterhouse -- Ross Nicoll -- Suhas Daftuar -- tailsjoin -- ฿tcDrak -- Tom Harding -- Veres Lajos -- Wladimir J. van der Laan - -And those who contributed additional code review and/or security research: - -- timothy on IRC for reporting the issue -- Vulnerability in miniupnp discovered by Aleksandar Nikolic of Cisco Talos - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). - diff --git a/doc/release-notes/release-notes-0.11.2.md b/doc/release-notes/release-notes-0.11.2.md deleted file mode 100644 index 2351b80656..0000000000 --- a/doc/release-notes/release-notes-0.11.2.md +++ /dev/null @@ -1,217 +0,0 @@ -Bitcoin Core version 0.11.2 is now available from: - - - -This is a new minor version release, bringing bug fixes, the BIP65 -(CLTV) consensus change, and relay policy preparation for BIP113. It is -recommended to upgrade to this version as soon as possible. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------- - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. There are no -known problems when downgrading from 0.11.x to 0.10.x. - -Notable changes since 0.11.1 -============================ - -BIP65 soft fork to enforce OP_CHECKLOCKTIMEVERIFY opcode --------------------------------------------------------- - -This release includes several changes related to the [BIP65][] soft fork -which redefines the existing OP_NOP2 opcode as OP_CHECKLOCKTIMEVERIFY -(CLTV) so that a transaction output can be made unspendable until a -specified point in the future. - -1. This release will only relay and mine transactions spending a CLTV - output if they comply with the BIP65 rules as provided in code. - -2. This release will produce version 4 blocks by default. Please see the - *notice to miners* below. - -3. Once 951 out of a sequence of 1,001 blocks on the local node's best block - chain contain version 4 (or higher) blocks, this release will no - longer accept new version 3 blocks and it will only accept version 4 - blocks if they comply with the BIP65 rules for CLTV. - -For more information about the soft-forking change, please see - - -Graphs showing the progress towards block version 4 adoption may be -found at the URLs below: - -- Block versions over the last 50,000 blocks as progress towards BIP65 - consensus enforcement: - -- Block versions over the last 2,000 blocks showing the days to the - earliest possible BIP65 consensus-enforced block: - -**Notice to miners:** Bitcoin Core’s block templates are now for -version 4 blocks only, and any mining software relying on its -getblocktemplate must be updated in parallel to use libblkmaker either -version 0.4.3 or any version from 0.5.2 onward. - -- If you are solo mining, this will affect you the moment you upgrade - Bitcoin Core, which must be done prior to BIP65 achieving its 951/1001 - status. - -- If you are mining with the stratum mining protocol: this does not - affect you. - -- If you are mining with the getblocktemplate protocol to a pool: this - will affect you at the pool operator’s discretion, which must be no - later than BIP65 achieving its 951/1001 status. - -[BIP65]: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki - -BIP113 mempool-only locktime enforcement using GetMedianTimePast() ----------------------------------------------------------------- - -Bitcoin transactions currently may specify a locktime indicating when -they may be added to a valid block. Current consensus rules require -that blocks have a block header time greater than the locktime specified -in any transaction in that block. - -Miners get to choose what time they use for their header time, with the -consensus rule being that no node will accept a block whose time is more -than two hours in the future. This creates a incentive for miners to -set their header times to future values in order to include locktimed -transactions which weren't supposed to be included for up to two more -hours. - -The consensus rules also specify that valid blocks may have a header -time greater than that of the median of the 11 previous blocks. This -GetMedianTimePast() time has a key feature we generally associate with -time: it can't go backwards. - -[BIP113][] specifies a soft fork (**not enforced in this release**) that -weakens this perverse incentive for individual miners to use a future -time by requiring that valid blocks have a computed GetMedianTimePast() -greater than the locktime specified in any transaction in that block. - -Mempool inclusion rules currently require transactions to be valid for -immediate inclusion in a block in order to be accepted into the mempool. -This release begins applying the BIP113 rule to received transactions, -so transaction whose time is greater than the GetMedianTimePast() will -no longer be accepted into the mempool. - -**Implication for miners:** you will begin rejecting transactions that -would not be valid under BIP113, which will prevent you from producing -invalid blocks if/when BIP113 is enforced on the network. Any -transactions which are valid under the current rules but not yet valid -under the BIP113 rules will either be mined by other miners or delayed -until they are valid under BIP113. Note, however, that time-based -locktime transactions are more or less unseen on the network currently. - -**Implication for users:** GetMedianTimePast() always trails behind the -current time, so a transaction locktime set to the present time will be -rejected by nodes running this release until the median time moves -forward. To compensate, subtract one hour (3,600 seconds) from your -locktimes to allow those transactions to be included in mempools at -approximately the expected time. - -[BIP113]: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki - -Windows bug fix for corrupted UTXO database on unclean shutdowns ----------------------------------------------------------------- - -Several Windows users reported that they often need to reindex the -entire blockchain after an unclean shutdown of Bitcoin Core on Windows -(or an unclean shutdown of Windows itself). Although unclean shutdowns -remain unsafe, this release no longer relies on memory-mapped files for -the UTXO database, which significantly reduced the frequency of unclean -shutdowns leading to required reindexes during testing. - -For more information, see: - -Other fixes for database corruption on Windows are expected in the -next major release. - -0.11.2 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -- #6124 `684636b` Make CScriptNum() take nMaxNumSize as an argument -- #6124 `4fa7a04` Replace NOP2 with CHECKLOCKTIMEVERIFY (BIP65) -- #6124 `6ea5ca4` Enable CHECKLOCKTIMEVERIFY as a standard script verify flag -- #6351 `5e82e1c` Add CHECKLOCKTIMEVERIFY (BIP65) soft-fork logic -- #6353 `ba1da90` Show softfork status in getblockchaininfo -- #6351 `6af25b0` Add BIP65 to getblockchaininfo softforks list -- #6688 `01878c9` Fix locking in GetTransaction -- #6653 `b3eaa30` [Qt] Raise debug window when requested -- #6600 `1e672ae` Debian/Ubuntu: Include bitcoin-tx binary -- #6600 `2394f4d` Debian/Ubuntu: Split bitcoin-tx into its own package -- #5987 `33d6825` Bugfix: Allow mining on top of old tip blocks for testnet -- #6852 `21e58b8` build: make sure OpenSSL heeds noexecstack -- #6846 `af6edac` alias `-h` for `--help` -- #6867 `95a5039` Set TCP_NODELAY on P2P sockets. -- #6856 `dfe55bd` Do not allow blockfile pruning during reindex. -- #6566 `a1d3c6f` Add rules--presently disabled--for using GetMedianTimePast as end point for lock-time calculations -- #6566 `f720c5f` Enable policy enforcing GetMedianTimePast as the end point of lock-time constraints -- #6917 `0af5b8e` leveldb: Win32WritableFile without memory mapping -- #6948 `4e895b0` Always flush block and undo when switching to new file - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Morcos -- ฿tcDrak -- Chris Kleeschulte -- Daniel Cousens -- Diego Viola -- Eric Lombrozo -- Esteban Ordano -- Gregory Maxwell -- Luke Dashjr -- Marco Falke -- Mark Friedenbach -- Matt Corallo -- Micha -- Mitchell Cash -- Peter Todd -- Pieter Wuille -- Wladimir J. van der Laan -- Zak Wilcox - -And those who contributed additional code review and/or security research. - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.12.0.md b/doc/release-notes/release-notes-0.12.0.md deleted file mode 100644 index bc0d5ea3b0..0000000000 --- a/doc/release-notes/release-notes-0.12.0.md +++ /dev/null @@ -1,894 +0,0 @@ -Bitcoin Core version 0.12.0 is now available from: - - - -This is a new major version release, bringing new features and other improvements. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------ - -### Downgrade to a version < 0.10.0 - -Because release 0.10.0 and later makes use of headers-first synchronization and -parallel block download (see further), the block files and databases are not -backwards-compatible with pre-0.10 versions of Bitcoin Core or other software: - -* Blocks will be stored on disk out of order (in the order they are -received, really), which makes it incompatible with some tools or -other programs. Reindexing using earlier versions will also not work -anymore as a result of this. - -* The block index database will now hold headers for which no block is -stored on disk, which earlier versions won't support. - -If you want to be able to downgrade smoothly, make a backup of your entire data -directory. Without this your node will need start syncing (or importing from -bootstrap.dat) anew afterwards. It is possible that the data from a completely -synchronised 0.10 node may be usable in older versions as-is, but this is not -supported and may break as soon as the older version attempts to reindex. - -This does not affect wallet forward or backward compatibility. - -### Downgrade to a version < 0.12.0 - -Because release 0.12.0 and later will obfuscate the chainstate on every -fresh sync or reindex, the chainstate is not backwards-compatible with -pre-0.12 versions of Bitcoin Core or other software. - -If you want to downgrade after you have done a reindex with 0.12.0 or later, -you will need to reindex when you first start Bitcoin Core version 0.11 or -earlier. - -Notable changes -=============== - -Signature validation using libsecp256k1 ---------------------------------------- - -ECDSA signatures inside Bitcoin transactions now use validation using -[libsecp256k1](https://github.com/bitcoin-core/secp256k1) instead of OpenSSL. - -Depending on the platform, this means a significant speedup for raw signature -validation speed. The advantage is largest on x86_64, where validation is over -five times faster. In practice, this translates to a raw reindexing and new -block validation times that are less than half of what it was before. - -Libsecp256k1 has undergone very extensive testing and validation. - -A side effect of this change is that libconsensus no longer depends on OpenSSL. - -Reduce upload traffic ---------------------- - -A major part of the outbound traffic is caused by serving historic blocks to -other nodes in initial block download state. - -It is now possible to reduce the total upload traffic via the `-maxuploadtarget` -parameter. This is *not* a hard limit but a threshold to minimize the outbound -traffic. When the limit is about to be reached, the uploaded data is cut by not -serving historic blocks (blocks older than one week). -Moreover, any SPV peer is disconnected when they request a filtered block. - -This option can be specified in MiB per day and is turned off by default -(`-maxuploadtarget=0`). -The recommended minimum is 144 * MAX_BLOCK_SIZE (currently 144MB) per day. - -Whitelisted peers will never be disconnected, although their traffic counts for -calculating the target. - -A more detailed documentation about keeping traffic low can be found in -[/doc/reduce-traffic.md](/doc/reduce-traffic.md). - -Direct headers announcement (BIP 130) -------------------------------------- - -Between compatible peers, [BIP 130] -(https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki) -direct headers announcement is used. This means that blocks are advertised by -announcing their headers directly, instead of just announcing the hash. In a -reorganization, all new headers are sent, instead of just the new tip. This -can often prevent an extra roundtrip before the actual block is downloaded. - -Memory pool limiting --------------------- - -Previous versions of Bitcoin Core had their mempool limited by checking -a transaction's fees against the node's minimum relay fee. There was no -upper bound on the size of the mempool and attackers could send a large -number of transactions paying just slighly more than the default minimum -relay fee to crash nodes with relatively low RAM. A temporary workaround -for previous versions of Bitcoin Core was to raise the default minimum -relay fee. - -Bitcoin Core 0.12 will have a strict maximum size on the mempool. The -default value is 300 MB and can be configured with the `-maxmempool` -parameter. Whenever a transaction would cause the mempool to exceed -its maximum size, the transaction that (along with in-mempool descendants) has -the lowest total feerate (as a package) will be evicted and the node's effective -minimum relay feerate will be increased to match this feerate plus the initial -minimum relay feerate. The initial minimum relay feerate is set to -1000 satoshis per kB. - -Bitcoin Core 0.12 also introduces new default policy limits on the length and -size of unconfirmed transaction chains that are allowed in the mempool -(generally limiting the length of unconfirmed chains to 25 transactions, with a -total size of 101 KB). These limits can be overridden using command line -arguments; see the extended help (`--help -help-debug`) for more information. - -Opt-in Replace-by-fee transactions ----------------------------------- - -It is now possible to replace transactions in the transaction memory pool of -Bitcoin Core 0.12 nodes. Bitcoin Core will only allow replacement of -transactions which have any of their inputs' `nSequence` number set to less -than `0xffffffff - 1`. Moreover, a replacement transaction may only be -accepted when it pays sufficient fee, as described in [BIP 125] -(https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki). - -Transaction replacement can be disabled with a new command line option, -`-mempoolreplacement=0`. Transactions signaling replacement under BIP125 will -still be allowed into the mempool in this configuration, but replacements will -be rejected. This option is intended for miners who want to continue the -transaction selection behavior of previous releases. - -The `-mempoolreplacement` option is *not recommended* for wallet users seeking -to avoid receipt of unconfirmed opt-in transactions, because this option does -not prevent transactions which are replaceable under BIP 125 from being accepted -(only subsequent replacements, which other nodes on the network that implement -BIP 125 are likely to relay and mine). Wallet users wishing to detect whether -a transaction is subject to replacement under BIP 125 should instead use the -updated RPC calls `gettransaction` and `listtransactions`, which now have an -additional field in the output indicating if a transaction is replaceable under -BIP125 ("bip125-replaceable"). - -Note that the wallet in Bitcoin Core 0.12 does not yet have support for -creating transactions that would be replaceable under BIP 125. - - -RPC: Random-cookie RPC authentication -------------------------------------- - -When no `-rpcpassword` is specified, the daemon now uses a special 'cookie' -file for authentication. This file is generated with random content when the -daemon starts, and deleted when it exits. Its contents are used as -authentication token. Read access to this file controls who can access through -RPC. By default it is stored in the data directory but its location can be -overridden with the option `-rpccookiefile`. - -This is similar to Tor's CookieAuthentication: see -https://www.torproject.org/docs/tor-manual.html.en - -This allows running bitcoind without having to do any manual configuration. - -Relay: Any sequence of pushdatas in OP_RETURN outputs now allowed ------------------------------------------------------------------ - -Previously OP_RETURN outputs with a payload were only relayed and mined if they -had a single pushdata. This restriction has been lifted to allow any -combination of data pushes and numeric constant opcodes (OP_1 to OP_16) after -the OP_RETURN. The limit on OP_RETURN output size is now applied to the entire -serialized scriptPubKey, 83 bytes by default. (the previous 80 byte default plus -three bytes overhead) - -Relay: New and only new blocks relayed when pruning ---------------------------------------------------- - -When running in pruned mode, the client will now relay new blocks. When -responding to the `getblocks` message, only hashes of blocks that are on disk -and are likely to remain there for some reasonable time window (1 hour) will be -returned (previously all relevant hashes were returned). - -Relay and Mining: Priority transactions ---------------------------------------- - -Bitcoin Core has a heuristic 'priority' based on coin value and age. This -calculation is used for relaying of transactions which do not pay the -minimum relay fee, and can be used as an alternative way of sorting -transactions for mined blocks. Bitcoin Core will relay transactions with -insufficient fees depending on the setting of `-limitfreerelay=` (default: -`r=15` kB per minute) and `-blockprioritysize=`. - -In Bitcoin Core 0.12, when mempool limit has been reached a higher minimum -relay fee takes effect to limit memory usage. Transactions which do not meet -this higher effective minimum relay fee will not be relayed or mined even if -they rank highly according to the priority heuristic. - -The mining of transactions based on their priority is also now disabled by -default. To re-enable it, simply set `-blockprioritysize=` where is the size -in bytes of your blocks to reserve for these transactions. The old default was -50k, so to retain approximately the same policy, you would set -`-blockprioritysize=50000`. - -Additionally, as a result of computational simplifications, the priority value -used for transactions received with unconfirmed inputs is lower than in prior -versions due to avoiding recomputing the amounts as input transactions confirm. - -External miner policy set via the `prioritisetransaction` RPC to rank -transactions already in the mempool continues to work as it has previously. -Note, however, that if mining priority transactions is left disabled, the -priority delta will be ignored and only the fee metric will be effective. - -This internal automatic prioritization handling is being considered for removal -entirely in Bitcoin Core 0.13, and it is at this time undecided whether the -more accurate priority calculation for chained unconfirmed transactions will be -restored. Community direction on this topic is particularly requested to help -set project priorities. - -Automatically use Tor hidden services -------------------------------------- - -Starting with Tor version 0.2.7.1 it is possible, through Tor's control socket -API, to create and destroy 'ephemeral' hidden services programmatically. -Bitcoin Core has been updated to make use of this. - -This means that if Tor is running (and proper authorization is available), -Bitcoin Core automatically creates a hidden service to listen on, without -manual configuration. Bitcoin Core will also use Tor automatically to connect -to other .onion nodes if the control socket can be successfully opened. This -will positively affect the number of available .onion nodes and their usage. - -This new feature is enabled by default if Bitcoin Core is listening, and -a connection to Tor can be made. It can be configured with the `-listenonion`, -`-torcontrol` and `-torpassword` settings. To show verbose debugging -information, pass `-debug=tor`. - -Notifications through ZMQ -------------------------- - -Bitcoind can now (optionally) asynchronously notify clients through a -ZMQ-based PUB socket of the arrival of new transactions and blocks. -This feature requires installation of the ZMQ C API library 4.x and -configuring its use through the command line or configuration file. -Please see [docs/zmq.md](/doc/zmq.md) for details of operation. - -Wallet: Transaction fees ------------------------- - -Various improvements have been made to how the wallet calculates -transaction fees. - -Users can decide to pay a predefined fee rate by setting `-paytxfee=` -(or `settxfee ` rpc during runtime). A value of `n=0` signals Bitcoin -Core to use floating fees. By default, Bitcoin Core will use floating -fees. - -Based on past transaction data, floating fees approximate the fees -required to get into the `m`th block from now. This is configurable -with `-txconfirmtarget=` (default: `2`). - -Sometimes, it is not possible to give good estimates, or an estimate -at all. Therefore, a fallback value can be set with `-fallbackfee=` -(default: `0.0002` BTC/kB). - -At all times, Bitcoin Core will cap fees at `-maxtxfee=` (default: -0.10) BTC. -Furthermore, Bitcoin Core will never create transactions paying less than -the current minimum relay fee. -Finally, a user can set the minimum fee rate for all transactions with -`-mintxfee=`, which defaults to 1000 satoshis per kB. - -Wallet: Negative confirmations and conflict detection ------------------------------------------------------ - -The wallet will now report a negative number for confirmations that indicates -how deep in the block chain the conflict is found. For example, if a transaction -A has 5 confirmations and spends the same input as a wallet transaction B, B -will be reported as having -5 confirmations. If another wallet transaction C -spends an output from B, it will also be reported as having -5 confirmations. -To detect conflicts with historical transactions in the chain a one-time -`-rescan` may be needed. - -Unlike earlier versions, unconfirmed but non-conflicting transactions will never -get a negative confirmation count. They are not treated as spendable unless -they're coming from ourself (change) and accepted into our local mempool, -however. The new "trusted" field in the `listtransactions` RPC output -indicates whether outputs of an unconfirmed transaction are considered -spendable. - -Wallet: Merkle branches removed -------------------------------- - -Previously, every wallet transaction stored a Merkle branch to prove its -presence in blocks. This wasn't being used for more than an expensive -sanity check. Since 0.12, these are no longer stored. When loading a -0.12 wallet into an older version, it will automatically rescan to avoid -failed checks. - -Wallet: Pruning ---------------- - -With 0.12 it is possible to use wallet functionality in pruned mode. -This can reduce the disk usage from currently around 60 GB to -around 2 GB. - -However, rescans as well as the RPCs `importwallet`, `importaddress`, -`importprivkey` are disabled. - -To enable block pruning set `prune=` on the command line or in -`bitcoin.conf`, where `N` is the number of MiB to allot for -raw block & undo data. - -A value of 0 disables pruning. The minimal value above 0 is 550. Your -wallet is as secure with high values as it is with low ones. Higher -values merely ensure that your node will not shut down upon blockchain -reorganizations of more than 2 days - which are unlikely to happen in -practice. In future releases, a higher value may also help the network -as a whole: stored blocks could be served to other nodes. - -For further information about pruning, you may also consult the [release -notes of v0.11.0](https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning). - -`NODE_BLOOM` service bit ------------------------- - -Support for the `NODE_BLOOM` service bit, as described in [BIP -111](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki), has been -added to the P2P protocol code. - -BIP 111 defines a service bit to allow peers to advertise that they support -bloom filters (such as used by SPV clients) explicitly. It also bumps the protocol -version to allow peers to identify old nodes which allow bloom filtering of the -connection despite lacking the new service bit. - -In this version, it is only enforced for peers that send protocol versions -`>=70011`. For the next major version it is planned that this restriction will be -removed. It is recommended to update SPV clients to check for the `NODE_BLOOM` -service bit for nodes that report versions newer than 70011. - -Option parsing behavior ------------------------ - -Command line options are now parsed strictly in the order in which they are -specified. It used to be the case that `-X -noX` ends up, unintuitively, with X -set, as `-X` had precedence over `-noX`. This is no longer the case. Like for -other software, the last specified value for an option will hold. - -RPC: Low-level API changes --------------------------- - -- Monetary amounts can be provided as strings. This means that for example the - argument to sendtoaddress can be "0.0001" instead of 0.0001. This can be an - advantage if a JSON library insists on using a lossy floating point type for - numbers, which would be dangerous for monetary amounts. - -* The `asm` property of each scriptSig now contains the decoded signature hash - type for each signature that provides a valid defined hash type. - -* OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP 65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki) - -The following items contain assembly representations of scriptSig signatures -and are affected by this change: - -- RPC `getrawtransaction` -- RPC `decoderawtransaction` -- RPC `decodescript` -- REST `/rest/tx/` (JSON format) -- REST `/rest/block/` (JSON format when including extended tx details) -- `bitcoin-tx -json` - -For example, the `scriptSig.asm` property of a transaction input that -previously showed an assembly representation of: - - 304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c509001 400000 OP_NOP2 - -now shows as: - - 304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090[ALL] 400000 OP_CHECKLOCKTIMEVERIFY - -Note that the output of the RPC `decodescript` did not change because it is -configured specifically to process scriptPubKey and not scriptSig scripts. - -RPC: SSL support dropped ------------------------- - -SSL support for RPC, previously enabled by the option `rpcssl` has been dropped -from both the client and the server. This was done in preparation for removing -the dependency on OpenSSL for the daemon completely. - -Trying to use `rpcssl` will result in an error: - - Error: SSL mode for RPC (-rpcssl) is no longer supported. - -If you are one of the few people that relies on this feature, a flexible -migration path is to use `stunnel`. This is an utility that can tunnel -arbitrary TCP connections inside SSL. On e.g. Ubuntu it can be installed with: - - sudo apt-get install stunnel4 - -Then, to tunnel a SSL connection on 28332 to a RPC server bound on localhost on port 18332 do: - - stunnel -d 28332 -r 127.0.0.1:18332 -p stunnel.pem -P '' - -It can also be set up system-wide in inetd style. - -Another way to re-attain SSL would be to setup a httpd reverse proxy. This solution -would allow the use of different authentication, loadbalancing, on-the-fly compression and -caching. A sample config for apache2 could look like: - - Listen 443 - - NameVirtualHost *:443 - - - SSLEngine On - SSLCertificateFile /etc/apache2/ssl/server.crt - SSLCertificateKeyFile /etc/apache2/ssl/server.key - - - ProxyPass http://127.0.0.1:8332/ - ProxyPassReverse http://127.0.0.1:8332/ - # optional enable digest auth - # AuthType Digest - # ... - - # optional bypass bitcoind rpc basic auth - # RequestHeader set Authorization "Basic " - # get the from the shell with: base64 <<< bitcoinrpc: - - - # Or, balance the load: - # ProxyPass / balancer://balancer_cluster_name - - - -Mining Code Changes -------------------- - -The mining code in 0.12 has been optimized to be significantly faster and use less -memory. As part of these changes, consensus critical calculations are cached on a -transaction's acceptance into the mempool and the mining code now relies on the -consistency of the mempool to assemble blocks. However all blocks are still tested -for validity after assembly. - -Other P2P Changes ------------------ - -The list of banned peers is now stored on disk rather than in memory. -Restarting bitcoind will no longer clear out the list of banned peers; instead -a new RPC call (`clearbanned`) can be used to manually clear the list. The new -`setban` RPC call can also be used to manually ban or unban a peer. - -0.12.0 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### RPC and REST - -- #6121 `466f0ea` Convert entire source tree from json_spirit to UniValue (Jonas Schnelli) -- #6234 `d38cd47` fix rpcmining/getblocktemplate univalue transition logic error (Jonas Schnelli) -- #6239 `643114f` Don't go through double in AmountFromValue and ValueFromAmount (Wladimir J. van der Laan) -- #6266 `ebab5d3` Fix univalue handling of \u0000 characters. (Daniel Kraft) -- #6276 `f3d4dbb` Fix getbalance * 0 (Tom Harding) -- #6257 `5ebe7db` Add `paytxfee` and `errors` JSON fields where appropriate (Stephen) -- #6271 `754aae5` New RPC command disconnectnode (Alex van der Peet) -- #6158 `0abfa8a` Add setban/listbanned RPC commands (Jonas Schnelli) -- #6307 `7ecdcd9` rpcban fixes (Jonas Schnelli) -- #6290 `5753988` rpc: make `gettxoutsettinfo` run lock-free (Wladimir J. van der Laan) -- #6262 `247b914` Return all available information via RPC call "validateaddress" (dexX7) -- #6339 `c3f0490` UniValue: don't escape solidus, keep espacing of reverse solidus (Jonas Schnelli) -- #6353 `6bcb0a2` Show softfork status in getblockchaininfo (Wladimir J. van der Laan) -- #6247 `726e286` Add getblockheader RPC call (Peter Todd) -- #6362 `d6db115` Fix null id in RPC response during startup (Forrest Voight) -- #5486 `943b322` [REST] JSON support for /rest/headers (Jonas Schnelli) -- #6379 `c52e8b3` rpc: Accept scientific notation for monetary amounts in JSON (Wladimir J. van der Laan) -- #6388 `fd5dfda` rpc: Implement random-cookie based authentication (Wladimir J. van der Laan) -- #6457 `3c923e8` Include pruned state in chaininfo.json (Simon Males) -- #6456 `bfd807f` rpc: Avoid unnecessary parsing roundtrip in number formatting, fix locale issue (Wladimir J. van der Laan) -- #6380 `240b30e` rpc: Accept strings in AmountFromValue (Wladimir J. van der Laan) -- #6346 `6bb2805` Add OP_RETURN support in createrawtransaction RPC call, add tests. (paveljanik) -- #6013 `6feeec1` [REST] Add memory pool API (paveljanik) -- #6576 `da9beb2` Stop parsing JSON after first finished construct. (Daniel Kraft) -- #5677 `9aa9099` libevent-based http server (Wladimir J. van der Laan) -- #6633 `bbc2b39` Report minimum ping time in getpeerinfo (Matt Corallo) -- #6648 `cd381d7` Simplify logic of REST request suffix parsing. (Daniel Kraft) -- #6695 `5e21388` libevent http fixes (Wladimir J. van der Laan) -- #5264 `48efbdb` show scriptSig signature hash types in transaction decodes. fixes #3166 (mruddy) -- #6719 `1a9f19a` Make HTTP server shutdown more graceful (Wladimir J. van der Laan) -- #6859 `0fbfc51` http: Restrict maximum size of http + headers (Wladimir J. van der Laan) -- #5936 `bf7c195` [RPC] Add optional locktime to createrawtransaction (Tom Harding) -- #6877 `26f5b34` rpc: Add maxmempool and effective min fee to getmempoolinfo (Wladimir J. van der Laan) -- #6970 `92701b3` Fix crash in validateaddress with -disablewallet (Wladimir J. van der Laan) -- #5574 `755b4ba` Expose GUI labels in RPC as comments (Luke-Jr) -- #6990 `dbd2c13` http: speed up shutdown (Wladimir J. van der Laan) -- #7013 `36baa9f` Remove LOCK(cs_main) from decodescript (Peter Todd) -- #6999 `972bf9c` add (max)uploadtarget infos to getnettotals RPC help (Jonas Schnelli) -- #7011 `31de241` Add mediantime to getblockchaininfo (Peter Todd) -- #7065 `f91e29f` http: add Boost 1.49 compatibility (Wladimir J. van der Laan) -- #7087 `be281d8` [Net]Add -enforcenodebloom option (Patrick Strateman) -- #7044 `438ee59` RPC: Added additional config option for multiple RPC users. (Gregory Sanders) -- #7072 `c143c49` [RPC] Add transaction size to JSON output (Nikita Zhavoronkov) -- #7022 `9afbd96` Change default block priority size to 0 (Alex Morcos) -- #7141 `c0c08c7` rpc: Don't translate warning messages (Wladimir J. van der Laan) -- #7312 `fd4bd50` Add RPC call abandontransaction (Alex Morcos) -- #7222 `e25b158` RPC: indicate which transactions are replaceable (Suhas Daftuar) -- #7472 `b2f2b85` rpc: Add WWW-Authenticate header to 401 response (Wladimir J. van der Laan) -- #7469 `9cb31e6` net.h fix spelling: misbeha{b,v}ing (Matt) - -### Configuration and command-line options - -- #6164 `8d05ec7` Allow user to use -debug=1 to enable all debugging (lpescher) -- #5288 `4452205` Added `-whiteconnections=` option (Josh Lehan) -- #6284 `10ac38e` Fix argument parsing oddity with -noX (Wladimir J. van der Laan) -- #6489 `c9c017a` Give a better error message if system clock is bad (Casey Rodarmor) -- #6462 `c384800` implement uacomment config parameter which can add comments to user agent as per BIP-0014 (Pavol Rusnak) -- #6647 `a3babc8` Sanitize uacomment (MarcoFalke) -- #6742 `3b2d37c` Changed logging to make -logtimestamps to work also for -printtoconsole (arnuschky) -- #6846 `2cd020d` alias -h for -help (Daniel Cousens) -- #6622 `7939164` Introduce -maxuploadtarget (Jonas Schnelli) -- #6881 `2b62551` Debug: Add option for microsecond precision in debug.log (Suhas Daftuar) -- #6776 `e06c14f` Support -checkmempool=N, which runs checks once every N transactions (Pieter Wuille) -- #6896 `d482c0a` Make -checkmempool=1 not fail through int32 overflow (Pieter Wuille) -- #6993 `b632145` Add -blocksonly option (Patrick Strateman) -- #7323 `a344880` 0.12: Backport -bytespersigop option (Luke-Jr) -- #7386 `da83ecd` Add option `-permitrbf` to set transaction replacement policy (Wladimir J. van der Laan) -- #7290 `b16b5bc` Add missing options help (MarcoFalke) -- #7440 `c76bfff` Rename permitrbf to mempoolreplacement and provide minimal string-list forward compatibility (Luke-Jr) - -### Block and transaction handling - -- #6203 `f00b623` Remove P2SH coinbase flag, no longer interesting (Luke-Jr) -- #6222 `9c93ee5` Explicitly set tx.nVersion for the genesis block and mining tests (Mark Friedenbach) -- #5985 `3a1d3e8` Fix removing of orphan transactions (Alex Morcos) -- #6221 `dd8fe82` Prune: Support noncontiguous block files (Adam Weiss) -- #6124 `41076aa` Mempool only CHECKLOCKTIMEVERIFY (BIP65) verification, unparameterized version (Peter Todd) -- #6329 `d0a10c1` acceptnonstdtxn option to skip (most) "non-standard transaction" checks, for testnet/regtest only (Luke-Jr) -- #6410 `7cdefb9` Implement accurate memory accounting for mempool (Pieter Wuille) -- #6444 `24ce77d` Exempt unspendable transaction outputs from dust checks (dexX7) -- #5913 `a0625b8` Add absurdly high fee message to validation state (Shaul Kfir) -- #6177 `2f746c6` Prevent block.nTime from decreasing (Mark Friedenbach) -- #6377 `e545371` Handle no chain tip available in InvalidChainFound() (Ross Nicoll) -- #6551 `39ddaeb` Handle leveldb::DestroyDB() errors on wipe failure (Adam Weiss) -- #6654 `b0ce450` Mempool package tracking (Suhas Daftuar) -- #6715 `82d2aef` Fix mempool packages (Suhas Daftuar) -- #6680 `4f44530` use CBlockIndex instead of uint256 for UpdatedBlockTip signal (Jonas Schnelli) -- #6650 `4fac576` Obfuscate chainstate (James O'Beirne) -- #6777 `9caaf6e` Unobfuscate chainstate data in CCoinsViewDB::GetStats (James O'Beirne) -- #6722 `3b20e23` Limit mempool by throwing away the cheapest txn and setting min relay fee to it (Matt Corallo) -- #6889 `38369dd` fix locking issue with new mempool limiting (Jonas Schnelli) -- #6464 `8f3b3cd` Always clean up manual transaction prioritization (Casey Rodarmor) -- #6865 `d0badb9` Fix chainstate serialized_size computation (Pieter Wuille) -- #6566 `ff057f4` BIP-113: Mempool-only median time-past as endpoint for lock-time calculations (Mark Friedenbach) -- #6934 `3038eb6` Restores mempool only BIP113 enforcement (Gregory Maxwell) -- #6965 `de7d459` Benchmark sanity checks and fork checks in ConnectBlock (Matt Corallo) -- #6918 `eb6172a` Make sigcache faster, more efficient, larger (Pieter Wuille) -- #6771 `38ed190` Policy: Lower default limits for tx chains (Alex Morcos) -- #6932 `73fa5e6` ModifyNewCoins saves database lookups (Alex Morcos) -- #5967 `05d5918` Alter assumptions in CCoinsViewCache::BatchWrite (Alex Morcos) -- #6871 `0e93586` nSequence-based Full-RBF opt-in (Peter Todd) -- #7008 `eb77416` Lower bound priority (Alex Morcos) -- #6915 `2ef5ffa` [Mempool] Improve removal of invalid transactions after reorgs (Suhas Daftuar) -- #6898 `4077ad2` Rewrite CreateNewBlock (Alex Morcos) -- #6872 `bdda4d5` Remove UTXO cache entries when the tx they were added for is removed/does not enter mempool (Matt Corallo) -- #7062 `12c469b` [Mempool] Fix mempool limiting and replace-by-fee for PrioritiseTransaction (Suhas Daftuar) -- #7276 `76de36f` Report non-mandatory script failures correctly (Pieter Wuille) -- #7217 `e08b7cb` Mark blocks with too many sigops as failed (Suhas Daftuar) -- #7387 `f4b2ce8` Get rid of inaccurate ScriptSigArgsExpected (Pieter Wuille) - -### P2P protocol and network code - -- #6172 `88a7ead` Ignore getheaders requests when not synced (Suhas Daftuar) -- #5875 `9d60602` Be stricter in processing unrequested blocks (Suhas Daftuar) -- #6256 `8ccc07c` Use best header chain timestamps to detect partitioning (Gavin Andresen) -- #6283 `a903ad7` make CAddrMan::size() return the correct type of size_t (Diapolo) -- #6272 `40400d5` Improve proxy initialization (continues #4871) (Wladimir J. van der Laan, Diapolo) -- #6310 `66e5465` banlist.dat: store banlist on disk (Jonas Schnelli) -- #6412 `1a2de32` Test whether created sockets are select()able (Pieter Wuille) -- #6498 `219b916` Keep track of recently rejected transactions with a rolling bloom filter (cont'd) (Peter Todd) -- #6556 `70ec975` Fix masking of irrelevant bits in address groups. (Alex Morcos) -- #6530 `ea19c2b` Improve addrman Select() performance when buckets are nearly empty (Pieter Wuille) -- #6583 `af9305a` add support for miniupnpc api version 14 (Pavel Vasin) -- #6374 `69dc5b5` Connection slot exhaustion DoS mitigation (Patrick Strateman) -- #6636 `536207f` net: correctly initialize nMinPingUsecTime (Wladimir J. van der Laan) -- #6579 `0c27795` Add NODE_BLOOM service bit and bump protocol version (Matt Corallo) -- #6148 `999c8be` Relay blocks when pruning (Suhas Daftuar) -- #6588 `cf9bb11` In (strCommand == "tx"), return if AlreadyHave() (Tom Harding) -- #6974 `2f71b07` Always allow getheaders from whitelisted peers (Wladimir J. van der Laan) -- #6639 `bd629d7` net: Automatically create hidden service, listen on Tor (Wladimir J. van der Laan) -- #6984 `9ffc687` don't enforce maxuploadtarget's disconnect for whitelisted peers (Jonas Schnelli) -- #7046 `c322652` Net: Improve blocks only mode. (Patrick Strateman) -- #7090 `d6454f6` Connect to Tor hidden services by default (when listening on Tor) (Peter Todd) -- #7106 `c894fbb` Fix and improve relay from whitelisted peers (Pieter Wuille) -- #7129 `5d5ef3a` Direct headers announcement (rebase of #6494) (Pieter Wuille) -- #7079 `1b5118b` Prevent peer flooding inv request queue (redux) (redux) (Gregory Maxwell) -- #7166 `6ba25d2` Disconnect on mempool requests from peers when over the upload limit. (Gregory Maxwell) -- #7133 `f31955d` Replace setInventoryKnown with a rolling bloom filter (rebase of #7100) (Pieter Wuille) -- #7174 `82aff88` Don't do mempool lookups for "mempool" command without a filter (Matt Corallo) -- #7179 `44fef99` net: Fix sent reject messages for blocks and transactions (Wladimir J. van der Laan) -- #7181 `8fc174a` net: Add and document network messages in protocol.h (Wladimir J. van der Laan) -- #7125 `10b88be` Replace global trickle node with random delays (Pieter Wuille) -- #7415 `cb83beb` net: Hardcoded seeds update January 2016 (Wladimir J. van der Laan) -- #7438 `e2d9a58` Do not absolutely protect local peers; decide group ties based on time (Gregory Maxwell) -- #7439 `86755bc` Add whitelistforcerelay to control forced relaying. [#7099 redux] (Gregory Maxwell) -- #7482 `e16f5b4` Ensure headers count is correct (Suhas Daftuar) - -### Validation - -- #5927 `8d9f0a6` Reduce checkpoints' effect on consensus. (Pieter Wuille) -- #6299 `24f2489` Bugfix: Don't check the genesis block header before accepting it (Jorge Timón) -- #6361 `d7ada03` Use real number of cores for default -par, ignore virtual cores (Wladimir J. van der Laan) -- #6519 `87f37e2` Make logging for validation optional (Wladimir J. van der Laan) -- #6351 `2a1090d` CHECKLOCKTIMEVERIFY (BIP65) IsSuperMajority() soft-fork (Peter Todd) -- #6931 `54e8bfe` Skip BIP 30 verification where not necessary (Alex Morcos) -- #6954 `e54ebbf` Switch to libsecp256k1-based ECDSA validation (Pieter Wuille) -- #6508 `61457c2` Switch to a constant-space Merkle root/branch algorithm. (Pieter Wuille) -- #6914 `327291a` Add pre-allocated vector type and use it for CScript (Pieter Wuille) -- #7500 `889e5b3` Correctly report high-S violations (Pieter Wuille) - - -### Build system - -- #6210 `0e4f2a0` build: disable optional use of gmp in internal secp256k1 build (Wladimir J. van der Laan) -- #6214 `87406aa` [OSX] revert renaming of Bitcoin-Qt.app and use CFBundleDisplayName (partial revert of #6116) (Jonas Schnelli) -- #6218 `9d67b10` build/gitian misc updates (Cory Fields) -- #6269 `d4565b6` gitian: Use the new bitcoin-detached-sigs git repo for OSX signatures (Cory Fields) -- #6418 `d4a910c` Add autogen.sh to source tarball. (randy-waterhouse) -- #6373 `1ae3196` depends: non-qt bumps for 0.12 (Cory Fields) -- #6434 `059b352` Preserve user-passed CXXFLAGS with --enable-debug (Gavin Andresen) -- #6501 `fee6554` Misc build fixes (Cory Fields) -- #6600 `ef4945f` Include bitcoin-tx binary on Debian/Ubuntu (Zak Wilcox) -- #6619 `4862708` depends: bump miniupnpc and ccache (Michael Ford) -- #6801 `ae69a75` [depends] Latest config.guess and config.sub (Michael Ford) -- #6938 `193f7b5` build: If both Qt4 and Qt5 are installed, use Qt5 (Wladimir J. van der Laan) -- #7092 `348b281` build: Set osx permissions in the dmg to make Gatekeeper happy (Cory Fields) -- #6980 `eccd671` [Depends] Bump Boost, miniupnpc, ccache & zeromq (Michael Ford) -- #7424 `aa26ee0` Add security/export checks to gitian and fix current failures (Cory Fields) - -### Wallet - -- #6183 `87550ee` Fix off-by-one error w/ nLockTime in the wallet (Peter Todd) -- #6057 `ac5476e` re-enable wallet in autoprune (Jonas Schnelli) -- #6356 `9e6c33b` Delay initial pruning until after wallet init (Adam Weiss) -- #6088 `91389e5` fundrawtransaction (Matt Corallo) -- #6415 `ddd8d80` Implement watchonly support in fundrawtransaction (Matt Corallo) -- #6567 `0f0f323` Fix crash when mining with empty keypool. (Daniel Kraft) -- #6688 `4939eab` Fix locking in GetTransaction. (Alex Morcos) -- #6645 `4dbd43e` Enable wallet key imports without rescan in pruned mode. (Gregory Maxwell) -- #6550 `5b77244` Do not store Merkle branches in the wallet. (Pieter Wuille) -- #5924 `12a7712` Clean up change computation in CreateTransaction. (Daniel Kraft) -- #6906 `48b5b84` Reject invalid pubkeys when reading ckey items from the wallet. (Gregory Maxwell) -- #7010 `e0a5ef8` Fix fundrawtransaction handling of includeWatching (Peter Todd) -- #6851 `616d61b` Optimisation: Store transaction list order in memory rather than compute it every need (Luke-Jr) -- #6134 `e92377f` Improve usage of fee estimation code (Alex Morcos) -- #7103 `a775182` [wallet, rpc tests] Fix settxfee, paytxfee (MarcoFalke) -- #7105 `30c2d8c` Keep track of explicit wallet conflicts instead of using mempool (Pieter Wuille) -- #7096 `9490bd7` [Wallet] Improve minimum absolute fee GUI options (Jonas Schnelli) -- #6216 `83f06ca` Take the training wheels off anti-fee-sniping (Peter Todd) -- #4906 `96e8d12` Issue#1643: Coinselection prunes extraneous inputs from ApproximateBestSubset (Murch) -- #7200 `06c6a58` Checks for null data transaction before issuing error to debug.log (Andy Craze) -- #7296 `a36d79b` Add sane fallback for fee estimation (Alex Morcos) -- #7293 `ff9b610` Add regression test for vValue sort order (MarcoFalke) -- #7306 `4707797` Make sure conflicted wallet tx's update balances (Alex Morcos) -- #7381 `621bbd8` [walletdb] Fix syntax error in key parser (MarcoFalke) -- #7491 `00ec73e` wallet: Ignore MarkConflict if block hash is not known (Wladimir J. van der Laan) -- #7502 `1329963` Update the wallet best block marker before pruning (Pieter Wuille) - -### GUI - -- #6217 `c57e12a` disconnect peers from peers tab via context menu (Diapolo) -- #6209 `ab0ec67` extend rpc console peers tab (Diapolo) -- #6484 `1369d69` use CHashWriter also in SignVerifyMessageDialog (Pavel Vasin) -- #6487 `9848d42` Introduce PlatformStyle (Wladimir J. van der Laan) -- #6505 `100c9d3` cleanup icons (MarcoFalke) -- #4587 `0c465f5` allow users to set -onion via GUI (Diapolo) -- #6529 `c0f66ce` show client user agent in debug window (Diapolo) -- #6594 `878ea69` Disallow duplicate windows. (Casey Rodarmor) -- #5665 `6f55cdd` add verifySize() function to PaymentServer (Diapolo) -- #6317 `ca5e2a1` minor optimisations in peertablemodel (Diapolo) -- #6315 `e59d2a8` allow banning and unbanning over UI->peers table (Jonas Schnelli) -- #6653 `e04b2fa` Pop debug window in foreground when opened twice (MarcoFalke) -- #6864 `c702521` Use monospace font (MarcoFalke) -- #6887 `3694b74` Update coin control and smartfee labels (MarcoFalke) -- #7000 `814697c` add shortcurts for debug-/console-window (Jonas Schnelli) -- #6951 `03403d8` Use maxTxFee instead of 10000000 (MarcoFalke) -- #7051 `a190777` ui: Add "Copy raw transaction data" to transaction list context menu (Wladimir J. van der Laan) -- #6979 `776848a` simple mempool info in debug window (Jonas Schnelli) -- #7006 `26af1ac` add startup option to reset Qt settings (Jonas Schnelli) -- #6780 `2a94cd6` Call init's parameter interaction before we create the UI options model (Jonas Schnelli) -- #7112 `96b8025` reduce cs_main locks during tip update, more fluently update UI (Jonas Schnelli) -- #7206 `f43c2f9` Add "NODE_BLOOM" to guiutil so that peers don't get UNKNOWN[4] (Matt Corallo) -- #7282 `5cadf3e` fix coincontrol update issue when deleting a send coins entry (Jonas Schnelli) -- #7319 `1320300` Intro: Display required space (MarcoFalke) -- #7318 `9265e89` quickfix for RPC timer interface problem (Jonas Schnelli) -- #7327 `b16b5bc` [Wallet] Transaction View: LastMonth calculation fixed (crowning-) -- #7364 `7726c48` [qt] Windows: Make rpcconsole monospace font larger (MarcoFalke) -- #7384 `294f432` [qt] Peertable: Increase SUBVERSION_COLUMN_WIDTH (MarcoFalke) - -### Tests and QA - -- #6305 `9005c91` build: comparison tool swap (Cory Fields) -- #6318 `e307e13` build: comparison tool NPE fix (Cory Fields) -- #6337 `0564c5b` Testing infrastructure: mocktime fixes (Gavin Andresen) -- #6350 `60abba1` add unit tests for the decodescript rpc (mruddy) -- #5881 `3203a08` Fix and improve txn_doublespend.py test (Tom Harding) -- #6390 `6a73d66` tests: Fix bitcoin-tx signing test case (Wladimir J. van der Laan) -- #6368 `7fc25c2` CLTV: Add more tests to improve coverage (Esteban Ordano) -- #6414 `5121c68` Fix intermittent test failure, reduce test time (Tom Harding) -- #6417 `44fa82d` [QA] fix possible reorg issue in (fund)rawtransaction(s).py RPC test (Jonas Schnelli) -- #6398 `3d9362d` rpc: Remove chain-specific RequireRPCPassword (Wladimir J. van der Laan) -- #6428 `bb59e78` tests: Remove old sh-based test framework (Wladimir J. van der Laan) -- #5515 `d946e9a` RFC: Assert on probable deadlocks if the second lock isnt try_lock (Matt Corallo) -- #6287 `d2464df` Clang lock debug (Cory Fields) -- #6465 `410fd74` Don't share objects between TestInstances (Casey Rodarmor) -- #6534 `6c1c7fd` Fix test locking issues and un-revert the probable-deadlines assertions commit (Cory Fields) -- #6509 `bb4faee` Fix race condition on test node shutdown (Casey Rodarmor) -- #6523 `561f8af` Add p2p-fullblocktest.py (Casey Rodarmor) -- #6590 `981fd92` Fix stale socket rebinding and re-enable python tests for Windows (Cory Fields) -- #6730 `cb4d6d0` build: Remove dependency of bitcoin-cli on secp256k1 (Wladimir J. van der Laan) -- #6616 `5ab5dca` Regression Tests: Migrated rpc-tests.sh to all Python rpc-tests.py (Peter Tschipper) -- #6720 `d479311` Creates unittests for addrman, makes addrman more testable. (Ethan Heilman) -- #6853 `c834f56` Added fPowNoRetargeting field to Consensus::Params (Eric Lombrozo) -- #6827 `87e5539` [rpc-tests] Check return code (MarcoFalke) -- #6848 `f2c869a` Add DERSIG transaction test cases (Ross Nicoll) -- #6813 `5242bb3` Support gathering code coverage data for RPC tests with lcov (dexX7) -- #6888 `c8322ff` Clear strMiscWarning before running PartitionAlert (Eric Lombrozo) -- #6894 `2675276` [Tests] Fix BIP65 p2p test (Suhas Daftuar) -- #6863 `725539e` [Test Suite] Fix test for null tx input (Daniel Kraft) -- #6926 `a6d0d62` tests: Initialize networking on windows (Wladimir J. van der Laan) -- #6822 `9fa54a1` [tests] Be more strict checking dust (MarcoFalke) -- #6804 `5fcc14e` [tests] Add basic coverage reporting for RPC tests (James O'Beirne) -- #7045 `72dccfc` Bugfix: Use unique autostart filenames on Linux for testnet/regtest (Luke-Jr) -- #7095 `d8368a0` Replace scriptnum_test's normative ScriptNum implementation (Wladimir J. van der Laan) -- #7063 `6abf6eb` [Tests] Add prioritisetransaction RPC test (Suhas Daftuar) -- #7137 `16f4a6e` Tests: Explicitly set chain limits in replace-by-fee test (Suhas Daftuar) -- #7216 `9572e49` Removed offline testnet DNSSeed 'alexykot.me'. (tnull) -- #7209 `f3ad812` test: don't override BITCOIND and BITCOINCLI if they're set (Wladimir J. van der Laan) -- #7226 `301f16a` Tests: Add more tests to p2p-fullblocktest (Suhas Daftuar) -- #7153 `9ef7c54` [Tests] Add mempool_limit.py test (Jonas Schnelli) -- #7170 `453c567` tests: Disable Tor interaction (Wladimir J. van der Laan) -- #7229 `1ed938b` [qa] wallet: Check if maintenance changes the balance (MarcoFalke) -- #7308 `d513405` [Tests] Eliminate intermittent failures in sendheaders.py (Suhas Daftuar) -- #7468 `947c4ff` [rpc-tests] Change solve() to use rehash (Brad Andrews) - -### Miscellaneous - -- #6213 `e54ff2f` [init] add -blockversion help and extend -upnp help (Diapolo) -- #5975 `1fea667` Consensus: Decouple ContextualCheckBlockHeader from checkpoints (Jorge Timón) -- #6061 `eba2f06` Separate Consensus::CheckTxInputs and GetSpendHeight in CheckInputs (Jorge Timón) -- #5994 `786ed11` detach wallet from miner (Jonas Schnelli) -- #6387 `11576a5` [bitcoin-cli] improve error output (Jonas Schnelli) -- #6401 `6db53b4` Add BITCOIND_SIGTERM_TIMEOUT to OpenRC init scripts (Florian Schmaus) -- #6430 `b01981e` doc: add documentation for shared library libbitcoinconsensus (Braydon Fuller) -- #6372 `dcc495e` Update Linearize tool to support Windows paths; fix variable scope; update README and example configuration (Paul Georgiou) -- #6453 `8fe5cce` Separate core memory usage computation in core_memusage.h (Pieter Wuille) -- #6149 `633fe10` Buffer log messages and explicitly open logs (Adam Weiss) -- #6488 `7cbed7f` Avoid leaking file descriptors in RegisterLoad (Casey Rodarmor) -- #6497 `a2bf40d` Make sure LogPrintf strings are line-terminated (Wladimir J. van der Laan) -- #6504 `b6fee6b` Rationalize currency unit to "BTC" (Ross Nicoll) -- #6507 `9bb4dd8` Removed contrib/bitrpc (Casey Rodarmor) -- #6527 `41d650f` Use unique name for AlertNotify tempfile (Casey Rodarmor) -- #6561 `e08a7d9` limitedmap fixes and tests (Casey Rodarmor) -- #6565 `a6f2aff` Make sure we re-acquire lock if a task throws (Casey Rodarmor) -- #6599 `f4d88c4` Make sure LogPrint strings are line-terminated (Ross Nicoll) -- #6630 `195942d` Replace boost::reverse_lock with our own (Casey Rodarmor) -- #6103 `13b8282` Add ZeroMQ notifications (João Barbosa) -- #6692 `d5d1d2e` devtools: don't push if signing fails in github-merge (Wladimir J. van der Laan) -- #6728 `2b0567b` timedata: Prevent warning overkill (Wladimir J. van der Laan) -- #6713 `f6ce59c` SanitizeString: Allow hypen char (MarcoFalke) -- #5987 `4899a04` Bugfix: Fix testnet-in-a-box use case (Luke-Jr) -- #6733 `b7d78fd` Simple benchmarking framework (Gavin Andresen) -- #6854 `a092970` devtools: Add security-check.py (Wladimir J. van der Laan) -- #6790 `fa1d252` devtools: add clang-format.py (MarcoFalke) -- #7114 `f3d0fdd` util: Don't set strMiscWarning on every exception (Wladimir J. van der Laan) -- #7078 `93e0514` uint256::GetCheapHash bigendian compatibility (arowser) -- #7094 `34e02e0` Assert now > 0 in GetTime GetTimeMillis GetTimeMicros (Patrick Strateman) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- accraze -- Adam Weiss -- Alex Morcos -- Alex van der Peet -- AlSzacrel -- Altoidnerd -- Andriy Voskoboinyk -- antonio-fr -- Arne Brutschy -- Ashley Holman -- Bob McElrath -- Braydon Fuller -- BtcDrak -- Casey Rodarmor -- centaur1 -- Chris Kleeschulte -- Christian Decker -- Cory Fields -- crowning- -- daniel -- Daniel Cousens -- Daniel Kraft -- David Hill -- dexX7 -- Diego Viola -- Elias Rohrer -- Eric Lombrozo -- Erik Mossberg -- Esteban Ordano -- EthanHeilman -- Florian Schmaus -- Forrest Voight -- Gavin Andresen -- Gregory Maxwell -- Gregory Sanders / instagibbs -- Ian T -- Irving Ruan -- Jacob Welsh -- James O'Beirne -- Jeff Garzik -- Johnathan Corgan -- Jonas Schnelli -- Jonathan Cross -- João Barbosa -- Jorge Timón -- Josh Lehan -- J Ross Nicoll -- kazcw -- Kevin Cooper -- lpescher -- Luke Dashjr -- MarcoFalke -- Mark Friedenbach -- Matt -- Matt Bogosian -- Matt Corallo -- Matt Quinn -- Micha -- Michael -- Michael Ford / fanquake -- Midnight Magic -- Mitchell Cash -- mrbandrews -- mruddy -- Nick -- Patrick Strateman -- Paul Georgiou -- Paul Rabahy -- Pavel Janík / paveljanik -- Pavel Vasin -- Pavol Rusnak -- Peter Josling -- Peter Todd -- Philip Kaufmann -- Pieter Wuille -- ptschip -- randy-waterhouse -- rion -- Ross Nicoll -- Ryan Havar -- Shaul Kfir -- Simon Males -- Stephen -- Suhas Daftuar -- tailsjoin -- Thomas Kerin -- Tom Harding -- tulip -- unsystemizer -- Veres Lajos -- Wladimir J. van der Laan -- xor-freenet -- Zak Wilcox -- zathras-crypto - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.12.1.md b/doc/release-notes/release-notes-0.12.1.md deleted file mode 100644 index 610cd481de..0000000000 --- a/doc/release-notes/release-notes-0.12.1.md +++ /dev/null @@ -1,198 +0,0 @@ -Bitcoin Core version 0.12.1 is now available from: - - - -This is a new minor version release, including the BIP9, BIP68 and BIP112 -softfork, various bugfixes and updated translations. - -Please report bugs using the issue tracker at github: - - - -Upgrading and downgrading -========================= - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Downgrade warning ------------------ - -### Downgrade to a version < 0.12.0 - -Because release 0.12.0 and later will obfuscate the chainstate on every -fresh sync or reindex, the chainstate is not backwards-compatible with -pre-0.12 versions of Bitcoin Core or other software. - -If you want to downgrade after you have done a reindex with 0.12.0 or later, -you will need to reindex when you first start Bitcoin Core version 0.11 or -earlier. - -Notable changes -=============== - -First version bits BIP9 softfork deployment -------------------------------------------- - -This release includes a soft fork deployment to enforce [BIP68][], -[BIP112][] and [BIP113][] using the [BIP9][] deployment mechanism. - -The deployment sets the block version number to 0x20000001 between -midnight 1st May 2016 and midnight 1st May 2017 to signal readiness for -deployment. The version number consists of 0x20000000 to indicate version -bits together with setting bit 0 to indicate support for this combined -deployment, shown as "csv" in the `getblockchaininfo` RPC call. - -For more information about the soft forking change, please see - - -This specific backport pull-request can be viewed at - - -[BIP9]: https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki -[BIP68]: https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki -[BIP112]: https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki -[BIP113]: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki - -BIP68 soft fork to enforce sequence locks for relative locktime ---------------------------------------------------------------- - -[BIP68][] introduces relative lock-time consensus-enforced semantics of -the sequence number field to enable a signed transaction input to remain -invalid for a defined period of time after confirmation of its corresponding -outpoint. - -For more information about the implementation, see - - -BIP112 soft fork to enforce OP_CHECKSEQUENCEVERIFY --------------------------------------------------- - -[BIP112][] redefines the existing OP_NOP3 as OP_CHECKSEQUENCEVERIFY (CSV) -for a new opcode in the Bitcoin scripting system that in combination with -[BIP68][] allows execution pathways of a script to be restricted based -on the age of the output being spent. - -For more information about the implementation, see - - -BIP113 locktime enforcement soft fork -------------------------------------- - -Bitcoin Core 0.11.2 previously introduced mempool-only locktime -enforcement using GetMedianTimePast(). This release seeks to -consensus enforce the rule. - -Bitcoin transactions currently may specify a locktime indicating when -they may be added to a valid block. Current consensus rules require -that blocks have a block header time greater than the locktime specified -in any transaction in that block. - -Miners get to choose what time they use for their header time, with the -consensus rule being that no node will accept a block whose time is more -than two hours in the future. This creates a incentive for miners to -set their header times to future values in order to include locktimed -transactions which weren't supposed to be included for up to two more -hours. - -The consensus rules also specify that valid blocks may have a header -time greater than that of the median of the 11 previous blocks. This -GetMedianTimePast() time has a key feature we generally associate with -time: it can't go backwards. - -[BIP113][] specifies a soft fork enforced in this release that -weakens this perverse incentive for individual miners to use a future -time by requiring that valid blocks have a computed GetMedianTimePast() -greater than the locktime specified in any transaction in that block. - -Mempool inclusion rules currently require transactions to be valid for -immediate inclusion in a block in order to be accepted into the mempool. -This release begins applying the BIP113 rule to received transactions, -so transaction whose time is greater than the GetMedianTimePast() will -no longer be accepted into the mempool. - -**Implication for miners:** you will begin rejecting transactions that -would not be valid under BIP113, which will prevent you from producing -invalid blocks when BIP113 is enforced on the network. Any -transactions which are valid under the current rules but not yet valid -under the BIP113 rules will either be mined by other miners or delayed -until they are valid under BIP113. Note, however, that time-based -locktime transactions are more or less unseen on the network currently. - -**Implication for users:** GetMedianTimePast() always trails behind the -current time, so a transaction locktime set to the present time will be -rejected by nodes running this release until the median time moves -forward. To compensate, subtract one hour (3,600 seconds) from your -locktimes to allow those transactions to be included in mempools at -approximately the expected time. - -For more information about the implementation, see - - -Miscellaneous -------------- - -The p2p alert system is off by default. To turn on, use `-alert` with -startup configuration. - -0.12.1 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### RPC and other APIs -- #7739 `7ffc2bd` Add abandoned status to listtransactions (jonasschnelli) - -### Block and transaction handling -- #7543 `834aaef` Backport BIP9, BIP68 and BIP112 with softfork (btcdrak) - -### P2P protocol and network code -- #7804 `90f1d24` Track block download times per individual block (sipa) -- #7832 `4c3a00d` Reduce block timeout to 10 minutes (laanwj) - -### Validation -- #7821 `4226aac` init: allow shutdown during 'Activating best chain...' (laanwj) -- #7835 `46898e7` Version 2 transactions remain non-standard until CSV activates (sdaftuar) - -### Build system -- #7487 `00d57b4` Workaround Travis-side CI issues (luke-jr) -- #7606 `a10da9a` No need to set -L and --location for curl (MarcoFalke) -- #7614 `ca8f160` Add curl to packages (now needed for depends) (luke-jr) -- #7776 `a784675` Remove unnecessary executables from gitian release (laanwj) - -### Wallet -- #7715 `19866c1` Fix calculation of balances and available coins. (morcos) - -### Miscellaneous -- #7617 `f04f4fd` Fix markdown syntax and line terminate LogPrint (MarcoFalke) -- #7747 `4d035bc` added depends cross compile info (accraze) -- #7741 `a0cea89` Mark p2p alert system as deprecated (btcdrak) -- #7780 `c5f94f6` Disable bad-chain alert (btcdrak) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- accraze -- Alex Morcos -- BtcDrak -- Jonas Schnelli -- Luke Dashjr -- MarcoFalke -- Mark Friedenbach -- NicolasDorier -- Pieter Wuille -- Suhas Daftuar -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). - diff --git a/doc/release-notes/release-notes-0.13.0.md b/doc/release-notes/release-notes-0.13.0.md deleted file mode 100644 index 4c3cb97df3..0000000000 --- a/doc/release-notes/release-notes-0.13.0.md +++ /dev/null @@ -1,868 +0,0 @@ -Bitcoin Core version 0.13.0 is now available from: - - - -This is a new major version release, including new features, various bugfixes -and performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at github: - - - -To receive security and update notifications, please subscribe to: - - - -Compatibility -============== - -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), -an OS initially released in 2001. This means that not even critical security -updates will be released anymore. Without security updates, using a bitcoin -wallet on a XP machine is irresponsible at least. - -In addition to that, with 0.12.x there have been varied reports of Bitcoin Core -randomly crashing on Windows XP. It is [not clear](https://github.com/bitcoin/bitcoin/issues/7681#issuecomment-217439891) -what the source of these crashes is, but it is likely that upstream -libraries such as Qt are no longer being tested on XP. - -We do not have time nor resources to provide support for an OS that is -end-of-life. From 0.13.0 on, Windows XP is no longer supported. Users are -suggested to upgrade to a newer verion of Windows, or install an alternative OS -that is supported. - -No attempt is made to prevent installing or running the software on Windows XP, -you can still do so at your own risk, but do not expect it to work: do not -report issues about Windows XP to the issue tracker. - -Notable changes -=============== - -Database cache memory increased --------------------------------- - -As a result of growth of the UTXO set, performance with the prior default -database cache of 100 MiB has suffered. -For this reason the default was changed to 300 MiB in this release. - -For nodes on low-memory systems, the database cache can be changed back to -100 MiB (or to another value) by either: - -- Adding `dbcache=100` in bitcoin.conf -- Changing it in the GUI under `Options → Size of database cache` - -Note that the database cache setting has the most performance impact -during initial sync of a node, and when catching up after downtime. - - -bitcoin-cli: arguments privacy ------------------------------- - -The RPC command line client gained a new argument, `-stdin` -to read extra arguments from standard input, one per line until EOF/Ctrl-D. -For example: - - $ src/bitcoin-cli -stdin walletpassphrase - mysecretcode - 120 - ..... press Ctrl-D here to end input - $ - -It is recommended to use this for sensitive information such as wallet -passphrases, as command-line arguments can usually be read from the process -table by any user on the system. - - -C++11 and Python 3 ------------------- - -Various code modernizations have been done. The Bitcoin Core code base has -started using C++11. This means that a C++11-capable compiler is now needed for -building. Effectively this means GCC 4.7 or higher, or Clang 3.3 or higher. - -When cross-compiling for a target that doesn't have C++11 libraries, configure with -`./configure --enable-glibc-back-compat ... LDFLAGS=-static-libstdc++`. - -For running the functional tests in `qa/rpc-tests`, Python3.4 or higher is now -required. - - -Linux ARM builds ----------------- - -Due to popular request, Linux ARM builds have been added to the uploaded -executables. - -The following extra files can be found in the download directory or torrent: - -- `bitcoin-${VERSION}-arm-linux-gnueabihf.tar.gz`: Linux binaries targeting - the 32-bit ARMv7-A architecture. -- `bitcoin-${VERSION}-aarch64-linux-gnu.tar.gz`: Linux binaries targeting - the 64-bit ARMv8-A architecture. - -ARM builds are still experimental. If you have problems on a certain device or -Linux distribution combination please report them on the bug tracker, it may be -possible to resolve them. Note that the device you use must be (backward) -compatible with the architecture targeted by the binary that you use. -For example, a Raspberry Pi 2 Model B or Raspberry Pi 3 Model B (in its 32-bit -execution state) device, can run the 32-bit ARMv7-A targeted binary. However, -no model of Raspberry Pi 1 device can run either binary because they are all -ARMv6 architecture devices that are not compatible with ARMv7-A or ARMv8-A. - -Note that Android is not considered ARM Linux in this context. The executables -are not expected to work out of the box on Android. - - -Compact Block support (BIP 152) -------------------------------- - -Support for block relay using the Compact Blocks protocol has been implemented -in PR 8068. - -The primary goal is reducing the bandwidth spikes at relay time, though in many -cases it also reduces propagation delay. It is automatically enabled between -compatible peers. -[BIP 152](https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki) - -As a side-effect, ordinary non-mining nodes will download and upload blocks -faster if those blocks were produced by miners using similar transaction -filtering policies. This means that a miner who produces a block with many -transactions discouraged by your node will be relayed slower than one with -only transactions already in your memory pool. The overall effect of such -relay differences on the network may result in blocks which include widely- -discouraged transactions losing a stale block race, and therefore miners may -wish to configure their node to take common relay policies into consideration. - - -Hierarchical Deterministic Key Generation ------------------------------------------ -Newly created wallets will use hierarchical deterministic key generation -according to BIP32 (keypath m/0'/0'/k'). -Existing wallets will still use traditional key generation. - -Backups of HD wallets, regardless of when they have been created, can -therefore be used to re-generate all possible private keys, even the -ones which haven't already been generated during the time of the backup. -**Attention:** Encrypting the wallet will create a new seed which requires -a new backup! - -Wallet dumps (created using the `dumpwallet` RPC) will contain the deterministic -seed. This is expected to allow future versions to import the seed and all -associated funds, but this is not yet implemented. - -HD key generation for new wallets can be disabled by `-usehd=0`. Keep in -mind that this flag only has affect on newly created wallets. -You can't disable HD key generation once you have created a HD wallet. - -There is no distinction between internal (change) and external keys. - -HD wallets are incompatible with older versions of Bitcoin Core. - -[Pull request](https://github.com/bitcoin/bitcoin/pull/8035/files), [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) - - -Segregated Witness ------------------- - -The code preparations for Segregated Witness ("segwit"), as described in [BIP -141](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki), [BIP -143](https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki), [BIP -144](https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki), and [BIP -145](https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki) are -finished and included in this release. However, BIP 141 does not yet specify -activation parameters on mainnet, and so this release does not support segwit -use on mainnet. Testnet use is supported, and after BIP 141 is updated with -proposed parameters, a future release of Bitcoin Core is expected that -implements those parameters for mainnet. - -Furthermore, because segwit activation is not yet specified for mainnet, -version 0.13.0 will behave similarly as other pre-segwit releases even after a -future activation of BIP 141 on the network. Upgrading from 0.13.0 will be -required in order to utilize segwit-related features on mainnet (such as signal -BIP 141 activation, mine segwit blocks, fully validate segwit blocks, relay -segwit blocks to other segwit nodes, and use segwit transactions in the -wallet, etc). - - -Mining transaction selection ("Child Pays For Parent") ------------------------------------------------------- - -The mining transaction selection algorithm has been replaced with an algorithm -that selects transactions based on their feerate inclusive of unconfirmed -ancestor transactions. This means that a low-fee transaction can become more -likely to be selected if a high-fee transaction that spends its outputs is -relayed. - -With this change, the `-blockminsize` command line option has been removed. - -The command line option `-blockmaxsize` remains an option to specify the -maximum number of serialized bytes in a generated block. In addition, the new -command line option `-blockmaxweight` has been added, which specifies the -maximum "block weight" of a generated block, as defined by [BIP 141 (Segregated -Witness)] (https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki). - -In preparation for Segregated Witness, the mining algorithm has been modified -to optimize transaction selection for a given block weight, rather than a given -number of serialized bytes in a block. In this release, transaction selection -is unaffected by this distinction (as BIP 141 activation is not supported on -mainnet in this release, see above), but in future releases and after BIP 141 -activation, these calculations would be expected to differ. - -For optimal runtime performance, miners using this release should specify -`-blockmaxweight` on the command line, and not specify `-blockmaxsize`. -Additionally (or only) specifying `-blockmaxsize`, or relying on default -settings for both, may result in performance degradation, as the logic to -support `-blockmaxsize` performs additional computation to ensure that -constraint is met. (Note that for mainnet, in this release, the equivalent -parameter for `-blockmaxweight` would be four times the desired -`-blockmaxsize`. See [BIP 141] -(https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki) for additional -details.) - -In the future, the `-blockmaxsize` option may be removed, as block creation is -no longer optimized for this metric. Feedback is requested on whether to -deprecate or keep this command line option in future releases. - - -Reindexing changes ------------------- - -In earlier versions, reindexing did validation while reading through the block -files on disk. These two have now been split up, so that all blocks are known -before validation starts. This was necessary to make certain optimizations that -are available during normal synchronizations also available during reindexing. - -The two phases are distinct in the Bitcoin-Qt GUI. During the first one, -"Reindexing blocks on disk" is shown. During the second (slower) one, -"Processing blocks on disk" is shown. - -It is possible to only redo validation now, without rebuilding the block index, -using the command line option `-reindex-chainstate` (in addition to -`-reindex` which does both). This new option is useful when the blocks on disk -are assumed to be fine, but the chainstate is still corrupted. It is also -useful for benchmarks. - - -Removal of internal miner --------------------------- - -As CPU mining has been useless for a long time, the internal miner has been -removed in this release, and replaced with a simpler implementation for the -test framework. - -The overall result of this is that `setgenerate` RPC call has been removed, as -well as the `-gen` and `-genproclimit` command-line options. - -For testing, the `generate` call can still be used to mine a block, and a new -RPC call `generatetoaddress` has been added to mine to a specific address. This -works with wallet disabled. - - -New bytespersigop implementation --------------------------------- - -The former implementation of the bytespersigop filter accidentally broke bare -multisig (which is meant to be controlled by the `permitbaremultisig` option), -since the consensus protocol always counts these older transaction forms as 20 -sigops for backwards compatibility. Simply fixing this bug by counting more -accurately would have reintroduced a vulnerability. It has therefore been -replaced with a new implementation that rather than filter such transactions, -instead treats them (for fee purposes only) as if they were in fact the size -of a transaction actually using all 20 sigops. - - -Low-level P2P changes ----------------------- - -- The optional new p2p message "feefilter" is implemented and the protocol - version is bumped to 70013. Upon receiving a feefilter message from a peer, - a node will not send invs for any transactions which do not meet the filter - feerate. [BIP 133](https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki) - -- The P2P alert system has been removed in PR #7692 and the `alert` P2P message - is no longer supported. - -- The transaction relay mechanism used to relay one quarter of all transactions - instantly, while queueing up the rest and sending them out in batch. As - this resulted in chains of dependent transactions being reordered, it - systematically hurt transaction relay. The relay code was redesigned in PRs - \#7840 and #8082, and now always batches transactions announcements while also - sorting them according to dependency order. This significantly reduces orphan - transactions. To compensate for the removal of instant relay, the frequency of - batch sending was doubled for outgoing peers. - -- Since PR #7840 the BIP35 `mempool` command is also subject to batch processing. - Also the `mempool` message is no longer handled for non-whitelisted peers when - `NODE_BLOOM` is disabled through `-peerbloomfilters=0`. - -- The maximum size of orphan transactions that are kept in memory until their - ancestors arrive has been raised in PR #8179 from 5000 to 99999 bytes. They - are now also removed from memory when they are included in a block, conflict - with a block, and time out after 20 minutes. - -- We respond at most once to a getaddr request during the lifetime of a - connection since PR #7856. - -- Connections to peers who have recently been the first one to give us a valid - new block or transaction are protected from disconnections since PR #8084. - - -Low-level RPC changes ----------------------- - -- RPC calls have been added to output detailed statistics for individual mempool - entries, as well as to calculate the in-mempool ancestors or descendants of a - transaction: see `getmempoolentry`, `getmempoolancestors`, `getmempooldescendants`. - -- `gettxoutsetinfo` UTXO hash (`hash_serialized`) has changed. There was a divergence between - 32-bit and 64-bit platforms, and the txids were missing in the hashed data. This has been - fixed, but this means that the output will be different than from previous versions. - -- Full UTF-8 support in the RPC API. Non-ASCII characters in, for example, - wallet labels have always been malformed because they weren't taken into account - properly in JSON RPC processing. This is no longer the case. This also affects - the GUI debug console. - -- Asm script outputs replacements for OP_NOP2 and OP_NOP3 - - - OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP -65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki) - - - OP_NOP3 has been renamed to OP_CHECKSEQUENCEVERIFY by [BIP -112](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki) - - - The following outputs are affected by this change: - - - RPC `getrawtransaction` (in verbose mode) - - RPC `decoderawtransaction` - - RPC `decodescript` - - REST `/rest/tx/` (JSON format) - - REST `/rest/block/` (JSON format when including extended tx details) - - `bitcoin-tx -json` - -- The sorting of the output of the `getrawmempool` output has changed. - -- New RPC commands: `generatetoaddress`, `importprunedfunds`, `removeprunedfunds`, `signmessagewithprivkey`, - `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry`, - `createwitnessaddress`, `addwitnessaddress`. - -- Removed RPC commands: `setgenerate`, `getgenerate`. - -- New options were added to `fundrawtransaction`: `includeWatching`, `changeAddress`, `changePosition` and `feeRate`. - - -Low-level ZMQ changes ----------------------- - -- Each ZMQ notification now contains an up-counting sequence number that allows - listeners to detect lost notifications. - The sequence number is always the last element in a multi-part ZMQ notification and - therefore backward compatible. Each message type has its own counter. - PR [#7762](https://github.com/bitcoin/bitcoin/pull/7762). - - -0.13.0 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### RPC and other APIs - -- #7156 `9ee02cf` Remove cs_main lock from `createrawtransaction` (laanwj) -- #7326 `2cd004b` Fix typo, wrong information in gettxout help text (paveljanik) -- #7222 `82429d0` Indicate which transactions are signaling opt-in RBF (sdaftuar) -- #7480 `b49a623` Changed getnetworkhps value to double to avoid overflow (instagibbs) -- #7550 `8b958ab` Input-from-stdin mode for bitcoin-cli (laanwj) -- #7670 `c9a1265` Use cached block hash in blockToJSON() (rat4) -- #7726 `9af69fa` Correct importaddress help reference to importpubkey (CypherGrue) -- #7766 `16555b6` Register calls where they are defined (laanwj) -- #7797 `e662a76` Fix generatetoaddress failing to parse address (mruddy) -- #7774 `916b15a` Add versionHex in getblock and getblockheader JSON results (mruddy) -- #7863 `72c54e3` Getblockchaininfo: make bip9_softforks an object, not an array (rustyrussell) -- #7842 `d97101e` Do not print minping time in getpeerinfo when no ping received yet (paveljanik) -- #7518 `be14ca5` Add multiple options to fundrawtransaction (promag) -- #7756 `9e47fce` Add cursor to iterate over utxo set, use this in `gettxoutsetinfo` (laanwj) -- #7848 `88616d2` Divergence between 32- and 64-bit when hashing >4GB affects `gettxoutsetinfo` (laanwj) -- #7827 `4205ad7` Speed up `getchaintips` (mrbandrews) -- #7762 `a1eb344` Append a message sequence number to every ZMQ notification (jonasschnelli) -- #7688 `46880ed` List solvability in listunspent output and improve help (sipa) -- #7926 `5725807` Push back `getaddednodeinfo` dead value (instagibbs) -- #7953 `0630353` Create `signmessagewithprivkey` rpc (achow101) -- #8049 `c028c7b` Expose information on whether transaction relay is enabled in `getnetworkinfo` (laanwj) -- #7967 `8c1e49b` Add feerate option to `fundrawtransaction` (jonasschnelli) -- #8118 `9b6a48c` Reduce unnecessary hashing in `signrawtransaction` (jonasnick) -- #7957 `79004d4` Add support for transaction sequence number (jonasschnelli) -- #8153 `75ec320` `fundrawtransaction` feeRate: Use BTC/kB (MarcoFalke) -- #7292 `7ce9ac5` Expose ancestor/descendant information over RPC (sdaftuar) -- #8171 `62fcf27` Fix createrawtx sequence number unsigned int parsing (jonasschnelli) -- #7892 `9c3d0fa` Add full UTF-8 support to RPC (laanwj) -- #8317 `304eff3` Don't use floating point in rpcwallet (MarcoFalke) -- #8258 `5a06ebb` Hide softfork in `getblockchaininfo` if timeout is 0 (jl2012) -- #8244 `1922e5a` Remove unnecessary LOCK(cs_main) in getrawmempool (dcousens) - -### Block and transaction handling - -- #7056 `6a07208` Save last db read (morcos) -- #6842 `0192806` Limitfreerelay edge case bugfix (ptschip) -- #7084 `11d74f6` Replace maxFeeRate of 10000*minRelayTxFee with maxTxFee in mempool (MarcoFalke) -- #7539 `9f33dba` Add tags to mempool's mapTx indices (sdaftuar) -- #7592 `26a2a72` Re-remove ERROR logging for mempool rejects (laanwj) -- #7187 `14d6324` Keep reorgs fast for SequenceLocks checks (morcos) -- #7594 `01f4267` Mempool: Add tracking of ancestor packages (sdaftuar) -- #7904 `fc9e334` Txdb: Fix assert crash in new UTXO set cursor (laanwj) -- #7927 `f9c2ac7` Minor changes to dbwrapper to simplify support for other databases (laanwj) -- #7933 `e26b620` Fix OOM when deserializing UTXO entries with invalid length (sipa) -- #8020 `5e374f7` Use SipHash-2-4 for various non-cryptographic hashes (sipa) -- #8076 `d720980` VerifyDB: don't check blocks that have been pruned (sdaftuar) -- #8080 `862fd24` Do not use mempool for GETDATA for tx accepted after the last mempool req (gmaxwell) -- #7997 `a82f033` Replace mapNextTx with slimmer setSpends (kazcw) -- #8220 `1f86d64` Stop trimming when mapTx is empty (sipa) -- #8273 `396f9d6` Bump `-dbcache` default to 300MiB (laanwj) -- #7225 `eb33179` Eliminate unnecessary call to CheckBlock (sdaftuar) -- #7907 `006cdf6` Optimize and Cleanup CScript::FindAndDelete (pstratem) -- #7917 `239d419` Optimize reindex (sipa) -- #7763 `3081fb9` Put hex-encoded version in UpdateTip (sipa) -- #8149 `d612837` Testnet-only segregated witness (sipa) -- #8305 `3730393` Improve handling of unconnecting headers (sdaftuar) -- #8363 `fca1a41` Rename "block cost" to "block weight" (sdaftuar) -- #8381 `f84ee3d` Make witness v0 outputs non-standard (jl2012) -- #8364 `3f65ba2` Treat high-sigop transactions as larger rather than rejecting them (sipa) - -### P2P protocol and network code - -- #6589 `dc0305d` Log bytes recv/sent per command (jonasschnelli) -- #7164 `3b43cad` Do not download transactions during initial blockchain sync (ptschip) -- #7458 `898fedf` peers.dat, banlist.dat recreated when missing (kirkalx) -- #7637 `3da5d1b` Fix memleak in TorController (laanwj, jonasschnelli) -- #7553 `9f14e5a` Remove vfReachable and modify IsReachable to only use vfLimited (pstratem) -- #7708 `9426632` De-neuter NODE_BLOOM (pstratem) -- #7692 `29b2be6` Remove P2P alert system (btcdrak) -- #7542 `c946a15` Implement "feefilter" P2P message (morcos) -- #7573 `352fd57` Add `-maxtimeadjustment` command line option (mruddy) -- #7570 `232592a` Add IPv6 Link-Local Address Support (mruddy) -- #7874 `e6a4d48` Improve AlreadyHave (morcos) -- #7856 `64e71b3` Only send one GetAddr response per connection (gmaxwell) -- #7868 `7daa3ad` Split DNS resolving functionality out of net structures (theuni) -- #7919 `7617682` Fix headers announcements edge case (sdaftuar) -- #7514 `d9594bf` Fix IsInitialBlockDownload for testnet (jmacwhyte) -- #7959 `03cf6e8` fix race that could fail to persist a ban (kazcw) -- #7840 `3b9a0bf` Several performance and privacy improvements to inv/mempool handling (sipa) -- #8011 `65aecda` Don't run ThreadMessageHandler at lowered priority (kazcw) -- #7696 `5c3f8dd` Fix de-serialization bug where AddrMan is left corrupted (EthanHeilman) -- #7932 `ed749bd` CAddrMan::Deserialize handle corrupt serializations better (pstratem) -- #7906 `83121cc` Prerequisites for p2p encapsulation changes (theuni) -- #8033 `18436d8` Fix Socks5() connect failures to be less noisy and less unnecessarily scary (wtogami) -- #8082 `01d8359` Defer inserting into maprelay until just before relaying (gmaxwell) -- #7960 `6a22373` Only use AddInventoryKnown for transactions (sdaftuar) -- #8078 `2156fa2` Disable the mempool P2P command when bloom filters disabled (petertodd) -- #8065 `67c91f8` Addrman offline attempts (gmaxwell) -- #7703 `761cddb` Tor: Change auth order to only use password auth if -torpassword (laanwj) -- #8083 `cd0c513` Add support for dnsseeds with option to filter by servicebits (jonasschnelli) -- #8173 `4286f43` Use SipHash for node eviction (sipa) -- #8154 `1445835` Drop vAddrToSend after sending big addr message (kazcw) -- #7749 `be9711e` Enforce expected outbound services (sipa) -- #8208 `0a64777` Do not set extra flags for unfiltered DNS seed results (sipa) -- #8084 `e4bb4a8` Add recently accepted blocks and txn to AttemptToEvictConnection (gmaxwell) -- #8113 `3f89a53` Rework addnode behaviour (sipa) -- #8179 `94ab58b` Evict orphans which are included or precluded by accepted blocks (gmaxwell) -- #8068 `e9d76a1` Compact Blocks (TheBlueMatt) -- #8204 `0833894` Update petertodd's testnet seed (petertodd) -- #8247 `5cd35d3` Mark my dnsseed as supporting filtering (sipa) -- #8275 `042c323` Remove bad chain alert partition check (btcdrak) -- #8271 `1bc9c80` Do not send witnesses in cmpctblock (sipa) -- #8312 `ca40ef6` Fix mempool DoS vulnerability from malleated transactions (sdaftuar) -- #7180 `16ccb74` Account for `sendheaders` `verack` messages (laanwj) -- #8102 `425278d` Bugfix: use global ::fRelayTxes instead of CNode in version send (sipa) -- #8408 `b7e2011` Prevent fingerprinting, disk-DoS with compact blocks (sdaftuar) - -### Build system - -- #7302 `41f1a3e` C++11 build/runtime fixes (theuni) -- #7322 `fd9356b` c++11: add scoped enum fallbacks to CPPFLAGS rather than defining them locally (theuni) -- #7441 `a6771fc` Use Debian 8.3 in gitian build guide (fanquake) -- #7349 `152a821` Build against system UniValue when available (luke-jr) -- #7520 `621940e` LibreSSL doesn't define OPENSSL_VERSION, use LIBRESSL_VERSION_TEXT instead (paveljanik) -- #7528 `9b9bfce` autogen.sh: warn about needing autoconf if autoreconf is not found (knocte) -- #7504 `19324cf` Crystal clean make clean (paveljanik) -- #7619 `18b3f1b` Add missing sudo entry in gitian VM setup (btcdrak) -- #7616 `639ec58` [depends] Delete unused patches (MarcoFalke) -- #7658 `c15eb28` Add curl to Gitian setup instructions (btcdrak) -- #7710 `909b72b` [Depends] Bump miniupnpc and config.guess+sub (fanquake) -- #7723 `5131005` build: python 3 compatibility (laanwj) -- #7477 `28ad4d9` Fix quoting of copyright holders in configure.ac (domob1812) -- #7711 `a67bc5e` [build-aux] Update Boost & check macros to latest serials (fanquake) -- #7788 `4dc1b3a` Use relative paths instead of absolute paths in protoc calls (paveljanik) -- #7809 `bbd210d` depends: some base fixes/changes (theuni) -- #7603 `73fc922` Build System: Use PACKAGE_TARNAME in NSIS script (JeremyRand) -- #7905 `187186b` test: move accounting_tests and rpc_wallet_tests to wallet/test (laanwj) -- #7911 `351abf9` leveldb: integrate leveldb into our buildsystem (theuni) -- #7944 `a407807` Re-instate TARGET_OS=linux in configure.ac. Removed by 351abf9e035 (randy-waterhouse) -- #7920 `c3e3cfb` Switch Travis to Trusty (theuni) -- #7954 `08b37c5` build: quiet annoying warnings without adding new ones (theuni) -- #7165 `06162f1` build: Enable C++11 in build, require C++11 compiler (laanwj) -- #7982 `559fbae` build: No need to check for leveldb atomics (theuni) -- #8002 `f9b4582` [depends] Add -stdlib=libc++ to darwin CXX flags (fanquake) -- #7993 `6a034ed` [depends] Bump Freetype, ccache, ZeroMQ, miniupnpc, expat (fanquake) -- #8167 `19ea173` Ship debug tarballs/zips with debug symbols (theuni) -- #8175 `f0299d8` Add --disable-bench to config flags for windows (laanwj) -- #7283 `fd9881a` [gitian] Default reference_datetime to commit author date (MarcoFalke) -- #8181 `9201ce8` Get rid of `CLIENT_DATE` (laanwj) -- #8133 `fde0ac4` Finish up out-of-tree changes (theuni) -- #8188 `65a9d7d` Add armhf/aarch64 gitian builds (theuni) -- #8194 `cca1c8c` [gitian] set correct PATH for wrappers (MarcoFalke) -- #8198 `5201614` Sync ax_pthread with upstream draft4 (fanquake) -- #8210 `12a541e` [Qt] Bump to Qt5.6.1 (jonasschnelli) -- #8285 `da50997` windows: Add testnet link to installer (laanwj) -- #8304 `0cca2fe` [travis] Update SDK_URL (MarcoFalke) -- #8310 `6ae20df` Require boost for bench (theuni) -- #8315 `2e51590` Don't require sudo for Linux (theuni) -- #8314 `67caef6` Fix pkg-config issues for 0.13 (theuni) -- #8373 `1fe7f40` Fix OSX non-deterministic dmg (theuni) -- #8358 `cfd1280` Gbuild: Set memory explicitly (default is too low) (MarcoFalke) - -### GUI - -- #7154 `00b4b8d` Add InMempool() info to transaction details (jonasschnelli) -- #7068 `5f3c670` [RPC-Tests] add simple way to run rpc test over QT clients (jonasschnelli) -- #7218 `a1c185b` Fix misleading translation (MarcoFalke) -- #7214 `be9a9a3` qt5: Use the fixed font the system recommends (MarcoFalke) -- #7256 `08ab906` Add note to coin control dialog QT5 workaround (fanquake) -- #7255 `e289807` Replace some instances of formatWithUnit with formatHtmlWithUnit (fanquake) -- #7317 `3b57e9c` Fix RPCTimerInterface ordering issue (jonasschnelli) -- #7327 `c079d79` Transaction View: LastMonth calculation fixed (crowning-) -- #7334 `e1060c5` coincontrol workaround is still needed in qt5.4 (fixed in qt5.5) (MarcoFalke) -- #7383 `ae2db67` Rename "amount" to "requested amount" in receive coins table (jonasschnelli) -- #7396 `cdcbc59` Add option to increase/decrease font size in the console window (jonasschnelli) -- #7437 `9645218` Disable tab navigation for peers tables (Kefkius) -- #7604 `354b03d` build: Remove spurious dollar sign. Fixes #7189 (dooglus) -- #7605 `7f001bd` Remove openssl info from init/log and from Qt debug window (jonasschnelli) -- #7628 `87d6562` Add 'copy full transaction details' option (ericshawlinux) -- #7613 `3798e5d` Add autocomplete to bitcoin-qt's console window (GamerSg) -- #7668 `b24266c` Fix history deletion bug after font size change (achow101) -- #7680 `41d2dfa` Remove reflection from `about` icon (laanwj) -- #7686 `f034bce` Remove 0-fee from send dialog (MarcoFalke) -- #7506 `b88e0b0` Use CCoinControl selection in CWallet::FundTransaction (promag) -- #7732 `0b98dd7` Debug window: replace "Build date" with "Datadir" (jonasschnelli) -- #7761 `60db51d` remove trailing output-index from transaction-id (jonasschnelli) -- #7772 `6383268` Clear the input line after activating autocomplete (paveljanik) -- #7925 `f604bf6` Fix out-of-tree GUI builds (laanwj) -- #7939 `574ddc6` Make it possible to show details for multiple transactions (laanwj) -- #8012 `b33824b` Delay user confirmation of send (Tyler-Hardin) -- #8006 `7c8558d` Add option to disable the system tray icon (Tyler-Hardin) -- #8046 `169d379` Fix Cmd-Q / Menu Quit shutdown on OSX (jonasschnelli) -- #8042 `6929711` Don't allow to open the debug window during splashscreen & verification state (jonasschnelli) -- #8014 `77b49ac` Sort transactions by date (Tyler-Hardin) -- #8073 `eb2f6f7` askpassphrasedialog: Clear pass fields on accept (rat4) -- #8129 `ee1533e` Fix RPC console auto completer (UdjinM6) -- #7636 `fb0ac48` Add bitcoin address label to request payment QR code (makevoid) -- #8231 `760a6c7` Fix a bug where the SplashScreen will not be hidden during startup (jonasschnelli) -- #8256 `af2421c` BUG: bitcoin-qt crash (fsb4000) -- #8257 `ff03c50` Do not ask a UI question from bitcoind (sipa) -- #8288 `91abb77` Network-specific example address (laanwj) -- #7707 `a914968` UI support for abandoned transactions (jonasschnelli) -- #8207 `f7a403b` Add a link to the Bitcoin-Core repository and website to the About Dialog (MarcoFalke) -- #8281 `6a87eb0` Remove client name from debug window (laanwj) -- #8407 `45eba4b` Add dbcache migration path (jonasschnelli) - -### Wallet - -- #7262 `fc08994` Reduce inefficiency of GetAccountAddress() (dooglus) -- #7537 `78e81b0` Warn on unexpected EOF while salvaging wallet (laanwj) -- #7521 `3368895` Don't resend wallet txs that aren't in our own mempool (morcos) -- #7576 `86a1ec5` Move wallet help string creation to CWallet (jonasschnelli) -- #7577 `5b3b5a7` Move "load wallet phase" to CWallet (jonasschnelli) -- #7608 `0735c0c` Move hardcoded file name out of log messages (MarcoFalke) -- #7649 `4900641` Prevent multiple calls to CWallet::AvailableCoins (promag) -- #7646 `e5c3511` Fix lockunspent help message (promag) -- #7558 `b35a591` Add import/removeprunedfunds rpc call (instagibbs) -- #6215 `48c5adf` add bip32 pub key serialization (jonasschnelli) -- #7913 `bafd075` Fix for incorrect locking in GetPubKey() (keystore.cpp) (yurizhykin) -- #8036 `41138f9` init: Move berkeleydb version reporting to wallet (laanwj) -- #8028 `373b50d` Fix insanity of CWalletDB::WriteTx and CWalletTx::WriteToDisk (pstratem) -- #8061 `f6b7df3` Improve Wallet encapsulation (pstratem) -- #7891 `950be19` Always require OS randomness when generating secret keys (sipa) -- #7689 `b89ef13` Replace OpenSSL AES with ctaes-based version (sipa) -- #7825 `f972b04` Prevent multiple calls to ExtractDestination (pedrobranco) -- #8137 `243ac0c` Improve CWallet API with new AccountMove function (pstratem) -- #8142 `52c3f34` Improve CWallet API with new GetAccountPubkey function (pstratem) -- #8035 `b67a472` Add simplest BIP32/deterministic key generation implementation (jonasschnelli) -- #7687 `a6ddb19` Stop treating importaddress'ed scripts as change (sipa) -- #8298 `aef3811` wallet: Revert input selection post-pruning (laanwj) -- #8324 `bc94b87` Keep HD seed during salvagewallet (jonasschnelli) -- #8323 `238300b` Add HD keypath to CKeyMetadata, report metadata in validateaddress (jonasschnelli) -- #8367 `3b38a6a` Ensure <0.13 clients can't open HD wallets (jonasschnelli) -- #8378 `ebea651` Move SetMinVersion for FEATURE_HD to SetHDMasterKey (pstratem) -- #8390 `73adfe3` Correct hdmasterkeyid/masterkeyid name confusion (jonasschnelli) -- #8206 `18b8ee1` Add HD xpriv to dumpwallet (jonasschnelli) -- #8389 `c3c82c4` Create a new HD seed after encrypting the wallet (jonasschnelli) - -### Tests and QA - -- #7320 `d3dfc6d` Test walletpassphrase timeout (MarcoFalke) -- #7208 `47c5ed1` Make max tip age an option instead of chainparam (laanwj) -- #7372 `21376af` Trivial: [qa] wallet: Print maintenance (MarcoFalke) -- #7280 `668906f` [travis] Fail when documentation is outdated (MarcoFalke) -- #7177 `93b0576` [qa] Change default block priority size to 0 (MarcoFalke) -- #7236 `02676c5` Use createrawtx locktime parm in txn_clone (dgenr8) -- #7212 `326ffed` Adds unittests for CAddrMan and CAddrinfo, removes source of non-determinism (EthanHeilman) -- #7490 `d007511` tests: Remove May15 test (laanwj) -- #7531 `18cb2d5` Add bip68-sequence.py to extended rpc tests (btcdrak) -- #7536 `ce5fc02` test: test leading spaces for ParseHex (laanwj) -- #7620 `1b68de3` [travis] Only run check-doc.py once (MarcoFalke) -- #7455 `7f96671` [travis] Exit early when check-doc.py fails (MarcoFalke) -- #7667 `56d2c4e` Move GetTempPath() to testutil (musalbas) -- #7517 `f1ca891` test: script_error checking in script_invalid tests (laanwj) -- #7684 `3d0dfdb` Extend tests (MarcoFalke) -- #7697 `622fe6c` Tests: make prioritise_transaction.py more robust (sdaftuar) -- #7709 `efde86b` Tests: fix missing import in mempool_packages (sdaftuar) -- #7702 `29e1131` Add tests verifychain, lockunspent, getbalance, listsinceblock (MarcoFalke) -- #7720 `3b4324b` rpc-test: Normalize assert() (MarcoFalke) -- #7757 `26794d4` wallet: Wait for reindex to catch up (MarcoFalke) -- #7764 `a65b36c` Don't run pruning.py twice (MarcoFalke) -- #7773 `7c80e72` Fix comments in tests (btcdrak) -- #7489 `e9723cb` tests: Make proxy_test work on travis servers without IPv6 (laanwj) -- #7801 `70ac71b` Remove misleading "errorString syntax" (MarcoFalke) -- #7803 `401c65c` maxblocksinflight: Actually enable test (MarcoFalke) -- #7802 `3bc71e1` httpbasics: Actually test second connection (MarcoFalke) -- #7849 `ab8586e` tests: add varints_bitpatterns test (laanwj) -- #7846 `491171f` Clean up lockorder data of destroyed mutexes (sipa) -- #7853 `6ef5e00` py2: Unfiddle strings into bytes explicitly (MarcoFalke) -- #7878 `53adc83` [test] bctest.py: Revert faa41ee (MarcoFalke) -- #7798 `cabba24` [travis] Print the commit which was evaluated (MarcoFalke) -- #7833 `b1bf511` tests: Check Content-Type header returned from RPC server (laanwj) -- #7851 `fa9d86f` pull-tester: Don't mute zmq ImportError (MarcoFalke) -- #7822 `0e6fd5e` Add listunspent() test for spendable/unspendable UTXO (jpdffonseca) -- #7912 `59ad568` Tests: Fix deserialization of reject messages (sdaftuar) -- #7941 `0ea3941` Fixing comment in script_test.json test case (Christewart) -- #7807 `0ad1041` Fixed miner test values, gave constants for less error-prone values (instagibbs) -- #7980 `88b77c7` Smartfees: Properly use ordered dict (MarcoFalke) -- #7814 `77b637f` Switch to py3 (MarcoFalke) -- #8030 `409a8a1` Revert fatal-ness of missing python-zmq (laanwj) -- #8018 `3e90fe6` Autofind rpc tests --srcdir (jonasschnelli) -- #8016 `5767e80` Fix multithread CScheduler and reenable test (paveljanik) -- #7972 `423ca30` pull-tester: Run rpc test in parallel (MarcoFalke) -- #8039 `69b3a6d` Bench: Add crypto hash benchmarks (laanwj) -- #8041 `5b736dd` Fix bip9-softforks blockstore issue (MarcoFalke) -- #7994 `1f01443` Add op csv tests to script_tests.json (Christewart) -- #8038 `e2bf830` Various minor fixes (MarcoFalke) -- #8072 `1b87e5b` Travis: 'make check' in parallel and verbose (theuni) -- #8056 `8844ef1` Remove hardcoded "4 nodes" from test_framework (MarcoFalke) -- #8047 `37f9a1f` Test_framework: Set wait-timeout for bitcoind procs (MarcoFalke) -- #8095 `6700cc9` Test framework: only cleanup on successful test runs (sdaftuar) -- #8098 `06bd4f6` Test_framework: Append portseed to tmpdir (MarcoFalke) -- #8104 `6ff2c8d` Add timeout to sync_blocks() and sync_mempools() (sdaftuar) -- #8111 `61b8684` Benchmark SipHash (sipa) -- #8107 `52b803e` Bench: Added base58 encoding/decoding benchmarks (yurizhykin) -- #8115 `0026e0e` Avoid integer division in the benchmark inner-most loop (gmaxwell) -- #8090 `a2df115` Adding P2SH(p2pkh) script test case (Christewart) -- #7992 `ec45cc5` Extend #7956 with one more test (TheBlueMatt) -- #8139 `ae5575b` Fix interrupted HTTP RPC connection workaround for Python 3.5+ (sipa) -- #8164 `0f24eaf` [Bitcoin-Tx] fix missing test fixtures, fix 32bit atoi issue (jonasschnelli) -- #8166 `0b5279f` Src/test: Do not shadow local variables (paveljanik) -- #8141 `44c1b1c` Continuing port of java comparison tool (mrbandrews) -- #8201 `36b7400` fundrawtransaction: Fix race, assert amounts (MarcoFalke) -- #8214 `ed2cd59` Mininode: fail on send_message instead of silent return (MarcoFalke) -- #8215 `a072d1a` Don't use floating point in wallet tests (MarcoFalke) -- #8066 `65c2058` Test_framework: Use different rpc_auth_pair for each node (MarcoFalke) -- #8216 `0d41d70` Assert 'changePosition out of bounds' (MarcoFalke) -- #8222 `961893f` Enable mempool consistency checks in unit tests (sipa) -- #7751 `84370d5` test_framework: python3.4 authproxy compat (laanwj) -- #7744 `d8e862a` test_framework: detect failure of bitcoind startup (laanwj) -- #8280 `115735d` Increase sync_blocks() timeouts in pruning.py (MarcoFalke) -- #8340 `af9b7a9` Solve trivial merge conflict in p2p-segwit.py (MarcoFalke) -- #8067 `3e4cf8f` Travis: use slim generic image, and some fixups (theuni) -- #7951 `5c7df70` Test_framework: Properly print exception (MarcoFalke) -- #8070 `7771aa5` Remove non-determinism which is breaking net_tests #8069 (EthanHeilman) -- #8309 `bb2646a` Add wallet-hd test (MarcoFalke) -- #8444 `cd0910b` Fix p2p-feefilter.py for changed tx relay behavior (sdaftuar) - -### Mining - -- #7507 `11c7699` Remove internal miner (Leviathn) -- #7663 `c87f51e` Make the generate RPC call function for non-regtest (sipa) -- #7671 `e2ebd25` Add generatetoaddress RPC to mine to an address (achow101) -- #7935 `66ed450` Versionbits: GBT support (luke-jr) -- #7600 `66db2d6` Select transactions using feerate-with-ancestors (sdaftuar) -- #8295 `f5660d3` Mining-related fixups for 0.13.0 (sdaftuar) -- #7796 `536b75e` Add support for negative fee rates, fixes `prioritizetransaction` (MarcoFalke) -- #8362 `86edc20` Scale legacy sigop count in CreateNewBlock (sdaftuar) -- #8489 `8b0eee6` Bugfix: Use pre-BIP141 sigops until segwit activates (GBT) (luke-jr) - -### Documentation and miscellaneous - -- #7423 `69e2a40` Add example for building with constrained resources (jarret) -- #8254 `c2c69ed` Add OSX ZMQ requirement to QA readme (fanquake) -- #8203 `377d131` Clarify documentation for running a tor node (nathaniel-mahieu) -- #7428 `4b12266` Add example for listing ./configure flags (nathaniel-mahieu) -- #7847 `3eae681` Add arch linux build example (mruddy) -- #7968 `ff69aaf` Fedora build requirements (wtogami) -- #8013 `fbedc09` Fedora build requirements, add gcc-c++ and fix typo (wtogami) -- #8009 `fbd8478` Fixed invalid example paths in gitian-building.md (JeremyRand) -- #8240 `63fbdbc` Mention Windows XP end of support in release notes (laanwj) -- #8303 `5077d2c` Update bips.md for CSV softfork (fanquake) -- #7789 `e0b3e19` Add note about using the Qt official binary installer (paveljanik) -- #7791 `e30a5b0` Change Precise to Trusty in gitian-building.md (JeremyRand) -- #7838 `8bb5d3d` Update gitian build guide to debian 8.4.0 (fanquake) -- #7855 `b778e59` Replace precise with trusty (MarcoFalke) -- #7975 `fc23fee` Update bitcoin-core GitHub links (MarcoFalke) -- #8034 `e3a8207` Add basic git squash workflow (fanquake) -- #7813 `214ec0b` Update port in tor.md (MarcoFalke) -- #8193 `37c9830` Use Debian 8.5 in the gitian-build guide (fanquake) -- #8261 `3685e0c` Clarify help for `getblockchaininfo` (paveljanik) -- #7185 `ea0f5a2` Note that reviewers should mention the id of the commits they reviewed (pstratem) -- #7290 `c851d8d` [init] Add missing help for args (MarcoFalke) -- #7281 `f9fd4c2` Improve CheckInputs() comment about sig verification (petertodd) -- #7417 `1e06bab` Minor improvements to the release process (PRabahy) -- #7444 `4cdbd42` Improve block validity/ConnectBlock() comments (petertodd) -- #7527 `db2e1c0` Fix and cleanup listreceivedbyX documentation (instagibbs) -- #7541 `b6e00af` Clarify description of blockindex (pinheadmz) -- #7590 `f06af57` Improving wording related to Boost library requirements [updated] (jonathancross) -- #7635 `0fa88ef` Add dependency info to test docs (elliotolds) -- #7609 `3ba07bd` RPM spec file project (AliceWonderMiscreations) -- #7850 `229a17c` Removed call to `TryCreateDirectory` from `GetDefaultDataDir` in `src/util.cpp` (alexreg) -- #7888 `ec870e1` Prevector: fix 2 bugs in currently unreached code paths (kazcw) -- #7922 `90653bc` CBase58Data::SetString: cleanse the full vector (kazcw) -- #7881 `c4e8390` Update release process (laanwj) -- #7952 `a9c8b74` Log invalid block hash to make debugging easier (paveljanik) -- #7974 `8206835` More comments on the design of AttemptToEvictConnection (gmaxwell) -- #7795 `47a7cfb` UpdateTip: log only one line at most per block (laanwj) -- #8110 `e7e25ea` Add benchmarking notes (fanquake) -- #8121 `58f0c92` Update implemented BIPs list (fanquake) -- #8029 `58725ba` Simplify OS X build notes (fanquake) -- #8143 `d46b8b5` comment nit: miners don't vote (instagibbs) -- #8136 `22e0b35` Log/report in 10% steps during VerifyDB (jonasschnelli) -- #8168 `d366185` util: Add ParseUInt32 and ParseUInt64 (laanwj) -- #8178 `f7b1bfc` Add git and github tips and tricks to developer notes (sipa) -- #8177 `67db011` developer notes: updates for C++11 (kazcw) -- #8229 `8ccdac1` [Doc] Update OS X build notes for 10.11 SDK (fanquake) -- #8233 `9f1807a` Mention Linux ARM executables in release process and notes (laanwj) -- #7540 `ff46dd4` Rename OP_NOP3 to OP_CHECKSEQUENCEVERIFY (btcdrak) -- #8289 `26316ff` bash-completion: Adapt for 0.12 and 0.13 (roques) -- #7453 `3dc3149` Missing patches from 0.12 (MarcoFalke) -- #7113 `54a550b` Switch to a more efficient rolling Bloom filter (sipa) -- #7257 `de9e5ea` Combine common error strings for different options so translations can be shared and reused (luke-jr) -- #7304 `b8f485c` [contrib] Add clang-format-diff.py (MarcoFalke) -- #7378 `e6f97ef` devtools: replace github-merge with python version (laanwj) -- #7395 `0893705` devtools: show pull and commit information in github-merge (laanwj) -- #7402 `6a5932b` devtools: github-merge get toplevel dir without extra whitespace (achow101) -- #7425 `20a408c` devtools: Fix utf-8 support in messages for github-merge (laanwj) -- #7632 `409f843` Delete outdated test-patches reference (Lewuathe) -- #7662 `386f438` remove unused NOBLKS_VERSION_{START,END} constants (rat4) -- #7737 `aa0d2b2` devtools: make github-merge.py use py3 (laanwj) -- #7781 `55db5f0` devtools: Auto-set branch to merge to in github-merge (laanwj) -- #7934 `f17032f` Improve rolling bloom filter performance and benchmark (sipa) -- #8004 `2efe38b` signal handling: fReopenDebugLog and fRequestShutdown should be type sig_atomic_t (catilac) -- #7713 `f6598df` Fixes for verify-commits script (petertodd) -- #8412 `8360d5b` libconsensus: Expose a flag for BIP112 (jtimon) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- 21E14 -- accraze -- Adam Brown -- Alexander Regueiro -- Alex Morcos -- Alfie John -- Alice Wonder -- AlSzacrel -- Andrew Chow -- Andrés G. Aragoneses -- Bob McElrath -- BtcDrak -- calebogden -- Cédric Félizard -- Chirag Davé -- Chris Moore -- Chris Stewart -- Christian von Roques -- Chris Wheeler -- Cory Fields -- crowning- -- Daniel Cousens -- Daniel Kraft -- Denis Lukianov -- Elias Rohrer -- Elliot Olds -- Eric Shaw -- error10 -- Ethan Heilman -- face -- fanquake -- Francesco 'makevoid' Canessa -- fsb4000 -- Gavin Andresen -- gladoscc -- Gregory Maxwell -- Gregory Sanders -- instagibbs -- James O'Beirne -- Jannes Faber -- Jarret Dyrbye -- Jeremy Rand -- jloughry -- jmacwhyte -- Joao Fonseca -- Johnson Lau -- Jonas Nick -- Jonas Schnelli -- Jonathan Cross -- João Barbosa -- Jorge Timón -- Kaz Wesley -- Kefkius -- kirkalx -- Krzysztof Jurewicz -- Leviathn -- lewuathe -- Luke Dashjr -- Luv Khemani -- Marcel Krüger -- Marco Falke -- Mark Friedenbach -- Matt -- Matt Bogosian -- Matt Corallo -- Matthew English -- Matthew Zipkin -- mb300sd -- Mitchell Cash -- mrbandrews -- mruddy -- Murch -- Mustafa -- Nathaniel Mahieu -- Nicolas Dorier -- Patrick Strateman -- Paul Rabahy -- paveljanik -- Pavel Janík -- Pavel Vasin -- Pedro Branco -- Peter Todd -- Philip Kaufmann -- Pieter Wuille -- Prayag Verma -- ptschip -- Puru -- randy-waterhouse -- R E Broadley -- Rusty Russell -- Suhas Daftuar -- Suriyaa Kudo -- TheLazieR Yip -- Thomas Kerin -- Tom Harding -- Tyler Hardin -- UdjinM6 -- Warren Togami -- Will Binns -- Wladimir J. van der Laan -- Yuri Zhykin - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.13.1.md b/doc/release-notes/release-notes-0.13.1.md deleted file mode 100644 index 75c2d61be8..0000000000 --- a/doc/release-notes/release-notes-0.13.1.md +++ /dev/null @@ -1,410 +0,0 @@ -Bitcoin Core version 0.13.1 is now available from: - - - -This is a new minor version release, including activation parameters for the -segwit softfork, various bugfixes and performance improvements, as well as -updated translations. - -Please report bugs using the issue tracker at github: - - - -To receive security and update notifications, please subscribe to: - - - -Compatibility -============== - -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), -an OS initially released in 2001. This means that not even critical security -updates will be released anymore. Without security updates, using a bitcoin -wallet on a XP machine is irresponsible at least. - -In addition to that, with 0.12.x there have been varied reports of Bitcoin Core -randomly crashing on Windows XP. It is [not clear](https://github.com/bitcoin/bitcoin/issues/7681#issuecomment-217439891) -what the source of these crashes is, but it is likely that upstream -libraries such as Qt are no longer being tested on XP. - -We do not have time nor resources to provide support for an OS that is -end-of-life. From 0.13.0 on, Windows XP is no longer supported. Users are -suggested to upgrade to a newer version of Windows, or install an alternative OS -that is supported. - -No attempt is made to prevent installing or running the software on Windows XP, -you can still do so at your own risk, but do not expect it to work: do not -report issues about Windows XP to the issue tracker. - -From 0.13.1 onwards OS X 10.7 is no longer supported. 0.13.0 was intended to work on 10.7+, -but severe issues with the libc++ version on 10.7.x keep it from running reliably. -0.13.1 now requires 10.8+, and will communicate that to 10.7 users, rather than crashing unexpectedly. - -Notable changes -=============== - -Segregated witness soft fork ----------------------------- - -Segregated witness (segwit) is a soft fork that, if activated, will -allow transaction-producing software to separate (segregate) transaction -signatures (witnesses) from the part of the data in a transaction that is -covered by the txid. This provides several immediate benefits: - -- **Elimination of unwanted transaction malleability:** Segregating the witness - allows both existing and upgraded software to calculate the transaction - identifier (txid) of transactions without referencing the witness, which can - sometimes be changed by third-parties (such as miners) or by co-signers in a - multisig spend. This solves all known cases of unwanted transaction - malleability, which is a problem that makes programming Bitcoin wallet - software more difficult and which seriously complicates the design of smart - contracts for Bitcoin. - -- **Capacity increase:** Segwit transactions contain new fields that are not - part of the data currently used to calculate the size of a block, which - allows a block containing segwit transactions to hold more data than allowed - by the current maximum block size. Estimates based on the transactions - currently found in blocks indicate that if all wallets switch to using - segwit, the network will be able to support about 70% more transactions. The - network will also be able to support more of the advanced-style payments - (such as multisig) than it can support now because of the different weighting - given to different parts of a transaction after segwit activates (see the - following section for details). - -- **Weighting data based on how it affects node performance:** Some parts of - each Bitcoin block need to be stored by nodes in order to validate future - blocks; other parts of a block can be immediately forgotten (pruned) or used - only for helping other nodes sync their copy of the block chain. One large - part of the immediately prunable data are transaction signatures (witnesses), - and segwit makes it possible to give a different "weight" to segregated - witnesses to correspond with the lower demands they place on node resources. - Specifically, each byte of a segregated witness is given a weight of 1, each - other byte in a block is given a weight of 4, and the maximum allowed weight - of a block is 4 million. Weighting the data this way better aligns the most - profitable strategy for creating blocks with the long-term costs of block - validation. - -- **Signature covers value:** A simple improvement in the way signatures are - generated in segwit simplifies the design of secure signature generators - (such as hardware wallets), reduces the amount of data the signature - generator needs to download, and allows the signature generator to operate - more quickly. This is made possible by having the generator sign the amount - of bitcoins they think they are spending, and by having full nodes refuse to - accept those signatures unless the amount of bitcoins being spent is exactly - the same as was signed. For non-segwit transactions, wallets instead had to - download the complete previous transactions being spent for every payment - they made, which could be a slow operation on hardware wallets and in other - situations where bandwidth or computation speed was constrained. - -- **Linear scaling of sighash operations:** In 2015 a block was produced that - required about 25 seconds to validate on modern hardware because of the way - transaction signature hashes are performed. Other similar blocks, or blocks - that could take even longer to validate, can still be produced today. The - problem that caused this can't be fixed in a soft fork without unwanted - side-effects, but transactions that opt-in to using segwit will now use a - different signature method that doesn't suffer from this problem and doesn't - have any unwanted side-effects. - -- **Increased security for multisig:** Bitcoin addresses (both P2PKH addresses - that start with a '1' and P2SH addresses that start with a '3') use a hash - function known as RIPEMD-160. For P2PKH addresses, this provides about 160 - bits of security---which is beyond what cryptographers believe can be broken - today. But because P2SH is more flexible, only about 80 bits of security is - provided per address. Although 80 bits is very strong security, it is within - the realm of possibility that it can be broken by a powerful adversary. - Segwit allows advanced transactions to use the SHA256 hash function instead, - which provides about 128 bits of security (that is 281 trillion times as - much security as 80 bits and is equivalent to the maximum bits of security - believed to be provided by Bitcoin's choice of parameters for its Elliptic - Curve Digital Security Algorithm [ECDSA].) - -- **More efficient almost-full-node security** Satoshi Nakamoto's original - Bitcoin paper describes a method for allowing newly-started full nodes to - skip downloading and validating some data from historic blocks that are - protected by large amounts of proof of work. Unfortunately, Nakamoto's - method can't guarantee that a newly-started node using this method will - produce an accurate copy of Bitcoin's current ledger (called the UTXO set), - making the node vulnerable to falling out of consensus with other nodes. - Although the problems with Nakamoto's method can't be fixed in a soft fork, - Segwit accomplishes something similar to his original proposal: it makes it - possible for a node to optionally skip downloading some blockchain data - (specifically, the segregated witnesses) while still ensuring that the node - can build an accurate copy of the UTXO set for the block chain with the most - proof of work. Segwit enables this capability at the consensus layer, but - note that Bitcoin Core does not provide an option to use this capability as - of this 0.13.1 release. - -- **Script versioning:** Segwit makes it easy for future soft forks to allow - Bitcoin users to individually opt-in to almost any change in the Bitcoin - Script language when those users receive new transactions. Features - currently being researched by Bitcoin Core contributors that may use this - capability include support for Schnorr signatures, which can improve the - privacy and efficiency of multisig transactions (or transactions with - multiple inputs), and Merklized Abstract Syntax Trees (MAST), which can - improve the privacy and efficiency of scripts with two or more conditions. - Other Bitcoin community members are studying several other improvements - that can be made using script versioning. - -Activation for the segwit soft fork is being managed using BIP9 -versionbits. Segwit's version bit is bit 1, and nodes will begin -tracking which blocks signal support for segwit at the beginning of the -first retarget period after segwit's start date of 15 November 2016. If -95% of blocks within a 2,016-block retarget period (about two weeks) -signal support for segwit, the soft fork will be locked in. After -another 2,016 blocks, segwit will activate. - -For more information about segwit, please see the [segwit FAQ][], the -[segwit wallet developers guide][] or BIPs [141][BIP141], [143][BIP143], -[144][BIP144], and [145][BIP145]. If you're a miner or mining pool -operator, please see the [versionbits FAQ][] for information about -signaling support for a soft fork. - -[Segwit FAQ]: https://bitcoincore.org/en/2016/01/26/segwit-benefits/ -[segwit wallet developers guide]: https://bitcoincore.org/en/segwit_wallet_dev/ -[BIP141]: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki -[BIP143]: https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki -[BIP144]: https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki -[BIP145]: https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki -[versionbits FAQ]: https://bitcoincore.org/en/2016/06/08/version-bits-miners-faq/ - - -Null dummy soft fork -------------------- - -Combined with the segwit soft fork is an additional change that turns a -long-existing network relay policy into a consensus rule. The -`OP_CHECKMULTISIG` and `OP_CHECKMULTISIGVERIFY` opcodes consume an extra -stack element ("dummy element") after signature validation. The dummy -element is not inspected in any manner, and could be replaced by any -value without invalidating the script. - -Because any value can be used for this dummy element, it's possible for -a third-party to insert data into other people's transactions, changing -the transaction's txid (called transaction malleability) and possibly -causing other problems. - -Since Bitcoin Core 0.10.0, nodes have defaulted to only relaying and -mining transactions whose dummy element was a null value (0x00, also -called OP_0). The null dummy soft fork turns this relay rule into a -consensus rule both for non-segwit transactions and segwit transactions, -so that this method of mutating transactions is permanently eliminated -from the network. - -Signaling for the null dummy soft fork is done by signaling support -for segwit, and the null dummy soft fork will activate at the same time -as segwit. - -For more information, please see [BIP147][]. - -[BIP147]: https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki - -Low-level RPC changes ---------------------- - -- `importprunedfunds` only accepts two required arguments. Some versions accept - an optional third arg, which was always ignored. Make sure to never pass more - than two arguments. - - -Linux ARM builds ----------------- - -With the 0.13.0 release, pre-built Linux ARM binaries were added to the set of -uploaded executables. Additional detail on the ARM architecture targeted by each -is provided below. - -The following extra files can be found in the download directory or torrent: - -- `bitcoin-${VERSION}-arm-linux-gnueabihf.tar.gz`: Linux binaries targeting - the 32-bit ARMv7-A architecture. -- `bitcoin-${VERSION}-aarch64-linux-gnu.tar.gz`: Linux binaries targeting - the 64-bit ARMv8-A architecture. - -ARM builds are still experimental. If you have problems on a certain device or -Linux distribution combination please report them on the bug tracker, it may be -possible to resolve them. Note that the device you use must be (backward) -compatible with the architecture targeted by the binary that you use. -For example, a Raspberry Pi 2 Model B or Raspberry Pi 3 Model B (in its 32-bit -execution state) device, can run the 32-bit ARMv7-A targeted binary. However, -no model of Raspberry Pi 1 device can run either binary because they are all -ARMv6 architecture devices that are not compatible with ARMv7-A or ARMv8-A. - -Note that Android is not considered ARM Linux in this context. The executables -are not expected to work out of the box on Android. - - -0.13.1 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### Consensus -- #8636 `9dfa0c8` Implement NULLDUMMY softfork (BIP147) (jl2012) -- #8848 `7a34a46` Add NULLDUMMY verify flag in bitcoinconsensus.h (jl2012) -- #8937 `8b66659` Define start and end time for segwit deployment (sipa) - -### RPC and other APIs -- #8581 `526d2b0` Drop misleading option in importprunedfunds (MarcoFalke) -- #8699 `a5ec248` Remove createwitnessaddress RPC command (jl2012) -- #8780 `794b007` Deprecate getinfo (MarcoFalke) -- #8832 `83ad563` Throw JSONRPCError when utxo set can not be read (MarcoFalke) -- #8884 `b987348` getblockchaininfo help: pruneheight is the lowest, not highest, block (luke-jr) -- #8858 `3f508ed` rpc: Generate auth cookie in hex instead of base64 (laanwj) -- #8951 `7c2bf4b` RPC/Mining: getblocktemplate: Update and fix formatting of help (luke-jr) - -### Block and transaction handling -- #8611 `a9429ca` Reduce default number of blocks to check at startup (sipa) -- #8634 `3e80ab7` Add policy: null signature for failed CHECK(MULTI)SIG (jl2012) -- #8525 `1672225` Do not store witness txn in rejection cache (sipa) -- #8499 `9777fe1` Add several policy limits and disable uncompressed keys for segwit scripts (jl2012) -- #8526 `0027672` Make non-minimal OP_IF/NOTIF argument non-standard for P2WSH (jl2012) -- #8524 `b8c79a0` Precompute sighashes (sipa) -- #8651 `b8c79a0` Predeclare PrecomputedTransactionData as struct (sipa) - -### P2P protocol and network code -- #8740 `42ea51a` No longer send local address in addrMe (laanwj) -- #8427 `69d1cd2` Ignore `notfound` P2P messages (laanwj) -- #8573 `4f84082` Set jonasschnellis dns-seeder filter flag (jonasschnelli) -- #8712 `23feab1` Remove maxuploadtargets recommended minimum (jonasschnelli) -- #8862 `7ae6242` Fix a few cases where messages were sent after requested disconnect (theuni) -- #8393 `fe1975a` Support for compact blocks together with segwit (sipa) -- #8282 `2611ad7` Feeler connections to increase online addrs in the tried table (EthanHeilman) -- #8612 `2215c22` Check for compatibility with download in FindNextBlocksToDownload (sipa) -- #8606 `bbf379b` Fix some locks (sipa) -- #8594 `ab295bb` Do not add random inbound peers to addrman (gmaxwell) -- #8940 `5b4192b` Add x9 service bit support to dnsseed.bluematt.me, seed.bitcoinstats.com (TheBlueMatt, cdecker) -- #8944 `685e4c7` Remove bogus assert on number of oubound connections. (TheBlueMatt) -- #8949 `0dbc48a` Be more agressive in getting connections to peers with relevant services (gmaxwell) - -### Build system -- #8293 `fa5b249` Allow building libbitcoinconsensus without any univalue (luke-jr) -- #8492 `8b0bdd3` Allow building bench_bitcoin by itself (luke-jr) -- #8563 `147003c` Add configure check for -latomic (ajtowns) -- #8626 `ea51b0f` Berkeley DB v6 compatibility fix (netsafe) -- #8520 `75f2065` Remove check for `openssl/ec.h` (laanwj) - -### GUI -- #8481 `d9f0d4e` Fix minimize and close bugs (adlawren) -- #8487 `a37cec5` Persist the datadir after option reset (achow101) -- #8697 `41fd852` Fix op order to append first alert (rodasmith) -- #8678 `8e03382` Fix UI bug that could result in paying unexpected fee (jonasschnelli) -- #8911 `7634d8e` Translate all files, even if wallet disabled (laanwj) -- #8540 `1db3352` Fix random segfault when closing "Choose data directory" dialog (laanwj) -- #7579 `f1c0d78` Show network/chain errors in the GUI (jonasschnelli) - -### Wallet -- #8443 `464dedd` Trivial cleanup of HD wallet changes (jonasschnelli) -- #8539 `cb07f19` CDB: fix debug output (crowning-) -- #8664 `091cdeb` Fix segwit-related wallet bug (sdaftuar) -- #8693 `c6a6291` Add witness address to address book (instagibbs) -- #8765 `6288659` Remove "unused" ThreadFlushWalletDB from removeprunedfunds (jonasschnelli) - -### Tests and QA -- #8713 `ae8c7df` create_cache: Delete temp dir when done (MarcoFalke) -- #8716 `e34374e` Check legacy wallet as well (MarcoFalke) -- #8750 `d6ebe13` Refactor RPCTestHandler to prevent TimeoutExpired (MarcoFalke) -- #8652 `63462c2` remove root test directory for RPC tests (yurizhykin) -- #8724 `da94272` walletbackup: Sync blocks inside the loop (MarcoFalke) -- #8400 `bea02dc` enable rpcbind_test (yurizhykin) -- #8417 `f70be14` Add walletdump RPC test (including HD- & encryption-tests) (jonasschnelli) -- #8419 `a7aa3cc` Enable size accounting in mining unit tests (sdaftuar) -- #8442 `8bb1efd` Rework hd wallet dump test (MarcoFalke) -- #8528 `3606b6b` Update p2p-segwit.py to reflect correct behavior (instagibbs) -- #8531 `a27cdd8` abandonconflict: Use assert_equal (MarcoFalke) -- #8667 `6b07362` Fix SIGHASH_SINGLE bug in test_framework SignatureHash (jl2012) -- #8673 `03b0196` Fix obvious assignment/equality error in test (JeremyRubin) -- #8739 `cef633c` Fix broken sendcmpct test in p2p-compactblocks.py (sdaftuar) -- #8418 `ff893aa` Add tests for compact blocks (sdaftuar) -- #8803 `375437c` Ping regularly in p2p-segwit.py to keep connection alive (jl2012) -- #8827 `9bbe66e` Split up slow RPC calls to avoid pruning test timeouts (sdaftuar) -- #8829 `2a8bca4` Add bitcoin-tx JSON tests (jnewbery) -- #8834 `1dd1783` blockstore: Switch to dumb dbm (MarcoFalke) -- #8835 `d87227d` nulldummy.py: Don't run unused code (MarcoFalke) -- #8836 `eb18cc1` bitcoin-util-test.py should fail if the output file is empty (jnewbery) -- #8839 `31ab2f8` Avoid ConnectionResetErrors during RPC tests (laanwj) -- #8840 `cbc3fe5` Explicitly set encoding to utf8 when opening text files (laanwj) -- #8841 `3e4abb5` Fix nulldummy test (jl2012) -- #8854 `624a007` Fix race condition in p2p-compactblocks test (sdaftuar) -- #8857 `1f60d45` mininode: Only allow named args in wait_until (MarcoFalke) -- #8860 `0bee740` util: Move wait_bitcoinds() into stop_nodes() (MarcoFalke) -- #8882 `b73f065` Fix race conditions in p2p-compactblocks.py and sendheaders.py (sdaftuar) -- #8904 `cc6f551` Fix compact block shortids for a test case (dagurval) - -### Documentation -- #8754 `0e2c6bd` Target protobuf 2.6 in OS X build notes. (fanquake) -- #8461 `b17a3f9` Document return value of networkhashps for getmininginfo RPC endpoint (jlopp) -- #8512 `156e305` Corrected JSON typo on setban of net.cpp (sevastos) -- #8683 `8a7d7ff` Fix incorrect file name bitcoin.qrc (bitcoinsSG) -- #8891 `5e0dd9e` Update bips.md for Segregated Witness (fanquake) -- #8545 `863ae74` Update git-subtree-check.sh README (MarcoFalke) -- #8607 `486650a` Fix doxygen off-by-one comments, fix typos (MarcoFalke) -- #8560 `c493f43` Fix two VarInt examples in serialize.h (cbarcenas) -- #8737 `084cae9` UndoReadFromDisk works on undo files (rev), not on block files (paveljanik) -- #8625 `0a35573` Clarify statement about parallel jobs in rpc-tests.py (isle2983) -- #8624 `0e6d753` build: Mention curl (MarcoFalke) -- #8604 `b09e13c` build,doc: Update for 0.13.0+ and OpenBSD 5.9 (laanwj) -- #8939 `06d15fb` Update implemented bips for 0.13.1 (sipa) - -### Miscellaneous -- #8742 `d31ac72` Specify Protobuf version 2 in paymentrequest.proto (fanquake) -- #8414,#8558,#8676,#8700,#8701,#8702 Add missing copyright headers (isle2983, kazcw) -- #8899 `4ed2627` Fix wake from sleep issue with Boost 1.59.0 (fanquake) -- #8817 `bcf3806` update bitcoin-tx to output witness data (jnewbery) -- #8513 `4e5fc31` Fix a type error that would not compile on OSX. (JeremyRubin) -- #8392 `30eac2d` Fix several node initialization issues (sipa) -- #8548 `305d8ac` Use `__func__` to get function name for output printing (MarcoFalke) -- #8291 `a987431` [util] CopyrightHolders: Check for untranslated substitution (MarcoFalke) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- adlawren -- Alexey Vesnin -- Anders Øyvind Urke-Sætre -- Andrew Chow -- Anthony Towns -- BtcDrak -- Chris Stewart -- Christian Barcenas -- Christian Decker -- Cory Fields -- crowning- -- Dagur Valberg Johannsson -- David A. Harding -- Eric Lombrozo -- Ethan Heilman -- fanquake -- Gaurav Rana -- Gregory Maxwell -- instagibbs -- isle2983 -- Jameson Lopp -- Jeremy Rubin -- jnewbery -- Johnson Lau -- Jonas Schnelli -- jonnynewbs -- Justin Camarena -- Kaz Wesley -- leijurv -- Luke Dashjr -- MarcoFalke -- Marty Jones -- Matt Corallo -- Micha -- Michael Ford -- mruddy -- Pavel Janík -- Pieter Wuille -- rodasmith -- Sev -- Suhas Daftuar -- whythat -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.13.2.md b/doc/release-notes/release-notes-0.13.2.md deleted file mode 100644 index 45fff5c8bb..0000000000 --- a/doc/release-notes/release-notes-0.13.2.md +++ /dev/null @@ -1,178 +0,0 @@ -Bitcoin Core version 0.13.2 is now available from: - - - -This is a new minor version release, including various bugfixes and -performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at github: - - - -To receive security and update notifications, please subscribe to: - - - -Compatibility -============== - -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), -an OS initially released in 2001. This means that not even critical security -updates will be released anymore. Without security updates, using a bitcoin -wallet on a XP machine is irresponsible at least. - -In addition to that, with 0.12.x there have been varied reports of Bitcoin Core -randomly crashing on Windows XP. It is [not clear](https://github.com/bitcoin/bitcoin/issues/7681#issuecomment-217439891) -what the source of these crashes is, but it is likely that upstream -libraries such as Qt are no longer being tested on XP. - -We do not have time nor resources to provide support for an OS that is -end-of-life. From 0.13.0 on, Windows XP is no longer supported. Users are -suggested to upgrade to a newer version of Windows, or install an alternative OS -that is supported. - -No attempt is made to prevent installing or running the software on Windows XP, -you can still do so at your own risk, but do not expect it to work: do not -report issues about Windows XP to the issue tracker. - -From 0.13.1 onwards OS X 10.7 is no longer supported. 0.13.0 was intended to work on 10.7+, -but severe issues with the libc++ version on 10.7.x keep it from running reliably. -0.13.1 now requires 10.8+, and will communicate that to 10.7 users, rather than crashing unexpectedly. - -Notable changes -=============== - -Change to wallet handling of mempool rejection ------------------------------------------------ - -When a newly created transaction failed to enter the mempool due to -the limits on chains of unconfirmed transactions the sending RPC -calls would return an error. The transaction would still be queued -in the wallet and, once some of the parent transactions were -confirmed, broadcast after the software was restarted. - -This behavior has been changed to return success and to reattempt -mempool insertion at the same time transaction rebroadcast is -attempted, avoiding a need for a restart. - -Transactions in the wallet which cannot be accepted into the mempool -can be abandoned with the previously existing abandontransaction RPC -(or in the GUI via a context menu on the transaction). - - -0.13.2 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### Consensus -- #9293 `e591c10` [0.13 Backport #9053] IBD using chainwork instead of height and not using header timestamp (gmaxwell) -- #9053 `5b93eee` IBD using chainwork instead of height and not using header timestamps (gmaxwell) - -### RPC and other APIs -- #8845 `1d048b9` Don't return the address of a P2SH of a P2SH (jnewbery) -- #9041 `87fbced` keypoololdest denote Unix epoch, not GMT (s-matthew-english) -- #9122 `f82c81b` fix getnettotals RPC description about timemillis (visvirial) -- #9042 `5bcb05d` [rpc] ParseHash: Fail when length is not 64 (MarcoFalke) -- #9194 `f26dab7` Add option to return non-segwit serialization via rpc (instagibbs) -- #9347 `b711390` [0.13.2] wallet/rpc backports (MarcoFalke) -- #9292 `c365556` Complain when unknown rpcserialversion is specified (sipa) -- #9322 `49a612f` [qa] Don't set unknown rpcserialversion (MarcoFalke) - -### Block and transaction handling -- #8357 `ce0d817` [mempool] Fix relaypriority calculation error (maiiz) -- #9267 `0a4aa87` [0.13 backport #9239] Disable fee estimates for a confirm target of 1 block (morcos) -- #9196 `0c09d9f` Send tip change notification from invalidateblock (ryanofsky) - -### P2P protocol and network code -- #8995 `9ef3875` Add missing cs_main lock to ::GETBLOCKTXN processing (TheBlueMatt) -- #9234 `94531b5` torcontrol: Explicitly request RSA1024 private key (laanwj) -- #8637 `2cad5db` Compact Block Tweaks (rebase of #8235) (sipa) -- #9058 `286e548` Fixes for p2p-compactblocks.py test timeouts on travis (#8842) (ryanofsky) -- #8865 `4c71fc4` Decouple peer-processing-logic from block-connection-logic (TheBlueMatt) -- #9117 `6fe3981` net: don't send feefilter messages before the version handshake is complete (theuni) -- #9188 `ca1fd75` Make orphan parent fetching ask for witnesses (gmaxwell) -- #9052 `3a3bcbf` Use RelevantServices instead of node_network in AttemptToEvict (gmaxwell) -- #9048 `9460771` [0.13 backport #9026] Fix handling of invalid compact blocks (sdaftuar) -- #9357 `03b6f62` [0.13 backport #9352] Attempt reconstruction from all compact block announcements (sdaftuar) -- #9189 `b96a8f7` Always add default_witness_commitment with GBT client support (sipa) -- #9253 `28d0f22` Fix calculation of number of bound sockets to use (TheBlueMatt) -- #9199 `da5a16b` Always drop the least preferred HB peer when adding a new one (gmaxwell) - -### Build system -- #9169 `d1b4da9` build: fix qt5.7 build under macOS (theuni) -- #9326 `a0f7ece` Update for OpenSSL 1.1 API (gmaxwell) -- #9224 `396c405` Prevent FD_SETSIZE error building on OpenBSD (ivdsangen) - -### GUI -- #8972 `6f86b53` Make warnings label selectable (jonasschnelli) (MarcoFalke) -- #9185 `6d70a73` Fix coincontrol sort issue (jonasschnelli) -- #9094 `5f3a12c` Use correct conversion function for boost::path datadir (laanwj) -- #8908 `4a974b2` Update bitcoin-qt.desktop (s-matthew-english) -- #9190 `dc46b10` Plug many memory leaks (laanwj) - -### Wallet -- #9290 `35174a0` Make RelayWalletTransaction attempt to AcceptToMemoryPool (gmaxwell) -- #9295 `43bcfca` Bugfix: Fundrawtransaction: don't terminate when keypool is empty (jonasschnelli) -- #9302 `f5d606e` Return txid even if ATMP fails for new transaction (sipa) -- #9262 `fe39f26` Prefer coins that have fewer ancestors, sanity check txn before ATMP (instagibbs) - -### Tests and QA -- #9159 `eca9b46` Wait for specific block announcement in p2p-compactblocks (ryanofsky) -- #9186 `dccdc3a` Fix use-after-free in scheduler tests (laanwj) -- #9168 `3107280` Add assert_raises_message to check specific error message (mrbandrews) -- #9191 `29435db` 0.13.2 Backports (MarcoFalke) -- #9077 `1d4c884` Increase wallet-dump RPC timeout (ryanofsky) -- #9098 `ecd7db5` Handle zombies and cluttered tmpdirs (MarcoFalke) -- #8927 `387ec9d` Add script tests for FindAndDelete in pre-segwit and segwit scripts (jl2012) -- #9200 `eebc699` bench: Fix subtle counting issue when rescaling iteration count (laanwj) - -### Miscellaneous -- #8838 `094848b` Calculate size and weight of block correctly in CreateNewBlock() (jnewbery) -- #8920 `40169dc` Set minimum required Boost to 1.47.0 (fanquake) -- #9251 `a710a43` Improvement of documentation of command line parameter 'whitelist' (wodry) -- #8932 `106da69` Allow bitcoin-tx to create v2 transactions (btcdrak) -- #8929 `12428b4` add software-properties-common (sigwo) -- #9120 `08d1c90` bug: Missed one "return false" in recent refactoring in #9067 (UdjinM6) -- #9067 `f85ee01` Fix exit codes (UdjinM6) -- #9340 `fb987b3` [0.13] Update secp256k1 subtree (MarcoFalke) -- #9229 `b172377` Remove calls to getaddrinfo_a (TheBlueMatt) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Morcos -- BtcDrak -- Cory Fields -- fanquake -- Gregory Maxwell -- Gregory Sanders -- instagibbs -- Ivo van der Sangen -- jnewbery -- Johnson Lau -- Jonas Schnelli -- Luke Dashjr -- maiiz -- MarcoFalke -- Masahiko Hyuga -- Matt Corallo -- matthias -- mrbandrews -- Pavel Janík -- Pieter Wuille -- randy-waterhouse -- Russell Yanofsky -- S. Matthew English -- Steven -- Suhas Daftuar -- UdjinM6 -- Wladimir J. van der Laan -- wodry - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.14.0.md b/doc/release-notes/release-notes-0.14.0.md deleted file mode 100644 index c41f22979b..0000000000 --- a/doc/release-notes/release-notes-0.14.0.md +++ /dev/null @@ -1,873 +0,0 @@ -Bitcoin Core version 0.14.0 is now available from: - - - -This is a new major version release, including new features, various bugfixes -and performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at github: - - - -To receive security and update notifications, please subscribe to: - - - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. - -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), -No attempt is made to prevent installing or running the software on Windows XP, you -can still do so at your own risk but be aware that there are known instabilities and issues. -Please do not report issues about Windows XP to the issue tracker. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notable changes -=============== - -Performance Improvements --------------- - -Validation speed and network propagation performance have been greatly -improved, leading to much shorter sync and initial block download times. - -- The script signature cache has been reimplemented as a "cuckoo cache", - allowing for more signatures to be cached and faster lookups. -- Assumed-valid blocks have been introduced which allows script validation to - be skipped for ancestors of known-good blocks, without changing the security - model. See below for more details. -- In some cases, compact blocks are now relayed before being fully validated as - per BIP152. -- P2P networking has been refactored with a focus on concurrency and - throughput. Network operations are no longer bottlenecked by validation. As a - result, block fetching is several times faster than previous releases in many - cases. -- The UTXO cache now claims unused mempool memory. This speeds up initial block - download as UTXO lookups are a major bottleneck there, and there is no use for - the mempool at that stage. - - -Manual Pruning --------------- - -Bitcoin Core has supported automatically pruning the blockchain since 0.11. Pruning -the blockchain allows for significant storage space savings as the vast majority of -the downloaded data can be discarded after processing so very little of it remains -on the disk. - -Manual block pruning can now be enabled by setting `-prune=1`. Once that is set, -the RPC command `pruneblockchain` can be used to prune the blockchain up to the -specified height or timestamp. - -`getinfo` Deprecated --------------------- - -The `getinfo` RPC command has been deprecated. Each field in the RPC call -has been moved to another command's output with that command also giving -additional information that `getinfo` did not provide. The following table -shows where each field has been moved to: - -|`getinfo` field | Moved to | -|------------------|-------------------------------------------| -`"version"` | `getnetworkinfo()["version"]` -`"protocolversion"`| `getnetworkinfo()["protocolversion"]` -`"walletversion"` | `getwalletinfo()["walletversion"]` -`"balance"` | `getwalletinfo()["balance"]` -`"blocks"` | `getblockchaininfo()["blocks"]` -`"timeoffset"` | `getnetworkinfo()["timeoffset"]` -`"connections"` | `getnetworkinfo()["connections"]` -`"proxy"` | `getnetworkinfo()["networks"][0]["proxy"]` -`"difficulty"` | `getblockchaininfo()["difficulty"]` -`"testnet"` | `getblockchaininfo()["chain"] == "test"` -`"keypoololdest"` | `getwalletinfo()["keypoololdest"]` -`"keypoolsize"` | `getwalletinfo()["keypoolsize"]` -`"unlocked_until"` | `getwalletinfo()["unlocked_until"]` -`"paytxfee"` | `getwalletinfo()["paytxfee"]` -`"relayfee"` | `getnetworkinfo()["relayfee"]` -`"errors"` | `getnetworkinfo()["warnings"]` - -ZMQ On Windows --------------- - -Previously the ZeroMQ notification system was unavailable on Windows -due to various issues with ZMQ. These have been fixed upstream and -now ZMQ can be used on Windows. Please see [this document](https://github.com/bitcoin/bitcoin/blob/master/doc/zmq.md) for -help with using ZMQ in general. - -Nested RPC Commands in Debug Console ------------------------------------- - -The ability to nest RPC commands has been added to the debug console. This -allows users to have the output of a command become the input to another -command without running the commands separately. - -The nested RPC commands use bracket syntax (i.e. `getwalletinfo()`) and can -be nested (i.e. `getblock(getblockhash(1))`). Simple queries can be -done with square brackets where object values are accessed with either an -array index or a non-quoted string (i.e. `listunspent()[0][txid]`). Both -commas and spaces can be used to separate parameters in both the bracket syntax -and normal RPC command syntax. - -Network Activity Toggle ------------------------ - -A RPC command and GUI toggle have been added to enable or disable all p2p -network activity. The network status icon in the bottom right hand corner -is now the GUI toggle. Clicking the icon will either enable or disable all -p2p network activity. If network activity is disabled, the icon will -be grayed out with an X on top of it. - -Additionally the `setnetworkactive` RPC command has been added which does -the same thing as the GUI icon. The command takes one boolean parameter, -`true` enables networking and `false` disables it. - -Out-of-sync Modal Info Layer ----------------------------- - -When Bitcoin Core is out-of-sync on startup, a semi-transparent information -layer will be shown over top of the normal display. This layer contains -details about the current sync progress and estimates the amount of time -remaining to finish syncing. This layer can also be hidden and subsequently -unhidden by clicking on the progress bar at the bottom of the window. - -Support for JSON-RPC Named Arguments ------------------------------------- - -Commands sent over the JSON-RPC interface and through the `bitcoin-cli` binary -can now use named arguments. This follows the [JSON-RPC specification](http://www.jsonrpc.org/specification) -for passing parameters by-name with an object. - -`bitcoin-cli` has been updated to support this by parsing `name=value` arguments -when the `-named` option is given. - -Some examples: - - src/bitcoin-cli -named help command="help" - src/bitcoin-cli -named getblockhash height=0 - src/bitcoin-cli -named getblock blockhash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f - src/bitcoin-cli -named sendtoaddress address="(snip)" amount="1.0" subtractfeefromamount=true - -The order of arguments doesn't matter in this case. Named arguments are also -useful to leave out arguments that should stay at their default value. The -rarely-used arguments `comment` and `comment_to` to `sendtoaddress`, for example, can -be left out. However, this is not yet implemented for many RPC calls, this is -expected to land in a later release. - -The RPC server remains fully backwards compatible with positional arguments. - -Opt into RBF When Sending -------------------------- - -A new startup option, `-walletrbf`, has been added to allow users to have all -transactions sent opt into RBF support. The default value for this option is -currently `false`, so transactions will not opt into RBF by default. The new -`bumpfee` RPC can be used to replace transactions that opt into RBF. - -Sensitive Data Is No Longer Stored In Debug Console History ------------------------------------------------------------ - -The debug console maintains a history of previously entered commands that can be -accessed by pressing the Up-arrow key so that users can easily reuse previously -entered commands. Commands which have sensitive information such as passphrases and -private keys will now have a `(...)` in place of the parameters when accessed through -the history. - -Retaining the Mempool Across Restarts -------------------------------------- - -The mempool will be saved to the data directory prior to shutdown -to a `mempool.dat` file. This file preserves the mempool so that when the node -restarts the mempool can be filled with transactions without waiting for new transactions -to be created. This will also preserve any changes made to a transaction through -commands such as `prioritisetransaction` so that those changes will not be lost. - -Final Alert ------------ - -The Alert System was [disabled and deprecated](https://bitcoin.org/en/alert/2016-11-01-alert-retirement) in Bitcoin Core 0.12.1 and removed in 0.13.0. -The Alert System was retired with a maximum sequence final alert which causes any nodes -supporting the Alert System to display a static hard-coded "Alert Key Compromised" message which also -prevents any other alerts from overriding it. This final alert is hard-coded into this release -so that all old nodes receive the final alert. - -GUI Changes ------------ - - - After resetting the options by clicking the `Reset Options` button - in the options dialog or with the `-resetguioptions` startup option, - the user will be prompted to choose the data directory again. This - is to ensure that custom data directories will be kept after the - option reset which clears the custom data directory set via the choose - datadir dialog. - - - Multiple peers can now be selected in the list of peers in the debug - window. This allows for users to ban or disconnect multiple peers - simultaneously instead of banning them one at a time. - - - An indicator has been added to the bottom right hand corner of the main - window to indicate whether the wallet being used is a HD wallet. This - icon will be grayed out with an X on top of it if the wallet is not a - HD wallet. - -Low-level RPC changes ----------------------- - - - `importprunedfunds` only accepts two required arguments. Some versions accept - an optional third arg, which was always ignored. Make sure to never pass more - than two arguments. - - - The first boolean argument to `getaddednodeinfo` has been removed. This is - an incompatible change. - - - RPC command `getmininginfo` loses the "testnet" field in favor of the more - generic "chain" (which has been present for years). - - - A new RPC command `preciousblock` has been added which marks a block as - precious. A precious block will be treated as if it were received earlier - than a competing block. - - - A new RPC command `importmulti` has been added which receives an array of - JSON objects representing the intention of importing a public key, a - private key, an address and script/p2sh - - - Use of `getrawtransaction` for retrieving confirmed transactions with unspent - outputs has been deprecated. For now this will still work, but in the future - it may change to only be able to retrieve information about transactions in - the mempool or if `txindex` is enabled. - - - A new RPC command `getmemoryinfo` has been added which will return information - about the memory usage of Bitcoin Core. This was added in conjunction with - optimizations to memory management. See [Pull #8753](https://github.com/bitcoin/bitcoin/pull/8753) - for more information. - - - A new RPC command `bumpfee` has been added which allows replacing an - unconfirmed wallet transaction that signaled RBF (see the `-walletrbf` - startup option above) with a new transaction that pays a higher fee, and - should be more likely to get confirmed quickly. - -HTTP REST Changes ------------------ - - - UTXO set query (`GET /rest/getutxos//-/- - /.../-.`) responses were changed to return status - code `HTTP_BAD_REQUEST` (400) instead of `HTTP_INTERNAL_SERVER_ERROR` (500) - when requests contain invalid parameters. - -Minimum Fee Rate Policies -------------------------- - -Since the changes in 0.12 to automatically limit the size of the mempool and improve the performance of block creation in mining code it has not been important for relay nodes or miners to set `-minrelaytxfee`. With this release the following concepts that were tied to this option have been separated out: -- incremental relay fee used for calculating BIP 125 replacement and mempool limiting. (1000 satoshis/kB) -- calculation of threshold for a dust output. (effectively 3 * 1000 satoshis/kB) -- minimum fee rate of a package of transactions to be included in a block created by the mining code. If miners wish to set this minimum they can use the new `-blockmintxfee` option. (defaults to 1000 satoshis/kB) - -The `-minrelaytxfee` option continues to exist but is recommended to be left unset. - -Fee Estimation Changes ----------------------- - -- Since 0.13.2 fee estimation for a confirmation target of 1 block has been - disabled. The fee slider will no longer be able to choose a target of 1 block. - This is only a minor behavior change as there was often insufficient - data for this target anyway. `estimatefee 1` will now always return -1 and - `estimatesmartfee 1` will start searching at a target of 2. - -- The default target for fee estimation is changed to 6 blocks in both the GUI - (previously 25) and for RPC calls (previously 2). - -Removal of Priority Estimation ------------------------------- - -- Estimation of "priority" needed for a transaction to be included within a target - number of blocks has been removed. The RPC calls are deprecated and will either - return -1 or 1e24 appropriately. The format for `fee_estimates.dat` has also - changed to no longer save these priority estimates. It will automatically be - converted to the new format which is not readable by prior versions of the - software. - -- Support for "priority" (coin age) transaction sorting for mining is - considered deprecated in Core and will be removed in the next major version. - This is not to be confused with the `prioritisetransaction` RPC which will remain - supported by Core for adding fee deltas to transactions. - -P2P connection management --------------------------- - -- Peers manually added through the `-addnode` option or `addnode` RPC now have their own - limit of eight connections which does not compete with other inbound or outbound - connection usage and is not subject to the limitation imposed by the `-maxconnections` - option. - -- New connections to manually added peers are performed more quickly. - -Introduction of assumed-valid blocks -------------------------------------- - -- A significant portion of the initial block download time is spent verifying - scripts/signatures. Although the verification must pass to ensure the security - of the system, no other result from this verification is needed: If the node - knew the history of a given block were valid it could skip checking scripts - for its ancestors. - -- A new configuration option 'assumevalid' is provided to express this knowledge - to the software. Unlike the 'checkpoints' in the past this setting does not - force the use of a particular chain: chains that are consistent with it are - processed quicker, but other chains are still accepted if they'd otherwise - be chosen as best. Also unlike 'checkpoints' the user can configure which - block history is assumed true, this means that even outdated software can - sync more quickly if the setting is updated by the user. - -- Because the validity of a chain history is a simple objective fact it is much - easier to review this setting. As a result the software ships with a default - value adjusted to match the current chain shortly before release. The use - of this default value can be disabled by setting -assumevalid=0 - -Fundrawtransaction change address reuse ----------------------------------------- - -- Before 0.14, `fundrawtransaction` was by default wallet stateless. In - almost all cases `fundrawtransaction` does add a change-output to the - outputs of the funded transaction. Before 0.14, the used keypool key was - never marked as change-address key and directly returned to the keypool - (leading to address reuse). Before 0.14, calling `getnewaddress` - directly after `fundrawtransaction` did generate the same address as - the change-output address. - -- Since 0.14, fundrawtransaction does reserve the change-output-key from - the keypool by default (optional by setting `reserveChangeKey`, default = - `true`) - -- Users should also consider using `getrawchangeaddress()` in conjunction - with `fundrawtransaction`'s `changeAddress` option. - -Unused mempool memory used by coincache ----------------------------------------- - -- Before 0.14, memory reserved for mempool (using the `-maxmempool` option) - went unused during initial block download, or IBD. In 0.14, the UTXO DB cache - (controlled with the `-dbcache` option) borrows memory from the mempool - when there is extra memory available. This may result in an increase in - memory usage during IBD for those previously relying on only the `-dbcache` - option to limit memory during that time. - -0.14.0 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, minor refactors and string updates. For convenience -in locating the code changes and accompanying discussion, both the pull request -and git merge commit are mentioned. - -### RPC and other APIs -- #8421 `b77bb95` httpserver: drop boost dependency (theuni) -- #8638 `f061415` rest.cpp: change `HTTP_INTERNAL_SERVER_ERROR` to `HTTP_BAD_REQUEST` (djpnewton) -- #8272 `91990ee` Make the dummy argument to getaddednodeinfo optional (sipa) -- #8722 `bb843ad` bitcoin-cli: More detailed error reporting (laanwj) -- #6996 `7f71a3c` Add preciousblock RPC (sipa) -- #8788 `97c7f73` Give RPC commands more information about the RPC request (jonasschnelli) -- #7948 `5d2c8e5` Augment getblockchaininfo bip9\_softforks data (mruddy) -- #8980 `0e22855` importmulti: Avoid using boost::variant::operator!=, which is only in newer boost versions (luke-jr) -- #9025 `4d8558a` Getrawtransaction should take a bool for verbose (jnewbery) -- #8811 `5754e03` Add support for JSON-RPC named arguments (laanwj) -- #9520 `2456a83` Deprecate non-txindex getrawtransaction and better warning (sipa) -- #9518 `a65ced1` Return height of last block pruned by pruneblockchain RPC (ryanofsky) -- #9222 `7cb024e` Add 'subtractFeeFromAmount' option to 'fundrawtransaction' (dooglus) -- #8456 `2ef52d3` Simplified `bumpfee` command (mrbandrews) -- #9516 `727a798` Bug-fix: listsinceblock: use fork point as reference for blocks in reorg'd chains (kallewoof) -- #9640 `7bfb770` Bumpfee: bugfixes for error handling and feerate calculation (sdaftuar) -- #9673 `8d6447e` Set correct metadata on bumpfee wallet transactions (ryanofsky) -- #9650 `40f7e27` Better handle invalid parameters to signrawtransaction (TheBlueMatt) -- #9682 `edc9e63` Require timestamps for importmulti keys (ryanofsky) -- #9108 `d8e8b06` Use importmulti timestamp when importing watch only keys (on top of #9682) (ryanofsky) -- #9756 `7a93af8` Return error when importmulti called with invalid address (ryanofsky) -- #9778 `ad168ef` Add two hour buffer to manual pruning (morcos) -- #9761 `9828f9a` Use 2 hour grace period for key timestamps in importmulti rescans (ryanofsky) -- #9474 `48d7e0d` Mark the minconf parameter to move as ignored (sipa) -- #9619 `861cb0c` Bugfix: RPC/Mining: GBT should return 1 MB sizelimit before segwit activates (luke-jr) -- #9773 `9072395` Return errors from importmulti if complete rescans are not successful (ryanofsky) - -### Block and transaction handling -- #8391 `37d83bb` Consensus: Remove ISM (NicolasDorier) -- #8365 `618c9dd` Treat high-sigop transactions as larger rather than rejecting them (sipa) -- #8814 `14b7b3f` wallet, policy: ParameterInteraction: Don't allow 0 fee (MarcoFalke) -- #8515 `9bdf526` A few mempool removal optimizations (sipa) -- #8448 `101c642` Store mempool and prioritization data to disk (sipa) -- #7730 `3c03dc2` Remove priority estimation (morcos) -- #9111 `fb15610` Remove unused variable `UNLIKELY_PCT` from fees.h (fanquake) -- #9133 `434e683` Unset fImporting for loading mempool (morcos) -- #9179 `b9a87b4` Set `DEFAULT_LIMITFREERELAY` = 0 kB/minute (MarcoFalke) -- #9239 `3fbf079` Disable fee estimates for 1-block target (morcos) -- #7562 `1eef038` Bump transaction version default to 2 (btcdrak) -- #9313,#9367 If we don't allow free txs, always send a fee filter (morcos) -- #9346 `b99a093` Batch construct batches (sipa) -- #9262 `5a70572` Prefer coins that have fewer ancestors, sanity check txn before ATMP (instagibbs) -- #9288 `1ce7ede` Fix a bug if the min fee is 0 for FeeFilterRounder (morcos) -- #9395 `0fc1c31` Add test for `-walletrejectlongchains` (morcos) -- #9107 `7dac1e5` Safer modify new coins (morcos) -- #9312 `a72f76c` Increase mempool expiry time to 2 weeks (morcos) -- #8610 `c252685` Share unused mempool memory with coincache (sipa) -- #9138 `f646275` Improve fee estimation (morcos) -- #9408 `46b249e` Allow shutdown during LoadMempool, dump only when necessary (jonasschnelli) -- #9310 `8c87f17` Assert FRESH validity in CCoinsViewCache::BatchWrite (ryanofsky) -- #7871 `e2e624d` Manual block file pruning (mrbandrews) -- #9507 `0595042` Fix use-after-free in CTxMemPool::removeConflicts() (sdaftuar) -- #9380 `dd98f04` Separate different uses of minimum fees (morcos) -- #9596 `71148b8` bugfix save feeDelta instead of priorityDelta in DumpMempool (morcos) -- #9371 `4a1dc35` Notify on removal (morcos) -- #9519 `9b4d267` Exclude RBF replacement txs from fee estimation (morcos) -- #8606 `e2a1a1e` Fix some locks (sipa) -- #8681 `6898213` Performance Regression Fix: Pre-Allocate txChanged vector (JeremyRubin) -- #8223 `744d265` c++11: Use std::unique\_ptr for block creation (domob1812) -- #9125 `7490ae8` Make CBlock a vector of shared\_ptr of CTransactions (sipa) -- #8930 `93566e0` Move orphan processing to ActivateBestChain (TheBlueMatt) -- #8580 `46904ee` Make CTransaction actually immutable (sipa) -- #9240 `a1dcf2e` Remove txConflicted (morcos) -- #8589 `e8cfe1e` Inline CTxInWitness inside CTxIn (sipa) -- #9349 `2db4cbc` Make CScript (and prevector) c++11 movable (sipa) -- #9252 `ce5c1f4` Release cs\_main before calling ProcessNewBlock, or processing headers (cmpctblock handling) (sdaftuar) -- #9283 `869781c` A few more CTransactionRef optimizations (sipa) -- #9499 `9c9af5a` Use recent-rejects, orphans, and recently-replaced txn for compact-block-reconstruction (TheBlueMatt) -- #9813 `3972a8e` Read/write mempool.dat as a binary (paveljanik) - -### P2P protocol and network code -- #8128 `1030fa7` Turn net structures into dumb storage classes (theuni) -- #8282 `026c6ed` Feeler connections to increase online addrs in the tried table (EthanHeilman) -- #8462 `53f8f22` Move AdvertiseLocal debug output to net category (Mirobit) -- #8612 `84decb5` Check for compatibility with download in FindNextBlocksToDownload (sipa) -- #8594 `5b2ea29` Do not add random inbound peers to addrman (gmaxwell) -- #8085 `6423116` Begin encapsulation (theuni) -- #8715 `881d7ea` only delete CConnman if it's been created (theuni) -- #8707 `f07424a` Fix maxuploadtarget setting (theuni) -- #8661 `d2e4655` Do not set an addr time penalty when a peer advertises itself (gmaxwell) -- #8822 `9bc6a6b` Consistent checksum handling (laanwj) -- #8936 `1230890` Report NodeId in misbehaving debug (rebroad) -- #8968 `3cf496d` Don't hold cs\_main when calling ProcessNewBlock from a cmpctblock (TheBlueMatt) -- #9002 `e1d1f57` Make connect=0 disable automatic outbound connections (gmaxwell) -- #9050 `fcf61b8` Make a few values immutable, and use deterministic randomness for the localnonce (theuni) -- #8969 `3665483` Decouple peer-processing-logic from block-connection-logic (#2) (TheBlueMatt) -- #8708 `c8c572f` have CConnman handle message sending (theuni) -- #8709 `1e50d22` Allow filterclear messages for enabling TX relay only (rebroad) -- #9045 `9f554e0` Hash P2P messages as they are received instead of at process-time (TheBlueMatt) -- #9026 `dc6b940` Fix handling of invalid compact blocks (sdaftuar) -- #8996 `ab914a6` Network activity toggle (luke-jr) -- #9131 `62af164` fNetworkActive is not protected by a lock, use an atomic (jonasschnelli) -- #8872 `0c577f2` Remove block-request logic from INV message processing (TheBlueMatt) -- #8690 `791b58d` Do not fully sort all nodes for addr relay (sipa) -- #9128 `76fec09` Decouple CConnman and message serialization (theuni) -- #9226 `3bf06e9` Remove fNetworkNode and pnodeLocalHost (gmaxwell) -- #9352 `a7f7651` Attempt reconstruction from all compact block announcements (sdaftuar) -- #9319 `a55716a` Break addnode out from the outbound connection limits (gmaxwell) -- #9261 `2742568` Add unstored orphans with rejected parents to recentRejects (morcos) -- #9441 `8b66bf7` Massive speedup. Net locks overhaul (theuni) -- #9375 `3908fc4` Relay compact block messages prior to full block connection (TheBlueMatt) -- #9400 `8a445c5` Set peers as HB peers upon full block validation (instagibbs) -- #9561 `6696b46` Wake message handling thread when we receive a new block (TheBlueMatt) -- #9535 `82274c0` Split CNode::cs\_vSend: message processing and message sending (TheBlueMatt) -- #9606 `3f9f962` Consistently use GetTimeMicros() for inactivity checks (sdaftuar) -- #9594 `fd70211` Send final alert message to older peers after connecting (gmaxwell) -- #9626 `36966a1` Clean up a few CConnman cs\_vNodes/CNode things (TheBlueMatt) -- #9609 `4966917` Fix remaining net assertions (theuni) -- #9671 `7821db3` Fix super-unlikely race introduced in 236618061a445d2cb11e72 (TheBlueMatt) -- #9730 `33f3b21` Remove bitseed.xf2.org form the dns seed list (jonasschnelli) -- #9698 `2447c10` Fix socket close race (theuni) -- #9708 `a06ede9` Clean up all known races/platform-specific UB at the time PR was opened (TheBlueMatt) -- #9715 `b08656e` Disconnect peers which we do not receive VERACKs from within 60 sec (TheBlueMatt) -- #9720 `e87ce95` Fix banning and disallow sending messages before receiving verack (theuni) -- #9268 `09c4fd1` Fix rounding privacy leak introduced in #9260 (TheBlueMatt) -- #9075 `9346f84` Decouple peer-processing-logic from block-connection-logic (#3) (TheBlueMatt) -- #8688 `047ded0` Move static global randomizer seeds into CConnman (sipa) -- #9289 `d9ae1ce` net: drop boost::thread\_group (theuni) - -### Validation -- #9014 `d04aeba` Fix block-connection performance regression (TheBlueMatt) -- #9299 `d52ce89` Remove no longer needed check for premature v2 txs (morcos) -- #9273 `b68685a` Remove unused `CDiskBlockPos*` argument from ProcessNewBlock (TheBlueMatt) -- #8895 `b83264d` Better SigCache Implementation (JeremyRubin) -- #9490 `e126d0c` Replace FindLatestBefore used by importmulti with FindEarliestAtLeast (gmaxwell) -- #9484 `812714f` Introduce assumevalid setting to skip validation presumed valid scripts (gmaxwell) -- #9511 `7884956` Don't overwrite validation state with corruption check (morcos) -- #9765 `1e92e04` Harden against mistakes handling invalid blocks (sdaftuar) -- #9779 `3c02b95` Update nMinimumChainWork and defaultAssumeValid (gmaxwell) -- #8524 `19b0f33` Precompute sighashes (sipa) -- #9791 `1825a03` Avoid VLA in hash.h (sipa) - -### Build system -- #8238 `6caf3ee` ZeroMQ 4.1.5 && ZMQ on Windows (fanquake) -- #8520 `b40e19c` Remove check for `openssl/ec.h` (laanwj) -- #8617 `de07fdc` Include instructions to extract Mac OS X SDK on Linux using 7zip and SleuthKit (luke-jr) -- #8566 `7b98895` Easy to use gitian building script (achow101) -- #8604 `f256843` build,doc: Update for 0.13.0+ and OpenBSD 5.9 (laanwj) -- #8640 `2663e51` depends: Remove Qt46 package (fanquake) -- #8645 `8ea4440` Remove unused Qt 4.6 patch (droark) -- #8608 `7e9ab95` Install manpages via make install, also add some autogenerated manpages (nomnombtc) -- #8781 `ca69ef4` contrib: delete `qt_translations.py` (MarcoFalke) -- #8783 `64dc645` share: remove qt/protobuf.pri (MarcoFalke) -- #8423 `3166dff` depends: expat 2.2.0, ccache 3.3.1, fontconfig 2.12.1 (fanquake) -- #8791 `b694b0d` travis: cross-mac: explicitly enable gui (MarcoFalke) -- #8820 `dc64141` depends: Fix Qt compilation with Xcode 8 (fanquake) -- #8730 `489a6ab` depends: Add libevent compatibility patch for windows (laanwj) -- #8819 `c841816` depends: Boost 1.61.0 (fanquake) -- #8826 `f560d95` Do not include `env_win.cc` on non-Windows systems (paveljanik) -- #8948 `e077e00` Reorder Windows gitian build order to match Linux (Michagogo) -- #8568 `078900d` new var `DIST_CONTRIB` adds useful things for packagers from contrib (nomnombtc) -- #9114 `21e6c6b` depends: Set `OSX_MIN_VERSION` to 10.8 (fanquake) -- #9140 `018a4eb` Bugfix: Correctly replace generated headers and fail cleanly (luke-jr) -- #9156 `a8b2a82` Add compile and link options echo to configure (jonasschnelli) -- #9393 `03d85f6` Include cuckoocache header in Makefile (MarcoFalke) -- #9420 `bebe369` Fix linker error when configured with --enable-lcov (droark) -- #9412 `53442af` Fix 'make deploy' for OSX (jonasschnelli) -- #9475 `7014506` Let autoconf detect presence of `EVP_MD_CTX_new` (luke-jr) -- #9513 `bbf193f` Fix qt distdir builds (theuni) -- #9471 `ca615e6` depends: libevent 2.1.7rc (fanquake) -- #9468 `f9117f2` depends: Dependency updates for 0.14.0 (fanquake) -- #9469 `01c4576` depends: Qt 5.7.1 (fanquake) -- #9574 `5ac6687` depends: Fix QT build on OSX (fanquake) -- #9646 `720b579` depends: Fix cross build for qt5.7 (theuni) -- #9705 `6a55515` Add options to override BDB cflags/libs (laanwj) -- #8249 `4e1567a` Enable (and check for) 64-bit ASLR on Windows (laanwj) -- #9758 `476cc47` Selectively suppress deprecation warnings (jonasschnelli) -- #9783 `6d61a2b` release: bump gitian descriptors for a new 0.14 package cache (theuni) -- #9789 `749fe95` build: add --enable-werror and warn on vla's (theuni) -- #9831 `99fd85c` build: force a c++ standard to be specified (theuni) - -### GUI -- #8192 `c503863` Remove URLs from About dialog translations (fanquake) -- #8540 `36404ae` Fix random segfault when closing "Choose data directory" dialog (laanwj) -- #8517 `2468292` Show wallet HD state in statusbar (jonasschnelli) -- #8463 `62a5a8a` Remove Priority from coincontrol dialog (MarcoFalke) -- #7579 `0606f95` Show network/chain errors in the GUI (jonasschnelli) -- #8583 `c19f8a4` Show XTHIN in GUI (rebroad) -- #7783 `4335d5a` RPC-Console: support nested commands and simple value queries (jonasschnelli) -- #8672 `6052d50` Show transaction size in transaction details window (Cocosoft) -- #8777 `fec6af7` WalletModel: Expose disablewallet (MarcoFalke) -- #8371 `24f72e9` Add out-of-sync modal info layer (jonasschnelli) -- #8885 `b2fec4e` Fix ban from qt console (theuni) -- #8821 `bf8e68a` sync-overlay: Don't block during reindex (MarcoFalke) -- #8906 `088d1f4` sync-overlay: Don't show progress twice (MarcoFalke) -- #8918 `47ace42` Add "Copy URI" to payment request context menu (luke-jr) -- #8925 `f628d9a` Display minimum ping in debug window (rebroad) -- #8774 `3e942a7` Qt refactors to better abstract wallet access (luke-jr) -- #8985 `7b1bfa3` Use pindexBestHeader instead of setBlockIndexCandidates for NotifyHeaderTip() (jonasschnelli) -- #8989 `d2143dc` Overhaul smart-fee slider, adjust default confirmation target (jonasschnelli) -- #9043 `273bde3` Return useful error message on ATMP failure (MarcoFalke) -- #9088 `4e57824` Reduce ambiguity of warning message (rebroad) -- #8874 `e984730` Multiple Selection for peer and ban tables (achow101) -- #9145 `924745d` Make network disabled icon 50% opaque (MarcoFalke) -- #9130 `ac489b2` Mention the new network toggle functionality in the tooltip (paveljanik) -- #9218 `4d955fc` Show progress overlay when clicking spinner icon (laanwj) -- #9280 `e15660c` Show ModalOverlay by pressing the progress bar, allow hiding (jonasschnelli) -- #9296 `fde7d99` Fix missed change to WalletTx structure (morcos) -- #9266 `2044e37` Bugfix: Qt/RPCConsole: Put column enum in the right places (luke-jr) -- #9255 `9851a84` layoutAboutToChange signal is called layoutAboutToBeChanged (laanwj) -- #9330 `47e6a19` Console: add security warning (jonasschnelli) -- #9329 `db45ad8` Console: allow empty arguments (jonasschnelli) -- #8877 `6dc4c43` Qt RPC console: history sensitive-data filter, and saving input line when browsing history (luke-jr) -- #9462 `649cf5f` Do not translate tilde character (MarcoFalke) -- #9457 `123ea73` Select more files for translation (MarcoFalke) -- #9413 `fd7d8c7` CoinControl: Allow non-wallet owned change addresses (jonasschnelli) -- #9461 `b250686` Improve progress display during headers-sync and peer-finding (jonasschnelli) -- #9588 `5086452` Use nPowTargetSpacing constant (MarcoFalke) -- #9637 `d9e4d1d` Fix transaction details output-index to reflect vout index (jonasschnelli) -- #9718 `36f9d3a` Qt/Intro: Various fixes (luke-jr) -- #9735 `ec66d06` devtools: Handle Qt formatting characters edge-case in update-translations.py (laanwj) -- #9755 `a441db0` Bugfix: Qt/Options: Restore persistent "restart required" notice (luke-jr) -- #9817 `7d75a5a` Fix segfault crash when shutdown the GUI in disablewallet mode (jonasschnelli) - -### Wallet -- #8152 `b9c1cd8` Remove `CWalletDB*` parameter from CWallet::AddToWallet (pstratem) -- #8432 `c7e05b3` Make CWallet::fFileBacked private (pstratem) -- #8445 `f916700` Move CWallet::setKeyPool to private section of CWallet (pstratem) -- #8564 `0168019` Remove unused code/conditions in ReadAtCursor (jonasschnelli) -- #8601 `37ac678` Add option to opt into full-RBF when sending funds (rebase, original by petertodd) (laanwj) -- #8494 `a5b20ed` init, wallet: ParameterInteraction() iff wallet enabled (MarcoFalke) -- #8760 `02ac669` init: Get rid of some `ENABLE_WALLET` (MarcoFalke) -- #8696 `a1f8d3e` Wallet: Remove last external reference to CWalletDB (pstratem) -- #8768 `886e8c9` init: Get rid of fDisableWallet (MarcoFalke) -- #8486 `ab0b411` Add high transaction fee warnings (MarcoFalke) -- #8851 `940748b` Move key derivation logic from GenerateNewKey to DeriveNewChildKey (pstratem) -- #8287 `e10af96` Set fLimitFree = true (MarcoFalke) -- #8928 `c587577` Fix init segfault where InitLoadWallet() calls ATMP before genesis (TheBlueMatt) -- #7551 `f2d7056` Add importmulti RPC call (pedrobranco) -- #9016 `0dcb888` Return useful error message on ATMP failure (instagibbs) -- #8753 `f8723d2` Locked memory manager (laanwj) -- #8828 `a4fd8df` Move CWalletDB::ReorderTransactions to CWallet (pstratem) -- #8977 `6a1343f` Refactor wallet/init interaction (Reaccept wtx, flush thread) (jonasschnelli) -- #9036 `ed0cc50` Change default confirm target from 2 to 6 (laanwj) -- #9071 `d1871da` Declare wallet.h functions inline (sipa) -- #9132 `f54e460` Make strWalletFile const (jonasschnelli) -- #9141 `5ea5e04` Remove unnecessary calls to CheckFinalTx (jonasschnelli) -- #9165 `c01f16a` SendMoney: use already-calculated balance (instagibbs) -- #9311 `a336d13` Flush wallet after abandontransaction (morcos) -- #8717 `38e4887` Addition of ImmatureCreditCached to MarkDirty() (spencerlievens) -- #9446 `510c0d9` SetMerkleBranch: remove unused code, remove cs\_main lock requirement (jonasschnelli) -- #8776 `2a524b8` Wallet refactoring leading up to multiwallet (luke-jr) -- #9465 `a7d55c9` Do not perform ECDSA signing in the fee calculation inner loop (gmaxwell) -- #9404 `12e3112` Smarter coordination of change and fee in CreateTransaction (morcos) -- #9377 `fb75cd0` fundrawtransaction: Keep change-output keys by default, make it optional (jonasschnelli) -- #9578 `923dc44` Add missing mempool lock for CalculateMemPoolAncestors (TheBlueMatt) -- #9227 `02464da` Make nWalletDBUpdated atomic to avoid a potential race (pstratem) -- #9764 `f8af89a` Prevent "overrides a member function but is not marked 'override'" warnings (laanwj) -- #9771 `e43a585` Add missing cs\_wallet lock that triggers new lock held assertion (ryanofsky) -- #9316 `3097ea4` Disable free transactions when relay is disabled (MarcoFalke) -- #9615 `d2c9e4d` Wallet incremental fee (morcos) -- #9760 `40c754c` Remove importmulti always-true check (ryanofsky) - -### Tests and QA -- #8270 `6e5e5ab` Tests: Use portable #! in python scripts (/usr/bin/env) (ChoHag) -- #8534,#8504 Remove java comparison tool (laanwj,MarcoFalke) -- #8482 `740cff5` Use single cache dir for chains (MarcoFalke) -- #8450 `21857d2` Replace `rpc_wallet_tests.cpp` with python RPC unit tests (pstratem) -- #8671 `ddc3080` Minimal fix to slow prevector tests as stopgap measure (JeremyRubin) -- #8680 `666eaf0` Address Travis spurious failures (theuni) -- #8789 `e31a43c` pull-tester: Only print output when failed (MarcoFalke) -- #8810 `14e8f99` tests: Add exception error message for JSONRPCException (laanwj) -- #8830 `ef0801b` test: Add option to run bitcoin-util-test.py manually (jnewbery) -- #8881 `e66cc1d` Add some verbose logging to bitcoin-util-test.py (jnewbery) -- #8922 `0329511` Send segwit-encoded blocktxn messages in p2p-compactblocks (TheBlueMatt) -- #8873 `74dc388` Add microbenchmarks to profile more code paths (ryanofsky) -- #9032 `6a8be7b` test: Add format-dependent comparison to bctest (laanwj) -- #9023 `774db92` Add logging to bitcoin-util-test.py (jnewbery) -- #9065 `c9bdf9a` Merge `doc/unit-tests.md` into `src/test/README.md` (laanwj) -- #9069 `ed64bce` Clean up bctest.py and bitcoin-util-test.py (jnewbery) -- #9095 `b8f43e3` test: Fix test\_random includes (MarcoFalke) -- #8894 `faec09b` Testing: Include fRelay in mininode version messages (jnewbery) -- #9097 `e536499` Rework `sync_*` and preciousblock.py (MarcoFalke) -- #9049 `71bc39e` Remove duplicatable duplicate-input check from CheckTransaction (TheBlueMatt) -- #9136 `b422913` sync\_blocks cleanup (ryanofsky) -- #9151 `4333b1c` proxy\_test: Calculate hardcoded port numbers (MarcoFalke) -- #9206 `e662d28` Make test constant consistent with consensus.h (btcdrak) -- #9139 `0de7fd3` Change sync\_blocks to pick smarter maxheight (on top of #9196) (ryanofsky) -- #9100 `97ec6e5` tx\_valid: re-order inputs to how they are encoded (dcousens) -- #9202 `e56cf67` bench: Add support for measuring CPU cycles (laanwj) -- #9223 `5412c08` unification of Bloom filter representation (s-matthew-english) -- #9257 `d7ba4a2` Dump debug logs on travis failures (sdaftuar) -- #9221 `9e4bb31` Get rid of duplicate code (MarcoFalke) -- #9274 `919db03` Use cached utxo set to fix performance regression (MarcoFalke) -- #9276 `ea33f19` Some minor testing cleanups (morcos) -- #9291 `8601784` Remove mapOrphanTransactionsByPrev from DoS\_tests (sipa) -- #9309 `76fcd9d` Wallet needs to stay unlocked for whole test (morcos) -- #9172 `5bc209c` Resurrect pstratem's "Simple fuzzing framework" (laanwj) -- #9331 `c6fd923` Add test for rescan feature of wallet key import RPCs (ryanofsky) -- #9354 `b416095` Make fuzzer actually test CTxOutCompressor (sipa) -- #9390,#9416 travis: make distdir (MarcoFalke) -- #9308 `0698639` test: Add CCoinsViewCache Access/Modify/Write tests (ryanofsky) -- #9406 `0f921e6` Re-enable a blank v1 Tx JSON test (droark) -- #9435 `dbc8a8c` Removed unused variable in test, fixing warning (ryanofsky) -- #9436 `dce853e` test: Include tx data in `EXTRA_DIST` (MarcoFalke) -- #9525 `02e5308` test: Include tx data in `EXTRA_DIST` (MarcoFalke) -- #9498 `054d664` Basic CCheckQueue Benchmarks (JeremyRubin) -- #9554 `0b96abc` test: Avoid potential NULL pointer dereference in `addrman_tests.cpp` (practicalswift) -- #9628 `f895023` Increase a sync\_blocks timeout in pruning.py (sdaftuar) -- #9638 `a7ea2f8` Actually test assertions in pruning.py (MarcoFalke) -- #9647 `e99f0d7` Skip RAII event tests if libevent is built without `event_set_mem_functions` (luke-jr) -- #9691 `fc67cd2` Init ECC context for `test_bitcoin_fuzzy` (gmaxwell) -- #9712 `d304fef` bench: Fix initialization order in registration (laanwj) -- #9707 `b860915` Fix RPC failure testing (jnewbery) -- #9269 `43e8150` Align struct COrphan definition (sipa) -- #9820 `599c69a` Fix pruning test broken by 2 hour manual prune window (ryanofsky) -- #9824 `260c71c` qa: Check return code when stopping nodes (MarcoFalke) -- #9875 `50953c2` tests: Fix dangling pwalletMain pointer in wallet tests (laanwj) -- #9839 `eddaa6b` [qa] Make import-rescan.py watchonly check reliable (ryanofsky) - -### Documentation -- #8332 `806b9e7` Clarify witness branches in transaction.h serialization (dcousens) -- #8935 `0306978` Documentation: Building on Windows with WSL (pooleja) -- #9144 `c98f6b3` Correct waitforblockheight example help text (fanquake) -- #9407 `041331e` Added missing colons in when running help command (anditto) -- #9378 `870cd2b` Add documentation for CWalletTx::fFromMe member (ryanofsky) -- #9297 `0b73807` Various RPC help outputs updated (Mirobit) -- #9613 `07421cf` Clarify getbalance help string to explain interaction with bumpfee (ryanofsky) -- #9663 `e30d928` Clarify listunspent amount description (instagibbs) -- #9396 `d65a13b` Updated listsinceblock rpc documentation (accraze) -- #8747 `ce43630` rpc: Fix transaction size comments and RPC help text (jnewbery) -- #8058 `bbd9740` Doc: Add issue template (AmirAbrams) -- #8567 `85d4e21` Add default port numbers to REST doc (djpnewton) -- #8624 `89de153` build: Mention curl (MarcoFalke) -- #8786 `9da7366` Mandatory copyright agreement (achow101) -- #8823 `7b05af6` Add privacy recommendation when running hidden service (laanwj) -- #9433 `caa2f10` Update the Windows build notes (droark) -- #8879 `f928050` Rework docs (MarcoFalke) -- #8887 `61d191f` Improve GitHub issue template (fanquake) -- #8787 `279bbad` Add missing autogen to example builds (AmirAbrams) -- #8892 `d270c30` Add build instructions for FreeBSD (laanwj) -- #8890 `c71a654` Update Doxygen configuration file (fanquake) -- #9207 `fa1f944` Move comments above bash command in build-unix (AmirAbrams) -- #9219 `c4522e7` Improve windows build instructions using Linux subsystem (laanwj) -- #8954 `932d02a` contrib: Add README for pgp keys (MarcoFalke) -- #9093 `2fae5b9` release-process: Mention GitHub release and archived release notes (MarcoFalke) -- #8743 `bae178f` Remove old manpages from contrib/debian in favour of doc/man (fanquake) -- #9550 `4105cb6` Trim down the XP notice and say more about what we support (gmaxwell) -- #9246 `9851498` Developer docs about existing subtrees (gmaxwell) -- #9401 `c2ea1e6` Make rpcauth help message clearer, add example in example .conf (instagibbs) -- #9022,#9033 Document dropping OS X 10.7 support (fanquake, MarcoFalke) -- #8771 `bc9e3ab` contributing: Mention not to open several pulls (luke-jr) -- #8852 `7b784cc` Mention Gitian building script in doc (Laudaa) (laanwj) -- #8915 `03dd707` Add copyright/patent issues to possible NACK reasons (petertodd) -- #8965 `23e03f8` Mention that PPA doesn't support Debian (anduck) -- #9115 `bfc7aad` Mention reporting security issues responsibly (paveljanik) -- #9840 `08e0690` Update sendfrom RPC help to correct coin selection misconception (ryanofsky) -- #9865 `289204f` Change bitcoin address in RPC help message (marijnfs) - -### Miscellaneous -- #8274 `7a2d402` util: Update tinyformat (laanwj) -- #8291 `5cac8b1` util: CopyrightHolders: Check for untranslated substitution (MarcoFalke) -- #8557 `44691f3` contrib: Rework verifybinaries (MarcoFalke) -- #8621 `e8ed6eb` contrib: python: Don't use shell=True (MarcoFalke) -- #8813 `fb24d7e` bitcoind: Daemonize using daemon(3) (laanwj) -- #9004 `67728a3` Clarify `listenonion` (unsystemizer) -- #8674 `bae81b8` tools for analyzing, updating and adding copyright headers in source files (isle2983) -- #8976 `8c6218a` libconsensus: Add input validation of flags (laanwj) -- #9112 `46027e8` Avoid ugly exception in log on unknown inv type (laanwj) -- #8837 `2108911` Allow bitcoin-tx to parse partial transactions (jnewbery) -- #9204 `74ced54` Clarify CreateTransaction error messages (instagibbs) -- #9265 `31bcc66` bitcoin-cli: Make error message less confusing (laanwj) -- #9303 `72bf1b3` Update comments in ctaes (sipa) -- #9417 `c4b7d4f` Do not evaluate hidden LogPrint arguments (sipa) -- #9506 `593a00c` RFC: Improve style for if indentation (sipa) -- #8883 `d5d4ad8` Add all standard TXO types to bitcoin-tx (jnewbery) -- #9531 `23281a4` Release notes for estimation changes (morcos) -- #9486 `f62bc10` Make peer=%d log prints consistent (TheBlueMatt) -- #9552 `41cb05c` Add IPv6 support to qos.sh (jamesmacwhite) -- #9542 `e9e7993` Docs: Update CONTRIBUTING.md (jnewbery) -- #9649 `53ab12d` Remove unused clang format dev script (MarcoFalke) -- #9625 `77bd8c4` Increase minimum debug.log size to 10MB after shrink (morcos) -- #9070 `7b22e50` Lockedpool fixes (kazcw) -- #8779 `7008e28` contrib: Delete spendfrom (MarcoFalke) -- #9587,#8793,#9496,#8191,#8109,#8655,#8472,#8677,#8981,#9124 Avoid shadowing of variables (paveljanik) -- #9063 `f2a6e82` Use deprecated `MAP_ANON` if `MAP_ANONYMOUS` is not defined (paveljanik) -- #9060 `1107653` Fix bloom filter init to isEmpty = true (robmcl4) -- #8613 `613bda4` LevelDB 1.19 (sipa) -- #9225 `5488514` Fix some benign races (TheBlueMatt) -- #8736 `5fa7b07` base58: Improve DecodeBase58 performance (wjx) -- #9039 `e81df49` Various serialization simplifcations and optimizations (sipa) -- #9010 `a143b88` Split up AppInit2 into multiple phases, daemonize after datadir lock errors (laanwj) -- #9230 `c79e52a` Fix some benign races in timestamp logging (TheBlueMatt) -- #9183,#9260 Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (TheBlueMatt) -- #9236 `7f72568` Fix races for strMiscWarning and `fLargeWork*Found`, make QT runawayException use GetWarnings (gmaxwell) -- #9243 `7aa7004` Clean up mapArgs and mapMultiArgs Usage (TheBlueMatt) -- #9387 `cfe41d7` RAII of libevent stuff using unique ptrs with deleters (kallewoof) -- #9472 `fac0f30` Disentangle progress estimation from checkpoints and update it (sipa) -- #9512 `6012967` Fix various things -fsanitize complains about (sipa) -- #9373,#9580 Various linearization script issues (droark) -- #9674 `dd163f5` Lock debugging: Always enforce strict lock ordering (try or not) (TheBlueMatt) -- #8453,#9334 Update to latest libsecp256k1 (laanwj,sipa) -- #9656 `7c93952` Check verify-commits on pushes to master (TheBlueMatt) -- #9679 `a351162` Access WorkQueue::running only within the cs lock (TheBlueMatt) -- #9777 `8dee822` Handle unusual maxsigcachesize gracefully (jnewbery) -- #8863,#8807 univalue: Pull subtree (MarcoFalke) -- #9798 `e22c067` Fix Issue #9775 (Check returned value of fopen) (kirit93) -- #9856 `69832aa` Terminate immediately when allocation fails (theuni) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- accraze -- adlawren -- Alex Morcos -- Alexey Vesnin -- Amir Abrams -- Anders Øyvind Urke-Sætre -- Anditto Heristyo -- Andrew Chow -- anduck -- Anthony Towns -- Brian Deery -- BtcDrak -- Chris Moore -- Chris Stewart -- Christian Barcenas -- Christian Decker -- Cory Fields -- crowning- -- CryptAxe -- CryptoVote -- Dagur Valberg Johannsson -- Daniel Cousens -- Daniel Kraft -- Derek Miller -- djpnewton -- Don Patterson -- Doug -- Douglas Roark -- Ethan Heilman -- fsb4000 -- Gaurav Rana -- Geoffrey Tsui -- Greg Walker -- Gregory Maxwell -- Gregory Sanders -- Hampus Sjöberg -- isle2983 -- Ivo van der Sangen -- James White -- Jameson Lopp -- Jeremy Rubin -- Jiaxing Wang -- jnewbery -- John Newbery -- Johnson Lau -- Jon Lund Steffensen -- Jonas Schnelli -- jonnynewbs -- Jorge Timón -- Justin Camarena -- Karl-Johan Alm -- Kaz Wesley -- kirit93 -- Koki Takahashi -- Lauda -- leijurv -- lizhi -- Luke Dashjr -- maiiz -- MarcoFalke -- Marijn Stollenga -- Marty Jones -- Masahiko Hyuga -- Matt Corallo -- Matthew King -- matthias -- Micha -- Michael Ford -- Michael Rotarius -- Mitchell Cash -- mrbandrews -- mruddy -- Nicolas DORIER -- nomnombtc -- Patrick Strateman -- Pavel Janík -- Pedro Branco -- Peter Todd -- Pieter Wuille -- poole\_party -- practicalswift -- R E Broadley -- randy-waterhouse -- Richard Kiss -- Robert McLaughlin -- rodasmith -- Russell Yanofsky -- S. Matthew English -- Sev -- Spencer Lievens -- Stanislas Marion -- Steven -- Suhas Daftuar -- Thomas Snider -- UdjinM6 -- unsystemizer -- whythat -- Will Binns -- Wladimir J. van der Laan -- wodry -- Zak Wilcox - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.14.1.md b/doc/release-notes/release-notes-0.14.1.md deleted file mode 100644 index ef072afd4d..0000000000 --- a/doc/release-notes/release-notes-0.14.1.md +++ /dev/null @@ -1,143 +0,0 @@ -Bitcoin Core version 0.14.1 is now available from: - - - -This is a new minor version release, including various bugfixes and -performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at github: - - - -To receive security and update notifications, please subscribe to: - - - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. - -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), -No attempt is made to prevent installing or running the software on Windows XP, you -can still do so at your own risk but be aware that there are known instabilities and issues. -Please do not report issues about Windows XP to the issue tracker. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notable changes -=============== - -RPC changes ------------ - -- The first positional argument of `createrawtransaction` was renamed from - `transactions` to `inputs`. - -- The argument of `disconnectnode` was renamed from `node` to `address`. - -These interface changes break compatibility with 0.14.0, when the named -arguments functionality, introduced in 0.14.0, is used. Client software -using these calls with named arguments needs to be updated. - -Mining ------- - -In previous versions, getblocktemplate required segwit support from downstream -clients/miners once the feature activated on the network. In this version, it -now supports non-segwit clients even after activation, by removing all segwit -transactions from the returned block template. This allows non-segwit miners to -continue functioning correctly even after segwit has activated. - -Due to the limitations in previous versions, getblocktemplate also recommended -non-segwit clients to not signal for the segwit version-bit. Since this is no -longer an issue, getblocktemplate now always recommends signalling segwit for -all miners. This is safe because ability to enforce the rule is the only -required criteria for safe activation, not actually producing segwit-enabled -blocks. - -UTXO memory accounting ----------------------- - -Memory usage for the UTXO cache is being calculated more accurately, so that -the configured limit (`-dbcache`) will be respected when memory usage peaks -during cache flushes. The memory accounting in prior releases is estimated to -only account for half the actual peak utilization. - -The default `-dbcache` has also been changed in this release to 450MiB. Users -who currently set `-dbcache` to a high value (e.g. to keep the UTXO more fully -cached in memory) should consider increasing this setting in order to achieve -the same cache performance as prior releases. Users on low-memory systems -(such as systems with 1GB or less) should consider specifying a lower value for -this parameter. - -Additional information relating to running on low-memory systems can be found -here: -[reducing-bitcoind-memory-usage.md](https://gist.github.com/laanwj/efe29c7661ce9b6620a7). - -0.14.1 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### RPC and other APIs -- #10084 `142fbb2` Rename first named arg of createrawtransaction (MarcoFalke) -- #10139 `f15268d` Remove auth cookie on shutdown (practicalswift) -- #10146 `2fea10a` Better error handling for submitblock (rawodb, gmaxwell) -- #10144 `d947afc` Prioritisetransaction wasn't always updating ancestor fee (sdaftuar) -- #10204 `3c79602` Rename disconnectnode argument (jnewbery) - -### Block and transaction handling -- #10126 `0b5e162` Compensate for memory peak at flush time (sipa) -- #9912 `fc3d7db` Optimize GetWitnessHash() for non-segwit transactions (sdaftuar) -- #10133 `ab864d3` Clean up calculations of pcoinsTip memory usage (morcos) - -### P2P protocol and network code -- #9953/#10013 `d2548a4` Fix shutdown hang with >= 8 -addnodes set (TheBlueMatt) -- #10176 `30fa231` net: gracefully handle NodeId wrapping (theuni) - -### Build system -- #9973 `e9611d1` depends: fix zlib build on osx (theuni) - -### GUI -- #10060 `ddc2dd1` Ensure an item exists on the rpcconsole stack before adding (achow101) - -### Mining -- #9955/#10006 `569596c` Don't require segwit in getblocktemplate for segwit signalling or mining (sdaftuar) -- #9959/#10127 `b5c3440` Prevent slowdown in CreateNewBlock on large mempools (sdaftuar) - -### Tests and QA -- #10157 `55f641c` Fix the `mempool_packages.py` test (sdaftuar) - -### Miscellaneous -- #10037 `4d8e660` Trivial: Fix typo in help getrawtransaction RPC (keystrike) -- #10120 `e4c9a90` util: Work around (virtual) memory exhaustion on 32-bit w/ glibc (laanwj) -- #10130 `ecc5232` bitcoin-tx input verification (awemany, jnewbery) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Morcos -- Andrew Chow -- Awemany -- Cory Fields -- Gregory Maxwell -- James Evans -- John Newbery -- MarcoFalke -- Matt Corallo -- Pieter Wuille -- practicalswift -- rawodb -- Suhas Daftuar -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). - diff --git a/doc/release-notes/release-notes-0.14.2.md b/doc/release-notes/release-notes-0.14.2.md deleted file mode 100644 index 0ad554b773..0000000000 --- a/doc/release-notes/release-notes-0.14.2.md +++ /dev/null @@ -1,102 +0,0 @@ -Bitcoin Core version 0.14.2 is now available from: - - - -This is a new minor version release, including various bugfixes and -performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at github: - - - -To receive security and update notifications, please subscribe to: - - - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. - -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), -No attempt is made to prevent installing or running the software on Windows XP, you -can still do so at your own risk but be aware that there are known instabilities and issues. -Please do not report issues about Windows XP to the issue tracker. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notable changes -=============== - -miniupnp CVE-2017-8798 ----------------------------- - -Bundled miniupnpc was updated to 2.0.20170509. This fixes an integer signedness error -(present in MiniUPnPc v1.4.20101221 through v2.0) that allows remote attackers -(within the LAN) to cause a denial of service or possibly have unspecified -other impact. - -This only affects users that have explicitly enabled UPnP through the GUI -setting or through the `-upnp` option, as since the last UPnP vulnerability -(in Bitcoin Core 0.10.3) it has been disabled by default. - -If you use this option, it is recommended to upgrade to this version as soon as -possible. - -Known Bugs -========== - -Since 0.14.0 the approximate transaction fee shown in Bitcoin-Qt when using coin -control and smart fee estimation does not reflect any change in target from the -smart fee slider. It will only present an approximate fee calculated using the -default target. The fee calculated using the correct target is still applied to -the transaction and shown in the final send confirmation dialog. - -0.14.2 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### RPC and other APIs -- #10410 `321419b` Fix importwallet edge case rescan bug (ryanofsky) - -### P2P protocol and network code -- #10424 `37a8fc5` Populate services in GetLocalAddress (morcos) -- #10441 `9e3ad50` Only enforce expected services for half of outgoing connections (theuni) - -### Build system -- #10414 `ffb0c4b` miniupnpc 2.0.20170509 (fanquake) -- #10228 `ae479bc` Regenerate bitcoin-config.h as necessary (theuni) - -### Miscellaneous -- #10245 `44a17f2` Minor fix in build documentation for FreeBSD 11 (shigeya) -- #10215 `0aee4a1` Check interruptNet during dnsseed lookups (TheBlueMatt) - -### GUI -- #10231 `1e936d7` Reduce a significant cs_main lock freeze (jonasschnelli) - -### Wallet -- #10294 `1847642` Unset change position when there is no change (instagibbs) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Morcos -- Cory Fields -- fanquake -- Gregory Sanders -- Jonas Schnelli -- Matt Corallo -- Russell Yanofsky -- Shigeya Suzuki -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). - diff --git a/doc/release-notes/release-notes-0.14.3.md b/doc/release-notes/release-notes-0.14.3.md deleted file mode 100644 index 8259152f0b..0000000000 --- a/doc/release-notes/release-notes-0.14.3.md +++ /dev/null @@ -1,118 +0,0 @@ -Bitcoin Core version *0.14.3* is now available from: - - - -This is a new minor version release, including various bugfixes and -performance improvements. - -Please report bugs using the issue tracker at github: - - - -To receive security and update notifications, please subscribe to: - - - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. - -Microsoft ended support for Windows XP on [April 8th, 2014](https://www.microsoft.com/en-us/WindowsForBusiness/end-of-xp-support), -No attempt is made to prevent installing or running the software on Windows XP, you -can still do so at your own risk but be aware that there are known instabilities and issues. -Please do not report issues about Windows XP to the issue tracker. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notable changes -=============== - -Denial-of-Service vulnerability CVE-2018-17144 - ------------------------------- - -A denial-of-service vulnerability exploitable by miners has been discovered in -Bitcoin Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of -the vulnerable versions to 0.14.3, 0.15.2 or 0.16.3 as soon as possible. - -Known Bugs -========== - -Since 0.14.0 the approximate transaction fee shown in Bitcoin-Qt when using coin -control and smart fee estimation does not reflect any change in target from the -smart fee slider. It will only present an approximate fee calculated using the -default target. The fee calculated using the correct target is still applied to -the transaction and shown in the final send confirmation dialog. - -0.14.3 Change log -================= - -Detailed release notes follow. This overview includes changes that affect -behavior, not code moves, refactors and string updates. For convenience in locating -the code changes and accompanying discussion, both the pull request and -git merge commit are mentioned. - -### Consensus -- #14247 `52965fb` Fix crash bug with duplicate inputs within a transaction (TheBlueMatt, sdaftuar) - -### RPC and other APIs - -- #10445 `87a21d5` Fix: make CCoinsViewDbCursor::Seek work for missing keys (Pieter Wuille, Gregory Maxwell) -- #9853 Return correct error codes in setban(), fundrawtransaction(), removeprunedfunds(), bumpfee(), blockchain.cpp (John Newbery) - - -### P2P protocol and network code - -- #10234 `d289b56` [net] listbanned RPC and QT should show correct banned subnets (John Newbery) - -### Build system - - -### Miscellaneous - -- #10451 `3612219` contrib/init/bitcoind.openrcconf: Don't disable wallet by default (Luke Dashjr) -- #10250 `e23cef0` Fix some empty vector references (Pieter Wuille) -- #10196 `d28d583` PrioritiseTransaction updates the mempool tx counter (Suhas Daftuar) -- #9497 `e207342` Fix CCheckQueue IsIdle (potential) race condition and remove dangerous constructors. (Jeremy Rubin) - -### GUI - -- #9481 `7abe7bb` Give fallback fee a reasonable indent (Luke Dashjr) -- #9481 `3e4d7bf` Qt/Send: Figure a decent warning colour from theme (Luke Dashjr) -- #9481 `e207342` Show more significant warning if we fall back to the default fee (Jonas Schnelli) - -### Wallet - -- #10308 `28b8b8b` Securely erase potentially sensitive keys/values (tjps) -- #10265 `ff13f59` Make sure pindex is non-null before possibly referencing in LogPrintf call. (Karl-Johan Alm) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Cory Fields -- CryptAxe -- fanquake -- Jeremy Rubin -- John Newbery -- Jonas Schnelli -- Gregory Maxwell -- Karl-Johan Alm -- Luke Dashjr -- MarcoFalke -- Matt Corallo -- Mikerah -- Pieter Wuille -- practicalswift -- Suhas Daftuar -- Thomas Snider -- Tjps -- Wladimir J. van der Laan - -And to those that reported security issues: - -- awemany (for CVE-2018-17144, previously credited as "anonymous reporter") - diff --git a/doc/release-notes/release-notes-0.15.0.1.md b/doc/release-notes/release-notes-0.15.0.1.md deleted file mode 100644 index 53ab02cbb0..0000000000 --- a/doc/release-notes/release-notes-0.15.0.1.md +++ /dev/null @@ -1,87 +0,0 @@ -Bitcoin Core version *0.15.0.1* is now available from: - - - -and - - - -This is a minor bug fix for 0.15.0. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -The first time you run version 0.15.0 or higher, your chainstate database will -be converted to a new format, which will take anywhere from a few minutes to -half an hour, depending on the speed of your machine. - -The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a -downgrade from version 0.15.0 or upgrade to version 0.15.0 will cause all fee -estimates to be discarded. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading -directly from 0.7.x and earlier without redownloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -The chainstate database for this release is not compatible with previous -releases, so if you run 0.15 and then decide to switch back to any -older version, you will need to run the old release with the `-reindex-chainstate` -option to rebuild the chainstate data structures in the old format. - -If your node has pruning enabled, this will entail re-downloading and -processing the entire blockchain. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notable changes -=============== - -GUI startup crash issue -------------------------- - -After upgrade to 0.15.0, some clients would crash at startup because a custom -fee setting was configured that no longer exists in the GUI. This is a minimal -patch to avoid this issue from occuring. - -0.15.0.1 Change log -==================== - -- #11332 `46c8d23` Fix possible crash with invalid nCustomFeeRadio in QSettings (achow101, TheBlueMatt) - -Also the manpages were updated, as this was forgotten for 0.15.0. - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Andrew Chow -- Matt Corallo -- Jonas Schnelli -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.15.0.md b/doc/release-notes/release-notes-0.15.0.md deleted file mode 100644 index 3d000e94d5..0000000000 --- a/doc/release-notes/release-notes-0.15.0.md +++ /dev/null @@ -1,878 +0,0 @@ -Bitcoin Core version *0.15.0* is now available from: - - - -This is a new major version release, including new features, various bugfixes -and performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -The first time you run version 0.15.0, your chainstate database will be converted to a -new format, which will take anywhere from a few minutes to half an hour, -depending on the speed of your machine. - -The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a -downgrade from version 0.15.0 or upgrade to version 0.15.0 will cause all fee -estimates to be discarded. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading -directly from 0.7.x and earlier without redownloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -The chainstate database for this release is not compatible with previous -releases, so if you run 0.15 and then decide to switch back to any -older version, you will need to run the old release with the `-reindex-chainstate` -option to rebuild the chainstate data structures in the old format. - -If your node has pruning enabled, this will entail re-downloading and -processing the entire blockchain. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notes for 0.15.0 -================ - -Current SegWit support ----------------------- - -Version 0.15.0 supports adding a segregated witness address via the `addwitnessaddress` RPC, but -please note that this is a testing/expert RPC, which does not guarantee recovery from backup. Only use -this RPC if you know what you are doing. More complete wallet support for segregated witness is coming -in a next version. - -Rescanning with encrypted wallets ---------------------------------- - -As in previous versions, when using an encrypted HD wallet, the keypool cannot be topped up without unlocking -the wallet. This means that currently, in order to recover from a backup of an encrypted HD wallet, the user -must unlock the wallet with a really long timeout and manually trigger a rescan, otherwise they risk missing -some keys when auto-topup cannot run. Unfortunately there is no `rescan` RPC in this version, that will be -included in a future version, so for now a rescan can be triggered using one of the `import*` commands, using -a dummy address generated by another (trusted) wallet. - -Notable changes -=============== - -Performance Improvements ------------------------- - -Version 0.15 contains a number of significant performance improvements, which make -Initial Block Download, startup, transaction and block validation much faster: - -- The chainstate database (which is used for tracking UTXOs) has been changed - from a per-transaction model to a per-output model (See [PR 10195](https://github.com/bitcoin/bitcoin/pull/10195)). Advantages of this model - are that it: - - avoids the CPU overhead of deserializing and serializing the unused outputs; - - has more predictable memory usage; - - uses simpler code; - - is adaptable to various future cache flushing strategies. - - As a result, validating the blockchain during Initial Block Download (IBD) and reindex - is ~30-40% faster, uses 10-20% less memory, and flushes to disk far less frequently. - The only downside is that the on-disk database is 15% larger. During the conversion from the previous format - a few extra gigabytes may be used. -- Earlier versions experienced a spike in memory usage while flushing UTXO updates to disk. - As a result, only half of the available memory was actually used as cache, and the other half was - reserved to accommodate flushing. This is no longer the case (See [PR 10148](https://github.com/bitcoin/bitcoin/pull/10148)), and the entirety of - the available cache (see `-dbcache`) is now actually used as cache. This reduces the flushing - frequency by a factor 2 or more. -- In previous versions, signature validation for transactions has been cached when the - transaction is accepted to the mempool. Version 0.15 extends this to cache the entire script - validity (See [PR 10192](https://github.com/bitcoin/bitcoin/pull/10192)). This means that if a transaction in a block has already been accepted to the - mempool, the scriptSig does not need to be re-evaluated. Empirical tests show that - this results in new block validation being 40-50% faster. -- LevelDB has been upgraded to version 1.20 (See [PR 10544](https://github.com/bitcoin/bitcoin/pull/10544)). This version contains hardware acceleration for CRC - on architectures supporting SSE 4.2. As a result, synchronization and block validation are now faster. -- SHA256 hashing has been optimized for architectures supporting SSE 4 (See [PR 10821](https://github.com/bitcoin/bitcoin/pull/10821)). SHA256 is around - 50% faster on supported hardware, which results in around 5% faster IBD and block - validation. In version 0.15, SHA256 hardware optimization is disabled in release builds by - default, but can be enabled by using `--enable-experimental-asm` when building. -- Refill of the keypool no longer flushes the wallet between each key which resulted in a ~20x speedup in creating a new wallet. Part of this speedup was used to increase the default keypool to 1000 keys to make recovery more robust. (See [PR 10831](https://github.com/bitcoin/bitcoin/pull/10831)). - -Fee Estimation Improvements ---------------------------- - -Fee estimation has been significantly improved in version 0.15, with more accurate fee estimates used by the wallet and a wider range of options for advanced users of the `estimatesmartfee` and `estimaterawfee` RPCs (See [PR 10199](https://github.com/bitcoin/bitcoin/pull/10199)). - -### Changes to internal logic and wallet behavior - -- Internally, estimates are now tracked on 3 different time horizons. This allows for longer targets and means estimates adjust more quickly to changes in conditions. -- Estimates can now be *conservative* or *economical*. *Conservative* estimates use longer time horizons to produce an estimate which is less susceptible to rapid changes in fee conditions. *Economical* estimates use shorter time horizons and will be more affected by short-term changes in fee conditions. Economical estimates may be considerably lower during periods of low transaction activity (for example over weekends), but may result in transactions being unconfirmed if prevailing fees increase rapidly. -- By default, the wallet will use conservative fee estimates to increase the reliability of transactions being confirmed within the desired target. For transactions that are marked as replaceable, the wallet will use an economical estimate by default, since the fee can be 'bumped' if the fee conditions change rapidly (See [PR 10589](https://github.com/bitcoin/bitcoin/pull/10589)). -- Estimates can now be made for confirmation targets up to 1008 blocks (one week). -- More data on historical fee rates is stored, leading to more precise fee estimates. -- Transactions which leave the mempool due to eviction or other non-confirmed reasons are now taken into account by the fee estimation logic, leading to more accurate fee estimates. -- The fee estimation logic will make sure enough data has been gathered to return a meaningful estimate. If there is insufficient data, a fallback default fee is used. - -### Changes to fee estimate RPCs - -- The `estimatefee` RPC is now deprecated in favor of using only `estimatesmartfee` (which is the implementation used by the GUI) -- The `estimatesmartfee` RPC interface has been changed (See [PR 10707](https://github.com/bitcoin/bitcoin/pull/10707)): - - The `nblocks` argument has been renamed to `conf_target` (to be consistent with other RPC methods). - - An `estimate_mode` argument has been added. This argument takes one of the following strings: `CONSERVATIVE`, `ECONOMICAL` or `UNSET` (which defaults to `CONSERVATIVE`). - - The RPC return object now contains an `errors` member, which returns errors encountered during processing. - - If Bitcoin Core has not been running for long enough and has not seen enough blocks or transactions to produce an accurate fee estimation, an error will be returned (previously a value of -1 was used to indicate an error, which could be confused for a feerate). -- A new `estimaterawfee` RPC is added to provide raw fee data. External clients can query and use this data in their own fee estimation logic. - -Multi-wallet support --------------------- - -Bitcoin Core now supports loading multiple, separate wallets (See [PR 8694](https://github.com/bitcoin/bitcoin/pull/8694), [PR 10849](https://github.com/bitcoin/bitcoin/pull/10849)). The wallets are completely separated, with individual balances, keys and received transactions. - -Multi-wallet is enabled by using more than one `-wallet` argument when starting Bitcoin, either on the command line or in the Bitcoin config file. - -**In Bitcoin-Qt, only the first wallet will be displayed and accessible for creating and signing transactions.** GUI selectable multiple wallets will be supported in a future version. However, even in 0.15 other loaded wallets will remain synchronized to the node's current tip in the background. This can be useful if running a pruned node, since loading a wallet where the most recent sync is beyond the pruned height results in having to download and revalidate the whole blockchain. Continuing to synchronize all wallets in the background avoids this problem. - -Bitcoin Core 0.15.0 contains the following changes to the RPC interface and `bitcoin-cli` for multi-wallet: - -* When running Bitcoin Core with a single wallet, there are **no** changes to the RPC interface or `bitcoin-cli`. All RPC calls and `bitcoin-cli` commands continue to work as before. -* When running Bitcoin Core with multi-wallet, all *node-level* RPC methods continue to work as before. HTTP RPC requests should be send to the normal `:` endpoint, and `bitcoin-cli` commands should be run as before. A *node-level* RPC method is any method which does not require access to the wallet. -* When running Bitcoin Core with multi-wallet, *wallet-level* RPC methods must specify the wallet for which they're intended in every request. HTTP RPC requests should be send to the `:/wallet/` endpoint, for example `127.0.0.1:8332/wallet/wallet1.dat`. `bitcoin-cli` commands should be run with a `-rpcwallet` option, for example `bitcoin-cli -rpcwallet=wallet1.dat getbalance`. -* A new *node-level* `listwallets` RPC method is added to display which wallets are currently loaded. The names returned by this method are the same as those used in the HTTP endpoint and for the `rpcwallet` argument. - -Note that while multi-wallet is now fully supported, the RPC multi-wallet interface should be considered unstable for version 0.15.0, and there may backwards-incompatible changes in future versions. - -Replace-by-fee control in the GUI ---------------------------------- - -Bitcoin Core has supported creating opt-in replace-by-fee (RBF) transactions -since version 0.12.0, and since version 0.14.0 has included a `bumpfee` RPC method to -replace unconfirmed opt-in RBF transactions with a new transaction that pays -a higher fee. - -In version 0.15, creating an opt-in RBF transaction and replacing the unconfirmed -transaction with a higher-fee transaction are both supported in the GUI (See [PR 9592](https://github.com/bitcoin/bitcoin/pull/9592)). - -Removal of Coin Age Priority ----------------------------- - -In previous versions of Bitcoin Core, a portion of each block could be reserved for transactions based on the age and value of UTXOs they spent. This concept (Coin Age Priority) is a policy choice by miners, and there are no consensus rules around the inclusion of Coin Age Priority transactions in blocks. In practice, only a few miners continue to use Coin Age Priority for transaction selection in blocks. Bitcoin Core 0.15 removes all remaining support for Coin Age Priority (See [PR 9602](https://github.com/bitcoin/bitcoin/pull/9602)). This has the following implications: - -- The concept of *free transactions* has been removed. High Coin Age Priority transactions would previously be allowed to be relayed even if they didn't attach a miner fee. This is no longer possible since there is no concept of Coin Age Priority. The `-limitfreerelay` and `-relaypriority` options which controlled relay of free transactions have therefore been removed. -- The `-sendfreetransactions` option has been removed, since almost all miners do not include transactions which do not attach a transaction fee. -- The `-blockprioritysize` option has been removed. -- The `estimatepriority` and `estimatesmartpriority` RPCs have been removed. -- The `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry` and `getrawmempool` RPCs no longer return `startingpriority` and `currentpriority`. -- The `prioritisetransaction` RPC no longer takes a `priority_delta` argument, which is replaced by a `dummy` argument for backwards compatibility with clients using positional arguments. The RPC is still used to change the apparent fee-rate of the transaction by using the `fee_delta` argument. -- `-minrelaytxfee` can now be set to 0. If `minrelaytxfee` is set, then fees smaller than `minrelaytxfee` (per kB) are rejected from relaying, mining and transaction creation. This defaults to 1000 satoshi/kB. -- The `-printpriority` option has been updated to only output the fee rate and hash of transactions included in a block by the mining code. - -Mempool Persistence Across Restarts ------------------------------------ - -Version 0.14 introduced mempool persistence across restarts (the mempool is saved to a `mempool.dat` file in the data directory prior to shutdown and restores the mempool when the node is restarted). Version 0.15 allows this feature to be switched on or off using the `-persistmempool` command-line option (See [PR 9966](https://github.com/bitcoin/bitcoin/pull/9966)). By default, the option is set to true, and the mempool is saved on shutdown and reloaded on startup. If set to false, the `mempool.dat` file will not be loaded on startup or saved on shutdown. - -New RPC methods ---------------- - -Version 0.15 introduces several new RPC methods: - -- `abortrescan` stops current wallet rescan, e.g. when triggered by an `importprivkey` call (See [PR 10208](https://github.com/bitcoin/bitcoin/pull/10208)). -- `combinerawtransaction` accepts a JSON array of raw transactions and combines them into a single raw transaction (See [PR 10571](https://github.com/bitcoin/bitcoin/pull/10571)). -- `estimaterawfee` returns raw fee data so that customized logic can be implemented to analyze the data and calculate estimates. See [Fee Estimation Improvements](#fee-estimation-improvements) for full details on changes to the fee estimation logic and interface. -- `getchaintxstats` returns statistics about the total number and rate of transactions - in the chain (See [PR 9733](https://github.com/bitcoin/bitcoin/pull/9733)). -- `listwallets` lists wallets which are currently loaded. See the *Multi-wallet* section - of these release notes for full details (See [Multi-wallet support](#multi-wallet-support)). -- `uptime` returns the total runtime of the `bitcoind` server since its last start (See [PR 10400](https://github.com/bitcoin/bitcoin/pull/10400)). - -Low-level RPC changes ---------------------- - -- When using Bitcoin Core in multi-wallet mode, RPC requests for wallet methods must specify - the wallet that they're intended for. See [Multi-wallet support](#multi-wallet-support) for full details. - -- The new database model no longer stores information about transaction - versions of unspent outputs (See [Performance improvements](#performance-improvements)). This means that: - - The `gettxout` RPC no longer has a `version` field in the response. - - The `gettxoutsetinfo` RPC reports `hash_serialized_2` instead of `hash_serialized`, - which does not commit to the transaction versions of unspent outputs, but does - commit to the height and coinbase information. - - The `getutxos` REST path no longer reports the `txvers` field in JSON format, - and always reports 0 for transaction versions in the binary format - -- The `estimatefee` RPC is deprecated. Clients should switch to using the `estimatesmartfee` RPC, which returns better fee estimates. See [Fee Estimation Improvements](#fee-estimation-improvements) for full details on changes to the fee estimation logic and interface. - -- The `gettxoutsetinfo` response now contains `disk_size` and `bogosize` instead of - `bytes_serialized`. The first is a more accurate estimate of actual disk usage, but - is not deterministic. The second is unrelated to disk usage, but is a - database-independent metric of UTXO set size: it counts every UTXO entry as 50 + the - length of its scriptPubKey (See [PR 10426](https://github.com/bitcoin/bitcoin/pull/10426)). - -- `signrawtransaction` can no longer be used to combine multiple transactions into a single transaction. Instead, use the new `combinerawtransaction` RPC (See [PR 10571](https://github.com/bitcoin/bitcoin/pull/10571)). - -- `fundrawtransaction` no longer accepts a `reserveChangeKey` option. This option used to allow RPC users to fund a raw transaction using an key from the keypool for the change address without removing it from the available keys in the keypool. The key could then be re-used for a `getnewaddress` call, which could potentially result in confusing or dangerous behaviour (See [PR 10784](https://github.com/bitcoin/bitcoin/pull/10784)). - -- `estimatepriority` and `estimatesmartpriority` have been removed. See [Removal of Coin Age Priority](#removal-of-coin-age-priority). - -- The `listunspent` RPC now takes a `query_options` argument (see [PR 8952](https://github.com/bitcoin/bitcoin/pull/8952)), which is a JSON object - containing one or more of the following members: - - `minimumAmount` - a number specifying the minimum value of each UTXO - - `maximumAmount` - a number specifying the maximum value of each UTXO - - `maximumCount` - a number specifying the minimum number of UTXOs - - `minimumSumAmount` - a number specifying the minimum sum value of all UTXOs - -- The `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry` and `getrawmempool` RPCs no longer return `startingpriority` and `currentpriority`. See [Removal of Coin Age Priority](#removal-of-coin-age-priority). - -- The `dumpwallet` RPC now returns the full absolute path to the dumped wallet. It - used to return no value, even if successful (See [PR 9740](https://github.com/bitcoin/bitcoin/pull/9740)). - -- In the `getpeerinfo` RPC, the return object for each peer now returns an `addrbind` member, which contains the ip address and port of the connection to the peer. This is in addition to the `addrlocal` member which contains the ip address and port of the local node as reported by the peer (See [PR 10478](https://github.com/bitcoin/bitcoin/pull/10478)). - -- The `disconnectnode` RPC can now disconnect a node specified by node ID (as well as by IP address/port). To disconnect a node based on node ID, call the RPC with the new `nodeid` argument (See [PR 10143](https://github.com/bitcoin/bitcoin/pull/10143)). - -- The second argument in `prioritisetransaction` has been renamed from `priority_delta` to `dummy` since Bitcoin Core no longer has a concept of coin age priority. The `dummy` argument has no functional effect, but is retained for positional argument compatibility. See [Removal of Coin Age Priority](#removal-of-coin-age-priority). - -- The `resendwallettransactions` RPC throws an error if the `-walletbroadcast` option is set to false (See [PR 10995](https://github.com/bitcoin/bitcoin/pull/10995)). - -- The second argument in the `submitblock` RPC argument has been renamed from `parameters` to `dummy`. This argument never had any effect, and the renaming is simply to communicate this fact to the user (See [PR 10191](https://github.com/bitcoin/bitcoin/pull/10191)) - (Clients should, however, use positional arguments for `submitblock` in order to be compatible with BIP 22.) - -- The `verbose` argument of `getblock` has been renamed to `verbosity` and now takes an integer from 0 to 2. Verbose level 0 is equivalent to `verbose=false`. Verbose level 1 is equivalent to `verbose=true`. Verbose level 2 will give the full transaction details of each transaction in the output as given by `getrawtransaction`. The old behavior of using the `verbose` named argument and a boolean value is still maintained for compatibility. - -- Error codes have been updated to be more accurate for the following error cases (See [PR 9853](https://github.com/bitcoin/bitcoin/pull/9853)): - - `getblock` now returns RPC_MISC_ERROR if the block can't be found on disk (for - example if the block has been pruned). Previously returned RPC_INTERNAL_ERROR. - - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned - because the node is not in pruned mode. Previously returned RPC_METHOD_NOT_FOUND. - - `pruneblockchain` now returns RPC_INVALID_PARAMETER if the blocks cannot be pruned - because the supplied timestamp is too late. Previously returned RPC_INTERNAL_ERROR. - - `pruneblockchain` now returns RPC_MISC_ERROR if the blocks cannot be pruned - because the blockchain is too short. Previously returned RPC_INTERNAL_ERROR. - - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the supplied IP address - or subnet is invalid. Previously returned RPC_CLIENT_NODE_ALREADY_ADDED. - - `setban` now returns RPC_CLIENT_INVALID_IP_OR_SUBNET if the user tries to unban - a node that has not previously been banned. Previously returned RPC_MISC_ERROR. - - `removeprunedfunds` now returns RPC_WALLET_ERROR if `bitcoind` is unable to remove - the transaction. Previously returned RPC_INTERNAL_ERROR. - - `removeprunedfunds` now returns RPC_INVALID_PARAMETER if the transaction does not - exist in the wallet. Previously returned RPC_INTERNAL_ERROR. - - `fundrawtransaction` now returns RPC_INVALID_ADDRESS_OR_KEY if an invalid change - address is provided. Previously returned RPC_INVALID_PARAMETER. - - `fundrawtransaction` now returns RPC_WALLET_ERROR if `bitcoind` is unable to create - the transaction. The error message provides further details. Previously returned - RPC_INTERNAL_ERROR. - - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has - descendants in the wallet. Previously returned RPC_MISC_ERROR. - - `bumpfee` now returns RPC_INVALID_PARAMETER if the provided transaction has - descendants in the mempool. Previously returned RPC_MISC_ERROR. - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has - has been mined or conflicts with a mined transaction. Previously returned - RPC_INVALID_ADDRESS_OR_KEY. - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction is not - BIP 125 replaceable. Previously returned RPC_INVALID_ADDRESS_OR_KEY. - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has already - been bumped by a different transaction. Previously returned RPC_INVALID_REQUEST. - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction contains - inputs which don't belong to this wallet. Previously returned RPC_INVALID_ADDRESS_OR_KEY. - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has multiple change - outputs. Previously returned RPC_MISC_ERROR. - - `bumpfee` now returns RPC_WALLET_ERROR if the provided transaction has no change - output. Previously returned RPC_MISC_ERROR. - - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too high. Previously returned - RPC_MISC_ERROR. - - `bumpfee` now returns RPC_WALLET_ERROR if the fee is too low. Previously returned - RPC_MISC_ERROR. - - `bumpfee` now returns RPC_WALLET_ERROR if the change output is too small to bump the - fee. Previously returned RPC_MISC_ERROR. - -0.15.0 Change log -================= - -### RPC and other APIs -- #9485 `61a640e` ZMQ example using python3 and asyncio (mcelrath) -- #9894 `0496e15` remove 'label' filter for rpc command help (instagibbs) -- #9853 `02bd6e9` Fix error codes from various RPCs (jnewbery) -- #9842 `598ef9c` Fix RPC failure testing (continuation of #9707) (jnewbery) -- #10038 `d34995a` Add mallocinfo mode to `getmemoryinfo` RPC (laanwj) -- #9500 `3568b30` [Qt][RPC] Autocomplete commands for 'help' command in debug console (achow101) -- #10056 `e6156a0` [zmq] Call va_end() on va_start()ed args (kallewoof) -- #10086 `7438cea` Trivial: move rpcserialversion into RPC option group (jlopp) -- #10150 `350b224` [rpc] Add logging rpc (jnewbery) -- #10208 `393160c` [wallet] Rescan abortability (kallewoof) -- #10143 `a987def` [net] Allow disconnectnode RPC to be called with node id (jnewbery) -- #10281 `0e8499c` doc: Add RPC interface guidelines (laanwj) -- #9733 `d4732f3` Add getchaintxstats RPC (sipa) -- #10310 `f4b15e2` [doc] Add hint about getmempoolentry to getrawmempool help (kallewoof) -- #8704 `96c850c` [RPC] Transaction details in getblock (achow101) -- #8952 `9390845` Add query options to listunspent RPC call (pedrobranco) -- #10413 `08ac35a` Fix docs (there's no rpc command setpaytxfee) (RHavar) -- #8384 `e317c0d` Add witness data output to TxInError messages (instagibbs) -- #9571 `4677151` RPC: getblockchaininfo returns BIP signaling statistics (pinheadmz) -- #10450 `ef2d062` Fix bumpfee rpc "errors" return value (ryanofsky) -- #10475 `39039b1` [RPC] getmempoolinfo mempoolminfee is a BTC/KB feerate (instagibbs) -- #10478 `296928e` rpc: Add listen address to incoming connections in `getpeerinfo` (laanwj) -- #10403 `08d0390` Fix importmulti failure to return rescan errors (ryanofsky) -- #9740 `9fec4da` Add friendly output to dumpwallet (aideca) -- #10426 `16f6c98` Replace bytes_serialized with bogosize (sipa) -- #10252 `980deaf` RPC/Mining: Restore API compatibility for prioritisetransaction (luke-jr) -- #9672 `46311e7` Opt-into-RBF for RPC & bitcoin-tx (luke-jr) -- #10481 `9c248e3` Decodehextx scripts sanity check (achow101) -- #10488 `fa1f106` Note that the prioritizetransaction dummy value is deprecated, and has no meaning (TheBlueMatt) -- #9738 `c94b89e` gettxoutproof() should return consistent result (jnewbery) -- #10191 `00350bd` [trivial] Rename unused RPC arguments 'dummy' (jnewbery) -- #10627 `b62b4c8` fixed listunspent rpc convert parameter (tnakagawa) -- #10412 `bef02fb` Improve wallet rescan API (ryanofsky) -- #10400 `1680ee0` [RPC] Add an uptime command that displays the amount of time (in seconds) bitcoind has been running (rvelhote) -- #10683 `d81bec7` rpc: Move the `generate` RPC call to rpcwallet (laanwj) -- #10710 `30bc0f6` REST/RPC example update (Mirobit) -- #10747 `9edda0c` [rpc] fix verbose argument for getblock in bitcoin-cli (jnewbery) -- #10589 `104f5f2` More economical fee estimates for RBF and RPC options to control (morcos) -- #10543 `b27b004` Change API to estimaterawfee (morcos) -- #10807 `afd2fca` getbalance example covers at least 6 confirms (instagibbs) -- #10707 `75b5643` Better API for estimatesmartfee RPC (morcos) -- #10784 `9e8d6a3` Do not allow users to get keys from keypool without reserving them (TheBlueMatt) -- #10857 `d445a2c` [RPC] Add a deprecation warning to getinfo's output (achow101) -- #10571 `adf170d` [RPC]Move transaction combining from signrawtransaction to new RPC (achow101) -- #10783 `041dad9` [RPC] Various rpc argument fixes (instagibbs) -- #9622 `6ef3c7e` [rpc] listsinceblock should include lost transactions when parameter is a reorg'd block (kallewoof) -- #10799 `8537187` Prevent user from specifying conflicting parameters to fundrawtx (TheBlueMatt) -- #10931 `0b11a07` Fix misleading "Method not found" multiwallet errors (ryanofsky) -- #10788 `f66c596` [RPC] Fix addwitnessaddress by replacing ismine with producesignature (achow101) -- #10999 `627c3c0` Fix amounts formatting in `decoderawtransaction` (laanwj) -- #11002 `4268426` [wallet] return correct error code from resendwallettransaction (jnewbery) -- #11029 `96a63a3` [RPC] trivial: gettxout no longer shows version of tx (FelixWeis) -- #11083 `6c2b008` Fix combinerawtransaction RPC help result section (jonasnick) -- #11027 `07164bb` [RPC] Only return hex field once in getrawtransaction (achow101) -- #10698 `5af6572` Be consistent in calling transactions "replaceable" for Opt-In RBF (TheBlueMatt) - -### Block and transaction handling -- #9801 `a8c5751` Removed redundant parameter from mempool.PrioritiseTransaction (gubatron) -- #9819 `1efc99c` Remove harmless read of unusued priority estimates (morcos) -- #9822 `b7547fa` Remove block file location upgrade code (benma) -- #9602 `30ff3a2` Remove coin age priority and free transactions - implementation (morcos) -- #9548 `47510ad` Remove min reasonable fee (morcos) -- #10249 `c73af54` Switch CCoinsMap from boost to std unordered_map (sipa) -- #9966 `2a183de` Control mempool persistence using a command line parameter (jnewbery) -- #10199 `318ea50` Better fee estimates (morcos) -- #10196 `bee3529` Bugfix: PrioritiseTransaction updates the mempool tx counter (sdaftuar) -- #10195 `1088b02` Switch chainstate db and cache to per-txout model (sipa) -- #10284 `c2ab38b` Always log debug information for fee calculation in CreateTransaction (morcos) -- #10503 `efbcf2b` Use REJECT_DUPLICATE for already known and conflicted txn (sipa) -- #10537 `b3eb0d6` Few Minor per-utxo assert-semantics re-adds and tweak (TheBlueMatt) -- #10626 `8c841a3` doc: Remove outdated minrelaytxfee comment (MarcoFalke) -- #10559 `234ffc6` Change semantics of HaveCoinInCache to match HaveCoin (morcos) -- #10581 `7878353` Simplify return values of GetCoin/HaveCoin(InCache) (sipa) -- #10684 `a381f6a` Remove no longer used mempool.exists(outpoint) (morcos) -- #10148 `d4e551a` Use non-atomic flushing with block replay (sipa) -- #10685 `30c2130` Clarify CCoinsViewMemPool documentation (TheBlueMatt) -- #10558 `90a002e` Address nits from per-utxo change (morcos) -- #10706 `6859ad2` Improve wallet fee logic and fix GUI bugs (morcos) -- #10526 `754aa02` Force on-the-fly compaction during pertxout upgrade (sipa) -- #10985 `d896d5c` Add undocumented -forcecompactdb to force LevelDB compactions (sipa) -- #10292 `e4bbd3d` Improved efficiency in COutPoint constructors (mm-s) -- #10290 `8d6d43e` Add -stopatheight for benchmarking (sipa) - -### P2P protocol and network code -- #9726 `7639d38` netbase: Do not print an error on connection timeouts through proxy (laanwj) -- #9805 `5b583ef` Add seed.btc.petertodd.org to mainnet DNS seeds (petertodd) -- #9861 `22f609f` Trivial: Debug log ambiguity fix for peer addrs (keystrike) -- #9774 `90cb2a2` Enable host lookups for -proxy and -onion parameters (jmcorgan) -- #9558 `7b585cf` Clarify assumptions made about when BlockCheck is called (TheBlueMatt) -- #10135 `e19586a` [p2p] Send the correct error code in reject messages (jnewbery) -- #9665 `eab00d9` Use cached [compact] blocks to respond to getdata messages (TheBlueMatt) -- #10215 `a077a90` Check interruptNet during dnsseed lookups (TheBlueMatt) -- #10234 `faf2dea` [net] listbanned RPC and QT should show correct banned subnets (jnewbery) -- #10134 `314ebdf` [qa] Fixes segwit block relay test after inv-direct-fetch was disabled (sdaftuar) -- #10351 `3f57c55` removed unused code in INV message (Greg-Griffith) -- #10061 `ae78609` [net] Added SetSocketNoDelay() utility function (tjps) -- #10408 `28c6e8d` Net: Improvements to Tor control port parser (str4d) -- #10460 `5c63d66` Broadcast address every day, not 9 hours (sipa) -- #10471 `400fdd0` Denote functions CNode::GetRecvVersion() and CNode::GetRefCount() as const (pavlosantoniou) -- #10345 `67700b3` [P2P] Timeout for headers sync (sdaftuar) -- #10564 `8d9f45e` Return early in IsBanned (gmaxwell) -- #10587 `de8db47` Net: Fix resource leak in ReadBinaryFile(...) (practicalswift) -- #9549 `b33ca14` [net] Avoid possibility of NULL pointer dereference in MarkBlockAsInFlight(...) (practicalswift) -- #10446 `2772dc9` net: avoid extra dns query per seed (theuni) -- #10824 `9dd6a2b` Avoid unnecessary work in SetNetworkActive (promag) -- #10948 `df3a6f4` p2p: Hardcoded seeds update pre-0.15 branch (laanwj) -- #10977 `02f4c4a` [net] Fix use of uninitialized value in getnetworkinfo(const JSONRPCRequest&) (practicalswift) -- #10982 `c8b62c7` Disconnect network service bits 6 and 8 until Aug 1, 2018 (TheBlueMatt) -- #11012 `0e5cff6` Make sure to clean up mapBlockSource if we've already seen the block (theuni) - -### Validation -- #9725 `67023e9` CValidationInterface Cleanups (TheBlueMatt) -- #10178 `2584925` Remove CValidationInterface::UpdatedTransaction (TheBlueMatt) -- #10201 `a6548a4` pass Consensus::Params& to functions in validation.cpp and make them static (mariodian) -- #10297 `431a548` Simplify DisconnectBlock arguments/return value (sipa) -- #10464 `f94b7d5` Introduce static DoWarning (simplify UpdateTip) (jtimon) -- #10569 `2e7d8f8` Fix stopatheight (achow101) -- #10192 `2935b46` Cache full script execution results in addition to signatures (TheBlueMatt) -- #10179 `21ed30a` Give CValidationInterface Support for calling notifications on the CScheduler Thread (TheBlueMatt) -- #10557 `66270a4` Make check to distinguish between orphan txs and old txs more efficient (morcos) -- #10775 `7c2400c` nCheckDepth chain height fix (romanornr) -- #10821 `16240f4` Add SSE4 optimized SHA256 (sipa) -- #10854 `04d395e` Avoid using sizes on non-fixed-width types to derive protocol constants (gmaxwell) -- #10945 `2a50b11` Update defaultAssumeValid according to release-process.md (gmaxwell) -- #10986 `2361208` Update chain transaction statistics (sipa) -- #11028 `6bdf4b3` Avoid masking of difficulty adjustment errors by checkpoints (sipa) -- #9533 `cb598cf` Allow non-power-of-2 signature cache sizes (sipa) -- #9208 `acd9957` Improve DisconnectTip performance (sdaftuar) -- #10618 `f90603a` Remove confusing MAX_BLOCK_BASE_SIZE (gmaxwell) -- #10758 `bd92424` Fix some chainstate-init-order bugs (TheBlueMatt) -- #10550 `b7296bc` Don't return stale data from CCoinsViewCache::Cursor() (ryanofsky) -- #10998 `2507fd5` Fix upgrade cancel warnings (TheBlueMatt) -- #9868 `cbdb473` Abstract out the command line options for block assembly (sipa) - -### Build system -- #9727 `5f0556d` Remove fallbacks for boost_filesystem < v3 (laanwj) -- #9788 `50a2265` gitian: bump descriptors for master (theuni) -- #9794 `7ca2f54` Minor update to qrencode package builder (mitchellcash) -- #9514 `2cc0df1` release: Windows signing script (theuni) -- #9921 `8b789d8` build: Probe MSG_DONTWAIT in the same way as MSG_NOSIGNAL (laanwj) -- #10011 `32d1b34` build: Fix typo s/HAVE_DONTWAIT/HAVE_MSG_DONTWAIT (laanwj) -- #9946 `90dd9e6` Fix build errors if spaces in path or parent directory (pinheadmz) -- #10136 `81da4c7` build: Disable Wshadow warning (laanwj) -- #10166 `64962ae` Ignore Doxyfile generated from Doxyfile.in template (paveljanik) -- #10239 `0416ea9` Make Boost use std::atomic internally (sipa) -- #10228 `27faa6c` build: regenerate bitcoin-config.h as necessary (theuni) -- #10273 `8979f45` [scripts] Minor improvements to `macdeployqtplus` script (chrisgavin) -- #10325 `a26280b` 0.15.0 Depends Updates (fanquake) -- #10328 `79aeff6` Update contrib/debian to latest Ubuntu PPA upload (TheBlueMatt) -- #7522 `d25449f` Bugfix: Only use git for build info if the repository is actually the right one (luke-jr) -- #10489 `e654d61` build: silence gcc7's implicit fallthrough warning (theuni) -- #10549 `ad1a13e` Avoid printing generic and duplicated "checking for QT" during ./configure (drizzt) -- #10628 `8465b68` [depends] expat 2.2.1 (fanquake) -- #10806 `db825d2` build: verify that the assembler can handle crc32 functions (theuni) -- #10766 `b4d03be` Building Environment: Set ARFLAGS to cr (ReneNyffenegger) -- #10803 `91edda8` Explicitly search for bdb5.3 (pstratem) -- #10855 `81560b0` random: only use getentropy on openbsd (theuni) -- #10508 `1caafa6` Run Qt wallet tests on travis (ryanofsky) -- #10851 `e222618` depends: fix fontconfig with newer glibc (theuni) -- #10971 `88b1e4b` build: fix missing sse42 in depends builds (theuni) -- #11097 `129b03f` gitian: quick hack to fix version string in releases (theuni) -- #10039 `919aaf6` Fix compile errors with Qt 5.3.2 and Boost 1.55.0 (ryanofsky) -- #10168 `7032021` Fix build warning from #error text (jnewbery) -- #10301 `318392c` Check if sys/random.h is required for getentropy (jameshilliard) - -### GUI -- #9724 `1a9fd5c` Qt/Intro: Add explanation of IBD process (luke-jr) -- #9834 `b00ba62` qt: clean up initialize/shutdown signals (benma) -- #9481 `ce01e62` [Qt] Show more significant warning if we fall back to the default fee (jonasschnelli) -- #9974 `b9f930b` Add basic Qt wallet test (ryanofsky) -- #9690 `a387d3a` Change 'Clear' button string to 'Reset' (da2x) -- #9592 `9c7b7cf` [Qt] Add checkbox in the GUI to opt-in to RBF when creating a transaction (ryanofsky) -- #10098 `2b477e6` Make qt wallet test compatible with qt4 (ryanofsky) -- #9890 `1fa4ae6` Add a button to open the config file in a text editor (ericshawlinux) -- #10156 `51833a1` Fix for issues with startup and multiple monitors on windows (AllanDoensen) -- #10177 `de01da7` Changed "Send" button default status from true to false (KibbledJiveElkZoo) -- #10221 `e96486c` Stop treating coinbase outputs differently in GUI: show them at 1conf (TheBlueMatt) -- #10231 `987a6c0` [Qt] Reduce a significant cs_main lock freeze (jonasschnelli) -- #10242 `f6f3b58` [qt] Don't call method on null WalletModel object (ryanofsky) -- #10093 `a3e756b` [Qt] Don't add arguments of sensitive command to console window (jonasschnelli) -- #10362 `95546c8` [GUI] Add OSX keystroke to RPCConsole info (spencerlievens) -- #9697 `962cd3f` [Qt] simple fee bumper with user verification (jonasschnelli) -- #10390 `e477516` [wallet] remove minimum total fee option (instagibbs) -- #10420 `4314544` Add Qt tests for wallet spends & bumpfee (ryanofsky) -- #10454 `c1c9a95` Fix broken q4 test build (ryanofsky) -- #10449 `64beb13` Overhaul Qt fee bumper (jonasschnelli) -- #10582 `7c72fb9` Pass in smart fee slider value to coin control dialog (morcos) -- #10673 `4c72cc3` [qt] Avoid potential null pointer dereference in TransactionView::exportClicked() (practicalswift) -- #10769 `8fdd23a` [Qt] replace fee slider with a Dropdown, extend conf. targets (jonasschnelli) -- #10870 `412b466` [Qt] Use wallet 0 in rpc console if running with multiple wallets (jonasschnelli) -- #10988 `a9dd111` qt: Increase BLOCK_CHAIN_SIZE constants (laanwj) -- #10644 `e292140` Slightly overhaul NSI pixmaps (jonasschnelli) -- #10660 `0c3542e` Allow to cancel the txdb upgrade via splashscreen keypress 'q' (jonasschnelli) - -### Wallet -- #9359 `f7ec7cf` Add test for CWalletTx::GetImmatureCredit() returning stale values (ryanofsky) -- #9576 `56ab672` [wallet] Remove redundant initialization (practicalswift) -- #9333 `fa625b0` Document CWalletTx::mapValue entries and remove erase of nonexistent "version" entry (ryanofsky) -- #9906 `72fb515` Disallow copy constructor CReserveKeys (instagibbs) -- #9369 `3178b2c` Factor out CWallet::nTimeSmart computation into a method (ryanofsky) -- #9830 `afcd7c0` Add safe flag to listunspent result (NicolasDorier) -- #9993 `c49355c` Initialize nRelockTime (pstratem) -- #9818 `3d857f3` Save watch only key timestamps when reimporting keys (ryanofsky) -- #9294 `f34cdcb` Use internal HD chain for change outputs (hd split) (jonasschnelli) -- #10164 `e183ea2` Wallet: reduce excess logic InMempool() (kewde) -- #10186 `c9ff4f8` Remove SYNC_TRANSACTION_NOT_IN_BLOCK magic number (jnewbery) -- #10226 `64c45aa` wallet: Use boost to more portably ensure -wallet specifies only a filename (luke-jr) -- #9827 `c91ca0a` Improve ScanForWalletTransactions return value (ryanofsky) -- #9951 `fa1ac28` Wallet database handling abstractions/simplifications (laanwj) -- #10265 `c29a0d4` [wallet] [moveonly] Check non-null pindex before potentially referencing (kallewoof) -- #10283 `a550f6e` Cleanup: reduce to one GetMinimumFee call signature (morcos) -- #10294 `e2b99b1` [Wallet] unset change position when there is no change (instagibbs) -- #10115 `d3dce0e` Avoid reading the old hd master key during wallet encryption (TheBlueMatt) -- #10341 `18c9deb` rpc/wallet: Workaround older UniValue which returns a std::string temporary for get_str (luke-jr) -- #10308 `94e5227` [wallet] Securely erase potentially sensitive keys/values (tjps) -- #10257 `ea1fd43` [test] Add test for getmemoryinfo (jimmysong) -- #10295 `ce8176d` [qt] Move some WalletModel functions into CWallet (ryanofsky) -- #10506 `7cc2c67` Fix bumpfee test after #10449 (ryanofsky) -- #10500 `098b01d` Avoid CWalletTx copies in GetAddressBalances and GetAddressGroupings (ryanofsky) -- #10455 `0747d33` Simplify feebumper minimum fee code slightly (ryanofsky) -- #10522 `2805d60` [wallet] Remove unused variables (practicalswift) -- #8694 `177433a` Basic multiwallet support (luke-jr) -- #10598 `7a74f88` Supress struct/class mismatch warnings introduced in #10284 (paveljanik) -- #9343 `209eef6` Don't create change at dust limit (morcos) -- #10744 `ed88e31` Use method name via __func__ macro (darksh1ne) -- #10712 `e8b9523` Add change output if necessary to reduce excess fee (morcos) -- #10816 `1c011ff` Properly forbid -salvagewallet and -zapwallettxes for multi wallet (morcos) -- #10235 `5cfdda2` Track keypool entries as internal vs external in memory (TheBlueMatt) -- #10330 `bf0a08b` [wallet] fix zapwallettxes interaction with persistent mempool (jnewbery) -- #10831 `0b01935` Batch flushing operations to the walletdb during top up and increase keypool size (gmaxwell) -- #10795 `7b6e8bc` No longer ever reuse keypool indexes (TheBlueMatt) -- #10849 `bde4f93` Multiwallet: simplest endpoint support (jonasschnelli) -- #10817 `9022aa3` Redefine Dust and add a discard_rate (morcos) -- #10883 `bf3b742` Rename -usewallet to -rpcwallet (morcos) -- #10604 `420238d` [wallet] [tests] Add listwallets RPC, include wallet name in `getwalletinfo` and add multiwallet test (jnewbery) -- #10885 `70888a3` Reject invalid wallets (promag) -- #10949 `af56397` Clarify help message for -discardfee (morcos) -- #10942 `2e857bb` Eliminate fee overpaying edge case when subtracting fee from recipients (morcos) -- #10995 `fa64636` Fix resendwallettransactions assert failure if -walletbroadcast=0 (TheBlueMatt) -- #11022 `653a46d` Basic keypool topup (jnewbery) -- #11081 `9fe1f6b` Add length check for CExtKey deserialization (jonasschnelli, guidovranken) -- #11044 `4ef8374` [wallet] Keypool topup cleanups (jnewbery) -- #11145 `e51bb71` Fix rounding bug in calculation of minimum change (morcos) -- #9605 `779f2f9` Use CScheduler for wallet flushing, remove ThreadFlushWalletDB (TheBlueMatt) -- #10108 `4e3efd4` ApproximateBestSubset should take inputs by reference, not value (RHavar) - -### Tests and QA -- #9744 `8efd1c8` Remove unused module from rpc-tests (34ro) -- #9657 `7ff4a53` Improve rpc-tests.py (jnewbery) -- #9766 `7146d96` Add --exclude option to rpc-tests.py (jnewbery) -- #9577 `d6064a8` Fix docstrings in qa tests (jnewbery) -- #9823 `a13a417` qa: Set correct path for binaries in rpc tests (MarcoFalke) -- #9847 `6206252` Extra test vector for BIP32 (sipa) -- #9350 `88c2ae3` [Trivial] Adding label for amount inside of tx_valid/tx_invalid.json (Christewart) -- #9888 `36afd4d` travis: Verify commits only for one target (MarcoFalke) -- #9904 `58861ad` test: Fail if InitBlockIndex fails (laanwj) -- #9828 `67c5cc1` Avoid -Wshadow warnings in wallet_tests (ryanofsky) -- #9832 `48c3429` [qa] assert_start_raises_init_error (NicolasDorier) -- #9739 `9d5fcbf` Fix BIP68 activation test (jnewbery) -- #9547 `d32581c` bench: Assert that division by zero is unreachable (practicalswift) -- #9843 `c78adbf` Fix segwit getblocktemplate test (jnewbery) -- #9929 `d5ce14e` tests: Delete unused function _rpchost_to_args (laanwj) -- #9555 `19be26a` [test] Avoid reading a potentially uninitialized variable in tx_invalid-test (transaction_tests.cpp) (practicalswift) -- #9945 `ac23a7c` Improve logging in bctest.py if there is a formatting mismatch (jnewbery) -- #9768 `8910b47` [qa] Add logging to test_framework.py (jnewbery) -- #9972 `21833f9` Fix extended rpc tests broken by #9768 (jnewbery) -- #9977 `857d1e1` QA: getblocktemplate_longpoll.py should always use >0 fee tx (sdaftuar) -- #9970 `3cc13ea` Improve readability of segwit.py, smartfees.py (sdaftuar) -- #9497 `2c781fb` CCheckQueue Unit Tests (JeremyRubin) -- #10024 `9225de2` [trivial] Use log.info() instead of print() in remaining functional test cases (jnewbery) -- #9956 `3192e52` Reorganise qa directory (jnewbery) -- #10017 `02d64bd` combine_logs.py - aggregates log files from multiple bitcoinds during functional tests (jnewbery) -- #10047 `dfef6b6` [tests] Remove unused variables and imports (practicalswift) -- #9701 `a230b05` Make bumpfee tests less fragile (ryanofsky) -- #10053 `ca20923` [test] Allow functional test cases to be skipped (jnewbery) -- #10052 `a0b1e57` [test] Run extended tests once daily in Travis (jnewbery) -- #10069 `1118493` [QA] Fix typo in fundrawtransaction test (NicolasDorier) -- #10083 `c044f03` [QA] Renaming rawTx into rawtx (NicolasDorier) -- #10073 `b1a4f27` Actually run assumevalid.py (jnewbery) -- #9780 `c412fd8` Suppress noisy output from qa tests in Travis (jnewbery) -- #10096 `79af9fb` Check that all test scripts in test/functional are being run (jnewbery) -- #10076 `5b029aa` [qa] combine_logs: Use ordered list for logfiles (MarcoFalke) -- #10107 `f2734c2` Remove unused variable. Remove accidental trailing semicolons in Python code (practicalswift) -- #10109 `8ac8041` Remove SingleNodeConnCB (jnewbery) -- #10114 `edc62c9` [tests] sync_with_ping should assert that ping hasn't timed out (jnewbery) -- #10128 `427d2fd` Speed Up CuckooCache tests (JeremyRubin) -- #10072 `12af74b` Remove sources of unreliablility in extended functional tests (jnewbery) -- #10077 `ebfd653` [qa] Add setnetworkactive smoke test (MarcoFalke) -- #10152 `080d7c7` [trivial] remove unused line in Travis config (jnewbery) -- #10159 `df1ca9e` [tests] color test results and sort alphabetically (jnewbery) -- #10124 `88799ea` [test] Suppress test logging spam (jnewbery) -- #10142 `ed09dd3` Run bitcoin_test-qt under minimal QPA platform (ryanofsky) -- #9949 `a27dbc5` [bench] Avoid function call arguments which are pointers to uninitialized values (practicalswift) -- #10187 `b44adf9` tests: Fix test_runner return value in case of skipped test (laanwj) -- #10197 `d86bb07` [tests] Functional test warnings (jnewbery) -- #10219 `9111df9` Tests: Order Python Tests Differently (jimmysong) -- #10229 `f3db4c6` Tests: Add test for getdifficulty (jimmysong) -- #10224 `2723bcd` [test] Add test for getaddednodeinfo (jimmysong) -- #10023 `c530c15` [tests] remove maxblocksinflight.py (functionality covered by other test) (jnewbery) -- #10097 `1b25b6d` Move zmq test skipping logic into individual test case (jnewbery) -- #10272 `54e2d87` [Tests] Prevent warning: variable 'x' is uninitialized (paveljanik) -- #10225 `e0a7e19` [test] Add aborttrescan tests (kallewoof) -- #10278 `8254a8a` [test] Add Unit Test for GetListenPort (jimmysong) -- #10280 `47535d7` [test] Unit test amount.h/amount.cpp (jimmysong) -- #10256 `80c3a73` [test] Add test for gettxout to wallet.py (jimmysong) -- #10264 `492d22f` [test] Add tests for getconnectioncount, getnettotals and ping (jimmysong) -- #10169 `8f3e384` [tests] Remove func test code duplication (jnewbery) -- #10198 `dc8fc0c` [tests] Remove is_network_split from functional test framework (jnewbery) -- #10255 `3c5e6c9` [test] Add test for listaddressgroupings (jimmysong) -- #10137 `75171f0` Remove unused import. Remove accidental trailing semicolons (practicalswift) -- #10307 `83073de` [tests] allow zmq test to be run in out-of-tree builds (jnewbery) -- #10344 `e927483` [tests] Fix abandonconflict.py intermittency (jnewbery) -- #10318 `170bc2c` [tests] fix wait_for_inv() (jnewbery) -- #10171 `fff72de` [tests] Add node methods to test framework (jnewbery) -- #10352 `23d78c4` test: Add elapsed time to RPC tracing (laanwj) -- #10342 `6a796b2` [tests] Improve mempool_persist test (jnewbery) -- #10287 `776ba23` [tests] Update Unit Test for addrman.h/addrman.cpp (jimmysong) -- #10365 `7ee5236` [tests] increase timeouts in sendheaders test (jnewbery) -- #10361 `f6241b3` qa: disablewallet: Check that wallet is really disabled (MarcoFalke) -- #10371 `4b766fc` [tests] Clean up addrman_tests.cpp (jimmysong) -- #10253 `87abe20` [test] Add test for getnetworkhashps (jimmysong) -- #10376 `8bd16ee` [tests] fix disconnect_ban intermittency (jnewbery) -- #10374 `5411997` qa: Warn when specified test is not found (MarcoFalke) -- #10405 `0542978` tests: Correct testcase in script_tests.json for large number OP_EQUAL (laanwj) -- #10429 `6b99daf` tests: fix spurious addrman test failure (theuni) -- #10433 `8e57256` [tests] improve tmpdir structure (jnewbery) -- #10415 `217b416` [tests] Speed up fuzzing by ~200x when using afl-fuzz (practicalswift) -- #10445 `b4b057a` Add test for empty chain and reorg consistency for gettxoutsetinfo (gmaxwell) -- #10423 `1aefc94` [tests] skipped tests should clean up after themselves (jnewbery) -- #10359 `329fc1d` [tests] functional tests should call BitcoinTestFramework start/stop node methods (jnewbery) -- #10514 `e103b3f` Bugfix: missing == 0 after randrange (sipa) -- #10515 `c871f32` [test] Add test for getchaintxstats (jimmysong) -- #10509 `bea5b00` Remove xvfb configuration from travis (ryanofsky) -- #10535 `30853e1` [qa] fundrawtx: Fix shutdown race (MarcoFalke) -- #9909 `300f8e7` tests: Add FindEarliestAtLeast test for edge cases (ryanofsky) -- #10331 `75e898c` Share config between util and functional tests (jnewbery) -- #10321 `e801084` Use FastRandomContext for all tests (sipa) -- #10524 `6c2d81f` [tests] Remove printf(...) (practicalswift) -- #10547 `71ab6e5` [tests] Use FastRandomContext instead of boost::random::{mt19937,uniform_int_distribution} (practicalswift) -- #10551 `6702617` [Tests] Wallet encryption functional tests (achow101) -- #10555 `643fa0b` [tests] various improvements to zmq_test.py (jnewbery) -- #10533 `d083bd9` [tests] Use cookie auth instead of rpcuser and rpcpassword (achow101) -- #10632 `c68a9a6` qa: Add stopatheight test (MarcoFalke) -- #10636 `4bc853b` [qa] util: Check return code after closing bitcoind proc (MarcoFalke) -- #10662 `e0a7801` Initialize randomness in benchmarks (achow101) -- #10612 `7c87a9c` The young person's guide to the test_framework (jnewbery) -- #10659 `acb1153` [qa] blockchain: Pass on closed connection during generate call (MarcoFalke) -- #10690 `416af3e` [qa] Bugfix: allow overriding extra_args in ComparisonTestFramework (sdaftuar) -- #10556 `65cc7aa` Move stop/start functions from utils.py into BitcoinTestFramework (jnewbery) -- #10704 `dd07f47` [tests] nits in dbcrash.py (jnewbery) -- #10743 `be82498` [test] don't run dbcrash.py on Travis (jnewbery) -- #10761 `d3b5870` [tests] fix replace_by_fee.py (jnewbery) -- #10759 `1d4805c` Fix multi_rpc test for hosts that dont default to utf8 (TheBlueMatt) -- #10190 `e4f226a` [tests] mining functional tests (including regression test for submitblock) (jnewbery) -- #10739 `1fc783f` test: Move variable `state` down where it is used (paveljanik) -- #9980 `fee0d80` Fix mem access violation merkleblock (Christewart) -- #10893 `0c173a1` [QA] Avoid running multiwallet.py twice (jonasschnelli) -- #10927 `9d5e8f9` test: Make sure wallet.backup is created in temp path (laanwj) -- #10899 `f29d5db` [test] Qt: Use _putenv_s instead of setenv on Windows builds (brianmcmichael) -- #10912 `5c8eb79` [tests] Fix incorrect memory_cleanse(…) call in crypto_tests.cpp (practicalswift) -- #11001 `fa8a063` [tests] Test disconnecting unsupported service bits logic (jnewbery) -- #10695 `929fd72` [qa] Rewrite BIP65/BIP66 functional tests (sdaftuar) -- #10963 `ecd2135` [bench] Restore format state of cout after printing with std::fixed/setprecision (practicalswift) -- #11025 `e5d26e4` qa: Fix inv race in example_test (MarcoFalke) -- #10765 `2c811e0` Tests: address placement should be deterministic by default (ReneNyffenegger) -- #11000 `ac016e1` test: Add resendwallettransactions functional tests (promag) -- #11032 `aeb3175` [qa] Fix block message processing error in sendheaders.py (sdaftuar) -- #10105 `0b9fb68` [tests] fixup - make all Travis test runs quiet, non just cron job runs (jnewbery) -- #10222 `6ce7337` [tests] test_runner - check unicode (jnewbery) -- #10327 `35da2ae` [tests] remove import-abort-rescan.py (jnewbery) -- #11023 `bf74d37` [tests] Add option to attach a python debugger if functional test fails (jnewbery) -- #10565 `8c2098a` [coverage] Remove subtrees and benchmarks from coverage report (achow101) - -### Miscellaneous -- #9871 `be8ba2c` Add a tree sha512 hash to merge commits (sipa) -- #9821 `d19d45a` util: Specific GetOSRandom for Linux/FreeBSD/OpenBSD (laanwj) -- #9903 `ba80a68` Docs: add details to -rpcclienttimeout doc (ian-kelling) -- #9910 `53c300f` Docs: correct and elaborate -rpcbind doc (ian-kelling) -- #9905 `01b7cda` [contrib] gh-merge: Move second sha512 check to the end (MarcoFalke) -- #9880 `4df8213` Verify Tree-SHA512s in merge commits, enforce sigs are not SHA1 (TheBlueMatt) -- #9932 `00c13ea` Fix verify-commits on travis and always check top commit's tree (TheBlueMatt) -- #9952 `6996e06` Add historical release notes for 0.14.0 (laanwj) -- #9940 `fa99663` Fix verify-commits on OSX, update for new bad Tree-SHA512, point travis to different keyservers (TheBlueMatt) -- #9963 `8040ae6` util: Properly handle errors during log message formatting (laanwj) -- #9984 `cce056d` devtools: Make github-merge compute SHA512 from git, instead of worktree (laanwj) -- #9995 `8bcf934` [doc] clarify blockchain size and pruning (askmike) -- #9734 `0c17afc` Add updating of chainTxData to release process (sipa) -- #10063 `530fcbd` add missing spaces so that markdown recognizes headline (flack) -- #10085 `db1ae54` Docs: remove 'noconnect' option (jlopp) -- #10090 `8e4f7e7` Update bitcoin.conf with example for pruning (coinables) -- #9424 `1a5aaab` Change LogAcceptCategory to use uint32_t rather than sets of strings (gmaxwell) -- #10036 `fbf36ca` Fix init README format to render correctly on github (jlopp) -- #10058 `a2cd0b0` No need to use OpenSSL malloc/free (tjps) -- #10123 `471ed00` Allow debug logs to be excluded from specified component (jnewbery) -- #10104 `fadf078` linearize script: Option to use RPC cookie (achow101) -- #10162 `a3a2160` [trivial] Log calls to getblocktemplate (jnewbery) -- #10155 `928695b` build: Deduplicate version numbers (laanwj) -- #10211 `a86255b` [doc] Contributor fixes & new "finding reviewers" section (kallewoof) -- #10250 `1428f30` Fix some empty vector references (sipa) -- #10270 `95f5e44` Remove Clang workaround for Boost 1.46 (fanquake) -- #10263 `cb007e4` Trivial: fix fee estimate write error log message (CryptAxe) -- #9670 `bd9ec0e` contrib: github-merge improvements (laanwj) -- #10260 `1d75597` [doc] Minor corrections to osx dependencies (fanquake) -- #10189 `750c5a5` devtools/net: add a verifier for scriptable changes. Use it to make CNode::id private (theuni) -- #10322 `bc64b5a` Use hardware timestamps in RNG seeding (sipa) -- #10381 `7f2b9e0` Shadowing warnings are not enabled by default, update doc accordingly (paveljanik) -- #10380 `b6ee855` [doc] Removing comments about dirty entries on txmempool (madeo) -- #10383 `d0c37ee` [logging] log system time and mock time (jnewbery) -- #10404 `b45a52a` doc: Add logging to FinalizeNode() (sdaftuar) -- #10388 `526e839` Output line to debug.log when IsInitialBlockDownload latches to false (morcos) -- #10372 `15254e9` Add perf counter data to GetStrongRandBytes state in scheduler (TheBlueMatt) -- #10461 `55b72f3` Update style guide (sipa) -- #10486 `10e8c0a` devtools: Retry after signing fails in github-merge (laanwj) -- #10447 `f259263` Make bitcoind invalid argument error message specific (laanwj) -- #10495 `6a38b79` contrib: Update location of seeds.txt (laanwj) -- #10469 `b6b150b` Fixing typo in rpcdump.cpp help message (keystrike) -- #10451 `27b9931` contrib/init/bitcoind.openrcconf: Don't disable wallet by default (luke-jr) -- #10323 `00d3692` Update to latest libsecp256k1 master (sipa) -- #10422 `cec9e1e` Fix timestamp in fee estimate debug message (morcos) -- #10566 `5d034ee` [docs] Use the "domain name setup" image (previously unused) in the gitian docs (practicalswift) -- #10534 `a514ac3` Clarify prevector::erase and avoid swap-to-clear (sipa) -- #10575 `22ec768` Header include guideline (sipa) -- #10480 `fbf5d3b` Improve commit-check-script.sh (sipa) -- #10502 `1ad3d4e` scripted-diff: Remove BOOST_FOREACH, Q_FOREACH and PAIRTYPE (jtimon) -- #10377 `b63be2c` Use rdrand as entropy source on supported platforms (sipa) -- #9895 `228c319` Turn TryCreateDirectory() into TryCreateDirectories() (benma) -- #10602 `d76e84a` Make clang-format use C++11 features (e.g. A> instead of A >) (practicalswift) -- #10623 `c38f540` doc: Add 0.14.2 release notes (MarcoFalke) -- #10276 `b750b33` contrib/verifybinaries: allow filtering by platform (knocte) -- #10248 `01c4b14` Rewrite addrdb with less duplication using CHashVerifier (sipa) -- #10577 `232508f` Add an explanation of quickly hashing onto a non-power of two range (gmaxwell) -- #10608 `eee398f` Add a comment explaining the use of MAX_BLOCK_BASE_SIZE (gmaxwell) -- #10728 `7397af9` fix typo in help text for removeprunedfunds (AkioNak) -- #10193 `6dbcc74` scripted-diff: Remove #include (jtimon) -- #10676 `379aed0` document script-based return fields for validateaddress (instagibbs) -- #10651 `cef4b5c` Verify binaries from bitcoincore.org and bitcoin.org (TheBlueMatt) -- #10786 `ca4c545` Add PR description to merge commit in github-merge.py (sipa) -- #10812 `c5904e8` [utils] Allow bitcoin-cli's -rpcconnect option to be used with square brackets (jnewbery) -- #10842 `3895e25` Fix incorrect Doxygen tag (@ince → @since). Doxygen parameter name matching (practicalswift) -- #10681 `df0793f` add gdb attach process to test README (instagibbs) -- #10789 `1124328` Punctuation/grammer fixes in rpcwallet.cpp (stevendlander) -- #10655 `78f307b` Properly document target_confirmations in listsinceblock (RHavar) -- #10917 `5c003cb` developer-notes: add reference to snake_case and PascalCase (benma) -- #11003 `4b5a7ce` Docs: Capitalize bullet points in CONTRIBUTING guide (eklitzke) -- #10968 `98aa3f6` Add instructions for parallel gitian builds (coblee) -- #11076 `1c4b9b3` 0.15 release-notes nits: fix redundancy, remove accidental parenthesis & fix range style (practicalswift) -- #11090 `8f0121c` Update contributor names in release-notes.md (Derek701) -- #11056 `cbdd338` disable jni in builds (instagibbs) -- #11080 `2b59cfb` doc: Update build-openbsd for 6.1 (laanwj) -- #11119 `0a6af47` [doc] build-windows: Mention that only trusty works (MarcoFalke) -- #11108 `e8ad101` Changing -txindex requires -reindex, not -reindex-chainstate (TheBlueMatt) -- #9792 `342b9bc` FastRandomContext improvements and switch to ChaCha20 (sipa) -- #9505 `67ed40e` Prevector Quick Destruct (JeremyRubin) -- #10820 `ef37f20` Use cpuid intrinsics instead of asm code (sipa) -- #9999 `a328904` [LevelDB] Plug leveldb logs to bitcoin logs (NicolasDorier) -- #9693 `c5e9e42` Prevent integer overflow in ReadVarInt (gmaxwell) -- #10129 `351d0ad` scheduler: fix sub-second precision with boost < 1.50 (theuni) -- #10153 `fade788` logging: Fix off-by-one for shrinkdebugfile default (MarcoFalke) -- #10305 `c45da32` Fix potential NPD introduced in b297426c (TheBlueMatt) -- #10338 `daf3e7d` Maintain state across GetStrongRandBytes calls (sipa) -- #10544 `a4fe077` Update to LevelDB 1.20 (sipa) -- #10614 `cafe24f` random: fix crash on some 64bit platforms (theuni) -- #10714 `2a09a38` Avoid printing incorrect block indexing time due to uninitialized variable (practicalswift) -- #10837 `8bc6d1f` Fix resource leak on error in GetDevURandom (corebob) -- #10832 `89bb036` init: Factor out AppInitLockDataDirectory and fix startup core dump issue (laanwj) -- #10914 `b995a37` Add missing lock in CScheduler::AreThreadsServicingQueue() (TheBlueMatt) -- #10958 `659c096` Update to latest Bitcoin patches for LevelDB (sipa) -- #10919 `c1c671f` Fix more init bugs (TheBlueMatt) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- ロハン ダル -- Ahmad Kazi -- aideca -- Akio Nakamura -- Alex Morcos -- Allan Doensen -- Andres G. Aragoneses -- Andrew Chow -- Angel Leon -- Awemany -- Bob McElrath -- Brian McMichael -- BtcDrak -- Charlie Lee -- Chris Gavin -- Chris Stewart -- Cory Fields -- CryptAxe -- Dag Robole -- Daniel Aleksandersen -- Daniel Cousens -- darksh1ne -- Dimitris Tsapakidis -- Eric Shaw -- Evan Klitzke -- fanquake -- Felix Weis -- flack -- Guido Vranken -- Greg Griffith -- Gregory Maxwell -- Gregory Sanders -- Ian Kelling -- Jack Grigg -- James Evans -- James Hilliard -- Jameson Lopp -- Jeremy Rubin -- Jimmy Song -- João Barbosa -- Johnathan Corgan -- John Newbery -- Jonas Schnelli -- Jorge Timón -- Karl-Johan Alm -- kewde -- KibbledJiveElkZoo -- Kirit Thadaka -- kobake -- Kyle Honeycutt -- Lawrence Nahum -- Luke Dashjr -- Marco Falke -- Marcos Mayorga -- Marijn Stollenga -- Mario Dian -- Mark Friedenbach -- Marko Bencun -- Masahiko Hyuga -- Matt Corallo -- Matthew Zipkin -- Matthias Grundmann -- Michael Goldstein -- Michael Rotarius -- Mikerah -- Mike van Rossum -- Mitchell Cash -- Nicolas Dorier -- Patrick Strateman -- Pavel Janík -- Pavlos Antoniou -- Pavol Rusnak -- Pedro Branco -- Peter Todd -- Pieter Wuille -- practicalswift -- René Nyffenegger -- Ricardo Velhote -- romanornr -- Russell Yanofsky -- Rusty Russell -- Ryan Havar -- shaolinfry -- Shigeya Suzuki -- Simone Madeo -- Spencer Lievens -- Steven D. Lander -- Suhas Daftuar -- Takashi Mitsuta -- Thomas Snider -- Timothy Redaelli -- tintinweb -- tnaka -- Warren Togami -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.15.1.md b/doc/release-notes/release-notes-0.15.1.md deleted file mode 100644 index 75d2e09714..0000000000 --- a/doc/release-notes/release-notes-0.15.1.md +++ /dev/null @@ -1,277 +0,0 @@ -Bitcoin Core version *0.15.1* is now available from: - - - -or - - - -This is a new minor version release, including various bugfixes and -performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -The first time you run version 0.15.0 or higher, your chainstate database will -be converted to a new format, which will take anywhere from a few minutes to -half an hour, depending on the speed of your machine. - -The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a -downgrade from version 0.15 or upgrade to version 0.15 will cause all fee -estimates to be discarded. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading -directly from 0.7.x and earlier without redownloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -The chainstate database for this release is not compatible with previous -releases, so if you run 0.15 and then decide to switch back to any -older version, you will need to run the old release with the `-reindex-chainstate` -option to rebuild the chainstate data structures in the old format. - -If your node has pruning enabled, this will entail re-downloading and -processing the entire blockchain. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - - -Notable changes -=============== - -Network fork safety enhancements --------------------------------- - -A number of changes to the way Bitcoin Core deals with peer connections and invalid blocks -have been made, as a safety precaution against blockchain forks and misbehaving peers. - -- Unrequested blocks with less work than the minimum-chain-work are now no longer processed even -if they have more work than the tip (a potential issue during IBD where the tip may have low-work). -This prevents peers wasting the resources of a node. - -- Peers which provide a chain with less work than the minimum-chain-work during IBD will now be disconnected. - -- For a given outbound peer, we now check whether their best known block has at least as much work as our tip. If it -doesn't, and if we still haven't heard about a block with sufficient work after a 20 minute timeout, then we send -a single getheaders message, and wait 2 more minutes. If after two minutes their best known block has insufficient -work, we disconnect that peer. We protect 4 of our outbound peers from being disconnected by this logic to prevent -excessive network topology changes as a result of this algorithm, while still ensuring that we have a reasonable -number of nodes not known to be on bogus chains. - -- Outbound (non-manual) peers that serve us block headers that are already known to be invalid (other than compact -block announcements, because BIP 152 explicitly permits nodes to relay compact blocks before fully validating them) -will now be disconnected. - -- If the chain tip has not been advanced for over 30 minutes, we now assume the tip may be stale and will try to connect -to an additional outbound peer. A periodic check ensures that if this extra peer connection is in use, we will disconnect -the peer that least recently announced a new block. - -- The set of all known invalid-themselves blocks (i.e. blocks which we attempted to connect but which were found to be -invalid) are now tracked and used to check if new headers build on an invalid chain. This ensures that everything that -descends from an invalid block is marked as such. - - -Miner block size limiting deprecated ------------------------------------- - -Though blockmaxweight has been preferred for limiting the size of blocks returned by -getblocktemplate since 0.13.0, blockmaxsize remained as an option for those who wished -to limit their block size directly. Using this option resulted in a few UI issues as -well as non-optimal fee selection and ever-so-slightly worse performance, and has thus -now been deprecated. Further, the blockmaxsize option is now used only to calculate an -implied blockmaxweight, instead of limiting block size directly. Any miners who wish -to limit their blocks by size, instead of by weight, will have to do so manually by -removing transactions from their block template directly. - - -GUI settings backed up on reset -------------------------------- - -The GUI settings will now be written to `guisettings.ini.bak` in the data directory before wiping them when -the `-resetguisettings` argument is used. This can be used to retroactively troubleshoot issues due to the -GUI settings. - - -Duplicate wallets disallowed ----------------------------- - -Previously, it was possible to open the same wallet twice by manually copying the wallet file, causing -issues when both were opened simultaneously. It is no longer possible to open copies of the same wallet. - - -Debug `-minimumchainwork` argument added ----------------------------------------- - -A hidden debug argument `-minimumchainwork` has been added to allow a custom minimum work value to be used -when validating a chain. - - -Low-level RPC changes ----------------------- - -- The "currentblocksize" value in getmininginfo has been removed. - -- `dumpwallet` no longer allows overwriting files. This is a security measure - as well as prevents dangerous user mistakes. - -- `backupwallet` will now fail when attempting to backup to source file, rather than - destroying the wallet. - -- `listsinceblock` will now throw an error if an unknown `blockhash` argument - value is passed, instead of returning a list of all wallet transactions since - the genesis block. The behaviour is unchanged when an empty string is provided. - -0.15.1 Change log -================= - -### Mining -- #11100 `7871a7d` Fix confusing blockmax{size,weight} options, dont default to throwing away money (TheBlueMatt) - -### RPC and other APIs -- #10859 `2a5d099` gettxout: Slightly improve doc and tests (jtimon) -- #11267 `b1a6c94` update cli for estimate\*fee argument rename (laanwj) -- #11483 `20cdc2b` Fix importmulti bug when importing an already imported key (pedrobranco) -- #9937 `a43be5b` Prevent `dumpwallet` from overwriting files (laanwj) -- #11465 `405e069` Update named args documentation for importprivkey (dusty-wil) -- #11131 `b278a43` Write authcookie atomically (laanwj) -- #11565 `7d4546f` Make listsinceblock refuse unknown block hash (ryanofsky) -- #11593 `8195cb0` Work-around an upstream libevent bug (theuni) - -### P2P protocol and network code -- #11397 `27e861a` Improve and document SOCKS code (laanwj) -- #11252 `0fe2a9a` When clearing addrman clear mapInfo and mapAddr (instagibbs) -- #11527 `a2bd86a` Remove my testnet DNS seed (schildbach) -- #10756 `0a5477c` net processing: swap out signals for an interface class (theuni) -- #11531 `55b7abf` Check that new headers are not a descendant of an invalid block (more effeciently) (TheBlueMatt) -- #11560 `49bf090` Connect to a new outbound peer if our tip is stale (sdaftuar) -- #11568 `fc966bb` Disconnect outbound peers on invalid chains (sdaftuar) -- #11578 `ec8dedf` Add missing lock in ProcessHeadersMessage(...) (practicalswift) -- #11456 `6f27965` Replace relevant services logic with a function suite (TheBlueMatt) -- #11490 `bf191a7` Disconnect from outbound peers with bad headers chains (sdaftuar) - -### Validation -- #10357 `da4908c` Allow setting nMinimumChainWork on command line (sdaftuar) -- #11458 `2df65ee` Don't process unrequested, low-work blocks (sdaftuar) - -### Build system -- #11440 `b6c0209` Fix validationinterface build on super old boost/clang (TheBlueMatt) -- #11530 `265bb21` Add share/rpcuser to dist. source code archive (MarcoFalke) - -### GUI -- #11334 `19d63e8` Remove custom fee radio group and remove nCustomFeeRadio setting (achow101) -- #11198 `7310f1f` Fix display of package name on 'open config file' tooltip (esotericnonsense) -- #11015 `6642558` Add delay before filtering transactions (lclc) -- #11338 `6a62c74` Backup former GUI settings on `-resetguisettings` (laanwj) -- #11335 `8d13b42` Replace save|restoreWindowGeometry with Qt functions (MeshCollider) -- #11237 `2e31b1d` Fixing division by zero in time remaining (MeshCollider) -- #11247 `47c02a8` Use IsMine to validate custom change address (MarcoFalke) - -### Wallet -- #11017 `9e8aae3` Close DB on error (kallewoof) -- #11225 `6b4d9f2` Update stored witness in AddToWallet (sdaftuar) -- #11126 `2cb720a` Acquire cs_main lock before cs_wallet during wallet initialization (ryanofsky) -- #11476 `9c8006d` Avoid opening copied wallet databases simultaneously (ryanofsky) -- #11492 `de7053f` Fix leak in CDB constructor (promag) -- #11376 `fd79ed6` Ensure backupwallet fails when attempting to backup to source file (tomasvdw) -- #11326 `d570aa4` Fix crash on shutdown with invalid wallet (MeshCollider) - -### Tests and QA -- #11399 `a825d4a` Fix bip68-sequence rpc test (jl2012) -- #11150 `847c75e` Add getmininginfo test (mess110) -- #11407 `806c78f` add functional test for mempoolreplacement command line arg (instagibbs) -- #11433 `e169349` Restore bitcoin-util-test py2 compatibility (MarcoFalke) -- #11308 `2e1ac70` zapwallettxes: Wait up to 3s for mempool reload (MarcoFalke) -- #10798 `716066d` test bitcoin-cli (jnewbery) -- #11443 `019c492` Allow "make cov" out-of-tree; Fix rpc mapping check (MarcoFalke) -- #11445 `51bad91` 0.15.1 Backports (MarcoFalke) -- #11319 `2f0b30a` Fix error introduced into p2p-segwit.py, and prevent future similar errors (sdaftuar) -- #10552 `e4605d9` Tests for zmqpubrawtx and zmqpubrawblock (achow101) -- #11067 `eeb24a3` TestNode: Add wait_until_stopped helper method (MarcoFalke) -- #11068 `5398f20` Move wait_until to util (MarcoFalke) -- #11125 `812c870` Add bitcoin-cli -stdin and -stdinrpcpass functional tests (promag) -- #11077 `1d80d1e` fix timeout issues from TestNode (jnewbery) -- #11078 `f1ced0d` Make p2p-leaktests.py more robust (jnewbery) -- #11210 `f3f7891` Stop test_bitcoin-qt touching ~/.bitcoin (MeshCollider) -- #11234 `f0b6795` Remove redundant testutil.cpp|h files (MeshCollider) -- #11215 `cef0319` fixups from set_test_params() (jnewbery) -- #11345 `f9cf7b5` Check connectivity before sending in assumevalid.py (jnewbery) -- #11091 `c276c1e` Increase initial RPC timeout to 60 seconds (laanwj) -- #10711 `fc2aa09` Introduce TestNode (jnewbery) -- #11230 `d8dd8e7` Fixup dbcrash interaction with add_nodes() (jnewbery) -- #11241 `4424176` Improve signmessages functional test (mess110) -- #11116 `2c4ff35` Unit tests for script/standard and IsMine functions (jimpo) -- #11422 `a36f332` Verify DBWrapper iterators are taking snapshots (TheBlueMatt) -- #11121 `bb5e7cb` TestNode tidyups (jnewbery) -- #11521 `ca0f3f7` travis: move back to the minimal image (theuni) -- #11538 `adbc9d1` Fix race condition failures in replace-by-fee.py, sendheaders.py (sdaftuar) -- #11472 `4108879` Make tmpdir option an absolute path, misc cleanup (MarcoFalke) -- #10853 `5b728c8` Fix RPC failure testing (again) (jnewbery) -- #11310 `b6468d3` Test listwallets RPC (mess110) - -### Miscellaneous -- #11377 `75997c3` Disallow uncompressed pubkeys in bitcoin-tx [multisig] output adds (TheBlueMatt) -- #11437 `dea3b87` [Docs] Update Windows build instructions for using WSL and Ubuntu 17.04 (fanquake) -- #11318 `8b61aee` Put back inadvertently removed copyright notices (gmaxwell) -- #11442 `cf18f42` [Docs] Update OpenBSD Build Instructions for OpenBSD 6.2 (fanquake) -- #10957 `50bd3f6` Avoid returning a BIP9Stats object with uninitialized values (practicalswift) -- #11539 `01223a0` [verify-commits] Allow revoked keys to expire (TheBlueMatt) - - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Andreas Schildbach -- Andrew Chow -- Chris Moore -- Cory Fields -- Cristian Mircea Messel -- Daniel Edgecumbe -- Donal OConnor -- Dusty Williams -- fanquake -- Gregory Sanders -- Jim Posen -- John Newbery -- Johnson Lau -- João Barbosa -- Jorge Timón -- Karl-Johan Alm -- Lucas Betschart -- MarcoFalke -- Matt Corallo -- Paul Berg -- Pedro Branco -- Pieter Wuille -- practicalswift -- Russell Yanofsky -- Samuel Dobson -- Suhas Daftuar -- Tomas van der Wansem -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.15.2.md b/doc/release-notes/release-notes-0.15.2.md deleted file mode 100644 index 1f58279051..0000000000 --- a/doc/release-notes/release-notes-0.15.2.md +++ /dev/null @@ -1,118 +0,0 @@ -Bitcoin Core version *0.15.2* is now available from: - - - -This is a new minor version release, including various bugfixes and -performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -The first time you run version 0.15.0 or higher, your chainstate database will -be converted to a new format, which will take anywhere from a few minutes to -half an hour, depending on the speed of your machine. - -The file format of `fee_estimates.dat` changed in version 0.15.0. Hence, a -downgrade from version 0.15 or upgrade to version 0.15 will cause all fee -estimates to be discarded. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading -directly from 0.7.x and earlier without redownloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -The chainstate database for this release is not compatible with previous -releases, so if you run 0.15 and then decide to switch back to any -older version, you will need to run the old release with the `-reindex-chainstate` -option to rebuild the chainstate data structures in the old format. - -If your node has pruning enabled, this will entail re-downloading and -processing the entire blockchain. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - - -Notable changes -=============== - -Denial-of-Service vulnerability CVE-2018-17144 -------------------------------- - -A denial-of-service vulnerability exploitable by miners has been discovered in -Bitcoin Core versions 0.14.0 up to 0.16.2. It is recommended to upgrade any of -the vulnerable versions to 0.15.2 or 0.16.3 as soon as possible. - -0.15.2 Change log -================= - -### Build system - -- #11995 `9bb1a16` depends: Fix Qt build with XCode 9.2(fanquake) -- #12946 `93b9a61` depends: Fix Qt build with XCode 9.3(fanquake) -- #13544 `9fd3e00` depends: Update Qt download url (fanquake) -- #11847 `cb7ef31` Make boost::multi_index comparators const (sdaftuar) - -### Consensus -- #14247 `4b8a3f5` Fix crash bug with duplicate inputs within a transaction (TheBlueMatt, sdaftuar) - -### RPC -- #11676 `7af2457` contrib/init: Update openrc-run filename (Luke Dashjr) -- #11277 `7026845` Fix uninitialized URI in batch RPC requests (Russell Yanofsky) - -### Wallet -- #11289 `3f1db56` Wrap dumpwallet warning and note scripts aren't dumped (MeshCollider) -- #11289 `42ea47d` Add wallet backup text to import*, add* and dumpwallet RPCs (MeshCollider) -- #11590 `6372a75` [Wallet] always show help-line of wallet encryption calls (Jonas Schnelli) - -### bitcoin-tx - -- #11554 `a69cc07` Sanity-check script sizes in bitcoin-tx (TheBlueMatt) - -### Tests -- #11277 `3a6cdd4` Add test for multiwallet batch RPC calls (Russell Yanofsky) -- #11647 `1c8c7f8` Add missing batch rpc calls to python coverage logs (Russell Yanofsky) -- #11277 `1036c43` Add missing multiwallet rpc calls to python coverage logs (Russell Yanofsky) -- #11277 `305f768` Limit AuthServiceProxyWrapper.\_\_getattr\_\_ wrapping (Russell Yanofsky) -- #11277 `2eea279` Make AuthServiceProxy.\_batch method usable (Russell Yanofsky) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- fanquake -- Jonas Schnelli -- Luke Dashjr -- Matt Corallo -- MeshCollider -- Russell Yanofsky -- Suhas Daftuar -- Wladimir J. van der Laan - -And to those that reported security issues: - -- awemany (for CVE-2018-17144, previously credited as "anonymous reporter") - diff --git a/doc/release-notes/release-notes-0.16.0.md b/doc/release-notes/release-notes-0.16.0.md deleted file mode 100644 index 8f158b3481..0000000000 --- a/doc/release-notes/release-notes-0.16.0.md +++ /dev/null @@ -1,720 +0,0 @@ -Bitcoin Core version 0.16.0 is now available from: - - - -This is a new major version release, including new features, various bugfixes -and performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -The first time you run version 0.15.0 or newer, your chainstate database will be converted to a -new format, which will take anywhere from a few minutes to half an hour, -depending on the speed of your machine. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0 or higher. Upgrading -directly from 0.7.x and earlier without re-downloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -Wallets created in 0.16 and later are not compatible with versions prior to 0.16 -and will not work if you try to use newly created wallets in older versions. Existing -wallets that were created with older versions are not affected by this. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notable changes -=============== - -Wallet changes ---------------- - -### Segwit Wallet - -Bitcoin Core 0.16.0 introduces full support for segwit in the wallet and user interfaces. A new `-addresstype` argument has been added, which supports `legacy`, `p2sh-segwit` (default), and `bech32` addresses. It controls what kind of addresses are produced by `getnewaddress`, `getaccountaddress`, and `createmultisigaddress`. A `-changetype` argument has also been added, with the same options, and by default equal to `-addresstype`, to control which kind of change is used. - -A new `address_type` parameter has been added to the `getnewaddress` and `addmultisigaddress` RPCs to specify which type of address to generate. -A `change_type` argument has been added to the `fundrawtransaction` RPC to override the `-changetype` argument for specific transactions. - -- All segwit addresses created through `getnewaddress` or `*multisig` RPCs explicitly get their redeemscripts added to the wallet file. This means that downgrading after creating a segwit address will work, as long as the wallet file is up to date. -- All segwit keys in the wallet get an implicit redeemscript added, without it being written to the file. This means recovery of an old backup will work, as long as you use new software. -- All keypool keys that are seen used in transactions explicitly get their redeemscripts added to the wallet files. This means that downgrading after recovering from a backup that includes a segwit address will work - -Note that some RPCs do not yet support segwit addresses. Notably, `signmessage`/`verifymessage` doesn't support segwit addresses, nor does `importmulti` at this time. Support for segwit in those RPCs will continue to be added in future versions. - -P2WPKH change outputs are now used by default if any destination in the transaction is a P2WPKH or P2WSH output. This is done to ensure the change output is as indistinguishable from the other outputs as possible in either case. - -### BIP173 (Bech32) Address support ("bc1..." addresses) - -Full support for native segwit addresses (BIP173 / Bech32) has now been added. -This includes the ability to send to BIP173 addresses (including non-v0 ones), and generating these -addresses (including as default new addresses, see above). - -A checkbox has been added to the GUI to select whether a Bech32 address or P2SH-wrapped address should be generated when using segwit addresses. When launched with `-addresstype=bech32` it is checked by default. When launched with `-addresstype=legacy` it is unchecked and disabled. - -### HD-wallets by default - -Due to a backward-incompatible change in the wallet database, wallets created -with version 0.16.0 will be rejected by previous versions. Also, version 0.16.0 -will only create hierarchical deterministic (HD) wallets. Note that this only applies -to new wallets; wallets made with previous versions will not be upgraded to be HD. - -### Replace-By-Fee by default in GUI - -The send screen now uses BIP125 RBF by default, regardless of `-walletrbf`. -There is a checkbox to mark the transaction as final. - -The RPC default remains unchanged: to use RBF, launch with `-walletrbf=1` or -use the `replaceable` argument for individual transactions. - -### Wallets directory configuration (`-walletdir`) - -Bitcoin Core now has more flexibility in where the wallets directory can be -located. Previously wallet database files were stored at the top level of the -bitcoin data directory. The behavior is now: - -- For new installations (where the data directory doesn't already exist), - wallets will now be stored in a new `wallets/` subdirectory inside the data - directory by default. -- For existing nodes (where the data directory already exists), wallets will be - stored in the data directory root by default. If a `wallets/` subdirectory - already exists in the data directory root, then wallets will be stored in the - `wallets/` subdirectory by default. -- The location of the wallets directory can be overridden by specifying a - `-walletdir=` option where `` can be an absolute path to a - directory or directory symlink. - -Care should be taken when choosing the wallets directory location, as if it -becomes unavailable during operation, funds may be lost. - -Build: Minimum GCC bumped to 4.8.x ------------------------------------- -The minimum version of the GCC compiler required to compile Bitcoin Core is now 4.8. No effort will be -made to support older versions of GCC. See discussion in issue #11732 for more information. -The minimum version for the Clang compiler is still 3.3. Other minimum dependency versions can be found in `doc/dependencies.md` in the repository. - -Support for signalling pruned nodes (BIP159) ---------------------------------------------- -Pruned nodes can now signal BIP159's NODE_NETWORK_LIMITED using service bits, in preparation for -full BIP159 support in later versions. This would allow pruned nodes to serve the most recent blocks. However, the current change does not yet include support for connecting to these pruned peers. - -Performance: SHA256 assembly enabled by default -------------------------------------------------- -The SHA256 hashing optimizations for architectures supporting SSE4, which lead to ~50% speedups in SHA256 on supported hardware (~5% faster synchronization and block validation), have now been enabled by default. In previous versions they were enabled using the `--enable-experimental-asm` flag when building, but are now the default and no longer deemed experimental. - -GUI changes ------------ -- Uses of "µBTC" in the GUI now also show the more colloquial term "bits", specified in BIP176. -- The option to reuse a previous address has now been removed. This was justified by the need to "resend" an invoice, but now that we have the request history, that need should be gone. -- Support for searching by TXID has been added, rather than just address and label. -- A "Use available balance" option has been added to the send coins dialog, to add the remaining available wallet balance to a transaction output. -- A toggle for unblinding the password fields on the password dialog has been added. - -RPC changes ------------- - -### New `rescanblockchain` RPC - -A new RPC `rescanblockchain` has been added to manually invoke a blockchain rescan. -The RPC supports start and end-height arguments for the rescan, and can be used in a -multiwallet environment to rescan the blockchain at runtime. - -### New `savemempool` RPC -A new `savemempool` RPC has been added which allows the current mempool to be saved to -disk at any time to avoid it being lost due to crashes / power loss. - -### Safe mode disabled by default - -Safe mode is now disabled by default and must be manually enabled (with `-disablesafemode=0`) if you wish to use it. Safe mode is a feature that disables a subset of RPC calls - mostly related to the wallet and sending - automatically in case certain problem conditions with the network are detected. However, developers have come to regard these checks as not reliable enough to act on automatically. Even with safe mode disabled, they will still cause warnings in the `warnings` field of the `getneworkinfo` RPC and launch the `-alertnotify` command. - -### Renamed script for creating JSON-RPC credentials - -The `share/rpcuser/rpcuser.py` script was renamed to `share/rpcauth/rpcauth.py`. This script can be -used to create `rpcauth` credentials for a JSON-RPC user. - -### Validateaddress improvements - -The `validateaddress` RPC output has been extended with a few new fields, and support for segwit addresses (both P2SH and Bech32). Specifically: -* A new field `iswitness` is True for P2WPKH and P2WSH addresses ("bc1..." addresses), but not for P2SH-wrapped segwit addresses (see below). -* The existing field `isscript` will now also report True for P2WSH addresses. -* A new field `embedded` is present for all script addresses where the script is known and matches something that can be interpreted as a known address. This is particularly true for P2SH-P2WPKH and P2SH-P2WSH addresses. The value for `embedded` includes much of the information `validateaddress` would report if invoked directly on the embedded address. -* For multisig scripts a new `pubkeys` field was added that reports the full public keys involved in the script (if known). This is a replacement for the existing `addresses` field (which reports the same information but encoded as P2PKH addresses), represented in a more useful and less confusing way. The `addresses` field remains present for non-segwit addresses for backward compatibility. -* For all single-key addresses with known key (even when wrapped in P2SH or P2WSH), the `pubkey` field will be present. In particular, this means that invoking `validateaddress` on the output of `getnewaddress` will always report the `pubkey`, even when the address type is P2SH-P2WPKH. - -### Low-level changes - -- The deprecated RPC `getinfo` was removed. It is recommended that the more specific RPCs are used: - * `getblockchaininfo` - * `getnetworkinfo` - * `getwalletinfo` - * `getmininginfo` -- The wallet RPC `getreceivedbyaddress` will return an error if called with an address not in the wallet. -- The wallet RPC `addwitnessaddress` was deprecated and will be removed in version 0.17, - set the `address_type` argument of `getnewaddress`, or option `-addresstype=[bech32|p2sh-segwit]` instead. -- `dumpwallet` now includes hex-encoded scripts from the wallet in the dumpfile, and - `importwallet` now imports these scripts, but corresponding addresses may not be added - correctly or a manual rescan may be required to find relevant transactions. -- The RPC `getblockchaininfo` now includes an `errors` field. -- A new `blockhash` parameter has been added to the `getrawtransaction` RPC which allows for a raw transaction to be fetched from a specific block if known, even without `-txindex` enabled. -- The `decoderawtransaction` and `fundrawtransaction` RPCs now have optional `iswitness` parameters to override the - heuristic witness checks if necessary. -- The `walletpassphrase` timeout is now clamped to 2^30 seconds. -- Using addresses with the `createmultisig` RPC is now deprecated, and will be removed in a later version. Public keys should be used instead. -- Blockchain rescans now no longer lock the wallet for the entire rescan process, so other RPCs can now be used at the same time (although results of balances / transactions may be incorrect or incomplete until the rescan is complete). -- The `logging` RPC has now been made public rather than hidden. -- An `initialblockdownload` boolean has been added to the `getblockchaininfo` RPC to indicate whether the node is currently in IBD or not. -- `minrelaytxfee` is now included in the output of `getmempoolinfo` - -Other changed command-line options ----------------------------------- -- `-debuglogfile=` can be used to specify an alternative debug logging file. -- bitcoin-cli now has an `-stdinrpcpass` option to allow the RPC password to be read from standard input. -- The `-usehd` option has been removed. -- bitcoin-cli now supports a new `-getinfo` flag which returns an output like that of the now-removed `getinfo` RPC. - -Testing changes ----------------- -- The default regtest JSON-RPC port has been changed to 18443 to avoid conflict with testnet's default of 18332. -- Segwit is now always active in regtest mode by default. Thus, if you upgrade a regtest node you will need to either -reindex or use the old rules by adding `vbparams=segwit:0:999999999999` to your regtest bitcoin.conf. Failure to do this will result in a CheckBlockIndex() assertion failure that will look like: Assertion `(pindexFirstNeverProcessed != nullptr) == (pindex->nChainTx == 0)' failed. - -0.16.0 change log ------------------- - -### Block and transaction handling -- #10953 `aeed345` Combine scriptPubKey and amount as CTxOut in CScriptCheck (jl2012) -- #11309 `93d20a7` Minor cleanups for AcceptToMemoryPool (morcos) -- #11418 `38c201f` Add error string for CLEANSTACK script violation (maaku) -- #11411 `339da9c` Change SignatureHash input index check to an assert (jimpo) -- #11406 `e12522d` Add state message print to AcceptBlock failure message (TheBlueMatt) -- #11062 `26fee4f` Mark mempool import fails that were found in mempool as 'already there' (kallewoof) -- #11269 `61fb806` CTxMemPoolEntry::UpdateAncestorState: modifySiagOps param type (donaloconnor) -- #11747 `e970396` Fix: Open files read only if requested (Elbandi) -- #11737 `46d1ebf` Document partial validation in ConnectBlock() (sdaftuar) -- #10699 `c090262` Make all script validation flags backward compatible (sipa) -- #10279 `214046f` Add a CChainState class to validation.cpp to take another step towards clarifying internal interfaces (TheBlueMatt) -- #11824 `d9fdac1` Block ActivateBestChain to empty validationinterface queue (TheBlueMatt) -- #12127 `9501dc2` Remove unused mempool index (sdaftuar) -- #12118 `44080a9` Sort mempool by min(feerate, ancestor_feerate) (sdaftuar) -- #8498 `0e3a411` Minimize the number of times it is checked that no money... (jtimon) -- #12368 `3f5012b` Hold mempool.cs for the duration of ATMP (TheBlueMatt) -- #12401 `d44cd7e` Reset pblocktree before deleting LevelDB file (Sjors) -- #12415 `f893824` Interrupt loading thread after shutdown request (promag) - -### P2P protocol and network code -- #10596 `6866b49` Add vConnect to CConnman::Options (benma) -- #10663 `9d31ed2` Split resolve out of connect (theuni) -- #11113 `fef65c4` Ignore getheaders requests for very old side blocks (jimpo) -- #11585 `5aeaa9c` addrman: Add missing lock in Clear() (CAddrMan) (practicalswift) -- #11524 `5ef3b69` De-duplicate connection eviction logic (tjps) -- #11580 `1f4375f` Do not send (potentially) invalid headers in response to getheaders (TheBlueMatt) -- #11655 `aca77a4` Assert state.m_chain_sync.m_work_header in ConsiderEviction (practicalswift) -- #11744 `3ff6ff5` Add missing locks in net.{cpp,h} (practicalswift) -- #11740 `59d3dc8` Implement BIP159 NODE_NETWORK_LIMITED (pruned peers) *signaling only* (jonasschnelli) -- #11583 `37ffa16` Do not make it trivial for inbound peers to generate log entries (TheBlueMatt) -- #11363 `ba2f195` Split socket create/connect (theuni) -- #11917 `bc66765` Add testnet DNS seed: seed.testnet.bitcoin.sprovoost.nl (Sjors) -- #11512 `6e89de5` Use GetDesireableServiceFlags in seeds, dnsseeds, fixing static seed adding (TheBlueMatt) -- #12262 `16bac24` Hardcoded seed update (laanwj) -- #12270 `9cf6393` Update chainTxData for 0.16 (laanwj) -- #12392 `0f61651` Fix ignoring tx data requests when fPauseSend is set on a peer (TheBlueMatt) - -### Wallet -- #11039 `fc51565` Avoid second mapWallet lookup (promag) -- #10952 `2621673` Remove vchDefaultKey and have better first run detection (achow101) -- #11007 `fc5c237` Fix potential memory leak when loading a corrupted wallet file (practicalswift) -- #10976 `07c92b9` Move some static functions out of wallet.h/cpp (ryanofsky) -- #11117 `961901f` Prepare for non-Base58 addresses (sipa) -- #10916 `e6ab88a` add missing lock to crypter GetKeys() (benma) -- #10767 `791a0e6` Clarify wallet initialization / destruction interface (jnewbery) -- #11250 `c22a53c` Bump wallet version to 159900 and remove the `usehd` option (achow101) -- #11307 `4f7e37e` Display non-HD error on first run (MarcoFalke) -- #11408 `69c7ece` Fix parameter name typo in ErasePurpose walletdb method (PierreRochard) -- #11167 `aa624b6` Full BIP173 (Bech32) support (sipa) -- #11594 `0ecc630` Improve -disablewallet parameter interaction (promag) -- #10368 `77ba4bf` Remove helper conversion operator from wallet (kallewoof) -- #11074 `99ec126` Assert that CWallet::SyncMetaData finds oldest transaction (BitonicEelis) -- #11272 `e6e3fc3` CKeystore/CCrypter: move relevant implementation out of the header (jonasschnelli) -- #10286 `927a1d7` Call wallet notify callbacks in scheduler thread (without cs_main) (TheBlueMatt) -- #10600 `4ed8180` Make feebumper class stateless (ryanofsky) -- #11466 `d080a7d` Specify custom wallet directory with -walletdir param (MeshCollider) -- #11839 `8ab6c0b` Don't attempt mempool entry for wallet transactions on startup (instagibbs) -- #11854 `2214954` Split up key and script metadata for better type safety (ryanofsky) -- #11870 `ef8ba7d` Remove unnecessary mempool lock in ReacceptWalletTransactions (promag) -- #11864 `2ae58d5` Make CWallet::FundTransaction atomic (promag) -- #11886 `df71819` Clarify getbalance meaning a tiny bit in response to questions (TheBlueMatt) -- #11923 `81c89e9` Remove unused fNoncriticalErrors variable from CWalletDB::FindWalletTx (PierreRochard) -- #11726 `604e08c` Cleanups + nit fixes for walletdir PR (MeshCollider) -- #11403 `d889c03` Segwit wallet support (sipa) -- #11970 `b7450cd` Add test coverage for bitcoin-cli multiwallet calls (ryanofsky) -- #11904 `66e3af7` Add a lock to the wallet directory (MeshCollider) -- #12101 `c7978be` Clamp walletpassphrase timeout to 2^30 seconds and check its bounds (achow101) -- #12210 `17180fa` Deprecate addwitnessaddress (laanwj) -- #12220 `f4c942e` Error if relative -walletdir is specified (ryanofsky) -- #11281 `8470e64` Avoid permanent cs_main/cs_wallet lock during RescanFromTime (jonasschnelli) -- #12119 `9594139` Use P2WPKH change output if any destination is P2WPKH or P2WSH (Sjors) -- #12213 `eadb2da` Add address type option to addmultisigaddress (promag) -- #12276 `7936446` Remove duplicate mapWallet lookups (promag) - -### RPC and other APIs -- #11008 `3841aaf` Enable disablesafemode by default (gmaxwell) -- #11050 `7ed57d3` Avoid treating null RPC arguments different from missing arguments (ryanofsky) -- #10997 `affe927` Add option -stdinrpcpass to bitcoin-cli to allow RPC password to be read from standard input (jharvell) -- #11179 `e0e3cbb` Push down safe mode checks (laanwj) -- #11203 `d745b4c` add wtxid to mempool entry output (sdaftuar) -- #11099 `bc561b4` Add savemempool RPC (greenaddress) -- #10838 `66a5b41` (finally) remove getinfo (TheBlueMatt) -- #10753 `7fcd61b` test: Check RPC argument mapping (laanwj) -- #11288 `0f8e095` More user-friendly error message when partially signing (MeshCollider) -- #11031 `ef8340d` deprecate estimatefee (jnewbery) -- #10858 `9a8e916` Add "errors" field to getblockchaininfo and unify "errors" field in get*info RPCs (achow101) -- #11021 `90926db` Fix getchaintxstats() (AkioNak) -- #11367 `3a93270` getblockchaininfo: Add disk_size, prune_target_size (esotericnonsense) -- #11006 `a1d78b5` Improve shutdown process (promag) -- #11529 `ff92fbf` Avoid slow transaction search with txindex enabled (promag) -- #11618 `87d90ef` Lock cs_main in blockToJSON/blockheaderToJSON (practicalswift) -- #11626 `998c304` Make `logging` RPC public (laanwj) -- #11258 `033c786` Add initialblockdownload to getblockchaininfo (jnewbery) -- #11087 `99bc0b4` Diagnose unsuitable outputs in lockunspent() (BitonicEelis) -- #11710 `9388639` cli: Reject arguments to -getinfo (laanwj) -- #11738 `d4267a3` Fix sendrawtransaction hang when sending a tx already in mempool (TheBlueMatt) -- #11753 `32c9b57` clarify abortrescan rpc use (instagibbs) -- #11191 `ef14f2e` Improve help text and behavior of RPC-logging (AkioNak) -- #10874 `9e38d35` getblockchaininfo: Loop through the bip9 soft fork deployments instead of hard coding (achow101) -- #10275 `497d0e0` Allow fetching tx directly from specified block in getrawtransaction (kallewoof) -- #11178 `fee0370` Add iswitness parameter to decode- and fundrawtransaction RPCs (MeshCollider) -- #11667 `711d16c` Add scripts to dumpwallet RPC (MeshCollider) -- #11475 `9bad8d6` mempoolinfo should take ::minRelayTxFee into account (mess110) -- #12001 `a9a49e6` Adding ::minRelayTxFee amount to getmempoolinfo and updating help (jeffrade) -- #12198 `adce1de` Add deprecation error for `getinfo` (laanwj) -- #11415 `69ec021` Disallow using addresses in createmultisig (achow101) -- #12278 `288deac` Add special error for genesis coinbase to getrawtransaction (MeshCollider) -- #11362 `c6223b3` Remove nBlockMaxSize from miner opt struct as it is no longer used (gmaxwell) -- #10825 `28485c7` Set regtest JSON-RPC port to 18443 to avoid conflict with testnet 18332 (fametrano) -- #11303 `e542728` Fix estimatesmartfee rounding display issue (TheBlueMatt) -- #7061 `8c2de82` Add RPC call "rescanblockchain " (jonasschnelli) -- #11055 `95e14dc` RPC getreceivedbyaddress should return error if called with address not owned by the wallet (jnewbery) -- #12366 `93de37a` http: Join worker threads before deleting work queue (laanwj) -- #12315 `758a41e` Bech32 addresses in dumpwallet (fivepiece) -- #12427 `3762ac1` Make signrawtransaction accept P2SH-P2WSH redeemscripts (sipa) - -### GUI -- #10964 `64e66bb` Pass SendCoinsRecipient (208 bytes) by reference (practicalswift) -- #11169 `5b8af7b` Make tabs toolbar no longer have a context menu (achow101) -- #10911 `9c8f365` Fix typo and access key in optionsdialog.ui (keystrike) -- #10770 `ea729d5` Drop upgrade-cancel callback registration for a generic "cancelable" (TheBlueMatt) -- #11156 `a3624dd` Fix memory leaks in qt/guiutil.cpp (danra) -- #11268 `31e72b2` [macOS] remove Growl support, remove unused code (jonasschnelli) -- #11193 `c5c77bd` Terminate string *pszExePath after readlink and without using memset (practicalswift) -- #11508 `ffa5159` Fix crash via division by zero assertion (jonasschnelli) -- #11499 `6157e8c` Add upload and download info to the peerlist (debug menu) (aarongolliver) -- #11480 `ffc0b11` Add toggle for unblinding password fields (tjps) -- #11316 `22cdf93` Add use available balance in send coins dialog (CryptAxe, promag) -- #3716 `13e352d` Receive: Remove option to reuse a previous address (luke-jr) -- #11690 `f0c1f8a` Fix the StartupWMClass for bitoin-qt, so gnome-shell can recognize it (eklitzke) -- #10920 `f6f8d54` Fix potential memory leak in newPossibleKey(ChangeCWallet *wallet) (practicalswift) -- #11698 `7293d06` RPC-Console nested commands documentation (lmlsna) -- #11395 `38d31f9` Enable searching by transaction id (luke-jr) -- #11556 `91eeaa0` Improved copy for RBF checkbox and tooltip (Sjors) -- #11809 `80f9dad` Fix proxy setting options dialog crash (laanwj) -- #11616 `8585bb8` Update ban-state in case of dirty-state during periodic sweep (jonasschnelli) -- #11605 `f19ca12` Enable RBF by default in QT (Sjors) -- #12074 `a1136f0` Optimizes boolean expression model && model->haveWatchOnly() (251Labs) -- #12035 `eeb6d52` Change µBTC to bits (jb55) -- #12092 `fd4ca17` Replaces numbered place marker %2 with %1 (251Labs) -- #12173 `bbc91b7` Use flexible font size for QRCode image address (jonasschnelli) -- #12211 `10d10d7` Avoid potential null dereference in ReceiveCoinsDialog constructor (ryanofsky) -- #12261 `f359afc` Bump BLOCK_CHAIN_SIZE to 200GB (laanwj) -- #11991 `062c8b6` Receive: checkbox for bech32 address (Sjors) -- #11644 `045a809` Fix qt build broken by 5a5e4e9 (TheBlueMatt) -- #11448 `d473e6d` reset addrProxy/addrSeparateProxyTor if colon char missing (mess110) -- #12377 `604f289` qt: Poll ShutdownTimer after init is done (MarcoFalke) -- #12374 `daaae36` qt: Make sure splash screen is freed on AppInitMain fail (laanwj) -- #12349 `ad10b90` shutdown: fix crash on shutdown with reindex-chainstate (theuni) - -### Build system -- #10923 `2c9f5ec` travis: Build with --enable-werror under OS X (practicalswift) -- #11176 `df8c722` build: Rename --enable-experimental-asm to --enable-asm and enable by default (laanwj) -- #11286 `11dacc6` [depends] Don't build libevent sample code (fanquake) -- #7142 `801dd40` Travis: Test build against system libs (& Qt4) (luke-jr) -- #11380 `390771b` Remove outdated share/certs/ directory (MeshCollider) -- #11391 `7632310` Remove lxcbr0 lines from gitian-build.sh (MeshCollider) -- #11435 `167cef8` build: Make "make clean" remove all files created when running "make check" (practicalswift) -- #11460 `e022463` [depends] mac_alias 2.0.6, ds_store 1.1.2 (fanquake) -- #11541 `bb9ab0f` Build: Fix Automake warnings when running autogen.sh (fanquake) -- #11611 `0e70791` [build] Don't fail when passed --disable-lcov and lcov isn't available (fanquake) -- #11651 `3c098a8` refactor: Make all #includes relative to project root (laanwj, MeshCollider, ryanofsky) -- #11621 `1f7695b` [build] Add temp_bitcoin_locale_qrc to CLEAN_QT to fix make distcheck (fanquake) -- #11755 `84fa645` [Docs] Bump minimum required version of GCC to 4.8 (fanquake) -- #9254 `6d3dc52` [depends] ZeroMQ 4.2.2 (fanquake) -- #11842 `3c8f0a3` [build] Add missing stuff to clean-local (kallewoof) -- #11936 `483bb67` [build] Warn that only libconsensus can be built without Boost (fanquake) -- #11945 `7a11ba7` Improve BSD compatibility of contrib/install_db4.sh (laanwj) -- #11981 `180a255` Fix gitian build after libzmq bump (theuni) -- #11903 `8f68fd2` [trivial] Add required package dependencies for depends cross compilation (jonasschnelli) -- #12168 `45cf8a0` #include sys/fcntl.h to just fcntl.h (without sys/) (jsarenik) -- #12095 `3fa1ab4` Use BDB_LIBS/CFLAGS and pass --disable-replication (fanquake) -- #11711 `6378e5c` bitcoin_qt.m4: Minor fixes and clean-ups (fanquake) -- #11989 `90d4104` .gitignore: add QT Creator artifacts (Sjors) -- #11577 `c0ae864` Fix warnings (-Wsign-compare) when building with DEBUG_ADDRMAN (practicalswift) - -### Tests and QA -- #11024 `3e55f13` Remove OldSetKeyFromPassphrase/OldEncrypt/OldDecrypt (practicalswift) -- #10679 `31b2612` Document the non-DER-conformance of one test in tx_valid.json (schildbach) -- #11160 `ede386c` Improve versionbits_computeblockversion test code consistency (danra) -- #10303 `f088a1b` Include ms/blk stats in Connect* benchmarks (kallewoof) -- #10777 `d81dccf` Avoid redundant assignments. Remove unused variables (practicalswift) -- #11260 `52f8877` travis: Assert default datadir isn't created, Run scripted diff only once (MarcoFalke) -- #11271 `638e6c5` travis: filter out pyenv (theuni) -- #11285 `3255d63` Add -usehd to excluded args in check-doc.py (MeshCollider) -- #11297 `16e4184` Make sure ~/.bitcoin doesn't exist before build (MeshCollider) -- #11311 `cce94c5` travis: Revert default datadir check (MarcoFalke) -- #11300 `f4ed44a` Add a lint check for trailing whitespace (MeshCollider) -- #11323 `4ce2f3d` mininode: add an optimistic write and disable nagle (theuni) -- #11370 `2d85899` Add getblockchaininfo functional test (promag) -- #11365 `f199b8a` Add Qt GUI tests to Overview and ReceiveCoin Page (anditto) -- #11293 `dbc4ae0` Deduplicate CMerkleBlock construction code, add test coverage (jamesob) -- #10440 `9e8ef9d` Add libFuzzer support (practicalswift) -- #10941 `364da2c` Add blocknotify and walletnotify functional tests (promag) -- #11420 `8928093` Bump univalue subtree and fix json formatting in tests (MarcoFalke) -- #10099 `424be03` Slightly Improve Unit Tests for Checkqueue (JeremyRubin) -- #11513 `14b860b` A few Python3 tidy ups (jnewbery) -- #11486 `2ca518d` Add uacomment tests (mess110) -- #11452 `02ac8c8` Improve ZMQ functional test (promag) -- #10409 `b5545d8` Add fuzz testing for BlockTransactions and BlockTransactionsRequest (practicalswift) -- #11389 `dd56166` Support having segwit always active in regtest (sipa, ajtowns, jnewbery) -- #11562 `5776582` bench: use std::chrono rather than gettimeofday (theuni) -- #11182 `f7388e9` Add P2P interface to TestNode (jnewbery) -- #11552 `b5f9f02` Improve wallet-accounts test (ryanofsky) -- #11638 `5e3f5e4` Dead mininode code (jnewbery) -- #11646 `fe503e1` Require a steady clock for bench with at least micro precision (TheBlueMatt) -- #11468 `76b3349` Make comp test framework more debuggable (jnewbery) -- #11623 `ee92243` Add missing locks to tests (practicalswift) -- #11035 `927e528` [contrib] Add Valgrind suppressions file (practicalswift) -- #11641 `7adeea3` Only allow disconnecting all NodeConns (MarcoFalke) -- #11677 `3bdf242` Remove unused NodeConn members (MarcoFalke) -- #11699 `66d46c7` [travis-ci] Only run linters on Pull Requests (jnewbery) -- #11654 `084f52f` Initialize recently introduced non-static class member lastCycles to zero in constructor (practicalswift) -- #11648 `ccc70a2` Add messages.py (jnewbery) -- #11713 `49667a7` Fix for mismatched extern definition in wallet tests (sipsorcery) -- #11707 `0d89fa0` Fix sendheaders (jnewbery) -- #11718 `9cdd2bc` Move pwalletMain to wallet test fixture (laanwj) -- #11714 `901ba3e` Test that mempool rejects coinbase transactions (jamesob) -- #11743 `3d6ad40` Add multiwallet prefix test (MarcoFalke) -- #11683 `a892218` Remove unused mininode functions {ser,deser}_int_vector(...). Remove unused imports (practicalswift) -- #11712 `9f2c2db` Split NodeConn from NodeConnCB (jnewbery) -- #11791 `13e31dd` Rename NodeConn and NodeConnCB (jnewbery) -- #11835 `f60b4ad` Add Travis check for unused Python imports (practicalswift) -- #11849 `ad1820c` Assert that only one NetworkThread exists (jnewbery) -- #11877 `d4991c0` Improve createrawtransaction functional tests (promag) -- #11220 `2971fd0` Check specific validation error in miner tests (Sjors) -- #11947 `797441e` Fix rawtransactions test (laanwj) -- #11946 `8049241` Remove unused variable (firstAddrnServices) (practicalswift) -- #11867 `18a1bba` Improve node network test (jnewbery) -- #11883 `cfd99dd` Add configuration file/argument testing (MeshCollider) -- #11879 `d4e404a` Remove redundant univalue_tests.cpp (jnewbery) -- #11748 `20166f8` Adding unit tests for GetDifficulty in blockchain.cpp (merehap) -- #11517 `5180a86` Improve benchmark precision (martinus) -- #11291 `a332a7d` Fix string concatenation to os.path.join and add exception case (dongsam) -- #11965 `d38d1a3` Note on test order in test_runner (MarcoFalke) -- #11997 `ddff344` util_tests.cpp: actually check ignored args (ajtowns) -- #12079 `45173fa` Improve prioritisetransaction test coverage (promag) -- #12150 `92a810d` Fix ListCoins test failure due to unset g_address_type, g_change_type (ryanofsky) -- #12133 `1d2eaba` Fix rare failure in p2p-segwit.py (sdaftuar) -- #12082 `0910cbe` Adding test case for SINGLE|ANYONECANPAY hash type in tx_valid.json (Christewart) -- #11796 `4db16ec` Functional test naming convention (ajtowns) -- #12227 `b987ca4` test_runner: Readable output if create_cache.py fails (ryanofsky) -- #12089 `126000b` Make TestNodeCLI command optional in send_cli (MarcoFalke) -- #11774 `6970b30` Rename functional tests (ajtowns) -- #12264 `598a9c4` Fix versionbits warning test (jnewbery) -- #12217 `1213be6` Add missing syncwithvalidationinterfacequeue to tests (MarcoFalke) -- #12292 `eebe458` Fix names of excluded extended tests for travis (ajtowns) -- #11789 `60d739e` [travis-ci] Combine logs on failure (jnewbery) -- #11838 `3e50024` Add getrawtransaction in_active_chain=False test (MarcoFalke) -- #12206 `898f560` Sync with validationinterface queue in sync_mempools (MarcoFalke) -- #12424 `ff44101` Fix rescan test failure due to unset g_address_type, g_change_type (ryanofsky) -- #12388 `e2431d1` travis: Full clone for git subtree check (MarcoFalke) - -### Documentation -- #10680 `6366941` Fix inconsistencies and grammar in various files (MeshCollider) -- #11011 `7db65c3` Add a comment on the use of prevector in script (gmaxwell) -- #10878 `c58128f` Fix Markdown formatting issues in init.md (dongcarl) -- #11066 `9e00a62` Document the preference of nullptr over NULL or (void*)0 (practicalswift) -- #11094 `271e40a` Hash in ZMQ hash is raw bytes, not hex (runn1ng) -- #11026 `ea3ac59` Bugfix: Use testnet RequireStandard for -acceptnonstdtxn default (luke-jr) -- #11058 `4b65fa5` Comments: More comments on functions/globals in standard.h (jimpo) -- #11112 `3f726c9` [developer-notes] By default, declare single-argument constructors "explicit" (practicalswift) -- #11155 `a084767` Trivial: Documentation fixes for CVectorWriter ctors (danra) -- #11136 `108222b` Docs: Add python3 to list of dependencies on some platforms (danra) -- #11216 `81f8c03` Update hmac_sha256.h (utsavgupta) -- #11236 `ba05971` Add note on translations to CONTRIBUTING.md (MeshCollider) -- #11173 `4eb1f39` RPC: Fix currency unit string in the help text (AkioNak) -- #11135 `21e2f2f` Update developer notes with RPC response guidelines (promag) -- #11219 `bcc8a62` explain how to recompile a modified unit test (Sjors) -- #10779 `f656147` Create dependencies.md (flack) -- #10682 `2a56baf` Move the AreInputsStandard documentation next to its implementation (esneider) -- #11276 `ee50c9e` Update CONTRIBUTING.md to reduce unnecessary review workload (jonasschnelli) -- #11264 `b148803` Fix broken Markdown table in dependencies.md (practicalswift) -- #10691 `ce82985` Properly comment about shutdown process in init.cpp file (wraith7) -- #11330 `ae233c4` Fix comments for DEFAULT_WHITELIST[FORCE]RELAY (danra) -- #11340 `d6d2c85` Fix validation comments (danra) -- #11305 `2847480` Update release notes and manpages for 0.16 (MarcoFalke) -- #11132 `551d7bf` Document assumptions that are being made to avoid NULL pointer dereferences (practicalswift) -- #11390 `12ed800` Document scripted-diff (jnewbery) -- #11392 `a3b4c59` Fix stale link in gitian-building.md (shooterman) -- #11401 `4202273` Move gitian building to external repo (MarcoFalke) -- #11414 `bbc901d` Remove partial gitian build instructions from descriptors dir (fanquake) -- #11571 `c95832d` Fixed a couple small grammatical errors (BitsInMyBlood) -- #11624 `f9b74ef` Change formatting for sequence of steps (vivganes) -- #11597 `6f01dcf` Fix error messages in CFeeBumper (kallewoof) -- #11438 `7fbf3c6` Updated Windows build doc for WSL/Xenial workaround (sipsorcery) -- #11663 `41aa9c4` Add getreceivedbyaddress release notes (MarcoFalke) -- #11533 `cbb54e7` Update WSL installation notes for Fall Creators update (Thoragh) -- #11680 `4db82b7` Add instructions for lcov report generation (jamesob) -- #11686 `54aedc0` Make ISSUE_TEMPLATE a bit shorter, mention hardware tests (TheBlueMatt) -- #11704 `ea68190` Windows build doc update (sipsorcery) -- #11706 `5197100` Make default issue text all comments to make issues more readable (TheBlueMatt) -- #11140 `1429132` Improve #endif comments (danra) -- #11729 `7a43fbb` links to code style guides (Sjors) -- #11793 `8879d50` Bump OS X version to 10.13 (Varunram) -- #11783 `16fff80` Fix shutdown in case of errors during initialization (laanwj) -- #11804 `00d25e9` Fixed outdated link with archive.is (TimothyShimmin) -- #11960 `4307062` Fix link to installation script (laudaa) -- #12027 `63a4dc1` Remove boost --c++ flag from osx build instructions (fernandezpablo85) -- #12062 `5961b23` Increment MIT Licence copyright header year on files modified in 2017 (akx20000a) -- #12063 `36a5a44` Update license year range to 2018 (akx20000a) -- #12093 `5691028` Fix incorrect Markdown link (practicalswift) -- #12143 `b0d626d` Fix link for BIP159 pull request (azuchi) -- #12112 `3c62868` Remove the ending slashes from RPC URI format (jackycjh) -- #12166 `e839d65` Clarify -walletdir usage (jnewbery) -- #12241 `b030133` Fix incorrect link in /test/ README.md (fanquake) -- #12187 `b5e4b9b` Updating benchmarkmarking.md with an updated sample output (jeffrade) -- #12294 `7cf1aea` Create NetBSD build instructions and fix compilation (fanquake) -- #12251 `cc5870a` initwallet: Do not translate highly technical addresstype help (MarcoFalke) -- #11984 `efae366` Update OpenBSD build instructions for 6.2 (cont'd) (laanwj) -- #12293 `9d9c418` Mention that HD is enabled if hdmasterkeyid is present in getwalletinfo RPC help (fanquake) -- #12077 `c04cb48` Correct `sendmany` curl example (251Labs) -- #10677 `b3ecb7b` Document that addmultisigaddress is intended for non-watchonly addresses (instagibbs) -- #12177 `cad504b` Fix address_type help text of getnewaddress and getrawchangeaddress (mruddy) - -### Refactoring -- #9964 `b6a4891` Add const to methods that do not modify the object for which it is called (practicalswift) -- #10965 `655970d` Replace deprecated throw() with noexcept specifier (C++11) (practicalswift) -- #10645 `c484ec6` Use nullptr (C++11) instead of zero (0) as the null pointer constant (practicalswift) -- #10901 `22e301a` Fix constness of ArgsManager methods (promag) -- #10969 `4afb5aa` Declare single-argument (non-converting) constructors "explicit" (practicalswift) -- #11071 `dbf6bd6` Use static_assert(…, …) (C++11) instead of assert(…) where appropriate (practicalswift) -- #10809 `c559884` optim: mark a few classes final (theuni) -- #10843 `2ab7c63` Add attribute [[noreturn]] (C++11) to functions that will not return (practicalswift) -- #11151 `7fd49d0` Fix header guards using reserved identifiers (danra) -- #11138 `2982511` Compat: Simplify bswap_16 implementation (danra) -- #11161 `745bbdc` Remove redundant explicitly defined copy ctors (danra) -- #11144 `cee4fe1` Move local include to before system includes (danra) -- #10781 `60dd9cc` Python cleanups (practicalswift) -- #10701 `50fae68` Remove the virtual specifier for functions with the override specifier (practicalswift) -- #11164 `38a54a5` Fix boost headers included as user instead of system headers (danra) -- #11143 `3aa60b7` Fix include path for bitcoin-config.h (danra) -- #8330 `59e1789` Structure Packing Optimizations in C{,Mutable}Transaction (JeremyRubin) -- #10845 `39ae413` Remove unreachable code (practicalswift) -- #11238 `6acdb1f` Add assertions before potential null deferences (MeshCollider) -- #11259 `089b742` Remove duplicate destination decoding (promag) -- #11232 `2f0d3e6` Ensure that data types are consistent (jjz) -- #10793 `efb4383` Changing &var[0] to var.data() (MeshCollider) -- #11196 `e278f86` Switch memory_cleanse implementation to BoringSSL's to ensure memory clearing even with -lto (maaku) -- #10888 `9821274` range-based loops and const qualifications in net.cpp (benma) -- #11351 `6c4fecf` Refactor: Modernize disallowed copy constructors/assignment (danra) -- #11385 `94c9015` Remove some unused functions and methods (sipa) -- #11301 `8776787` add m_added_nodes to connman options (benma) -- #11432 `058c0f9` Remove unused fTry from push_lock (promag) -- #11107 `e93fff1` Fix races in AppInitMain and others with lock and atomic bools (MeshCollider) -- #9572 `17f2ace` Skip witness sighash cache for non-segwit transactions (jl2012) -- #10961 `da0478e` Improve readability of DecodeBase58Check(...) (practicalswift) -- #11133 `a865b38` Document assumptions that are being made to avoid division by zero (practicalswift) -- #11073 `3bb77eb` Remove dead store in ecdsa_signature_parse_der_lax (BitonicEelis) -- #10898 `470c730` Fix invalid checks (NULL checks after dereference, redundant checks, etc.) (practicalswift) -- #11495 `50d72b3` [trivial] Make namespace explicit for is_regular_file (jnewbery) -- #11511 `db2f83e` [Init] Remove redundant exit(EXIT_FAILURE) instances and replace with return false (donaloconnor) -- #10866 `ef8a634` Fix -Wthread-safety-analysis warnings. Compile with -Wthread-safety-analysis if available (practicalswift) -- #11221 `0dec4cc` Refactor: simpler read (gnuser) -- #10696 `ef3758d` Remove redundant nullptr checks before deallocation (practicalswift) -- #11043 `5e9be16` Use std::unique_ptr (C++11) where possible (practicalswift) -- #11353 `05a7619` Small refactor of CCoinsViewCache::BatchWrite() (danra) -- #10749 `2adbddb` Use compile-time constants instead of unnamed enumerations (remove "enum hack") (practicalswift) -- #11603 `a933cb1` Move RPC registration out of AppInitParameterInteraction (ryanofsky) -- #11722 `26efc22` Switched sync.{cpp,h} to std threading primitives (tjps) -- #10493 `fbce66a` Use range-based for loops (C++11) when looping over map elements (practicalswift) -- #11337 `0d7e0a3` Fix code constness in CBlockIndex::GetAncestor() overloads (danra) -- #11516 `0e722e8` crypto: Add test cases covering the relevant HMAC-SHA{256,512} key length boundaries (practicalswift) -- #10574 `5d132e8` Remove includes in .cpp files for things the corresponding .h file already included (practicalswift) -- #11884 `66479c0` Remove unused include in hash.cpp (kallewoof) -- #10839 `c66adb2` Don't use pass by reference to const for cheaply-copied types (bool, char, etc.) (practicalswift) -- #10657 `79399c8` Utils: Improvements to ECDSA key-handling code (str4d) -- #12250 `e37ca2b` Make CKey::Load references const (ryanofsky) -- #12108 `9220426` Remove unused fQuit var from checkqueue.h (donaloconnor) -- #12159 `f3c7062` Use the character based overload for std::string::find (kekimusmaximus) -- #12266 `3448907` Move scheduler/threadGroup into common-init instead of per-app (TheBlueMatt) - -### Miscellaneous -- #11246 `777519b` github-merge: Coalesce git fetches (laanwj) -- #10871 `c9a4aa8` Handle getinfo in bitcoin-cli w/ -getinfo (revival of #8843) (achow101) -- #11419 `093074b` Utils: Fix launchctl not being able to stop bitcoind (OmeGak) -- #11394 `6e4e98e` Perform a weaker subtree check in Travis (sipa) -- #11702 `4122112` [build] Add a script for installing db4 (jamesob) -- #11794 `dd49862` Prefix leveldb debug logging (laanwj) -- #11781 `24df9af` Add `-debuglogfile` option (laanwj) -- #10773 `c17f11f` Shell script cleanups (practicalswift) -- #11829 `7630a1f` Test datadir specified in conf file exists (MeshCollider) -- #11836 `d44535d` Rename rpcuser.py to rpcauth.py (hkjn) -- #11831 `d48ab83` Always return true if AppInitMain got to the end (TheBlueMatt) -- #11943 `1808660` contrib: fix typo in install_db4.sh help message (laanwj) -- #12075 `c991b30` [scripts] Add missing univalue file to copyright_header.py (fanquake) -- #12197 `000ac4f` Log debug build status and warn when running benchmarks (laanwj) -- #10672 `6ab0e4c` Avoid division by zero in the case of a corrupt estimates file (practicalswift) -- #11273 `cdd6bbf` Ignore old format estimation file (Xekyo) -- #11951 `1fb34e0` Remove dead feeest-file read code for old versions (TheBlueMatt) -- #11421 `9ccafb1` Merge current secp256k1 subtree (MarcoFalke) -- #11573 `2631d55` [Util] Update tinyformat.h (fanquake) -- #10529 `331352f` Improve bitcoind systemd service file (Flowdalic) -- #11620 `70fec9e` [build] .gitignore: add background.tiff (Sjors) -- #11558 `68e021e` Minimal code changes to allow msvc compilation (sipsorcery) -- #11284 `10bee0d` Fix invalid memory access in CScript::operator+= (guidovranken, ajtowns) -- #10939 `a1f7f18` [init] Check non-emptiness of -blocknotify command prior to executing (practicalswift) -- #11467 `937613d` Fix typos. Use nullptr instead of NULL (practicalswift) -- #11834 `5bea05b` [verify-commits] Fix gpg.sh's echoing for commits with '\n' (TheBlueMatt) -- #11830 `a13e443` rpcuser.py: Use 'python' not 'python2' (hkjn) -- #12194 `7abb0f0` Add change type option to fundrawtransaction (promag) -- #12269 `2ae7cf8` Update defaultAssumeValid to block 506067 (gmaxwell) -- #11952 `9ab9963` univalue: Bump subtree (MarcoFalke) -- #12367 `09fc859` Fix two fast-shutdown bugs (TheBlueMatt) -- #12422 `4d54e7a` util: Make LockDirectory thread-safe, consistent, and fix OpenBSD 6.2 build (laanwj) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- 251 -- Aaron Clauson -- Aaron Golliver -- aaron-hanson -- Adam Langley -- Akio Nakamura -- Akira Takizawa -- Alejandro Avilés -- Alex Morcos -- Alin Rus -- Anditto Heristyo -- Andras Elso -- Andreas Schildbach -- Andrew Chow -- Anthony Towns -- azuchi -- Carl Dong -- Chris Moore -- Chris Stewart -- Christian Gentry -- Cory Fields -- Cristian Mircea Messel -- CryptAxe -- Dan Raviv -- Daniel Edgecumbe -- danra -- david60 -- Donal O'Connor -- dongsamb -- Dusty Williams -- Eelis -- esneider -- Evan Klitzke -- fanquake -- Ferdinando M. Ametrano -- fivepiece -- flack -- Florian Schmaus -- gnuser -- Gregory Maxwell -- Gregory Sanders -- Henrik Jonsson -- Jack Grigg -- Jacky C -- James Evans -- James O'Beirne -- Jan Sarenik -- Jeff Rade -- Jeremiah Buddenhagen -- Jeremy Rubin -- Jim Posen -- jjz -- Joe Harvell -- Johannes Kanig -- John Newbery -- Johnson Lau -- Jonas Nick -- Jonas Schnelli -- João Barbosa -- Jorge Timón -- Karel Bílek -- Karl-Johan Alm -- klemens -- Kyuntae Ethan Kim -- laudaa -- Lawrence Nahum -- Lucas Betschart -- Luke Dashjr -- Luke Mlsna -- MarcoFalke -- Mark Friedenbach -- Marko Bencun -- Martin Ankerl -- Matt Corallo -- mruddy -- Murch -- NicolasDorier -- Pablo Fernandez -- Paul Berg -- Pedro Branco -- Pierre Rochard -- Pieter Wuille -- practicalswift -- Randolf Richardson -- Russell Yanofsky -- Samuel Dobson -- Sean Erle Johnson -- Shooter -- Sjors Provoost -- Suhas Daftuar -- Thomas Snider -- Thoragh -- Tim Shimmin -- Tomas van der Wansem -- Utsav Gupta -- Varunram Ganesh -- Vivek Ganesan -- Werner Lemberg -- William Casarin -- Willy Ko -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.16.1.md b/doc/release-notes/release-notes-0.16.1.md deleted file mode 100644 index d99361ae1d..0000000000 --- a/doc/release-notes/release-notes-0.16.1.md +++ /dev/null @@ -1,145 +0,0 @@ -Bitcoin Core version 0.16.1 is now available from: - - - -This is a new minor version release, with various bugfixes -as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -The first time you run version 0.15.0 or newer, your chainstate database will be converted to a -new format, which will take anywhere from a few minutes to half an hour, -depending on the speed of your machine. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0 or higher. Upgrading -directly from 0.7.x and earlier without re-downloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -Wallets created in 0.16 and later are not compatible with versions prior to 0.16 -and will not work if you try to use newly created wallets in older versions. Existing -wallets that were created with older versions are not affected by this. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notable changes -=============== - -Miner block size removed ------------------------- - -The `-blockmaxsize` option for miners to limit their blocks' sizes was -deprecated in version 0.15.1, and has now been removed. Miners should use the -`-blockmaxweight` option if they want to limit the weight of their blocks' -weights. - -0.16.1 change log ------------------- - -### Policy -- #11423 `d353dd1` [Policy] Several transaction standardness rules (jl2012) - -### Mining -- #12756 `e802c22` [config] Remove blockmaxsize option (jnewbery) - -### Block and transaction handling -- #13199 `c71e535` Bugfix: ensure consistency of m_failed_blocks after reconsiderblock (sdaftuar) -- #13023 `bb79aaf` Fix some concurrency issues in ActivateBestChain() (skeees) - -### P2P protocol and network code -- #12626 `f60e84d` Limit the number of IPs addrman learns from each DNS seeder (EthanHeilman) - -### Wallet -- #13265 `5d8de76` Exit SyncMetaData if there are no transactions to sync (laanwj) -- #13030 `5ff571e` Fix zapwallettxes/multiwallet interaction. (jnewbery) - -### GUI -- #12999 `1720eb3` Show the Window when double clicking the taskbar icon (ken2812221) -- #12650 `f118a7a` Fix issue: "default port not shown correctly in settings dialog" (251Labs) -- #13251 `ea487f9` Rephrase Bech32 checkbox texts, and enable it with legacy address default (fanquake) - -### Build system -- #12474 `b0f692f` Allow depends system to support armv7l (hkjn) -- #12585 `72a3290` depends: Switch to downloading expat from GitHub (fanquake) -- #12648 `46ca8f3` test: Update trusted git root (MarcoFalke) -- #11995 `686cb86` depends: Fix Qt build with Xcode 9 (fanquake) -- #12636 `845838c` backport: #11995 Fix Qt build with Xcode 9 (fanquake) -- #12946 `e055bc0` depends: Fix Qt build with XCode 9.3 (fanquake) -- #12998 `7847b92` Default to defining endian-conversion DECLs in compat w/o config (TheBlueMatt) - -### Tests and QA -- #12447 `01f931b` Add missing signal.h header (laanwj) -- #12545 `1286f3e` Use wait_until to ensure ping goes out (Empact) -- #12804 `4bdb0ce` Fix intermittent rpc_net.py failure. (jnewbery) -- #12553 `0e98f96` Prefer wait_until over polling with time.sleep (Empact) -- #12486 `cfebd40` Round target fee to 8 decimals in assert_fee_amount (kallewoof) -- #12843 `df38b13` Test starting bitcoind with -h and -version (jnewbery) -- #12475 `41c29f6` Fix python TypeError in script.py (MarcoFalke) -- #12638 `0a76ed2` Cache only chain and wallet for regtest datadir (MarcoFalke) -- #12902 `7460945` Handle potential cookie race when starting node (sdaftuar) -- #12904 `6c26df0` Ensure bitcoind processes are cleaned up when tests end (sdaftuar) -- #13049 `9ea62a3` Backports (MarcoFalke) -- #13201 `b8aacd6` Handle disconnect_node race (sdaftuar) - -### Miscellaneous -- #12518 `a17fecf` Bump leveldb subtree (MarcoFalke) -- #12442 `f3b8d85` devtools: Exclude patches from lint-whitespace (MarcoFalke) -- #12988 `acdf433` Hold cs_main while calling UpdatedBlockTip() signal (skeees) -- #12985 `0684cf9` Windows: Avoid launching as admin when NSIS installer ends. (JeremyRand) - -### Documentation -- #12637 `60086dd` backport: #12556 fix version typo in getpeerinfo RPC call help (fanquake) -- #13184 `4087dd0` RPC Docs: `gettxout*`: clarify bestblock and unspent counts (harding) -- #13246 `6de7543` Bump to Ubuntu Bionic 18.04 in build-windows.md (ken2812221) -- #12556 `e730b82` Fix version typo in getpeerinfo RPC call help (tamasblummer) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- 251 -- Ben Woosley -- Chun Kuan Lee -- David A. Harding -- e0 -- fanquake -- Henrik Jonsson -- JeremyRand -- Jesse Cohen -- John Newbery -- Johnson Lau -- Karl-Johan Alm -- Luke Dashjr -- MarcoFalke -- Matt Corallo -- Pieter Wuille -- Suhas Daftuar -- Tamas Blummer -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.16.2.md b/doc/release-notes/release-notes-0.16.2.md deleted file mode 100644 index d549748d25..0000000000 --- a/doc/release-notes/release-notes-0.16.2.md +++ /dev/null @@ -1,116 +0,0 @@ -Bitcoin Core version 0.16.2 is now available from: - - - -This is a new minor version release, with various bugfixes -as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -The first time you run version 0.15.0 or newer, your chainstate database will be converted to a -new format, which will take anywhere from a few minutes to half an hour, -depending on the speed of your machine. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0 or higher. Upgrading -directly from 0.7.x and earlier without re-downloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -Wallets created in 0.16 and later are not compatible with versions prior to 0.16 -and will not work if you try to use newly created wallets in older versions. Existing -wallets that were created with older versions are not affected by this. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -0.16.2 change log ------------------- - -### Wallet -- #13622 `c04a4a5` Remove mapRequest tracking that just effects Qt display. (TheBlueMatt) -- #12905 `cfc6f74` [rpcwallet] Clamp walletpassphrase value at 100M seconds (sdaftuar) -- #13437 `ed82e71` wallet: Erase wtxOrderd wtx pointer on removeprunedfunds (MarcoFalke) - -### RPC and other APIs -- #13451 `cbd2f70` rpc: expose CBlockIndex::nTx in getblock(header) (instagibbs) -- #13507 `f7401c8` RPC: Fix parameter count check for importpubkey (kristapsk) -- #13452 `6b9dc8c` rpc: have verifytxoutproof check the number of txns in proof structure (instagibbs) -- #12837 `bf1f150` rpc: fix type mistmatch in `listreceivedbyaddress` (joemphilips) -- #12743 `657dfc5` Fix csBestBlock/cvBlockChange waiting in rpc/mining (sipa) - -### GUI -- #12432 `f78e7f6` [qt] send: Clear All also resets coin control options (Sjors) -- #12617 `21dd512` gui: Show messages as text not html (laanwj) -- #12793 `cf6feb7` qt: Avoid reseting on resetguisettigs=0 (MarcoFalke) - -### Build system -- #13544 `9fd3e00` depends: Update Qt download url (fanquake) -- #12573 `88d1a64` Fix compilation when compiler do not support `__builtin_clz*` (532479301) - -### Tests and QA -- #13061 `170b309` Make tests pass after 2020 (bmwiedemann) -- #13192 `79c4fff` [tests] Fixed intermittent failure in `p2p_sendheaders.py` (lmanners) -- #13300 `d9c5630` qa: Initialize lockstack to prevent null pointer deref (MarcoFalke) -- #13545 `e15e3a9` tests: Fix test case `streams_serializedata_xor` Remove Boost dependency. (practicalswift) -- #13304 `cbdabef` qa: Fix `wallet_listreceivedby` race (MarcoFalke) - -### Miscellaneous -- #12887 `2291774` Add newlines to end of log messages (jnewbery) -- #12859 `18b0c69` Bugfix: Include for `std::unique_ptr` (luke-jr) -- #13131 `ce8aa54` Add Windows shutdown handler (ken2812221) -- #13652 `20461fc` rpc: Fix that CWallet::AbandonTransaction would leave the grandchildren, etc. active (Empact) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- 532479301 -- Ben Woosley -- Bernhard M. Wiedemann -- Chun Kuan Lee -- Cory Fields -- fanquake -- Gregory Sanders -- joemphilips -- John Newbery -- Kristaps Kaupe -- lmanners -- Luke Dashjr -- MarcoFalke -- Matt Corallo -- Pieter Wuille -- practicalswift -- Sjors Provoost -- Suhas Daftuar -- Wladimir J. van der Laan - -And to those that reported security issues: - -- Braydon Fuller -- Himanshu Mehta - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.16.3.md b/doc/release-notes/release-notes-0.16.3.md deleted file mode 100644 index 2e52d309c2..0000000000 --- a/doc/release-notes/release-notes-0.16.3.md +++ /dev/null @@ -1,88 +0,0 @@ -Bitcoin Core version 0.16.3 is now available from: - - - -This is a new minor version release, with various bugfixes. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -The first time you run version 0.15.0 or newer, your chainstate database will be converted to a -new format, which will take anywhere from a few minutes to half an hour, -depending on the speed of your machine. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0 or higher. Upgrading -directly from 0.7.x and earlier without re-downloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -Wallets created in 0.16 and later are not compatible with versions prior to 0.16 -and will not work if you try to use newly created wallets in older versions. Existing -wallets that were created with older versions are not affected by this. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.8+, and Windows Vista and later. Windows XP is not supported. - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -Notable changes -=============== - -Denial-of-Service vulnerability -------------------------------- - -A denial-of-service vulnerability (CVE-2018-17144) exploitable by miners has -been discovered in Bitcoin Core versions 0.14.0 up to 0.16.2. It is recommended -to upgrade any of the vulnerable versions to 0.16.3 as soon as possible. - -0.16.3 change log ------------------- - -### Consensus -- #14249 `696b936` Fix crash bug with duplicate inputs within a transaction (TheBlueMatt, sdaftuar) - -### RPC and other APIs -- #13547 `212ef1f` Make `signrawtransaction*` give an error when amount is needed but missing (ajtowns) - -### Miscellaneous -- #13655 `1cdbea7` bitcoinconsensus: invalid flags error should be set to `bitcoinconsensus_err` (afk11) - -### Documentation -- #13844 `11b9dbb` correct the help output for -prune (hebasto) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Anthony Towns -- Hennadii Stepanov -- Matt Corallo -- Suhas Daftuar -- Thomas Kerin -- Wladimir J. van der Laan - -And to those that reported security issues: - -- (anonymous reporter) - diff --git a/doc/release-notes/release-notes-0.17.0.1.md b/doc/release-notes/release-notes-0.17.0.1.md deleted file mode 100644 index 92db7dac7d..0000000000 --- a/doc/release-notes/release-notes-0.17.0.1.md +++ /dev/null @@ -1,41 +0,0 @@ -Bitcoin Core version 0.17.0.1 is now available from: - - - -This release provides a minor bug fix for 0.17.0. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -Notable changes -=============== - -An issue was solved with OSX dmg generation, affecting macOS 10.12 to 10.14, -which could cause Finder to crash on install. - -There are no significant changes for other operating systems. - -0.17.0.1 change log -=================== - -### Build system -- #14416 `eb2cc84` Fix OSX dmg issue (10.12 to 10.14) (jonasschnelli) - -### Documentation -- #14509 `1b5af2c` [0.17] doc: use SegWit in getblocktemplate example (Sjors) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Jonas Schnelli -- Pieter Wuille -- Sjors Provoost -- Wladimir J. van der Laan - diff --git a/doc/release-notes/release-notes-0.17.0.md b/doc/release-notes/release-notes-0.17.0.md deleted file mode 100644 index 418d7ba5f9..0000000000 --- a/doc/release-notes/release-notes-0.17.0.md +++ /dev/null @@ -1,1105 +0,0 @@ -Bitcoin Core version 0.17.0 is now available from: - - - -This is a new major version release, including new features, various bugfixes -and performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -If your node has a txindex, the txindex db will be migrated the first time you run 0.17.0 or newer, which may take up to a few hours. Your node will not be functional until this migration completes. - -The first time you run version 0.15.0 or newer, your chainstate database will be converted to a -new format, which will take anywhere from a few minutes to half an hour, -depending on the speed of your machine. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading -directly from 0.7.x and earlier without redownloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -The chainstate database for this release is not compatible with previous -releases, so if you run 0.15 and then decide to switch back to any -older version, you will need to run the old release with the `-reindex-chainstate` -option to rebuild the chainstate data structures in the old format. - -If your node has pruning enabled, this will entail re-downloading and -processing the entire blockchain. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.10+, and Windows 7 and newer (Windows XP is not supported). - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -From 0.17.0 onwards macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't -support versions of macOS older than 10.10. - -Known issues -============ - -- Upgrading from 0.13.0 or older currently results in memory blow-up during the roll-back of blocks to the SegWit activation point. In these cases, a full `-reindex` is necessary. - -- The GUI suffers from visual glitches in the new MacOS dark mode. This has to do with our Qt theme handling and is not a new problem in 0.17.0, but is expected to be resolved in 0.17.1. - -Notable changes -=============== - -Changed configuration options ------------------------------ - -- `-includeconf=` can be used to include additional configuration files. - Only works inside the `bitcoin.conf` file, not inside included files or from - command-line. Multiple files may be included. Can be disabled from command- - line via `-noincludeconf`. Note that multi-argument commands like - `-includeconf` will override preceding `-noincludeconf`, i.e. - ``` - noincludeconf=1 - includeconf=relative.conf - ``` - - as bitcoin.conf will still include `relative.conf`. - -GUI changes ------------ - -- Block storage can be limited under Preferences, in the Main tab. Undoing this setting requires downloading the full blockchain again. This mode is incompatible with -txindex and -rescan. - -External wallet files ---------------------- - -The `-wallet=` option now accepts full paths instead of requiring wallets -to be located in the -walletdir directory. - -Newly created wallet format ---------------------------- - -If `-wallet=` is specified with a path that does not exist, it will now -create a wallet directory at the specified location (containing a wallet.dat -data file, a db.log file, and database/log.?????????? files) instead of just -creating a data file at the path and storing log files in the parent -directory. This should make backing up wallets more straightforward than -before because the specified wallet path can just be directly archived without -having to look in the parent directory for transaction log files. - -For backwards compatibility, wallet paths that are names of existing data files -in the `-walletdir` directory will continue to be accepted and interpreted the -same as before. - -Dynamic loading and creation of wallets ---------------------------------------- - -Previously, wallets could only be loaded or created at startup, by specifying `-wallet` parameters on the command line or in the bitcoin.conf file. It is now possible to load, create and unload wallets dynamically at runtime: - -- Existing wallets can be loaded by calling the `loadwallet` RPC. The wallet can be specified as file/directory basename (which must be located in the `walletdir` directory), or as an absolute path to a file/directory. -- New wallets can be created (and loaded) by calling the `createwallet` RPC. The provided name must not match a wallet file in the `walletdir` directory or the name of a wallet that is currently loaded. -- Loaded wallets can be unloaded by calling the `unloadwallet` RPC. - -This feature is currently only available through the RPC interface. - -Coin selection --------------- - -### Partial spend avoidance - -When an address is paid multiple times the coins from those separate payments can be spent separately which hurts privacy due to linking otherwise separate addresses. A new `-avoidpartialspends` flag has been added (default=false). If enabled, the wallet will always spend existing UTXO to the same address together even if it results in higher fees. If someone were to send coins to an address after it was used, those coins will still be included in future coin selections. - -Configuration sections for testnet and regtest ----------------------------------------------- - -It is now possible for a single configuration file to set different -options for different networks. This is done by using sections or by -prefixing the option with the network, such as: - - main.uacomment=bitcoin - test.uacomment=bitcoin-testnet - regtest.uacomment=regtest - [main] - mempoolsize=300 - [test] - mempoolsize=100 - [regtest] - mempoolsize=20 - -If the following options are not in a section, they will only apply to mainnet: -`addnode=`, `connect=`, `port=`, `bind=`, `rpcport=`, `rpcbind=` and `wallet=`. -The options to choose a network (`regtest=` and `testnet=`) must be specified -outside of sections. - -'label' and 'account' APIs for wallet -------------------------------------- - -A new 'label' API has been introduced for the wallet. This is intended as a -replacement for the deprecated 'account' API. The 'account' can continue to -be used in V0.17 by starting bitcoind with the '-deprecatedrpc=accounts' -argument, and will be fully removed in V0.18. - -The label RPC methods mirror the account functionality, with the following functional differences: - -- Labels can be set on any address, not just receiving addresses. This functionality was previously only available through the GUI. -- Labels can be deleted by reassigning all addresses using the `setlabel` RPC method. -- There isn't support for sending transactions _from_ a label, or for determining which label a transaction was sent from. -- Labels do not have a balance. - -Here are the changes to RPC methods: - -| Deprecated Method | New Method | Notes | -| :---------------------- | :-------------------- | :-----------| -| `getaccount` | `getaddressinfo` | `getaddressinfo` returns a json object with address information instead of just the name of the account as a string. | -| `getaccountaddress` | n/a | There is no replacement for `getaccountaddress` since labels do not have an associated receive address. | -| `getaddressesbyaccount` | `getaddressesbylabel` | `getaddressesbylabel` returns a json object with the addresses as keys, instead of a list of strings. | -| `getreceivedbyaccount` | `getreceivedbylabel` | _no change in behavior_ | -| `listaccounts` | `listlabels` | `listlabels` does not return a balance or accept `minconf` and `watchonly` arguments. | -| `listreceivedbyaccount` | `listreceivedbylabel` | Both methods return new `label` fields, along with `account` fields for backward compatibility. | -| `move` | n/a | _no replacement_ | -| `sendfrom` | n/a | _no replacement_ | -| `setaccount` | `setlabel` | Both methods now:
  • allow assigning labels to any address, instead of raising an error if the address is not receiving address.
  • delete the previous label associated with an address when the final address using that label is reassigned to a different label, instead of making an implicit `getaccountaddress` call to ensure the previous label still has a receiving address. | - -| Changed Method | Notes | -| :--------------------- | :------ | -| `addmultisigaddress` | Renamed `account` named parameter to `label`. Still accepts `account` for backward compatibility if running with '-deprecatedrpc=accounts'. | -| `getnewaddress` | Renamed `account` named parameter to `label`. Still accepts `account` for backward compatibility. if running with '-deprecatedrpc=accounts' | -| `listunspent` | Returns new `label` fields. `account` field will be returned for backward compatibility if running with '-deprecatedrpc=accounts' | -| `sendmany` | The `account` named parameter has been renamed to `dummy`. If provided, the `dummy` parameter must be set to the empty string, unless running with the `-deprecatedrpc=accounts` argument (in which case functionality is unchanged). | -| `listtransactions` | The `account` named parameter has been renamed to `dummy`. If provided, the `dummy` parameter must be set to the string `*`, unless running with the `-deprecatedrpc=accounts` argument (in which case functionality is unchanged). | -| `getbalance` | `account`, `minconf` and `include_watchonly` parameters are deprecated, and can only be used if running with '-deprecatedrpc=accounts' | - -BIP 174 Partially Signed Bitcoin Transactions support ------------------------------------------------------ - -[BIP 174 PSBT](https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki) is an interchange format for Bitcoin transactions that are not fully signed -yet, together with relevant metadata to help entities work towards signing it. -It is intended to simplify workflows where multiple parties need to cooperate to -produce a transaction. Examples include hardware wallets, multisig setups, and -[CoinJoin](https://bitcointalk.org/?topic=279249) transactions. - -### Overall workflow - -Overall, the construction of a fully signed Bitcoin transaction goes through the -following steps: - -- A **Creator** proposes a particular transaction to be created. He constructs - a PSBT that contains certain inputs and outputs, but no additional metadata. -- For each input, an **Updater** adds information about the UTXOs being spent by - the transaction to the PSBT. -- A potentially other Updater adds information about the scripts and public keys - involved in each of the inputs (and possibly outputs) of the PSBT. -- **Signers** inspect the transaction and its metadata to decide whether they - agree with the transaction. They can use amount information from the UTXOs - to assess the values and fees involved. If they agree, they produce a - partial signature for the inputs for which they have relevant key(s). -- A **Finalizer** is run for each input to convert the partial signatures and - possibly script information into a final `scriptSig` and/or `scriptWitness`. -- An **Extractor** produces a valid Bitcoin transaction (in network format) - from a PSBT for which all inputs are finalized. - -Generally, each of the above (excluding Creator and Extractor) will simply -add more and more data to a particular PSBT. In a naive workflow, they all have -to operate sequentially, passing the PSBT from one to the next, until the -Extractor can convert it to a real transaction. In order to permit parallel -operation, **Combiners** can be employed which merge metadata from different -PSBTs for the same unsigned transaction. - -The names above in bold are the names of the roles defined in BIP174. They're -useful in understanding the underlying steps, but in practice, software and -hardware implementations will typically implement multiple roles simultaneously. - -### RPCs - -- **`converttopsbt` (Creator)** is a utility RPC that converts an - unsigned raw transaction to PSBT format. It ignores existing signatures. -- **`createpsbt` (Creator)** is a utility RPC that takes a list of inputs and - outputs and converts them to a PSBT with no additional information. It is - equivalent to calling `createrawtransaction` followed by `converttopsbt`. -- **`walletcreatefundedpsbt` (Creator, Updater)** is a wallet RPC that creates a - PSBT with the specified inputs and outputs, adds additional inputs and change - to it to balance it out, and adds relevant metadata. In particular, for inputs - that the wallet knows about (counting towards its normal or watch-only - balance), UTXO information will be added. For outputs and inputs with UTXO - information present, key and script information will be added which the wallet - knows about. It is equivalent to running `createrawtransaction`, followed by - `fundrawtransaction`, and `converttopsbt`. -- **`walletprocesspsbt` (Updater, Signer, Finalizer)** is a wallet RPC that takes as - input a PSBT, adds UTXO, key, and script data to inputs and outputs that miss - it, and optionally signs inputs. Where possible it also finalizes the partial - signatures. -- **`finalizepsbt` (Finalizer, Extractor)** is a utility RPC that finalizes any - partial signatures, and if all inputs are finalized, converts the result to a - fully signed transaction which can be broadcast with `sendrawtransaction`. -- **`combinepsbt` (Combiner)** is a utility RPC that implements a Combiner. It - can be used at any point in the workflow to merge information added to - different versions of the same PSBT. In particular it is useful to combine the - output of multiple Updaters or Signers. -- **`decodepsbt`** is a diagnostic utility RPC which will show all information in - a PSBT in human-readable form, as well as compute its eventual fee if known. - -Upgrading non-HD wallets to HD wallets --------------------------------------- - -Since Bitcoin Core 0.13.0, creating new BIP 32 Hierarchical Deterministic wallets has been supported by Bitcoin Core but old non-HD wallets could not be upgraded to HD. Now non-HD wallets can be upgraded to HD using the `-upgradewallet` command line option. This upgrade will result in the all keys in the keypool being marked as used and a new keypool generated. **A new backup must be made when this upgrade is performed.** - -Additionally, `-upgradewallet` can be used to upgraded from a non-split HD chain (all keys generated with `m/0'/0'/i'`) to a split HD chain (receiving keys generated with `'m/0'/0'/i'` and change keys generated with `m'/0'/1'/i'`). When this upgrade occurs, all keys already in the keypool will remain in the keypool to be used until all keys from before the upgrade are exhausted. This is to avoid issues with backups and downgrades when some keys may come from the change key keypool. Users can begin using the new split HD chain keypools by using the `newkeypool` RPC to mark all keys in the keypool as used and begin using a new keypool generated from the split HD chain. - -HD Master key rotation ----------------------- - -A new RPC, `sethdseed`, has been introduced which allows users to set a new HD seed or set their own HD seed. This allows for a new HD seed to be used. **A new backup must be made when a new HD seed is set.** - -Low-level RPC changes ---------------------- - -- The new RPC `scantxoutset` can be used to scan the UTXO set for entries - that match certain output descriptors. Refer to the [output descriptors - reference documentation](/doc/descriptors.md) for more details. This call - is similar to `listunspent` but does not use a wallet, meaning that the - wallet can be disabled at compile or run time. This call is experimental, - as such, is subject to changes or removal in future releases. - -- The `createrawtransaction` RPC will now accept an array or dictionary (kept for compatibility) for the `outputs` parameter. This means the order of transaction outputs can be specified by the client. -- The `fundrawtransaction` RPC will reject the previously deprecated `reserveChangeKey` option. -- `sendmany` now shuffles outputs to improve privacy, so any previously expected behavior with regards to output ordering can no longer be relied upon. -- The new RPC `testmempoolaccept` can be used to test acceptance of a transaction to the mempool without adding it. -- JSON transaction decomposition now includes a `weight` field which provides - the transaction's exact weight. This is included in REST /rest/tx/ and - /rest/block/ endpoints when in json mode. This is also included in `getblock` - (with verbosity=2), `listsinceblock`, `listtransactions`, and - `getrawtransaction` RPC commands. -- New `fees` field introduced in `getrawmempool`, `getmempoolancestors`, `getmempooldescendants` and - `getmempoolentry` when verbosity is set to `true` with sub-fields `ancestor`, `base`, `modified` - and `descendant` denominated in BTC. This new field deprecates previous fee fields, such as - `fee`, `modifiedfee`, `ancestorfee` and `descendantfee`. -- The new RPC `getzmqnotifications` returns information about active ZMQ - notifications. -- When bitcoin is not started with any `-wallet=` options, the name of - the default wallet returned by `getwalletinfo` and `listwallets` RPCs is - now the empty string `""` instead of `"wallet.dat"`. If bitcoin is started - with any `-wallet=` options, there is no change in behavior, and the - name of any wallet is just its `` string. -- Passing an empty string (`""`) as the `address_type` parameter to - `getnewaddress`, `getrawchangeaddress`, `addmultisigaddress`, - `fundrawtransaction` RPCs is now an error. Previously, this would fall back - to using the default address type. It is still possible to pass null or leave - the parameter unset to use the default address type. - -- Bare multisig outputs to our keys are no longer automatically treated as - incoming payments. As this feature was only available for multisig outputs for - which you had all private keys in your wallet, there was generally no use for - them compared to single-key schemes. Furthermore, no address format for such - outputs is defined, and wallet software can't easily send to it. These outputs - will no longer show up in `listtransactions`, `listunspent`, or contribute to - your balance, unless they are explicitly watched (using `importaddress` or - `importmulti` with hex script argument). `signrawtransaction*` also still - works for them. - -- The `getwalletinfo` RPC method now returns an `hdseedid` value, which is always the same as the incorrectly-named `hdmasterkeyid` value. `hdmasterkeyid` will be removed in V0.18. -- The `getaddressinfo` RPC method now returns an `hdseedid` value, which is always the same as the incorrectly-named `hdmasterkeyid` value. `hdmasterkeyid` will be removed in V0.18. - -- Parts of the `validateaddress` RPC method have been deprecated and moved to - `getaddressinfo`. Clients must transition to using `getaddressinfo` to access - this information before upgrading to v0.18. The following deprecated fields - have moved to `getaddressinfo` and will only be shown with - `-deprecatedrpc=validateaddress`: `ismine`, `iswatchonly`, `script`, `hex`, - `pubkeys`, `sigsrequired`, `pubkey`, `addresses`, `embedded`, `iscompressed`, - `account`, `timestamp`, `hdkeypath`, `hdmasterkeyid`. -- `signrawtransaction` is deprecated and will be fully removed in v0.18. To use - `signrawtransaction` in v0.17, restart bitcoind with - `-deprecatedrpc=signrawtransaction`. Projects should transition to using - `signrawtransactionwithkey` and `signrawtransactionwithwallet` before - upgrading to v0.18. - -Other API changes ------------------ - -- The `inactivehdmaster` property in the `dumpwallet` output has been corrected to `inactivehdseed` - -### Logging - -- The log timestamp format is now ISO 8601 (e.g. "2018-02-28T12:34:56Z"). - -- When running bitcoind with `-debug` but without `-daemon`, logging to stdout - is now the default behavior. Setting `-printtoconsole=1` no longer implicitly - disables logging to debug.log. Instead, logging to file can be explicitly disabled - by setting `-debuglogfile=0`. - -Transaction index changes -------------------------- - -The transaction index is now built separately from the main node procedure, -meaning the `-txindex` flag can be toggled without a full reindex. If bitcoind -is run with `-txindex` on a node that is already partially or fully synced -without one, the transaction index will be built in the background and become -available once caught up. When switching from running `-txindex` to running -without the flag, the transaction index database will *not* be deleted -automatically, meaning it could be turned back on at a later time without a full -resync. - -Miner block size removed ------------------------- - -The `-blockmaxsize` option for miners to limit their blocks' sizes was -deprecated in V0.15.1, and has now been removed. Miners should use the -`-blockmaxweight` option if they want to limit the weight of their blocks. - -Python Support --------------- - -Support for Python 2 has been discontinued for all test files and tools. - -0.17.0 change log -================= - -### Consensus -- #12204 `3fa24bb` Fix overly eager BIP30 bypass (morcos) - -### Policy -- #12568 `ed6ae80` Allow dustrelayfee to be set to zero (luke-jr) -- #13120 `ca2a233` Treat segwit as always active (MarcoFalke) -- #13096 `062738c` Fix `MAX_STANDARD_TX_WEIGHT` check (jl2012) - -### Mining -- #12693 `df529dc` Remove unused variable in SortForBlock (drewx2) -- #12448 `84efa9a` Interrupt block generation on shutdown request (promag) - -### Block and transaction handling -- #12225 `67447ba` Mempool cleanups (sdaftuar) -- #12356 `fd65937` Fix 'mempool min fee not met' debug output (Empact) -- #12287 `bf3353d` Optimise lock behaviour for GuessVerificationProgress() (jonasschnelli) -- #11889 `47a7666` Drop extra script variable in ProduceSignature (ryanofsky) -- #11880 `d59b8d6` Stop special-casing phashBlock handling in validation for TBV (TheBlueMatt) -- #12431 `947c25e` Only call NotifyBlockTip when chainActive changes (jamesob) -- #12653 `534b8fa` Allow to optional specify the directory for the blocks storage (jonasschnelli) -- #12172 `3b62a91` Bugfix: RPC: savemempool: Don't save until LoadMempool() is finished (jtimon) -- #12167 `88430cb` Make segwit failure due to `CLEANSTACK` violation return a `SCRIPT_ERR_CLEANSTACK` error code (maaku) -- #12561 `24133b1` Check for block corruption in ConnectBlock() (sdaftuar) -- #11617 `1b5723e` Avoid lock: Call FlushStateToDisk(…) regardless of fCheckForPruning (practicalswift) -- #11739 `0a8b7b4` Enforce `SCRIPT_VERIFY_P2SH` and `SCRIPT_VERIFY_WITNESS` from genesis (sdaftuar) -- #12885 `a49381d` Reduce implementation code inside CScript (sipa) -- #13032 `34dd1a6` Output values for "min relay fee not met" error (kristapsk) -- #13033 `a07e8ca` Build txindex in parallel with validation (jimpo) -- #13080 `66cc47b` Add compile time checking for ::mempool.cs runtime locking assertions (practicalswift) -- #13185 `08c1caf` Bugfix: the end of a reorged chain is invalid when connect fails (sipa) -- #11689 `0264836` Fix missing locking in CTxMemPool::check(…) and CTxMemPool::setSanityCheck(…) (practicalswift) -- #13011 `3c2a41a` Cache witness hash in CTransaction (MarcoFalke) -- #13191 `0de7cc8` Specialized double-SHA256 with 64 byte inputs with SSE4.1 and AVX2 (sipa) -- #13243 `ea263e1` Make reusable base class for auxiliary indices (jimpo) -- #13393 `a607d23` Enable double-SHA256-for-64-byte code on 32-bit x86 (sipa) -- #13428 `caabdea` validation: check the specified number of blocks (off-by-one) (kallewoof) -- #13438 `450055b` Improve coverage of SHA256 SelfTest code (sipa) -- #13431 `954f4a9` validation: count blocks correctly for check level < 3 (kallewoof) -- #13386 `3a3eabe` SHA256 implementations based on Intel SHA Extensions (sipa) -- #11658 `9a1ad2c` During IBD, when doing pruning, prune 10% extra to avoid pruning again soon after (luke-jr) -- #13794 `8ce55df` chainparams: Update with data from assumed valid chain (MarcoFalke) -- #13527 `e7ea858` Remove promiscuousmempoolflags (MarcoFalke) - -### P2P protocol and network code -- #12342 `eaeaa2d` Extend #11583 ("Do not make it trivial for inbound peers to generate log entries") to include "version handshake timeout" message (clemtaylor) -- #12218 `9a32114` Move misbehaving logging to net logging category (laanwj) -- #10387 `5c2aff8` Eventually connect to `NODE_NETWORK_LIMITED` peers (jonasschnelli) -- #9037 `a36834f` Add test-before-evict discipline to addrman (EthanHeilman) -- #12622 `e1d6e2a` Correct addrman logging (laanwj) -- #11962 `0a01843` add seed.bitcoin.sprovoost.nl to DNS seeds (Sjors) -- #12569 `23e7fe8` Increase signal-to-noise ratio in debug.log by adjusting log level when logging failed non-manual connect():s (practicalswift) -- #12855 `c199869` Minor accumulated cleanups (tjps) -- #13153 `ef46c99` Add missing newlines to debug logging (laanwj) -- #13162 `a174702` Don't incorrectly log that REJECT messages are unknown (jnewbery) -- #13151 `7f4db9a` Serve blocks directly from disk when possible (laanwj) -- #13134 `70d3541` Add option `-enablebip61` to configure sending of BIP61 notifications (laanwj) -- #13532 `7209fec` Log warning when deprecated network name 'tor' is used (wodry) -- #13615 `172f984` Remove unused interrupt from SendMessages (fanquake) -- #13417 `1e90862` Tighten scope in `net_processing` (skeees) -- #13298 `f8d470e` Bucketing INV delays (1 bucket) for incoming connections to hide tx time (naumenkogs) -- #13672 `0d8d6be` Modified `in_addr6` cast in CConman class to work with msvc (sipsorcery) -- #11637 `c575260` Remove dead service bits code (MarcoFalke) -- #13212 `a6f00ce` Fixed a race condition when disabling the network (lmanners) -- #13656 `1211b15` Remove the boost/algorithm/string/predicate.hpp dependency (251Labs) -- #13423 `f58674a` Thread safety annotations in `net_processing` (skeees) -- #13776 `7d36237` Add missing verification of IPv6 address in CNetAddr::GetIn6Addr(…) (practicalswift) -- #13907 `48bf8ff` Introduce a maximum size for locators (gmaxwell) -- #13951 `8a9ffec` Hardcoded seeds update pre-0.17 branch (laanwj) - -### Wallet -- #12330 `2a30e67` Reduce scope of `cs_main` and `cs_wallet` locks in listtransactions (promag) -- #12298 `a1ffddb` Refactor HaveKeys to early return on false result (promag) -- #12282 `663911e` Disallow abandon of conflicted txes (MarcoFalke) -- #12333 `d405bee` Make CWallet::ListCoins atomic (promag) -- #12296 `8e6f9f4` Only fee-bump non-conflicted/non-confirmed txes (MarcoFalke) -- #11866 `6bb9c13` Do not un-mark fInMempool on wallet txn if ATMP fails (TheBlueMatt) -- #11882 `987a809` Disable default fallbackfee on mainnet (jonasschnelli) -- #9991 `4ca7c1e` listreceivedbyaddress Filter Address (NicolasDorier) -- #11687 `98bc27f` External wallet files (ryanofsky) -- #12658 `af88094` Sanitize some wallet serialization (sipa) -- #9680 `6acd870` Unify CWalletTx construction (ryanofsky) -- #10637 `e057589` Coin Selection with Murch's algorithm (achow101, Xekyo) -- #12408 `c39dd2e` Change output type globals to members (MarcoFalke) -- #12694 `9552dfb` Actually disable BnB when there are preset inputs (achow101) -- #11536 `cead84b` Rename account to label where appropriate (ryanofsky) -- #12709 `02b7e83` shuffle sendmany recipients ordering (instagibbs) -- #12699 `c948dc8` Shuffle transaction inputs before signing (instagibbs) -- #10762 `6d53663` Remove Wallet dependencies from init.cpp (jnewbery) -- #12857 `821980c` Avoid travis lint-include-guards error (ken2812221) -- #12702 `dab0d68` importprivkey: hint about importmulti (kallewoof) -- #12836 `9abdb7c` Make WalletInitInterface and DummyWalletInit private, fix nullptr deref (promag) -- #12785 `215158a` Initialize `m_last_block_processed` to nullptr (practicalswift) -- #12932 `8d651ae` Remove redundant lambda function arg in handleTransactionChanged (laanwj) -- #12749 `a84b056` feebumper: discard change outputs below discard rate (instagibbs) -- #12892 `9b3370d` introduce 'label' API for wallet (jnewbery) -- #12925 `6d3de17` Logprint the start of a rescan (jonasschnelli) -- #12888 `39439e5` debug log number of unknown wallet records on load (instagibbs) -- #12977 `434150a` Refactor `g_wallet_init_interface` to const reference (promag) -- #13017 `65d7083` Add wallets management functions (promag) -- #12953 `d1d54ae` Deprecate accounts (jnewbery) -- #12909 `476cb35` Make fee settings to be non-static members (MarcoFalke) -- #13002 `487dcbe` Do not treat bare multisig outputs as IsMine unless watched (sipa) -- #13028 `783bb64` Make vpwallets usage thread safe (promag) -- #12507 `2afdc29` Interrupt rescan on shutdown request (promag) -- #12729 `979150b` Get rid of ambiguous OutputType::NONE value (ryanofsky) -- #13079 `5778d44` Fix rescanblockchain rpc to properly report progress (Empact) -- #12560 `e03c0db` Upgrade path for non-HD wallets to HD (achow101) -- #13161 `7cc1bd3` Reset BerkeleyDB handle after connection fails (real-or-random) -- #13081 `0dec5b5` Add compile time checking for `cs_wallet` runtime locking assertions (practicalswift) -- #13127 `19a3a9e` Add Clang thread safety annotations for variables guarded by `cs_db` (practicalswift) -- #10740 `4cfe17c` `loadwallet` RPC - load wallet at runtime (jnewbery) -- #12924 `6738813` Fix hdmaster-key / seed-key confusion (scripted diff) (jnewbery) -- #13297 `d82c5d1` Fix incorrect comment for DeriveNewSeed (jnewbery) -- #13063 `6378eef` Use shared pointer to retain wallet instance (promag) -- #13142 `56fe3dc` Separate IsMine from solvability (sipa) -- #13194 `fd96d54` Remove template matching and pseudo opcodes (sipa) -- #13252 `c4cc8d9` Refactor ReserveKeyFromKeyPool for safety (Empact) -- #13058 `343d4e4` `createwallet` RPC - create new wallet at runtime (jnewbery) -- #13351 `2140f6c` Prevent segfault when sending to unspendable witness (MarcoFalke) -- #13060 `3f0f394` Remove getlabeladdress RPC (jnewbery) -- #13111 `000abbb` Add unloadwallet RPC (promag) -- #13160 `868cf43` Unlock spent outputs (promag) -- #13498 `f54f373` Fixups from account API deprecation (jnewbery) -- #13491 `61a044a` Improve handling of INVALID in IsMine (sipa) -- #13425 `028b0d9` Moving final scriptSig construction from CombineSignatures to ProduceSignature (PSBT signer logic) (achow101) -- #13564 `88a15eb` loadwallet shouldn't create new wallets (jnewbery) -- #12944 `619cd29` ScanforWalletTransactions should mark input txns as dirty (instagibbs) -- #13630 `d6b2235` Drop unused pindexRet arg to CMerkleTx::GetDepthInMainChain (Empact) -- #13566 `ad552a5` Fix get balance (jnewbery) -- #13500 `4a3e8c5` Decouple wallet version from client version (achow101) -- #13712 `aba2e66` Fix non-determinism in ParseHDKeypath(…). Avoid using an uninitialized variable in path calculation (practicalswift) -- #9662 `6b6e854` Add createwallet "disableprivatekeys" option: a sane mode for watchonly-wallets (jonasschnelli) -- #13683 `e8c7434` Introduce assertion to document the assumption that cache and cache_used are always set in tandem (practicalswift) -- #12257 `5f7575e` Use destination groups instead of coins in coin select (kallewoof) -- #13773 `89a116d` Fix accidental use of the comma operator (practicalswift) -- #13805 `c88529a` Correctly limit output group size (sdaftuar) -- #12992 `26f59f5` Add wallet name to log messages (PierreRochard) -- #13667 `b81a8a5` Fix backupwallet for multiwallets (domob1812) -- #13657 `51c693d` assert to ensure accuracy of CMerkleTx::GetBlocksToMaturity (Empact) -- #13812 `9d86aad` sum ancestors rather than taking max in output groups (kallewoof) -- #13876 `8eb9870` Catch `filesystem_error` and raise `InitError` (MarcoFalke) -- #13808 `13d51a2` shuffle coins before grouping, where warranted (kallewoof) -- #13666 `2115cba` Always create signatures with Low R values (achow101) -- #13917 `0333914` Additional safety checks in PSBT signer (sipa) -- #13968 `65e7a8b` couple of walletcreatefundedpsbt fixes (instagibbs) -- #14055 `2307a6e` fix walletcreatefundedpsbt deriv paths, add test (instagibbs) - -### RPC and other APIs -- #12336 `3843780` Remove deprecated rpc options (jnewbery) -- #12193 `5dc00f6` Consistently use UniValue.pushKV instead of push_back(Pair()) (karel-3d) (MarcoFalke) -- #12409 `0cc45ed` Reject deprecated reserveChangeKey in fundrawtransaction (MarcoFalke) -- #10583 `8a98dfe` Split part of validateaddress into getaddressinfo (achow101) -- #10579 `ffc6e48` Split signrawtransaction into wallet and non-wallet RPC command (achow101) -- #12494 `e4ffcac` Declare CMutableTransaction a struct in rawtransaction.h (Empact) -- #12503 `0e26591` createmultisig no longer takes addresses (instagibbs) -- #12083 `228b086` Improve getchaintxstats test coverage (promag) -- #12479 `cd5e438` Add child transactions to getrawmempool verbose output (conscott) -- #11872 `702e8b7` createrawtransaction: Accept sorted outputs (MarcoFalke) -- #12700 `ebdf84c` Document RPC method aliasing (ryanofsky) -- #12727 `8ee5c7b` Remove unreachable help conditions in rpcwallet.cpp (lutangar) -- #12778 `b648974` Add username and ip logging for RPC method requests (GabrielDav) -- #12717 `ac898b6` rest: Handle utxo retrieval when ignoring the mempool (romanz) -- #12787 `cd99e5b` Adjust ifdef to avoid unreachable code (practicalswift) -- #11742 `18815b4` Add testmempoolaccept (MarcoFalke) -- #12942 `fefb817` Drop redundant testing of signrawtransaction prevtxs args (Empact) -- #11200 `5f2a399` Allow for aborting rescans in the GUI (achow101) -- #12791 `3a8a4dc` Expose a transaction's weight via RPC (TheBlueMatt) -- #12436 `6e67754` Adds a functional test to validate the transaction version number in the RPC output (251Labs) -- #12240 `6f8b345` Introduced a new `fees` structure that aggregates all sub-field fee types denominated in BTC (mryandao) -- #12321 `eac067a` p2wsh and p2sh-p2wsh address in decodescript (fivepiece) -- #13090 `17266a1` Remove Safe mode (achow101, laanwj) -- #12639 `7eb7076` Reduce `cs_main` lock in listunspent (promag) -- #10267 `7b966d9` New -includeconf argument for including external configuration files (kallewoof) -- #10757 `b9551d3` Introduce getblockstats to plot things (jtimon) -- #13288 `a589f53` Remove the need to include rpc/blockchain.cpp in order to put `GetDifficulty` under test (Empact) -- #13394 `e1f8dce` cli: Ignore libevent warnings (theuni) -- #13439 `3f398d7` Avoid "duplicate" return value for invalid submitblock (TheBlueMatt) -- #13570 `a247594` Add new "getzmqnotifications" method (domob1812) -- #13072 `b25a4c2` Update createmultisig RPC to support segwit (ajtowns) -- #12196 `8fceae0` Add scantxoutset RPC method (jonasschnelli) -- #13557 `b654723` BIP 174 PSBT Serializations and RPCs (achow101) -- #13697 `f030410` Support output descriptors in scantxoutset (sipa) -- #13927 `bced8ea` Use pushKV in some new PSBT RPCs (domob1812) -- #13918 `a9c56b6` Replace median fee rate with feerate percentiles in getblockstats (marcinja) -- #13721 `9f23c16` Bugfixes for BIP 174 combining and deserialization (achow101) -- #13960 `517010e` Fix PSBT deserialization of 0-input transactions (achow101) - -### GUI -- #12416 `c997f88` Fix Windows build errors introduced in #10498 (practicalswift) -- #11733 `e782099` Remove redundant locks (practicalswift) -- #12426 `bfa3911` Initialize members in WalletModel (MarcoFalke) -- #12489 `e117cfe` Bugfix: respect user defined configuration file (-conf) in QT settings (jonasschnelli) -- #12421 `be263fa` navigate to transaction history page after send (Sjors) -- #12580 `ce56fdd` Show a transaction's virtual size in its details dialog (dooglus) -- #12501 `c8ea91a` Improved "custom fee" explanation in tooltip (randolf) -- #12616 `cff95a6` Set modal overlay hide button as default (promag) -- #12620 `8a43bdc` Remove TransactionTableModel::TxIDRole (promag) -- #12080 `56cc022` Add support to search the address book (promag) -- #12621 `2bac3e4` Avoid querying unnecessary model data when filtering transactions (promag) -- #12721 `e476826` remove "new" button during receive-mode in addressbook (jonasschnelli) -- #12723 `310dc61` Qt5: Warning users about invalid-BIP21 URI bitcoin:// (krab) -- #12610 `25cf18f` Multiwallet for the GUI (jonasschnelli) -- #12779 `f4353da` Remove unused method setupAmountWidget(…) (practicalswift) -- #12795 `68484d6` do not truncate .dat extension for wallets in gui (instagibbs) -- #12870 `1d54004` make clean removes `src/qt/moc_` files (Sjors) -- #13055 `bdda14d` Don't log to console by default (laanwj) -- #13141 `57c57df` fixes broken link on readme (marcoagner) -- #12928 `ef006d9` Initialize non-static class members that were previously neither initialized where defined nor in constructor (practicalswift) -- #13158 `81c533c` Improve sendcoinsdialog readability (marcoagner) -- #11491 `40c34a0` Add proxy icon in statusbar (mess110) -- #13264 `2a7c53b` Satoshi unit (GreatSock) -- #13097 `e545503` Support wallets loaded dynamically (promag) -- #13284 `f8be434` fix visual "overflow" of amount input (brandonrninefive) -- #13275 `a315b79` use `[default wallet]` as name for wallet with no name (jonasschnelli) -- #13273 `3fd0c23` Qt/Bugfix: fix handling default wallet with no name (jonasschnelli) -- #13341 `25d2df2` Stop translating command line options (laanwj) -- #13043 `6e249e4` OptionsDialog: add prune setting (Sjors) -- #13506 `6579d80` load wallet in UI after possible init aborts (jonasschnelli) -- #13458 `dc53f7f` Drop qt4 support (laanwj) -- #13528 `b877c39` Move BitcoinGUI initializers to class, fix initializer order warning (laanwj) -- #13536 `baf3a3a` coincontrol: Remove unused qt4 workaround (MarcoFalke) -- #13537 `10ffca7` Peer table: Visualize inbound/outbound state for every row (wodry) -- #13791 `2c14c1f` Reject dialogs if key escape is pressed (promag) - -### Build system -- #12371 `c9ca4f6` Add gitian PGP key: akx20000 (ghost) -- #11966 `f4f4f51` clientversion: Use full commit hash for commit-based version descriptions (luke-jr) -- #12417 `ae0fbf0` Upgrade `mac_alias` to 2.0.7 (droark) -- #12444 `1f055ef` gitian: Bump descriptors for (0.)17 (theuni) -- #12402 `59e032b` expat 2.2.5, ccache 3.4.1, miniupnpc 2.0.20180203 (fanquake) -- #12029 `daa84b3` Add a makefile target for Doxygen documentation (Ov3rlo4d) -- #12466 `6645eaf` Only use `D_DARWIN_C_SOURCE` when building miniupnpc on darwin (fanquake) -- #11986 `765a3eb` zeromq 4.2.3 (fanquake) -- #12373 `f13d756` Add build support for profiling (murrayn) -- #12631 `a312e20` gitian: Alphabetize signing keys & add kallewoof key (kallewoof) -- #12607 `29fad97` Remove ccache (fanquake) -- #12625 `c4219ff` biplist 1.0.3 (fanquake) -- #12666 `05042d3` configure: UniValue 1.0.4 is required for pushKV(, bool) (luke-jr) -- #12678 `6324c68` Fix a few compilation issues with Clang 7 and -Werror (vasild) -- #12692 `de6bdfd` Add configure options for various -fsanitize flags (eklitzke) -- #12901 `7e23972` Show enabled sanitizers in configure output (practicalswift) -- #12899 `3076993` macOS: Prevent Xcode 9.3 build warnings (AkioNak) -- #12715 `8fd6243` Add 'make clean' rule (hkjn) -- #13133 `a024a18` Remove python2 from configure.ac (ken2812221) -- #13005 `cb088b1` Make --enable-debug to pick better options (practicalswift) -- #13254 `092b366` Remove improper `qt/moc_*` cleaning glob from the general Makefile (Empact) -- #13306 `f5a7733` split warnings out of CXXFLAGS (theuni) -- #13385 `7c7508c` Guard against accidental introduction of new Boost dependencies (practicalswift) -- #13041 `5779dc4` Add linter checking for accidental introduction of locale dependence (practicalswift) -- #13408 `70a03c6` crypto: cleanup sha256 build (theuni) -- #13435 `cf7ca60` When build fails due to lib missing, indicate which one (Empact) -- #13445 `8eb76f3` Reset default -g -O2 flags when enable debug (ken2812221) -- #13465 `81069a7` Avoid concurrency issue when make multiple target (ken2812221) -- #13454 `45c00f8` Make sure `LC_ALL=C` is set in all shell scripts (practicalswift) -- #13480 `31145a3` Avoid copies in range-for loops and add a warning to detect them (theuni) -- #13486 `66e1a08` Move rpc/util.cpp from libbitcoin-util to libbitcoin-server (ken2812221) -- #13580 `40334c7` Detect if char equals `int8_t` (ken2812221) -- #12788 `287e4ed` Tune wildcards for LIBSECP256K1 target (kallewoof) -- #13611 `b55f0c3` bugfix: Use `__cpuid_count` for gnu C to avoid gitian build fail (ken2812221) -- #12971 `a6d14b1` Upgrade Qt to 5.9.6 (TheCharlatan) -- #13543 `6c6a300` Add RISC-V support (laanwj) -- #13177 `dcb154e` GCC-7 and glibc-2.27 back compat code (ken2812221) -- #13659 `90b1c7e` add missing leveldb defines (theuni) -- #13368 `c0f1569` Update gitian-build.sh for docker (achow101) -- #13171 `19d8ca5` Change gitian-descriptors to use bionic instead (ken2812221) -- #13604 `75bea05` Add depends 32-bit arm support for bitcoin-qt (TheCharlatan) -- #13623 `9cdb19f` Migrate gitian-build.sh to python (ken2812221) -- #13689 `8c36432` disable Werror when building zmq (greenaddress) -- #13617 `cf7f9ae` release: Require macos 10.10+ (fanquake) -- #13750 `c883653` use MacOS friendly sed syntax in qt.mk (Sjors) -- #13095 `415f2bf` update `ax_boost_chrono`/`unit_test_framework` (fanquake) -- #13732 `e8ffec6` Fix Qt's rcc determinism (Fuzzbawls) -- #13782 `8284f1d` Fix osslsigncode compile issue in gitian-build (ken2812221) -- #13696 `2ab7208` Add aarch64 qt depends support for cross compiling bitcoin-qt (TheCharlatan) -- #13705 `b413ba0` Add format string linter (practicalswift) -- #14000 `48c8459` fix qt determinism (theuni) -- #14018 `3e4829a` Bugfix: NSIS: Exclude `Makefile*` from docs (luke-jr) -- #12906 `048ac83` Avoid `interface` keyword to fix windows gitian build (ryanofsky) -- #13314 `a9b6957` Fix FreeBSD build by including utilstrencodings.h (laanwj) - -### Tests and QA -- #12252 `8d57319` Require all tests to follow naming convention (ajtowns) -- #12295 `935eb8d` Enable flake8 warnings for all currently non-violated rules (practicalswift) -- #11858 `b4d8549` Prepare tests for Windows (MarcoFalke) -- #11771 `2dbc4a4` Change invalidtxrequest to use BitcoinTestFramework (jnewbery) -- #12200 `d09968f` Bind functional test nodes to 127.0.0.1 (Sjors) -- #12425 `26dc2da` Add some script tests (richardkiss) -- #12455 `23481fa` Fix bip68 sequence test to reflect updated rpc error message (Empact) -- #12477 `acd1e61` Plug memory leaks and stack-use-after-scope (MarcoFalke) -- #12443 `07090c5` Move common args to bitcoin.conf (MarcoFalke) -- #12570 `39dcac2` Add test cases for HexStr (`std::reverse_iterator` and corner cases) (kostaz) -- #12582 `6012f1c` Fix ListCoins test failure due to unset `g_wallet_allow_fallback_fee` (ryanofsky) -- #12516 `7f99964` Avoid unintentional unsigned integer wraparounds in tests (practicalswift) -- #12512 `955fd23` Don't test against the mempool min fee information in mempool_limit.py (Empact) -- #12600 `29088b1` Add a test for large tx output scripts with segwit input (richardkiss) -- #12627 `791c3ea` Fix some tests to work on native windows (MarcoFalke) -- #12405 `0f58d7f` travis: Full clone for git subtree check (MarcoFalke) -- #11772 `0630974` Change invalidblockrequest to use BitcoinTestFramework (jnewbery) -- #12681 `1846296` Fix ComputeTimeSmart test failure with `-DDEBUG_LOCKORDER` (ryanofsky) -- #12682 `9f04c8e` travis: Clone depth 1 unless `$check_doc` (MarcoFalke) -- #12710 `00d1680` Append scripts to new `test_list` array to fix bad assignment (jeffrade) -- #12720 `872c921` Avoiding 'file' function name from python2 (jeffrade) -- #12728 `4ba3d4f` rename TestNode to TestP2PConn in tests (jnewbery) -- #12746 `2405ce1` Remove unused argument `max_invalid` from `check_estimates(…)` (practicalswift) -- #12718 `185d484` Require exact match in `assert_start_raises_init_eror` (jnewbery, MarcoFalke) -- #12076 `6d36f59` Use node.datadir instead of tmpdir in test framework (MarcoFalke) -- #12772 `b43aba8` ci: Bump travis timeout for make check to 50m (jnewbery) -- #12806 `18606eb` Fix function names in `feature_blocksdir` (MarcoFalke) -- #12811 `0d8fc8d` Make summary row bold-red if any test failed and show failed tests at end of table (laanwj) -- #12790 `490644d` Use blockmaxweight where tests previously had blockmaxsize (conscott) -- #11773 `f0f9732` Change `feature_block.py` to use BitcoinTestFramework (jnewbery) -- #12839 `40f4baf` Remove travis checkout depth (laanwj) -- #11817 `2a09a78` Change `feature_csv_activation.py` to use BitcoinTestFramework (jnewbery) -- #12284 `fa5825d` Remove assigned but never used local variables. Enable Travis checking for unused local variables (practicalswift) -- #12719 `9beded5` Add note about test suite naming convention in developer-notes.md (practicalswift) -- #12861 `c564424` Stop `feature_block.py` from blowing up memory (jnewbery) -- #12851 `648252e` travis: Run verify-commits only on cron jobs (MarcoFalke) -- #12853 `2106c4c` Match full plain text by default (MarcoFalke) -- #11818 `9a2db3b` I accidentally (deliberately) killed it (the ComparisonTestFramework) (jnewbery) -- #12766 `69310a3` Tidy up REST interface functional tests (romanz) -- #12849 `83c7533` Add logging in loops in `p2p_sendhears.py` (ccdle12) -- #12895 `d6f10b2` Add note about test suite name uniqueness requirement to developer notes (practicalswift) -- #12856 `27278df` Add Metaclass for BitcoinTestFramework (WillAyd) -- #12918 `6fc5a05` Assert on correct variable (kallewoof) -- #11878 `a04440f` Add Travis check for duplicate includes (practicalswift) -- #12917 `cf8073f` Windows fixups for functional tests (MarcoFalke) -- #12926 `dd1ca9e` Run unit tests in parallel (sipa) -- #12920 `b1fdfc1` Fix sign for expected values (kallewoof) -- #12947 `979f598` Wallet hd functional test speedup and clarification (instagibbs) -- #12993 `0d69921` Remove compatibility code not needed now when we're on Python 3 (practicalswift) -- #12996 `6a278e0` Remove redundant bytes(…) calls (practicalswift) -- #12949 `6b46288` Avoid copies of CTransaction (MarcoFalke) -- #13007 `0d12570` Fix dangling wallet pointer in vpwallets (promag) -- #13048 `cac6d11` Fix `feature_block` flakiness (jnewbery) -- #12510 `d5b2e98` Add `rpc_bind` test to default-run tests (laanwj) -- #13022 `896a9d0` Attach node index to `test_node` AssertionError and print messages (jamesob) -- #13024 `018c7e5` Add rpcauth pair that generated by rpcauth.py (ken2812221) -- #13013 `a0079d4` bench: Amend `mempool_eviction` test for witness txs (MarcoFalke) -- #13051 `e074097` Normalize executable location (MarcoFalke) -- #13056 `106d929` Make rpcauth.py testable and add unit tests (nixbox) -- #13073 `a785bc3` add rpcauth-test to `AC_CONFIG_LINKS` to fix out-of-tree make check (laanwj) -- #12830 `25ad2f7` Clarify address book error messages, add tests (jamesob) -- #13082 `24106a8` don't test against min relay fee information in `mining_prioritisetransaction.py` (kristapsk) -- #13003 `8d045a0` Add test for orphan handling (MarcoFalke) -- #13105 `9e9b48d` Add --failfast option to functional test runner (jamesob) -- #13130 `3186ad4` Fix race in `rpc_deprecated.py` (jnewbery) -- #13136 `baf6b4e` Fix flake8 warnings in several wallet functional tests (jnewbery) -- #13094 `bf9b03d` Add test for 64-bit Windows PE, modify 32-bit test results (ken2812221) -- #13183 `9458b05` travis: New travis job for `check_docs` steps (glaksmono) -- #12265 `1834d4d` fundrawtransaction: lock watch-only shared address (kallewoof) -- #13188 `4a50ec0` Remove unused option --srcdir (MarcoFalke) -- #12755 `612ba35` Better stderr testing (jnewbery) -- #13198 `196c5a9` Avoid printing to console during cache creation (sdaftuar) -- #13075 `cb9bbf7` Remove 'account' API from wallet functional tests (jnewbery) -- #13221 `ffa86af` travis: Rename the build stage `check_doc` to `lint` (practicalswift) -- #13205 `3cbd25f` Remove spurious error log in `p2p_segwit.py` (jnewbery) -- #13291 `536120e` Don't include torcontrol.cpp into the test file (Empact) -- #13281 `2ac6315` Move linters to test/lint, add readme (MarcoFalke) -- #13215 `f8a29ca` travis: Build tests on ubuntu 18.04 with docker (ken2812221) -- #13349 `24f7011` bench: Don't return a bool from main (laanwj) -- #13347 `87a9d03` travis: Skip cache for lint stage (MarcoFalke) -- #13355 `0b1c0c4` Fix "gmake check" under OpenBSD 6.3 (probably `*BSD`): Avoid using GNU grep specific regexp handling (practicalswift) -- #13353 `d4f6dac` Fixup setting of PATH env var (MarcoFalke) -- #13352 `e24bf1c` Avoid checking reject code for now (MarcoFalke) -- #13383 `2722a1f` bench: Use non-throwing parsedouble(…) instead of throwing boost::lexical_cast(…) (practicalswift) -- #13367 `264efdc` Increase includeconf test coverage (MarcoFalke) -- #13404 `3d3d8ae` speed up of `tx_validationcache_tests` by reusing of CTransaction (lucash-dev) -- #13421 `531a033` Remove `portseed_offset` from test runner (MarcoFalke) -- #13440 `5315660` Log as utf-8 (MarcoFalke) -- #13066 `fa4b906` Migrate verify-commits script to python, run in travis (ken2812221) -- #13447 `4b1edd3` travis: Increase `travis_wait` time while verifying commits (ken2812221) -- #13350 `f532d52` Add logging to provide anchor points when debugging p2p_sendheaders (lmanners) -- #13406 `4382f19` travis: Change mac goal to all deploy (ken2812221) -- #13457 `b222138` Drop variadic macro (MarcoFalke) -- #13512 `3a45493` mininode: Expose connection state through `is_connected` (MarcoFalke) -- #13496 `9ab4c2a` Harden lint-filenames.sh (wodry) -- #13219 `08516e0` bench: Add block assemble benchmark (MarcoFalke) -- #13530 `b1dc39d` bench: Add missing pow.h header (laanwj) -- #12686 `2643fa5` Add -ftrapv to CFLAGS and CXXFLAGS when --enable-debug is used. Enable -ftrapv in Travis (practicalswift) -- #12882 `d96bdd7` Make `test_bitcoin` pass under ThreadSanitzer (clang). Fix lock-order-inversion (potential deadlock) (practicalswift) -- #13535 `2328039` `wallet_basic`: Specify minimum required amount for listunspent (MarcoFalke) -- #13551 `c93c360` Fix incorrect documentation for test case `cuckoocache_hit_rate_ok` (practicalswift) -- #13563 `b330f3f` bench: Simplify coinselection (promag) -- #13517 `a6ed99a` Remove need to handle the network thread in tests (MarcoFalke) -- #13522 `686e97a` Fix `p2p_sendheaders` race (jnewbery) -- #13467 `3dc2dcf` Make `p2p_segwit` easier to debug (jnewbery) -- #13598 `0212187` bench: Fix incorrect behaviour in prevector.cpp (AkioNak) -- #13565 `b05ded1` Fix AreInputsStandard test to reference the proper scriptPubKey (Empact) -- #13145 `d3dae3d` Use common getPath method to create temp directory in tests (winder) -- #13645 `2ea7eb6` skip `rpc_zmq` functional test as necessary (jamesob) -- #13626 `8f1106d` Fix some TODOs in `p2p_segwit` (MarcoFalke) -- #13138 `8803c91` Remove accounts from `wallet_importprunedfunds.py` (jnewbery) -- #13663 `cbc9b50` Avoid read/write to default datadir (MarcoFalke) -- #13682 `f8a32a3` bench: Remove unused variable (practicalswift) -- #13638 `6fcdb5e` Use `MAX_SCRIPT_ELEMENT_SIZE` from script.py (domob1812) -- #13687 `9d26b69` travis: Check that ~/.bitcoin is never created (MarcoFalke) -- #13715 `e1260a7` fixes mininode's P2PConnection sending messages on closing transport (marcoagner) -- #13729 `aa9429a` travis: Avoid unnecessarily setting env variables on the lint build (Empact) -- #13747 `ab28b5b` Skip P2PConnection's `is_closing()` check when not available (domob1812) -- #13650 `7a9bca6` travis: Don't store debug info if --enable-debug is set (ken2812221) -- #13711 `f98d1e0` bench: Add benchmark for unserialize prevector (AkioNak) -- #13771 `365384f` travis: Retry to fetch docker image (MarcoFalke) -- #13806 `4d550ff` Fix `bench/block_assemble` assert failure (jamesob) -- #13779 `d25079a` travis: Improve readability of travis.yml and log outputs (scravy) -- #13822 `0fb9c87` bench: Make coinselection output groups pass eligibility filter (achow101) -- #13247 `e83d82a` Add tests to SingleThreadedSchedulerClient() and document the memory model (skeees) -- #13811 `660abc1` travis: Run `bench_bitcoin` once (MarcoFalke) -- #13837 `990e182` Extract `rpc_timewait` as test param (MarcoFalke) -- #13851 `9c4324d` fix locale for lint-shell (scravy) -- #13823 `489b51b` quote path in authproxy for external multiwallets (MarcoFalke) -- #13849 `2b67354` travis: Use only travis jobs: instead of mix of jobs+matrix (scravy) -- #13859 `2384323` Add emojis to `test_runner` path and wallet filename (MarcoFalke) -- #13916 `8ac7125` `wait_for_verack` by default (MarcoFalke) -- #13669 `f66e1c7` Cleanup `create_transaction` implementations (conscott) -- #13924 `09ada21` Simplify comparison in `rpc_blockchain.py` (domob1812) -- #13913 `a08533c` Remove redundant checkmempool/checkblockindex `extra_args` (MarcoFalke) -- #13915 `a04888a` Add test for max number of entries in locator (MarcoFalke) -- #13867 `1b04b55` Make extended tests pass on native Windows (MarcoFalke) -- #13944 `0df7a6c` Port usage of deprecated optparse module to argparse module (Kvaciral) -- #13928 `b8eb0df` blocktools enforce named args for amount (MarcoFalke) -- #13054 `bffb35f` Enable automatic detection of undefined names in Python tests scripts. Remove wildcard imports (practicalswift) -- #14069 `cf3d7f9` Use assert not `BOOST_CHECK_*` from multithreaded tests (skeees) -- #14071 `fab0fbe` Stop txindex thread before calling destructor (MarcoFalke) - -### Miscellaneous -- #11909 `8897135` contrib: Replace developer keys with list of pgp fingerprints (MarcoFalke) -- #12394 `fe53d5f` gitian-builder.sh: fix --setup doc, since lxc is default (Sjors) -- #12468 `294a766` Add missing newline in init.cpp log message (Aesti) -- #12308 `dcfe218` contrib: Add support for out-of-tree builds in gen-manpages.sh (laanwj) -- #12451 `aae64a2` Bump leveldb subtree (MarcoFalke) -- #12527 `d77b4a7` gitian-build.sh: fix signProg being recognized as two parameters (ken2812221) -- #12588 `d74b01d` utils: Remove deprecated pyzmq call from python zmq example (kosciej) -- #10271 `bc67982` Use `std::thread::hardware_concurrency`, instead of Boost, to determine available cores (fanquake) -- #12097 `14475e2` scripts: Lint-whitespace: use perl instead of grep -p (Sjors) -- #12098 `17c44b2` scripts: Lint-whitespace: add param to check last n commits (Sjors) -- #11900 `842f61a` script: Simplify checkminimalpush checks, add safety assert (instagibbs) -- #12567 `bb98aec` util: Print timestamp strings in logs using iso 8601 formatting (practicalswift) -- #12572 `d8d9162` script: Lint-whitespace: find errors more easily (AkioNak) -- #10694 `ae5bcc7` Remove redundant code in MutateTxSign(CMutableTransaction&, const std::string&) (practicalswift) -- #12659 `3d16f58` Improve Fatal LevelDB Log Messages (eklitzke) -- #12643 `0f0229d` util: Remove unused `sync_chain` (MarcoFalke) -- #12102 `7fb8fb4` Apply hardening measures in bitcoind systemd service file (Flowdalic) -- #12652 `55f490a` bitcoin-cli: Provide a better error message when bitcoind is not running (practicalswift) -- #12630 `c290508` Provide useful error message if datadir is not writable (murrayn) -- #11881 `624bee9` Remove Python2 support (jnewbery) -- #12821 `082e26c` contrib: Remove unused import string (MarcoFalke) -- #12829 `252c1b0` Python3 fixup (jnewbery) -- #12822 `ff48f62` Revert 7deba93bdc76616011a9f493cbc203d60084416f and fix expired-key-sigs properly (TheBlueMatt) -- #12820 `5e53b80` contrib: Fix check-doc script regexes (MarcoFalke) -- #12713 `4490871` Track negated options in the option parser (eklitzke) -- #12708 `b2e5fe8` Make verify-commits.sh test that merges are clean (sipa) -- #12891 `3190785` logging: Add lint-logs.sh to check for newline termination (jnewbery) -- #12923 `a7cbe38` util: Pass `pthread_self()` to `pthread_setschedparam` instead of 0 (laanwj) -- #12871 `fb17fae` Add shell script linting: Check for shellcheck warnings in shell scripts (practicalswift) -- #12970 `5df84de` logging: Bypass timestamp formatting when not logging (theuni) -- #12987 `fe8fa22` tests/tools: Enable additional Python flake8 rules for automatic linting via Travis (practicalswift) -- #12972 `0782508` Add python3 script shebang lint (ken2812221) -- #13004 `58bbc55` Print to console by default when not run with -daemon (practicalswift) -- #13039 `8b4081a` Add logging and error handling for file syncing (laanwj) -- #13020 `4741ca5` Consistently log CValidationState on call failure (Empact) -- #13031 `826acc9` Fix for utiltime to compile with msvc (sipsorcery) -- #13119 `81743b5` Remove script to clean up datadirs (MarcoFalke) -- #12954 `5a66642` util: Refactor logging code into a global object (jimpo) -- #12769 `35eb9d6` Add systemd service to bitcoind in debian package (ghost) -- #13146 `0bc980b` rpcauth: Make it possible to provide a custom password (laanwj) -- #13148 `b62b437` logging: Fix potential use-after-free in logprintstr(…) (practicalswift) -- #13214 `0612d96` Enable Travis checking for two Python linting rules we are currently not violating (practicalswift) -- #13197 `6826989` util: Warn about ignored recursive -includeconf calls (kallewoof) -- #13176 `d9ebb63` Improve CRollingBloomFilter performance: replace modulus with FastMod (martinus) -- #13228 `d792e47` Add script to detect circular dependencies between source modules (sipa) -- #13320 `e08c130` Ensure gitian-build.sh uses bash (jhfrontz) -- #13301 `e4082d5` lint: Add linter to error on `#include <*.cpp>` (Empact) -- #13374 `56f6936` utils and libraries: checking for bitcoin address in translations (kaplanmaxe) -- #13230 `7c32b41` Simplify include analysis by enforcing the developer guide's include syntax (practicalswift) -- #13450 `32bf4c6` Add linter: Enforce the source code file naming convention described in the developer notes (practicalswift) -- #13479 `fa2ea37` contrib: Fix cve-2018-12356 by hardening the regex (loganaden) -- #13448 `a90ca40` Add linter: Make sure we explicitly open all text files using UTF-8 encoding in Python (practicalswift) -- #13494 `d67eff8` Follow-up to #13454: Fix broken build by exporting `LC_ALL=C` (practicalswift) -- #13510 `03f3925` Scripts and tools: Obsolete #!/bin/bash shebang (DesWurstes) -- #13577 `c9eb8d1` logging: Avoid nstart may be used uninitialized in appinitmain warning (mruddy) -- #13603 `453ae5e` bitcoin-tx: Stricter check for valid integers (domob1812) -- #13118 `c05c93c` RPCAuth Detection in Logs (Linrono) -- #13647 `4027ec1` Scripts and tools: Fix `BIND_NOW` check in security-check.py (conradoplg) -- #13692 `f5d166a` contrib: Clone core repo in gitian-build (MarcoFalke) -- #13699 `4c6d1b9` contrib: Correct version check (kallewoof) -- #13695 `dcc0cff` lint: Add linter for circular dependencies (Empact) -- #13733 `0d1ebf4` utils: Refactor argsmanager a little (AtsukiTak) -- #13714 `29b4ee6` contrib: Add lxc network setup for bionic host (ken2812221) -- #13764 `f8685f4` contrib: Fix test-security-check fail in ubuntu 18.04 (ken2812221) -- #13809 `77168f7` contrib: Remove debian and rpm subfolder (MarcoFalke) -- #13799 `230652c` Ignore unknown config file options; warn instead of error (sipa) -- #13894 `df9f712` shutdown: Stop threads before resetting ptrs (MarcoFalke) -- #13925 `71dec5c` Merge leveldb subtree (MarcoFalke) -- #13939 `ef86f26` lint: Make format string linter understand basic template parameter syntax (practicalswift) -- #14105 `eb202ea` util: Report parse errors in configuration file (laanwj) -- #12604 `9903537` Add DynamicMemoryUsage() to CDBWrapper to estimate LevelDB memory use (eklitzke) -- #12495 `047865e` Increase LevelDB `max_open_files` (eklitzke) -- #12784 `e80716d` Fix bug in memory usage calculation (unintended integer division) (practicalswift) -- #12618 `becd8dd` Set `SCHED_BATCH` priority on the loadblk thread (eklitzke) -- #12854 `5ca1509` Add P2P, Network, and Qt categories to the desktop icon (luke-jr) -- #11862 `4366f61` Network specific conf sections (ajtowns) -- #13441 `4a7e64f` Prevent shared conf files from failing with different available options in different binaries (achow101) -- #13471 `5eca4e8` For AVX2 code, also check for AVX, XSAVE, and OS support (sipa) -- #13503 `c655b2c` Document FreeBSD quirk. Fix FreeBSD build: Use std::min(…) to allow for compilation under certain FreeBSD versions (practicalswift) -- #13725 `07ce278` Fix bitcoin-cli --version (Empact) - -### Documentation -- #12306 `216f9a4` Improvements to UNIX documentation (axvr) -- #12309 `895fbd7` Explain how to update chainTxData in release process (laanwj) -- #12317 `85123be` Document method for reviewers to verify chainTxData (jnewbery) -- #12331 `d32528e` Properly alphabetize output of CLI --help option (murrayn) -- #12322 `c345148` Remove step making cloned repository world-writable for Windows build (murrayn) -- #12354 `b264528` add gpg key for fivepiece (fivepiece) -- #11761 `89005dd` initial QT documentation (Sjors) -- #12232 `fdc2188` Improve "Turn Windows Features On or Off" step (MCFX2) -- #12487 `4528f74` init: Remove translation for `-blockmaxsize` option help (laanwj) -- #12546 `a4a5fc7` Minor improvements to Compatibility Notes (randolf) -- #12434 `21e2670` dev-notes: Members should be initialized (MarcoFalke) -- #12452 `71f56da` clarified systemd installation instructions in init.md for Ubuntu users (DaveFromBinary) -- #12615 `1f93491` allow for SIGNER containing spaces (ken2812221) -- #12603 `85424d7` PeerLogicValidation interface (jamesob) -- #12581 `12ac2f0` Mention configure without wallet in FreeBSD instructions (dbolser) -- #12619 `8a709fb` Give hint about gitian not able to download (kallewoof) -- #12668 `de2fcaa` do update before fetching packages in WSL build guide (nvercamm) -- #12586 `e7721e6` Update osx brew install instruction (fanquake) -- #12760 `7466a26` Improve documentation on standard communication channels (jimpo) -- #12797 `0415b1e` init: Fix help message for checkblockindex (MarcoFalke) -- #12800 `2d97611` Add note about our preference for scoped enumerations ("enum class") (practicalswift) -- #12798 `174d016` Refer to witness reserved value as spec. in the BIP (MarcoFalke) -- #12759 `d3908e2` Improve formatting of developer notes (eklitzke) -- #12877 `2b54155` Use bitcoind in Tor documentation (knoxcard) -- #12896 `b15485e` Fix conflicting statements about initialization in developer notes (practicalswift) -- #12850 `319991d` add qrencode to brew install instructions (buddilla) -- #12007 `cd8e45b` Clarify the meaning of fee delta not being a fee rate in prioritisetransaction RPC (honzik666) -- #12927 `06ead15` fixed link, replaced QT with Qt (trulex) -- #12852 `ebd786b` devtools: Setup ots git integration (MarcoFalke) -- #12933 `3cf76c2` Refine header include policy (MarcoFalke) -- #12951 `6df0c6c` Fix comment in FindForkInGlobalIndex (jamesob) -- #12982 `a63b4e3` Fix inconsistent namespace formatting guidelines (ryanofsky) -- #13026 `9b3a67e` Fix include comment in src/interfaces/wallet.h (promag) -- #13012 `d1e3c5e` Add comments for chainparams.h, validation.cpp (jamesob) -- #13064 `569e381` List support for BIP173 in bips.md (sipa) -- #12997 `646b7f6` build-windows: Switch to Artful, since Zesty is EOL (MarcoFalke) -- #12384 `c5f7efe` Add version footnote to tor.md (Willtech) -- #13165 `627c376` Mention good first issue list in CONTRIBUTING.md (fanquake) -- #13295 `fb77310` Update OpenBSD build instructions for OpenBSD 6.3 (practicalswift) -- #13340 `3a8e3f4` remove leftover check-doc documentation (fanquake) -- #13346 `60f0358` update bitcoin-dot-org links in release-process.md (fanquake) -- #13372 `f014933` split FreeBSD build instructions out of build-unix.md (steverusso) -- #13366 `861de3b` Rename “OS X” to the newer “macOS” convention (giulio92) -- #13369 `f8bcef3` update transifex doc link (mess110) -- #13312 `b22115d` Add a note about the source code filename naming convention (practicalswift) -- #13460 `1939536` Remove note to install all boost dev packages (MarcoFalke) -- #13476 `9501938` Fix incorrect shell quoting in FreeBSD build instructions (murrayn) -- #13402 `43fa355` Document validationinterace callback blocking deadlock potential (TheBlueMatt) -- #13488 `d6cf4bd` Improve readability of "Squashing commits" (wodry) -- #13531 `ee02deb` Clarify that mempool txiter is `const_iterator` (MarcoFalke) -- #13418 `01f9098` More precise explanation of parameter onlynet (wodry) -- #13592 `1756cb4` Modify policy to not translate command-line help (ken2812221) -- #13588 `b77c38e` Improve doc of options addnode, connect, seednode (wodry) -- #13614 `17e9106` Update command line help for -printtoconsole and -debuglogfile (satwo, fanquake) -- #13605 `8cc048e` corrected text to reflect new(er) process of specifying fingerprints (jhfrontz) -- #13481 `b641f60` Rewrite some validation docs as lock annotations (MarcoFalke) -- #13680 `30640f8` Remove outdated comment about miner ignoring CPFP (jamesob) -- #13625 `7146672` Add release notes for -printtoconsole and -debuglogfile changes (satwo) -- #13718 `f7f574d` Specify preferred Python string formatting technique (masonicboom) -- #12764 `10b9a81` Remove field in getblocktemplate help that has never been used (conscott) -- #13742 `d2186b3` Adjust bitcoincore.org links (MarcoFalke) -- #13706 `94dd89e` Minor improvements to release-process.md (MitchellCash) -- #13775 `ef4fac0` Remove newlines from error message (practicalswift) -- #13803 `feb7dd9` add note to contributor docs about warranted PR's (kallewoof) -- #13814 `67af7ef` Add BIP174 to list of implemented BIPs (sipa) -- #13835 `c1cba35` Fix memory consistency model in comment (skeees) -- #13824 `aa30e4b` Remove outdated net comment (MarcoFalke) -- #13853 `317477a` correct versions in dependencies.md (fanquake) -- #13872 `37ab117` Reformat -help output for help2man (real-or-random) -- #13717 `8c3c402` Link to python style guidelines from developer notes (masonicboom) -- #13895 `1cd5f2c` fix GetWarnings docs to reflect behavior (Empact) -- #13911 `3e3a50a` Revert translated string change, clarify wallet log messages (PierreRochard) -- #13908 `d6faea4` upgrade rescan time warning from minutes to >1 hour (masonicboom) -- #13905 `73a09b4` fixed bitcoin-cli -help output for help2man (hebasto) -- #14100 `2936dbc` Change documentation for =0 for non-boolean options (laanwj) -- #14096 `465a583` Add reference documentation for descriptors language (sipa) -- #12757 `0c5f67b` Clarify include guard naming convention (practicalswift) -- #13844 `d3325b0` Correct the help output for `-prune` (hebasto) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- 251 -- 532479301 -- Aaron Clauson -- Akio Nakamura -- Akira Takizawa -- Alex Morcos -- Alex Vear -- Alexey Ivanov -- Alin Rus -- Andrea Comand -- Andrew Chow -- Anthony Towns -- AtsukiTak -- Ben Woosley -- Bernhard M. Wiedemann -- Brandon Ruggles -- buddilla -- ccdle12 -- Chris Moore -- Chun Kuan Lee -- Clem Taylor -- Conor Scott -- Conrado Gouvea -- Cory Fields -- Cristian Mircea Messel -- ctp-tsteenholdt -- Damian Williamson -- Dan Bolser -- Daniel Kraft -- Darko Janković -- DaveFromBinary -- David A. Harding -- DesWurstes -- Dimitris Apostolou -- donaloconnor -- Douglas Roark -- DrahtBot -- Drew Rasmussen -- e0 -- Ernest Hemingway -- Ethan Heilman -- Evan Klitzke -- fanquake -- Felix Wolfsteller -- fivepiece -- Florian Schmaus -- Fuzzbawls -- Gabriel Davidian -- Giulio Lombardo -- Gleb -- Grady Laksmono -- GreatSock -- Gregory Maxwell -- Gregory Sanders -- Hennadii Stepanov -- Henrik Jonsson -- Indospace.io -- James O'Beirne -- Jan Čapek -- Jeff Frontz -- Jeff Rade -- Jeremy Rubin -- JeremyRand -- Jesse Cohen -- Jim Posen -- joemphilips -- John Bampton -- John Newbery -- johnlow95 -- Johnson Lau -- Jonas Nick -- Jonas Schnelli -- João Barbosa -- Jorge Timón -- Josh Hartshorn -- Julian Fleischer -- kallewoof -- Karel Bilek -- Karl-Johan Alm -- Ken Lee -- Kevin Pan -- Kosta Zertsekel -- Kristaps Kaupe -- Kvaciral -- Lawrence Nahum -- Linrono -- lmanners -- Loganaden Velvindron -- Lowell Manners -- lucash.dev@gmail.com -- Luke Dashjr -- lutangar -- Marcin Jachymiak -- marcoagner -- MarcoFalke -- Mark Erhardt -- Mark Friedenbach -- Martin Ankerl -- Mason Simon -- Matt Corallo -- Matteo Sumberaz -- Max Kaplan -- MeshCollider -- Michał Zabielski -- Mitchell Cash -- mruddy -- mryandao -- murrayn -- Nick Vercammen -- Nicolas Dorier -- Nikolay Mitev -- okayplanet -- Pierre Rochard -- Pieter Wuille -- practicalswift -- Qasim Javed -- Randolf Richardson -- Richard Kiss -- Roman Zeyde -- Russell Yanofsky -- Samuel B. Atwood -- Sebastian Kung -- Sjors Provoost -- Steve Lee -- steverusso -- Suhas Daftuar -- Tamas Blummer -- TheCharlatan -- Thomas Kerin -- Thomas Snider -- Tim Ruffing -- Varunram -- Vasil Dimov -- Will Ayd -- William Robinson -- winder -- Wladimir J. van der Laan -- wodry - -And to those that reported security issues: - -- awemany (for CVE-2018-17144, previously credited as "anonymous reporter") - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.17.1.md b/doc/release-notes/release-notes-0.17.1.md deleted file mode 100644 index b1e50e0391..0000000000 --- a/doc/release-notes/release-notes-0.17.1.md +++ /dev/null @@ -1,168 +0,0 @@ -Bitcoin Core version 0.17.1 is now available from: - - - -or through BitTorrent: - - magnet:?xt=urn:btih:c56c87ccfaa8e6fbccc90d549121e61efd97cb6f&dn=bitcoin-core-0.17.1&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Fzer0day.ch%3A1337&tr=udp%3A%2F%2Fexplodie.org%3A6969 - -This is a new minor version release, with various bugfixes -and performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac) -or `bitcoind`/`bitcoin-qt` (on Linux). - -If your node has a txindex, the txindex db will be migrated the first time you run 0.17.0 or newer, which may take up to a few hours. Your node will not be functional until this migration completes. - -The first time you run version 0.15.0 or newer, your chainstate database will be converted to a -new format, which will take anywhere from a few minutes to half an hour, -depending on the speed of your machine. - -Note that the block database format also changed in version 0.8.0 and there is no -automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading -directly from 0.7.x and earlier without redownloading the blockchain is not supported. -However, as usual, old wallet versions are still supported. - -Downgrading warning -------------------- - -The chainstate database for this release is not compatible with previous -releases, so if you run 0.15 and then decide to switch back to any -older version, you will need to run the old release with the `-reindex-chainstate` -option to rebuild the chainstate data structures in the old format. - -If your node has pruning enabled, this will entail re-downloading and -processing the entire blockchain. - -Compatibility -============== - -Bitcoin Core is extensively tested on multiple operating systems using -the Linux kernel, macOS 10.10+, and Windows 7 and newer (Windows XP is not supported). - -Bitcoin Core should also work on most other Unix-like systems but is not -frequently tested on them. - -From 0.17.0 onwards macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't -support versions of macOS older than 10.10. - -Notable changes -=============== - -`listtransactions` label support --------------------------------- - -The `listtransactions` RPC `account` parameter which was deprecated in 0.17.0 -and renamed to `dummy` has been un-deprecated and renamed again to `label`. - -When bitcoin is configured with the `-deprecatedrpc=accounts` setting, specifying -a label/account/dummy argument will return both outgoing and incoming -transactions. Without the `-deprecatedrpc=accounts` setting, it will only return -incoming transactions (because it used to be possible to create transactions -spending from specific accounts, but this is no longer possible with labels). - -When `-deprecatedrpc=accounts` is set, it's possible to pass the empty string "" -to list transactions that don't have any label. Without -`-deprecatedrpc=accounts`, passing the empty string is an error because returning -only non-labeled transactions is not generally useful behavior and can cause -confusion. - -0.17.1 change log -================= - -### P2P protocol and network code -- #14685 `9406502` Fix a deserialization overflow edge case (kazcw) -- #14728 `b901578` Fix uninitialized read when stringifying an addrLocal (kazcw) - -### Wallet -- #14441 `5150acc` Restore ability to list incoming transactions by label (jnewbery) -- #13546 `91fa15a` Fix use of uninitialized value `bnb_used` in CWallet::CreateTransaction(…) (practicalswift) -- #14310 `bb90695` Ensure wallet is unlocked before signing (gustavonalle) -- #14690 `5782fdc` Throw error if CPubKey is invalid during PSBT keypath serialization (instagibbs) -- #14852 `2528443` backport: [tests] Add `wallet_balance.py` (MarcoFalke) -- #14196 `3362a95` psbt: always drop the unnecessary utxo and convert non-witness utxo to witness when necessary (achow101) -- #14588 `70ee1f8` Refactor PSBT signing logic to enforce invariant and fix signing bug (gwillen) -- #14424 `89a9a9d` Stop requiring imported pubkey to sign non-PKH schemes (sipa, MeshCollider) - -### RPC and other APIs -- #14417 `fb9ad04` Fix listreceivedbyaddress not taking address as a string (etscrivner) -- #14596 `de5e48a` Bugfix: RPC: Add `address_type` named param for createmultisig (luke-jr) -- #14618 `9666dba` Make HTTP RPC debug logging more informative (practicalswift) -- #14197 `7bee414` [psbt] Convert non-witness UTXOs to witness if witness sig created (achow101) -- #14377 `a3fe125` Check that a separator is found for psbt inputs, outputs, and global map (achow101) -- #14356 `7a590d8` Fix converttopsbt permitsigdata arg, add basic test (instagibbs) -- #14453 `75b5d8c` Fix wallet unload during walletpassphrase timeout (promag) - -### GUI -- #14403 `0242b5a` Revert "Force TLS1.0+ for SSL connections" (real-or-random) -- #14593 `df5131b` Explicitly disable "Dark Mode" appearance on macOS (fanquake) - -### Build system -- #14647 `7edebed` Remove illegal spacing in darwin.mk (ch4ot1c) -- #14698 `ec71f06` Add bitcoin-tx.exe into Windows installer (ken2812221) - -### Tests and QA -- #13965 `29899ec` Fix extended functional tests fail (ken2812221) -- #14011 `9461f98` Disable wallet and address book Qt tests on macOS minimal platform (ryanofsky) -- #14180 `86fadee` Run all tests even if wallet is not compiled (MarcoFalke) -- #14122 `8bc1bad` Test `rpc_help.py` failed: Check whether ZMQ is enabled or not (Kvaciral) -- #14101 `96dc936` Use named args in validation acceptance tests (MarcoFalke) -- #14020 `24d796a` Add tests for RPC help (promag) -- #14052 `7ff32a6` Add some actual witness in `rpc_rawtransaction` (MarcoFalke) -- #14215 `b72fbab` Use correct python index slices in example test (sdaftuar) -- #14024 `06544fa` Add `TestNode::assert_debug_log` (MarcoFalke) -- #14658 `60f7a97` Add test to ensure node can generate all rpc help texts at runtime (MarcoFalke) -- #14632 `96f15e8` Fix a comment (fridokus) -- #14700 `f9db08e` Avoid race in `p2p_invalid_block` by waiting for the block request (MarcoFalke) -- #14845 `67225e2` Add `wallet_balance.py` (jnewbery) - -### Documentation -- #14161 `5f51fd6` doc/descriptors.md tweaks (ryanofsky) -- #14276 `85aacc4` Add autogen.sh in ARM Cross-compilation (walterwhite81) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Andrew Chow -- Chun Kuan Lee -- David A. Harding -- Eric Scrivner -- fanquake -- fridokus -- Glenn Willen -- Gregory Sanders -- gustavonalle -- John Newbery -- Jon Layton -- Jonas Schnelli -- João Barbosa -- Kaz Wesley -- Kvaciral -- Luke Dashjr -- MarcoFalke -- MeshCollider -- Pieter Wuille -- practicalswift -- Russell Yanofsky -- Sjors Provoost -- Suhas Daftuar -- Tim Ruffing -- Walter -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.18.0.md b/doc/release-notes/release-notes-0.18.0.md deleted file mode 100644 index 3ca7d52243..0000000000 --- a/doc/release-notes/release-notes-0.18.0.md +++ /dev/null @@ -1,1224 +0,0 @@ -Bitcoin Core version 0.18.0 is now available from: - - - -This is a new major version release, including new features, various bug -fixes and performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has -completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -`/Applications/Bitcoin-Qt` (on Mac) or `bitcoind`/`bitcoin-qt` (on -Linux). - -The first time you run version 0.15.0 or newer, your chainstate database -will be converted to a new format, which will take anywhere from a few -minutes to half an hour, depending on the speed of your machine. - -Note that the block database format also changed in version 0.8.0 and -there is no automatic upgrade code from before version 0.8 to version -0.15.0 or later. Upgrading directly from 0.7.x and earlier without -redownloading the blockchain is not supported. However, as usual, old -wallet versions are still supported. - -Compatibility -============== - -Bitcoin Core is supported and extensively tested on operating systems -using the Linux kernel, macOS 10.10+, and Windows 7 and newer. It is not -recommended to use Bitcoin Core on unsupported systems. - -Bitcoin Core should also work on most other Unix-like systems but is not -as frequently tested on them. - -From 0.17.0 onwards, macOS <10.10 is no longer supported. 0.17.0 is -built using Qt 5.9.x, which doesn't support versions of macOS older than -10.10. Additionally, Bitcoin Core does not yet change appearance when -macOS "dark mode" is activated. - -In addition to previously-supported CPU platforms, this release's -pre-compiled distribution also provides binaries for the RISC-V -platform. - -If you are using the `systemd` unit configuration file located at -`contrib/init/bitcoind.service`, it has been changed to use -`/var/lib/bitcoind` as the data directory instead of -`~bitcoin/.bitcoin`. When switching over to the new configuration file, -please make sure that the filesystem on which `/var/lib/bitcoind` will -exist has enough space (check using `df -h /var/lib/bitcoind`), and -optionally copy over your existing data directory. See the [systemd init -file section](#systemd-init-file) for more details. - -Known issues -============ - -Wallet GUI ----------- - -For advanced users who have both (1) enabled coin control features, and -(2) are using multiple wallets loaded at the same time: The coin control -input selection dialog can erroneously retain wrong-wallet state when -switching wallets using the dropdown menu. For now, it is recommended -not to use coin control features with multiple wallets loaded. - -Notable changes -=============== - -Mining ------- - -- Calls to `getblocktemplate` will fail if the segwit rule is not - specified. Calling `getblocktemplate` without segwit specified is - almost certainly a misconfiguration since doing so results in lower - rewards for the miner. Failed calls will produce an error message - describing how to enable the segwit rule. - -Configuration option changes ----------------------------- - -- A warning is printed if an unrecognized section name is used in the - configuration file. Recognized sections are `[test]`, `[main]`, and - `[regtest]`. - -- Four new options are available for configuring the maximum number of - messages that ZMQ will queue in memory (the "high water mark") before - dropping additional messages. The default value is 1,000, the same as - was used for previous releases. See the [ZMQ - documentation](https://github.com/bitcoin/bitcoin/blob/master/doc/zmq.md#usage) - for details. - -- The `rpcallowip` option can no longer be used to automatically listen - on all network interfaces. Instead, the `rpcbind` parameter must be - used to specify the IP addresses to listen on. Listening for RPC - commands over a public network connection is insecure and should be - disabled, so a warning is now printed if a user selects such a - configuration. If you need to expose RPC in order to use a tool like - Docker, ensure you only bind RPC to your localhost, e.g. `docker run - [...] -p 127.0.0.1:8332:8332` (this is an extra `:8332` over the - normal Docker port specification). - -- The `rpcpassword` option now causes a startup error if the password - set in the configuration file contains a hash character (#), as it's - ambiguous whether the hash character is meant for the password or as a - comment. - -- The `whitelistforcerelay` option is used to relay transactions from - whitelisted peers even when not accepted to the mempool. This option - now defaults to being off, so that changes in policy and - disconnect/ban behavior will not cause a node that is whitelisting - another to be dropped by peers. Users can still explicitly enable - this behavior with the command line option (and may want to consider - [contacting](https://bitcoincore.org/en/contact/) the Bitcoin Core - project to let us know about their use-case, as this feature could be - deprecated in the future). - -systemd init file ------------------ - -The systemd init file (`contrib/init/bitcoind.service`) has been changed -to use `/var/lib/bitcoind` as the data directory instead of -`~bitcoin/.bitcoin`. This change makes Bitcoin Core more consistent with -other services, and makes the systemd init config more consistent with -existing Upstart and OpenRC configs. - -The configuration, PID, and data directories are now completely managed -by systemd, which will take care of their creation, permissions, etc. -See [`systemd.exec(5)`](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#RuntimeDirectory=) -for more details. - -When using the provided init files under `contrib/init`, overriding the -`datadir` option in `/etc/bitcoin/bitcoin.conf` will have no effect. -This is because the command line arguments specified in the init files -take precedence over the options specified in -`/etc/bitcoin/bitcoin.conf`. - - -Documentation -------------- - -- A new short [document](https://github.com/bitcoin/bitcoin/blob/master/doc/JSON-RPC-interface.md) - about the JSON-RPC interface describes cases where the results of an - RPC might contain inconsistencies between data sourced from different - subsystems, such as wallet state and mempool state. A note is added - to the [REST interface documentation](https://github.com/bitcoin/bitcoin/blob/master/doc/REST-interface.md) - indicating that the same rules apply. - -- Further information is added to the [JSON-RPC - documentation](https://github.com/bitcoin/bitcoin/blob/master/doc/JSON-RPC-interface.md) - about how to secure this interface. - -- A new [document](https://github.com/bitcoin/bitcoin/blob/master/doc/bitcoin-conf.md) - about the `bitcoin.conf` file describes how to use it to configure - Bitcoin Core. - -- A new document introduces Bitcoin Core's BIP174 [Partially-Signed - Bitcoin Transactions - (PSBT)](https://github.com/bitcoin/bitcoin/blob/master/doc/psbt.md) - interface, which is used to allow multiple programs to collaboratively - work to create, sign, and broadcast new transactions. This is useful - for offline (cold storage) wallets, multisig wallets, coinjoin - implementations, and many other cases where two or more programs need - to interact to generate a complete transaction. - -- The [output script - descriptor](https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md) - documentation has been updated with information about new features in - this still-developing language for describing the output scripts that - a wallet or other program wants to receive notifications for, such as - which addresses it wants to know received payments. The language is - currently used in multiple new and updated RPCs described in these - release notes and is expected to be adapted to other RPCs and to the - underlying wallet structure. - -Build system changes --------------------- - -- A new `--disable-bip70` option may be passed to `./configure` to - prevent Bitcoin-Qt from being built with support for the BIP70 payment - protocol or from linking libssl. As the payment protocol has exposed - Bitcoin Core to libssl vulnerabilities in the past, builders who don't - need BIP70 support are encouraged to use this option to reduce their - exposure to future vulnerabilities. - -- The minimum required version of Qt (when building the GUI) has been - increased from 5.2 to 5.5.1 (the [depends - system](https://github.com/bitcoin/bitcoin/blob/master/depends/README.md) - provides 5.9.7) - -New RPCs --------- - -- `getnodeaddresses` returns peer addresses known to this node. It may - be used to find nodes to connect to without using a DNS seeder. - -- `listwalletdir` returns a list of wallets in the wallet directory - (either the default wallet directory or the directory configured by - the `-walletdir` parameter). - -- `getrpcinfo` returns runtime details of the RPC server. At the moment, - it returns an array of the currently active commands and how long - they've been running. - -- `deriveaddresses` returns one or more addresses corresponding to an - [output descriptor](https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md). - -- `getdescriptorinfo` accepts a descriptor and returns information about - it, including its computed checksum. - -- `joinpsbts` merges multiple distinct PSBTs into a single PSBT. The - multiple PSBTs must have different inputs. The resulting PSBT will - contain every input and output from all of the PSBTs. Any signatures - provided in any of the PSBTs will be dropped. - -- `analyzepsbt` examines a PSBT and provides information about what - the PSBT contains and the next steps that need to be taken in order - to complete the transaction. For each input of a PSBT, `analyzepsbt` - provides information about what information is missing for that - input, including whether a UTXO needs to be provided, what pubkeys - still need to be provided, which scripts need to be provided, and - what signatures are still needed. Every input will also list which - role is needed to complete that input, and `analyzepsbt` will also - list the next role in general needed to complete the PSBT. - `analyzepsbt` will also provide the estimated fee rate and estimated - virtual size of the completed transaction if it has enough - information to do so. - -- `utxoupdatepsbt` searches the set of Unspent Transaction Outputs - (UTXOs) to find the outputs being spent by the partial transaction. - PSBTs need to have the UTXOs being spent to be provided because - the signing algorithm requires information from the UTXO being spent. - For segwit inputs, only the UTXO itself is necessary. For - non-segwit outputs, the entire previous transaction is needed so - that signers can be sure that they are signing the correct thing. - Unfortunately, because the UTXO set only contains UTXOs and not full - transactions, `utxoupdatepsbt` will only add the UTXO for segwit - inputs. - -Updated RPCs ------------- - -Note: some low-level RPC changes mainly useful for testing are described -in the Low-level Changes section below. - -- `getpeerinfo` now returns an additional `minfeefilter` field set to - the peer's BIP133 fee filter. You can use this to detect that you - have peers that are willing to accept transactions below the default - minimum relay fee. - -- The mempool RPCs, such as `getrawmempool` with `verbose=true`, now - return an additional "bip125-replaceable" value indicating whether the - transaction (or its unconfirmed ancestors) opts-in to asking nodes and - miners to replace it with a higher-feerate transaction spending any of - the same inputs. - -- `settxfee` previously silently ignored attempts to set the fee below - the allowed minimums. It now prints a warning. The special value of - "0" may still be used to request the minimum value. - -- `getaddressinfo` now provides an `ischange` field indicating whether - the wallet used the address in a change output. - -- `importmulti` has been updated to support P2WSH, P2WPKH, P2SH-P2WPKH, - and P2SH-P2WSH. Requests for P2WSH and P2SH-P2WSH accept an additional - `witnessscript` parameter. - -- `importmulti` now returns an additional `warnings` field for each - request with an array of strings explaining when fields are being - ignored or are inconsistent, if there are any. - -- `getaddressinfo` now returns an additional `solvable` boolean field - when Bitcoin Core knows enough about the address's scriptPubKey, - optional redeemScript, and optional witnessScript in order for the - wallet to be able to generate an unsigned input spending funds sent to - that address. - -- The `getaddressinfo`, `listunspent`, and `scantxoutset` RPCs now - return an additional `desc` field that contains an output descriptor - containing all key paths and signing information for the address - (except for the private key). The `desc` field is only returned for - `getaddressinfo` and `listunspent` when the address is solvable. - -- `importprivkey` will preserve previously-set labels for addresses or - public keys corresponding to the private key being imported. For - example, if you imported a watch-only address with the label "cold - wallet" in earlier releases of Bitcoin Core, subsequently importing - the private key would default to resetting the address's label to the - default empty-string label (""). In this release, the previous label - of "cold wallet" will be retained. If you optionally specify any - label besides the default when calling `importprivkey`, the new label - will be applied to the address. - -- See the [Mining](#mining) section for changes to `getblocktemplate`. - -- `getmininginfo` now omits `currentblockweight` and `currentblocktx` - when a block was never assembled via RPC on this node. - -- The `getrawtransaction` RPC & REST endpoints no longer check the - unspent UTXO set for a transaction. The remaining behaviors are as - follows: 1. If a blockhash is provided, check the corresponding block. - 2. If no blockhash is provided, check the mempool. 3. If no blockhash - is provided but txindex is enabled, also check txindex. - -- `unloadwallet` is now synchronous, meaning it will not return until - the wallet is fully unloaded. - -- `importmulti` now supports importing of addresses from descriptors. A - "desc" parameter can be provided instead of the "scriptPubKey" in a - request, as well as an optional range for ranged descriptors to - specify the start and end of the range to import. Descriptors with key - origin information imported through `importmulti` will have their key - origin information stored in the wallet for use with creating PSBTs. - More information about descriptors can be found - [here](https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md). - -- `listunspent` has been modified so that it also returns - `witnessScript`, the witness script in the case of a P2WSH or - P2SH-P2WSH output. - -- `createwallet` now has an optional `blank` argument that can be used - to create a blank wallet. Blank wallets do not have any keys or HD - seed. They cannot be opened in software older than 0.18. Once a blank - wallet has a HD seed set (by using `sethdseed`) or private keys, - scripts, addresses, and other watch only things have been imported, - the wallet is no longer blank and can be opened in 0.17.x. Encrypting - a blank wallet will also set a HD seed for it. - -Deprecated or removed RPCs --------------------------- - -- `signrawtransaction` is removed after being deprecated and hidden - behind a special configuration option in version 0.17.0. - -- The 'account' API is removed after being deprecated in v0.17. The - 'label' API was introduced in v0.17 as a replacement for accounts. - See the [release notes from - v0.17](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.17.0.md#label-and-account-apis-for-wallet) - for a full description of the changes from the 'account' API to the - 'label' API. - -- `addwitnessaddress` is removed after being deprecated in version - 0.16.0. - -- `generate` is deprecated and will be fully removed in a subsequent - major version. This RPC is only used for testing, but its - implementation reached across multiple subsystems (wallet and mining), - so it is being deprecated to simplify the wallet-node interface. - Projects that are using `generate` for testing purposes should - transition to using the `generatetoaddress` RPC, which does not - require or use the wallet component. Calling `generatetoaddress` with - an address returned by the `getnewaddress` RPC gives the same - functionality as the old `generate` RPC. To continue using `generate` - in this version, restart bitcoind with the `-deprecatedrpc=generate` - configuration option. - -- Be reminded that parts of the `validateaddress` command have been - deprecated and moved to `getaddressinfo`. The following deprecated - fields have moved to `getaddressinfo`: `ismine`, `iswatchonly`, - `script`, `hex`, `pubkeys`, `sigsrequired`, `pubkey`, `embedded`, - `iscompressed`, `label`, `timestamp`, `hdkeypath`, `hdmasterkeyid`. - -- The `addresses` field has been removed from the `validateaddress` - and `getaddressinfo` RPC methods. This field was confusing since - it referred to public keys using their P2PKH address. Clients - should use the `embedded.address` field for P2SH or P2WSH wrapped - addresses, and `pubkeys` for inspecting multisig participants. - -REST changes ------------- - -- A new `/rest/blockhashbyheight/` endpoint is added for fetching the - hash of the block in the current best blockchain based on its height - (how many blocks it is after the Genesis Block). - -Graphical User Interface (GUI) ------------------------------- - -- A new Window menu is added alongside the existing File, Settings, and - Help menus. Several items from the other menus that opened new - windows have been moved to this new Window menu. - -- In the Send tab, the checkbox for "pay only the required fee" has been - removed. Instead, the user can simply decrease the value in the - Custom Feerate field all the way down to the node's configured minimum - relay fee. - -- In the Overview tab, the watch-only balance will be the only balance - shown if the wallet was created using the `createwallet` RPC and the - `disable_private_keys` parameter was set to true. - -- The launch-on-startup option is no longer available on macOS if - compiled with macosx min version greater than 10.11 (use - CXXFLAGS="-mmacosx-version-min=10.11" - CFLAGS="-mmacosx-version-min=10.11" for setting the deployment sdk - version) - -Tools ------ - -- A new `bitcoin-wallet` tool is now distributed alongside Bitcoin - Core's other executables. Without needing to use any RPCs, this tool - can currently create a new wallet file or display some basic - information about an existing wallet, such as whether the wallet is - encrypted, whether it uses an HD seed, how many transactions it - contains, and how many address book entries it has. - -Planned changes -=============== - -This section describes planned changes to Bitcoin Core that may affect -other Bitcoin software and services. - -- Since version 0.16.0, Bitcoin Core’s built-in wallet has defaulted to - generating P2SH-wrapped segwit addresses when users want to receive - payments. These addresses are backwards compatible with all - widely-used software. Starting with Bitcoin Core 0.20 (expected about - a year after 0.18), Bitcoin Core will default to native segwit - addresses (bech32) that provide additional fee savings and other - benefits. Currently, many wallets and services already support sending - to bech32 addresses, and if the Bitcoin Core project sees enough - additional adoption, it will instead default to bech32 receiving - addresses in Bitcoin Core 0.19 (approximately November 2019). - P2SH-wrapped segwit addresses will continue to be provided if the user - requests them in the GUI or by RPC, and anyone who doesn’t want the - update will be able to configure their default address type. - (Similarly, pioneering users who want to change their default now may - set the `addresstype=bech32` configuration option in any Bitcoin Core - release from 0.16.0 up.) - -Deprecated P2P messages ------------------------ - -- BIP 61 reject messages are now deprecated. Reject messages have no use - case on the P2P network and are only logged for debugging by most - network nodes. Furthermore, they increase bandwidth and can be harmful - for privacy and security. It has been possible to disable BIP 61 - messages since v0.17 with the `-enablebip61=0` option. BIP 61 messages - will be disabled by default in a future version, before being removed - entirely. - -Low-level changes -================= - -This section describes RPC changes mainly useful for testing, mostly not -relevant in production. The changes are mentioned for completeness. - -RPC ---- - -- The `submitblock` RPC previously returned the reason a rejected block - was invalid the first time it processed that block, but returned a - generic "duplicate" rejection message on subsequent occasions it - processed the same block. It now always returns the fundamental - reason for rejecting an invalid block and only returns "duplicate" for - valid blocks it has already accepted. - -- A new `submitheader` RPC allows submitting block headers independently - from their block. This is likely only useful for testing. - -- The `signrawtransactionwithkey` and `signrawtransactionwithwallet` - RPCs have been modified so that they also optionally accept a - `witnessScript`, the witness script in the case of a P2WSH or - P2SH-P2WSH output. This is compatible with the change to - `listunspent`. - -- For the `walletprocesspsbt` and `walletcreatefundedpsbt` RPCs, if the - `bip32derivs` parameter is set to true but the key metadata for a - public key has not been updated yet, then that key will have a - derivation path as if it were just an independent key (i.e. no - derivation path and its master fingerprint is itself). - -Configuration -------------- - -- The `-usehd` configuration option was removed in version 0.16. From - that version onwards, all new wallets created are hierarchical - deterministic wallets. This release makes specifying `-usehd` an - invalid configuration option. - -Network -------- - -- This release allows peers that your node automatically disconnected - for misbehavior (e.g. sending invalid data) to reconnect to your node - if you have unused incoming connection slots. If your slots fill up, - a misbehaving node will be disconnected to make room for nodes without - a history of problems (unless the misbehaving node helps your node in - some other way, such as by connecting to a part of the Internet from - which you don't have many other peers). Previously, Bitcoin Core - banned the IP addresses of misbehaving peers for a period of time - (default of 1 day); this was easily circumvented by attackers with - multiple IP addresses. If you manually ban a peer, such as by using - the `setban` RPC, all connections from that peer will still be - rejected. - -Wallet -------- - -- The key metadata will need to be upgraded the first time that the HD - seed is available. For unencrypted wallets this will occur on wallet - loading. For encrypted wallets this will occur the first time the - wallet is unlocked. - -- Newly encrypted wallets will no longer require restarting the - software. Instead such wallets will be completely unloaded and - reloaded to achieve the same effect. - -- A sub-project of Bitcoin Core now provides Hardware Wallet Interaction - (HWI) scripts that allow command-line users to use several popular - hardware key management devices with Bitcoin Core. See their [project - page](https://github.com/bitcoin-core/HWI#readme) for details. - -Security --------- - -- This release changes the Random Number Generator (RNG) used from - OpenSSL to Bitcoin Core's own implementation, although entropy - gathered by Bitcoin Core is fed out to OpenSSL and then read back in - when the program needs strong randomness. This moves Bitcoin Core a - little closer to no longer needing to depend on OpenSSL, a dependency - that has caused security issues in the past. The new implementation - gathers entropy from multiple sources, including from hardware - supporting the rdseed CPU instruction. - -Changes for particular platforms --------------------------------- - -- On macOS, Bitcoin Core now opts out of application CPU throttling - ("app nap") during initial blockchain download, when catching up from - over 100 blocks behind the current chain tip, or when reindexing chain - data. This helps prevent these operations from taking an excessively - long time because the operating system is attempting to conserve - power. - -0.18.0 change log -================= - -### Consensus -- #14247 Fix crash bug with duplicate inputs within a transaction (TheBlueMatt) - -### Mining -- #14811 Mining: Enforce that segwit option must be set in GBT (jnewbery) - -### Block and transaction handling -- #13310 Report progress in ReplayBlocks while rolling forward (promag) -- #13783 validation: Pass tx pool reference into CheckSequenceLocks (MarcoFalke) -- #14834 validation: Assert that pindexPrev is non-null when required (kallewoof) -- #14085 index: Fix for indexers skipping genesis block (jimpo) -- #14963 mempool, validation: Explain `cs_main` locking semantics (MarcoFalke) -- #15193 Default `-whitelistforcerelay` to off (sdaftuar) -- #15429 Update `assumevalid`, `minimumchainwork`, and `getchaintxstats` to height 563378 (gmaxwell) -- #15552 Granular invalidateblock and RewindBlockIndex (MarcoFalke) -- #14841 Move CheckBlock() call to critical section (hebasto) - -### P2P protocol and network code -- #14025 Remove dead code for nVersion=10300 (MarcoFalke) -- #12254 BIP 158: Compact Block Filters for Light Clients (jimpo) -- #14073 blockfilter: Avoid out-of-bounds script access (jimpo) -- #14140 Switch nPrevNodeCount to vNodesSize (pstratem) -- #14027 Skip stale tip checking if outbound connections are off or if reindexing (gmaxwell) -- #14532 Never bind `INADDR_ANY` by default, and warn when doing so explicitly (luke-jr) -- #14733 Make peer timeout configurable, speed up very slow test and ensure correct code path tested (zallarak) -- #14336 Implement poll (pstratem) -- #15051 IsReachable is the inverse of IsLimited (DRY). Includes unit tests (mmachicao) -- #15138 Drop IsLimited in favor of IsReachable (Empact) -- #14605 Return of the Banman (dongcarl) -- #14970 Add dnsseed.emzy.de to DNS seeds (Emzy) -- #14929 Allow connections from misbehavior banned peers (gmaxwell) -- #15345 Correct comparison of addr count (dongcarl) -- #15201 Add missing locking annotation for vNodes. vNodes is guarded by cs_vNodes (practicalswift) -- #14626 Select orphan transaction uniformly for eviction (sipa) -- #15486 Ensure tried collisions resolve, and allow feeler connections to existing outbound netgroups (sdaftuar) - -### Wallet -- #13962 Remove unused `dummy_tx` variable from FillPSBT (dongcarl) -- #13967 Don't report `minversion` wallet entry as unknown (instagibbs) -- #13988 Add checks for settxfee reasonableness (ajtowns) -- #12559 Avoid locking `cs_main` in some wallet RPC (promag) -- #13631 Add CMerkleTx::IsImmatureCoinBase method (Empact) -- #14023 Remove accounts RPCs (jnewbery) -- #13825 Kill accounts (jnewbery) -- #10605 Add AssertLockHeld assertions in CWallet::ListCoins (ryanofsky) -- #12490 Remove deprecated wallet rpc features from `bitcoin_server` (jnewbery) -- #14138 Set `encrypted_batch` to nullptr after delete. Avoid double free in the case of NDEBUG (practicalswift) -- #14168 Remove `ENABLE_WALLET` from `libbitcoin_server.a` (jnewbery) -- #12493 Reopen CDBEnv after encryption instead of shutting down (achow101) -- #14282 Remove `-usehd` option (jnewbery) -- #14146 Remove trailing separators from `-walletdir` arg (PierreRochard) -- #14291 Add ListWalletDir utility function (promag) -- #14468 Deprecate `generate` RPC method (jnewbery) -- #11634 Add missing `cs_wallet`/`cs_KeyStore` locks to wallet (practicalswift) -- #14296 Remove `addwitnessaddress` (jnewbery) -- #14451 Add BIP70 deprecation warning and allow building GUI without BIP70 support (jameshilliard) -- #14320 Fix duplicate fileid detection (ken2812221) -- #14561 Remove `fs::relative` call and fix listwalletdir tests (promag) -- #14454 Add SegWit support to importmulti (MeshCollider) -- #14410 rpcwallet: `ischange` field for `getaddressinfo` RPC (mrwhythat) -- #14350 Add WalletLocation class (promag) -- #14689 Require a public key to be retrieved when signing a P2PKH input (achow101) -- #14478 Show error to user when corrupt wallet unlock fails (MeshCollider) -- #14411 Restore ability to list incoming transactions by label (ryanofsky) -- #14552 Detect duplicate wallet by comparing the db filename (ken2812221) -- #14678 Remove redundant KeyOriginInfo access, already done in CreateSig (instagibbs) -- #14477 Add ability to convert solvability info to descriptor (sipa) -- #14380 Fix assert crash when specified change output spend size is unknown (instagibbs) -- #14760 Log env path in `BerkeleyEnvironment::Flush` (promag) -- #14646 Add expansion cache functions to descriptors (unused for now) (sipa) -- #13076 Fix ScanForWalletTransactions to return an enum indicating scan result: `success` / `failure` / `user_abort` (Empact) -- #14821 Replace CAffectedKeysVisitor with descriptor based logic (sipa) -- #14957 Initialize `stop_block` in CWallet::ScanForWalletTransactions (Empact) -- #14565 Overhaul `importmulti` logic (sipa) -- #15039 Avoid leaking nLockTime fingerprint when anti-fee-sniping (MarcoFalke) -- #14268 Introduce SafeDbt to handle Dbt with free or `memory_cleanse` raii-style (Empact) -- #14711 Remove uses of chainActive and mapBlockIndex in wallet code (ryanofsky) -- #15279 Clarify rescanblockchain doc (MarcoFalke) -- #15292 Remove `boost::optional`-related false positive -Wmaybe-uninitialized warnings on GCC compiler (hebasto) -- #13926 [Tools] bitcoin-wallet - a tool for creating and managing wallets offline (jnewbery) -- #11911 Free BerkeleyEnvironment instances when not in use (ryanofsky) -- #15235 Do not import private keys to wallets with private keys disabled (achow101) -- #15263 Descriptor expansions only need pubkey entries for PKH/WPKH (sipa) -- #15322 Add missing `cs_db` lock (promag) -- #15297 Releases dangling files on `BerkeleyEnvironment::Close` (promag) -- #14491 Allow descriptor imports with importmulti (MeshCollider) -- #15365 Add lock annotation for mapAddressBook (MarcoFalke) -- #15226 Allow creating blank (empty) wallets (alternative) (achow101) -- #15390 [wallet-tool] Close bdb when flushing wallet (jnewbery) -- #15334 Log absolute paths for the wallets (hebasto) -- #14978 Factor out PSBT utilities from RPCs for use in GUI code; related refactoring (gwillen) -- #14481 Add P2SH-P2WSH support to listunspent RPC (MeshCollider) -- #14021 Import key origin data through descriptors in importmulti (achow101) -- #14075 Import watch only pubkeys to the keypool if private keys are disabled (achow101) -- #15368 Descriptor checksums (sipa) -- #15433 Use a single wallet batch for `UpgradeKeyMetadata` (jonasschnelli) -- #15408 Remove unused `TransactionError` constants (MarcoFalke) -- #15583 Log and ignore errors in ListWalletDir and IsBerkeleyBtree (promag) -- #14195 Pass privkey export DER compression flag correctly (fingera) -- #15299 Fix assertion in `CKey::SignCompact` (promag) -- #14437 Start to separate wallet from node (ryanofsky) -- #15749 Fix: importmulti only imports origin info for PKH outputs (sipa) - -### RPC and other APIs -- #12842 Prevent concurrent `savemempool` (promag) -- #13987 Report `minfeefilter` value in `getpeerinfo` RPC (ajtowns) -- #13891 Remove getinfo deprecation warning (jnewbery) -- #13399 Add `submitheader` (MarcoFalke) -- #12676 Show `bip125-replaceable` flag, when retrieving mempool entries (dexX7) -- #13723 PSBT key path cleanups (sipa) -- #14008 Preserve a format of RPC command definitions (kostyantyn) -- #9332 Let wallet `importmulti` RPC accept labels for standard scriptPubKeys (ryanofsky) -- #13983 Return more specific reject reason for submitblock (MarcoFalke) -- #13152 Add getnodeaddresses RPC command (chris-belcher) -- #14298 rest: Improve performance for JSON calls (alecalve) -- #14297 Remove warning for removed estimatefee RPC (jnewbery) -- #14373 Consistency fixes for RPC descriptions (ch4ot1c) -- #14150 Add key origin support to descriptors (sipa) -- #14518 Always throw in getblockstats if `-txindex` is required (promag) -- #14060 ZMQ: add options to configure outbound message high water mark, aka SNDHWM (mruddy) -- #13381 Add possibility to preserve labels on importprivkey (marcoagner) -- #14530 Use `RPCHelpMan` to generate RPC doc strings (MarcoFalke) -- #14720 Correctly name RPC arguments (MarcoFalke) -- #14726 Use `RPCHelpMan` for all RPCs (MarcoFalke) -- #14796 Pass argument descriptions to `RPCHelpMan` (MarcoFalke) -- #14670 http: Fix HTTP server shutdown (promag) -- #14885 Assert that named arguments are unique in `RPCHelpMan` (promag) -- #14877 Document default values for optional arguments (MarcoFalke) -- #14875 RPCHelpMan: Support required arguments after optional ones (MarcoFalke) -- #14993 Fix data race (UB) in InterruptRPC() (practicalswift) -- #14653 rpcwallet: Add missing transaction categories to RPC helptexts (andrewtoth) -- #14981 Clarify RPC `getrawtransaction`'s time help text (benthecarman) -- #12151 Remove `cs_main` lock from blockToJSON and blockheaderToJSON (promag) -- #15078 Document `bytessent_per_msg` and `bytesrecv_per_msg` (MarcoFalke) -- #15057 Correct `reconsiderblock `help text, add test (MarcoFalke) -- #12153 Avoid permanent `cs_main` lock in `getblockheader` (promag) -- #14982 Add `getrpcinfo` command (promag) -- #15122 Expand help text for `importmulti` changes (jnewbery) -- #15186 remove duplicate solvable field from `getaddressinfo` (fanquake) -- #15209 zmq: log outbound message high water mark when reusing socket (fanquake) -- #15177 rest: Improve tests and documention of /headers and /block (promag) -- #14353 rest: Add blockhash call, fetch blockhash by height (jonasschnelli) -- #15248 Compile on GCC4.8 (MarcoFalke) -- #14987 RPCHelpMan: Pass through Result and Examples (MarcoFalke) -- #15159 Remove lookup to UTXO set from GetTransaction (amitiuttarwar) -- #15245 remove deprecated mentions of signrawtransaction from fundraw help (instagibbs) -- #14667 Add `deriveaddresses` RPC util method (Sjors) -- #15357 Don't ignore `-maxtxfee` when wallet is disabled (JBaczuk) -- #15337 Fix for segfault if combinepsbt called with empty inputs (benthecarman) -- #14918 RPCHelpMan: Check default values are given at compile-time (MarcoFalke) -- #15383 mining: Omit uninitialized currentblockweight, currentblocktx (MarcoFalke) -- #13932 Additional utility RPCs for PSBT (achow101) -- #15401 Actually throw help when passed invalid number of params (MarcoFalke) -- #15471 rpc/gui: Remove 'Unknown block versions being mined' warning (laanwj) -- #15497 Consistent range arguments in scantxoutset/importmulti/deriveaddresses (sipa) -- #15510 deriveaddresses: add range to CRPCConvertParam (Sjors) -- #15582 Fix overflow bug in analyzepsbt fee: CAmount instead of int (sipa) -- #13424 Consistently validate txid / blockhash length and encoding in rpc calls (Empact) -- #15750 Remove the addresses field from the getaddressinfo return object (jnewbery) - -### GUI -- #13634 Compile `boost::signals2` only once (MarcoFalke) -- #13248 Make proxy icon from statusbar clickable (mess110) -- #12818 TransactionView: highlight replacement tx after fee bump (Sjors) -- #13529 Use new Qt5 connect syntax (promag) -- #14162 Also log and print messages or questions like bitcoind (MarcoFalke) -- #14385 Avoid system harfbuzz and bz2 (theuni) -- #14450 Fix QCompleter popup regression (hebasto) -- #14177 Set C locale for amountWidget (hebasto) -- #14374 Add `Blocksdir` to Debug window (hebasto) -- #14554 Remove unused `adjustedTime` parameter (hebasto) -- #14228 Enable system tray icon by default if available (hebasto) -- #14608 Remove the "Pay only required fee…" checkbox (hebasto) -- #14521 qt, docs: Fix `bitcoin-qt -version` output formatting (hebasto) -- #13966 When private key is disabled, only show watch-only balance (ken2812221) -- #14828 Remove hidden columns in coin control dialog (promag) -- #14783 Fix `boost::signals2::no_slots_error` in early calls to InitWarning (promag) -- #14854 Cleanup SplashScreen class (hebasto) -- #14801 Use window() instead of obsolete topLevelWidget() (hebasto) -- #14573 Add Window menu (promag) -- #14979 Restore < Qt5.6 compatibility for addAction (jonasschnelli) -- #14975 Refactoring with QString::toNSString() (hebasto) -- #15000 Fix broken notificator on GNOME (hebasto) -- #14375 Correct misleading "overridden options" label (hebasto) -- #15007 Notificator class refactoring (hebasto) -- #14784 Use `WalletModel*` instead of the wallet name as map key (promag) -- #11625 Add BitcoinApplication & RPCConsole tests (ryanofsky) -- #14517 Fix start with the `-min` option (hebasto) -- #13216 implements concept for different disk sizes on intro (marcoagner) -- #15114 Replace remaining 0 with nullptr (Empact) -- #14594 Fix minimized window bug on Linux (hebasto) -- #14556 Fix confirmed transaction labeled "open" (#13299) (hebasto) -- #15149 Show current wallet name in window title (promag) -- #15136 "Peers" tab overhaul (hebasto) -- #14250 Remove redundant stopThread() and stopExecutor() signals (hebasto) -- #15040 Add workaround for QProgressDialog bug on macOS (hebasto) -- #15101 Add WalletController (promag) -- #15178 Improve "help-console" message (hebasto) -- #15210 Fix window title update (promag) -- #15167 Fix wallet selector size adjustment (hebasto) -- #15208 Remove macOS launch-at-startup when compiled with > macOS 10.11, fix memory mismanagement (jonasschnelli) -- #15163 Correct units for "-dbcache" and "-prune" (hebasto) -- #15225 Change the receive button to respond to keypool state changing (achow101) -- #15280 Fix shutdown order (promag) -- #15203 Fix issue #9683 "gui, wallet: random abort (segmentation fault) (dooglus) -- #15091 Fix model overlay header sync (jonasschnelli) -- #15153 Add Open Wallet menu (promag) -- #15183 Fix `m_assumed_blockchain_size` variable value (marcoagner) -- #15063 If BIP70 is disabled, attempt to fall back to BIP21 parsing (luke-jr) -- #15195 Add Close Wallet action (promag) -- #15462 Fix async open wallet call order (promag) -- #15801 Bugfix: GUI: Options: Initialise prune setting range before loading current value, and remove upper bound limit (luke-jr) - -### Build system -- #13955 gitian: Bump descriptors for (0.)18 (fanquake) -- #13899 Enable -Wredundant-decls where available. Remove redundant redeclarations (practicalswift) -- #13665 Add RISC-V support to gitian (ken2812221) -- #14062 Generate MSVC project files via python script (ken2812221) -- #14037 Add README.md to linux release tarballs (hebasto) -- #14183 Remove unused Qt 4 dependencies (ken2812221) -- #14127 Avoid getifaddrs when unavailable (greenaddress) -- #14184 Scripts and tools: increased timeout downloading (cisba) -- #14204 Move `interfaces/*` to `libbitcoin_server` (laanwj) -- #14208 Actually remove `ENABLE_WALLET` (jnewbery) -- #14212 Remove libssl from LDADD unless GUI (MarcoFalke) -- #13578 Upgrade zeromq to 4.2.5 and avoid deprecated zeromq API functions (mruddy) -- #14281 lcov: filter /usr/lib/ from coverage reports (MarcoFalke) -- #14325 gitian: Use versioned unsigned tarballs instead of generically named ones (achow101) -- #14253 During 'make clean', remove some files that are currently missed (murrayn) -- #14455 Unbreak `make clean` (jamesob) -- #14495 Warn (don't fail!) on spelling errors (practicalswift) -- #14496 Pin to specific versions of Python packages we install from PyPI in Travis (practicalswift) -- #14568 Fix Qt link order for Windows build (ken2812221) -- #14252 Run functional tests and benchmarks under the undefined behaviour sanitizer (UBSan) (practicalswift) -- #14612 Include full version number in released file names (achow101) -- #14840 Remove duplicate libconsensus linking in test make (AmirAbrams) -- #14564 Adjust configure so that only BIP70 is disabled when protobuf is missing instead of the GUI (jameshilliard) -- #14883 Add `--retry 5` to curl opts in `install_db4.sh` (qubenix) -- #14701 Add `CLIENT_VERSION_BUILD` to CFBundleGetInfoString (fanquake) -- #14849 Qt 5.9.7 (fanquake) -- #15020 Add names to Travis jobs (gkrizek) -- #15047 Allow to configure --with-sanitizers=fuzzer (MarcoFalke) -- #15154 Configure: bitcoin-tx doesn't need libevent, so don't pull it in (luke-jr) -- #15175 Drop macports support (Empact) -- #15308 Restore compatibility with older boost (Empact) -- #15407 msvc: Fix silent merge conflict between #13926 and #14372 part II (ken2812221) -- #15388 Makefile.am: add rule for src/bitcoin-wallet (Sjors) -- #15393 Bump minimum Qt version to 5.5.1 (Sjors) -- #15285 Prefer Python 3.4 even if newer versions are present on the system (Sjors) -- #15398 msvc: Add rapidcheck property tests (ken2812221) -- #15431 msvc: scripted-diff: Remove NDEBUG pre-define in project file (ken2812221) -- #15549 gitian: Improve error handling (laanwj) -- #15548 use full version string in setup.exe (MarcoFalke) -- #11526 Visual Studio build configuration for Bitcoin Core (sipsorcery) -- #15110 build\_msvc: Fix the build problem in `libbitcoin_server` (Mr-Leshiy) -- #14372 msvc: build secp256k1 and leveldb locally (ken2812221) -- #15325 msvc: Fix silent merge conflict between #13926 and #14372 (ken2812221) -- #15391 Add compile time verification of assumptions we're currently making implicitly/tacitly (practicalswift) -- #15503 msvc: Use a single file to specify the include path (ken2812221) -- #13765 contrib: Add gitian build support for github pull request (ken2812221) -- #15809 gitignore: plist and dat (jamesob) - -### Tests and QA -- #15405 appveyor: Clean cache when build configuration changes (Sjors) -- #13953 Fix deprecation in bitcoin-util-test.py (isghe) -- #13963 Replace usage of tostring() with tobytes() (dongcarl) -- #13964 ci: Add appveyor ci (ken2812221) -- #13997 appveyor: fetch the latest port data (ken2812221) -- #13707 Add usage note to check-rpc-mappings.py (masonicboom) -- #14036 travis: Run unit tests --with-sanitizers=undefined (MarcoFalke) -- #13861 Add testing of `value_ret` for SelectCoinsBnB (Empact) -- #13863 travis: Move script sections to files in `.travis/` subject to shellcheck (scravy) -- #14081 travis: Fix missing differentiation between unit and functional tests (scravy) -- #14042 travis: Add cxxflags=-wno-psabi at arm job (ken2812221) -- #14051 Make `combine_logs.py` handle multi-line logs (jnewbery) -- #14093 Fix accidental trunction from int to bool (practicalswift) -- #14108 Add missing locking annotations and locks (`g_cs_orphans`) (practicalswift) -- #14088 Don't assert(…) with side effects (practicalswift) -- #14086 appveyor: Use clcache to speed up build (ken2812221) -- #13954 Warn (don't fail!) on spelling errors. Fix typos reported by codespell (practicalswift) -- #12775 Integration of property based testing into Bitcoin Core (Christewart) -- #14119 Read reject reasons from debug log, not P2P messages (MarcoFalke) -- #14189 Fix silent merge conflict in `wallet_importmulti` (MarcoFalke) -- #13419 Speed up `knapsack_solver_test` by not recreating wallet 100 times (lucash-dev) -- #14199 Remove redundant BIP174 test from `rpc_psbt.json` (araspitzu) -- #14179 Fixups to "Run all tests even if wallet is not compiled" (MarcoFalke) -- #14225 Reorder tests and move most of extended tests up to normal tests (ken2812221) -- #14236 `generate` --> `generatetoaddress` change to allow tests run without wallet (sanket1729) -- #14287 Use MakeUnique to construct objects owned by `unique_ptrs` (practicalswift) -- #14007 Run functional test on Windows and enable it on Appveyor (ken2812221) -- #14275 Write the notification message to different files to avoid race condition in `feature_notifications.py` (ken2812221) -- #14306 appveyor: Move AppVeyor YAML to dot-file-style YAML (MitchellCash) -- #14305 Enforce critical class instance attributes in functional tests, fix segwit test specificity (JustinTArthur) -- #12246 Bugfix: Only run bitcoin-tx tests when bitcoin-tx is enabled (luke-jr) -- #14316 Exclude all tests with difference parameters in `--exclude` list (ken2812221) -- #14381 Add missing call to `skip_if_no_cli()` (practicalswift) -- #14389 travis: Set codespell version to avoid breakage (MarcoFalke) -- #14398 Don't access out of bounds array index: array[sizeof(array)] (Empact) -- #14419 Remove `rpc_zmq.py` (jnewbery) -- #14241 appveyor: Script improvement (ken2812221) -- #14413 Allow closed RPC handler in `assert_start_raises_init_error` (ken2812221) -- #14324 Run more tests with wallet disabled (MarcoFalke) -- #13649 Allow arguments to be forwarded to flake8 in lint-python.sh (jamesob) -- #14465 Stop node before removing the notification file (ken2812221) -- #14460 Improve 'CAmount' tests (hebasto) -- #14456 forward timeouts properly in `send_blocks_and_test` (jamesob) -- #14527 Revert "Make qt wallet test compatible with qt4" (MarcoFalke) -- #14504 Show the progress of functional tests (isghe) -- #14559 appveyor: Enable multiwallet tests (ken2812221) -- #13515 travis: Enable qt for all jobs (ken2812221) -- #14571 Test that nodes respond to `getdata` with `notfound` (MarcoFalke) -- #14569 Print dots by default in functional tests (ken2812221) -- #14631 Move deterministic address import to `setup_nodes` (jnewbery) -- #14630 test: Remove travis specific code (MarcoFalke) -- #14528 travis: Compile once on xenial (MarcoFalke) -- #14092 Dry run `bench_bitcoin` as part `make check` to allow for quick identification of assertion/sanitizer failures in benchmarking code (practicalswift) -- #14664 `example_test.py`: fixup coinbase height argument, derive number clearly (instagibbs) -- #14522 Add invalid P2P message tests (jamesob) -- #14619 Fix value display name in `test_runner` help text (merland) -- #14672 Send fewer spam messages in `p2p_invalid_messages` (jamesob) -- #14673 travis: Fail the ubsan travis build in case of newly introduced ubsan errors (practicalswift) -- #14665 appveyor: Script improvement part II (ken2812221) -- #14365 Add Python dead code linter (vulture) to Travis (practicalswift) -- #14693 `test_node`: `get_mem_rss` fixups (MarcoFalke) -- #14714 util.h: explicitly include required QString header (1Il1) -- #14705 travis: Avoid timeout on verify-commits check (MarcoFalke) -- #14770 travis: Do not specify sudo in `.travis` (scravy) -- #14719 Check specific reject reasons in `feature_block` (MarcoFalke) -- #14771 Add `BOOST_REQUIRE` to getters returning optional (MarcoFalke) -- #14777 Add regtest for JSON-RPC batch calls (domob1812) -- #14764 travis: Run thread sanitizer on unit tests (MarcoFalke) -- #14400 Add Benchmark to test input de-duplication worst case (JeremyRubin) -- #14812 Fix `p2p_invalid_messages` on macOS (jamesob) -- #14813 Add `wallet_encryption` error tests (MarcoFalke) -- #14820 Fix `descriptor_tests` not checking ToString output of public descriptors (ryanofsky) -- #14794 Add AddressSanitizer (ASan) Travis build (practicalswift) -- #14819 Bugfix: `test/functional/mempool_accept`: Ensure oversize transaction is actually oversize (luke-jr) -- #14822 bench: Destroy wallet txs instead of leaking their memory (MarcoFalke) -- #14683 Better `combine_logs.py` behavior (jamesob) -- #14231 travis: Save cache even when build or test fail (ken2812221) -- #14816 Add CScriptNum decode python implementation in functional suite (instagibbs) -- #14861 Modify `rpc_bind` to conform to #14532 behaviour (dongcarl) -- #14864 Run scripted-diff in subshell (dongcarl) -- #14795 Allow `test_runner` command line to receive parameters for each test (marcoagner) -- #14788 Possible fix the permission error when the tests open the cookie file (ken2812221) -- #14857 `wallet_keypool_topup.py`: Test for all keypool address types (instagibbs) -- #14886 Refactor importmulti tests (jnewbery) -- #14908 Removed implicit CTransaction constructor calls from tests and benchmarks (lucash-dev) -- #14903 Handle ImportError explicitly, improve comparisons against None (daniel-s-ingram) -- #14884 travis: Enforce python 3.4 support through linter (Sjors) -- #14940 Add test for truncated pushdata script (MarcoFalke) -- #14926 consensus: Check that final transactions are valid (MarcoFalke) -- #14937 travis: Fix travis would always be green even if it fail (ken2812221) -- #14953 Make `g_insecure_rand_ctx` `thread_local` (MarcoFalke) -- #14931 mempool: Verify prioritization is dumped correctly (MarcoFalke) -- #14935 Test for expected return values when calling functions returning a success code (practicalswift) -- #14969 Fix `cuckoocache_tests` TSAN failure introduced in 14935 (practicalswift) -- #14964 Fix race in `mempool_accept` (MarcoFalke) -- #14829 travis: Enable functional tests in the threadsanitizer (tsan) build job (practicalswift) -- #14985 Remove `thread_local` from `test_bitcoin` (MarcoFalke) -- #15005 Bump timeout to run tests in travis thread sanitizer (MarcoFalke) -- #15013 Avoid race in `p2p_timeouts` (MarcoFalke) -- #14960 lint/format-strings: Correctly exclude escaped percent symbols (luke-jr) -- #14930 pruning: Check that verifychain can be called when pruned (MarcoFalke) -- #15022 Upgrade Travis OS to Xenial (gkrizek) -- #14738 Fix running `wallet_listtransactions.py` individually through `test_runner.py` (kristapsk) -- #15026 Rename `rpc_timewait` to `rpc_timeout` (MarcoFalke) -- #15069 Fix `rpc_net.py` `pong` race condition (Empact) -- #14790 Allow running `rpc_bind.py` --nonloopback test without IPv6 (kristapsk) -- #14457 add invalid tx templates for use in functional tests (jamesob) -- #14855 Correct ineffectual WithOrVersion from `transactions_tests` (Empact) -- #15099 Use `std::vector` API for construction of test data (domob1812) -- #15102 Run `invalid_txs.InputMissing` test in `feature_block` (MarcoFalke) -- #15059 Add basic test for BIP34 (MarcoFalke) -- #15108 Tidy up `wallet_importmulti.py` (amitiuttarwar) -- #15164 Ignore shellcheck warning SC2236 (promag) -- #15170 refactor/lint: Add ignored shellcheck suggestions to an array (koalaman) -- #14958 Remove race between connecting and shutdown on separate connections (promag) -- #15166 Pin shellcheck version (practicalswift) -- #15196 Update all `subprocess.check_output` functions to be Python 3.4 compatible (gkrizek) -- #15043 Build fuzz targets into seperate executables (MarcoFalke) -- #15276 travis: Compile once on trusty (MarcoFalke) -- #15246 Add tests for invalid message headers (MarcoFalke) -- #15301 When testing with --usecli, unify RPC arg to cli arg conversion and handle dicts and lists (achow101) -- #15247 Use wallet to retrieve raw transactions (MarcoFalke) -- #15303 travis: Remove unused `functional_tests_config` (MarcoFalke) -- #15330 Fix race in `p2p_invalid_messages` (MarcoFalke) -- #15324 Make bloom tests deterministic (MarcoFalke) -- #15328 travis: Revert "run extended tests once daily" (MarcoFalke) -- #15327 Make test `updatecoins_simulation_test` deterministic (practicalswift) -- #14519 add utility to easily profile node performance with perf (jamesob) -- #15349 travis: Only exit early if compilation took longer than 30 min (MarcoFalke) -- #15350 Drop RPC connection if --usecli (promag) -- #15370 test: Remove unused --force option (MarcoFalke) -- #14543 minor `p2p_sendheaders` fix of height in coinbase (instagibbs) -- #13787 Test for Windows encoding issue (ken2812221) -- #15378 Added missing tests for RPC wallet errors (benthecarman) -- #15238 remove some magic mining constants in functional tests (instagibbs) -- #15411 travis: Combine --disable-bip70 into existing job (MarcoFalke) -- #15295 fuzz: Add `test/fuzz/test_runner.py` and run it in travis (MarcoFalke) -- #15413 Add missing `cs_main` locks required when accessing pcoinsdbview, pcoinsTip or pblocktree (practicalswift) -- #15399 fuzz: Script validation flags (MarcoFalke) -- #15410 txindex: interrupt threadGroup before calling destructor (MarcoFalke) -- #15397 Remove manual byte editing in `wallet_tx_clone` func test (instagibbs) -- #15415 functional: allow custom cwd, use tmpdir as default (Sjors) -- #15404 Remove `-txindex` to start nodes (amitiuttarwar) -- #15439 remove `byte.hex()` to keep compatibility (AkioNak) -- #15419 Always refresh cache to be out of ibd (MarcoFalke) -- #15507 Bump timeout on tests that timeout on windows (MarcoFalke) -- #15506 appveyor: fix cache issue and reduce dependencies build time (ken2812221) -- #15485 add `rpc_misc.py`, mv test getmemoryinfo, add test mallocinfo (adamjonas) -- #15321 Add `cs_main` lock annotations for mapBlockIndex (MarcoFalke) -- #14128 lint: Make sure we read the command line inputs using UTF-8 decoding in python (ken2812221) -- #14115 lint: Make all linters work under the default macos dev environment (build-osx.md) (practicalswift) -- #15219 lint: Enable python linters via an array (Empact) - -### Platform support -- #13866 utils: Use `_wfopen` and `_wfreopen` on windows (ken2812221) -- #13886 utils: Run commands using UTF-8 string on windows (ken2812221) -- #14192 utils: Convert `fs::filesystem_error` messages from local multibyte to UTF-8 on windows (ken2812221) -- #13877 utils: Make fs::path::string() always return UTF-8 string on windows (ken2812221) -- #13883 utils: Convert windows args to UTF-8 string (ken2812221) -- #13878 utils: Add fstream wrapper to allow to pass unicode filename on windows (ken2812221) -- #14426 utils: Fix broken windows filelock (ken2812221) -- #14686 Fix windows build error if `--disable-bip70` (ken2812221) -- #14922 windows: Set `_WIN32_WINNT` to 0x0601 (Windows 7) (ken2812221) -- #13888 Call unicode API on Windows (ken2812221) -- #15468 Use `fsbridge::ifstream` to fix Windows path issue (ken2812221) -- #13734 Drop `boost::scoped_array` and use `wchar_t` API explicitly on Windows (ken2812221) -- #13884 Enable bdb unicode support for Windows (ken2812221) - -### Miscellaneous -- #13935 contrib: Adjust output to current test format (AkioNak) -- #14097 validation: Log FormatStateMessage on ConnectBlock error in ConnectTip (MarcoFalke) -- #13724 contrib: Support ARM and RISC-V symbol check (ken2812221) -- #13159 Don't close old debug log file handle prematurely when trying to re-open (on SIGHUP) (practicalswift) -- #14186 bitcoin-cli: don't translate command line options (HashUnlimited) -- #14057 logging: Only log `using config file path_to_bitcoin.conf` message on startup if conf file exists (leishman) -- #14164 Update univalue subtree (MarcoFalke) -- #14272 init: Remove deprecated args from hidden args (MarcoFalke) -- #14494 Error if # is used in rpcpassword in conf (MeshCollider) -- #14742 Properly generate salt in rpcauth.py (dongcarl) -- #14708 Warn unrecognised sections in the config file (AkioNak) -- #14756 Improve rpcauth.py by using argparse and getpass modules (promag) -- #14785 scripts: Fix detection of copyright holders (cornelius) -- #14831 scripts: Use `#!/usr/bin/env bash` instead of `#!/bin/bash` (vim88) -- #14869 Scripts: Add trusted key for samuel dobson (laanwj) -- #14809 Tools: improve verify-commits.py script (jlopp) -- #14624 Some simple improvements to the RNG code (sipa) -- #14947 scripts: Remove python 2 import workarounds (practicalswift) -- #15087 Error if rpcpassword contains hash in conf sections (MeshCollider) -- #14433 Add checksum in gitian build scripts for ossl (TheCharlatan) -- #15165 contrib: Allow use of github api authentication in github-merge (laanwj) -- #14409 utils and libraries: Make 'blocksdir' always net specific (hebasto) -- #14839 threads: Fix unitialized members in `sched_param` (fanquake) -- #14955 Switch all RNG code to the built-in PRNG (sipa) -- #15258 Scripts and tools: Fix `devtools/copyright_header.py` to always honor exclusions (Empact) -- #12255 Update bitcoin.service to conform to init.md (dongcarl) -- #15266 memory: Construct globals on first use (MarcoFalke) -- #15347 Fix build after pr 15266 merged (hebasto) -- #15351 Update linearize-hashes.py (OverlordQ) -- #15358 util: Add setuphelpoptions() (MarcoFalke) -- #15216 Scripts and tools: Replace script name with a special parameter (hebasto) -- #15250 Use RdSeed when available, and reduce RdRand load (sipa) -- #15278 Improve PID file error handling (hebasto) -- #15270 Pull leveldb subtree (MarcoFalke) -- #15456 Enable PID file creation on WIN (riordant) -- #12783 macOS: disable AppNap during sync (krab) -- #13910 Log progress while verifying blocks at level 4 (domob1812) -- #15124 Fail AppInitMain if either disk space check fails (Empact) -- #15117 Fix invalid memory write in case of failing mmap(…) in PosixLockedPageAllocator::AllocateLocked (practicalswift) -- #14357 streams: Fix broken `streams_vector_reader` test. Remove unused `seek(size_t)` -- #11640 Make `LOCK`, `LOCK2`, `TRY_LOCK` work with CWaitableCriticalSection (ryanofsky) -- #14074 Use `std::unordered_set` instead of `set` in blockfilter interface (jimpo) -- #15275 Add gitian PGP key for hebasto (hebasto) - -### Documentation -- #14120 Notes about control port and read access to cookie (JBaczuk) -- #14135 correct GetDifficulty doc after #13288 (fanquake) -- #14013 Add new regtest ports in man following #10825 ports reattributions (ariard) -- #14149 Remove misleading checkpoints comment in CMainParams (MarcoFalke) -- #14153 Add disable-wallet section to OSX build instructions, update line in Unix instructions (bitstein) -- #13662 Explain when reindex-chainstate can be used instead of reindex (Sjors) -- #14207 `-help-debug` implies `-help` (laanwj) -- #14213 Fix reference to lint-locale-dependence.sh (hebasto) -- #14206 Document `-checklevel` levels (laanwj) -- #14217 Add GitHub PR template (MarcoFalke) -- #14331 doxygen: Fix member comments (MarcoFalke) -- #14264 Split depends installation instructions per arch (MarcoFalke) -- #14393 Add missing apt-get install (poiuty) -- #14428 Fix macOS files description in qt/README.md (hebasto) -- #14390 release process: RPC documentation (karel-3d) -- #14472 getblocktemplate: use SegWit in example (Sjors) -- #14497 Add doc/bitcoin-conf.md (hebasto) -- #14526 Document lint tests (fanquake) -- #14511 Remove explicit storage requirement from README.md (merland) -- #14600 Clarify commit message guidelines (merland) -- #14617 FreeBSD: Document Python 3 requirement for 'gmake check' (murrayn) -- #14592 Add external interface consistency guarantees (MarcoFalke) -- #14625 Make clear function argument case in dev notes (dongcarl) -- #14515 Update OpenBSD build guide for 6.4 (fanquake) -- #14436 Add comment explaining recentRejects-DoS behavior (jamesob) -- #14684 conf: Remove deprecated options from docs, Other cleanup (MarcoFalke) -- #14731 Improve scripted-diff developer docs (dongcarl) -- #14778 A few minor formatting fixes and clarifications to descriptors.md (jnewbery) -- #14448 Clarify rpcwallet flag url change (JBaczuk) -- #14808 Clarify RPC rawtransaction documentation (jlopp) -- #14804 Less confusing documentation for `torpassword` (fanquake) -- #14848 Fix broken Gmane URL in security-check.py (cyounkins-bot) -- #14882 developer-notes.md: Point out that UniValue deviates from upstream (Sjors) -- #14909 Update minimum required Qt (fanquake) -- #14914 Add nice table to files.md (emilengler) -- #14741 Indicate `-rpcauth` option password hashing alg (dongcarl) -- #14950 Add NSIS setup/install steps to windows docs (fanquake) -- #13930 Better explain GetAncestor check for `m_failed_blocks` in AcceptBlockHeader (Sjors) -- #14973 Improve Windows native build instructions (murrayn) -- #15073 Botbot.me (IRC logs) not available anymore (anduck) -- #15038 Get more info about GUI-related issue on Linux (hebasto) -- #14832 Add more Doxygen information to Developer Notes (ch4ot1c) -- #15128 Fix download link in doc/README.md (merland) -- #15127 Clarifying testing instructions (benthecarman) -- #15132 Add FreeBSD build notes link to doc/README.md (fanquake) -- #15173 Explain what .python-version does (Sjors) -- #15223 Add information about security to the JSON-RPC doc (harding) -- #15249 Update python docs to reflect that wildcard imports are disallowed (Empact) -- #15176 Get rid of badly named `doc/README_osx.md` (merland) -- #15272 Correct logging return type and RPC example (fanquake) -- #15244 Gdb attaching to process during tests has non-sudo solution (instagibbs) -- #15332 Small updates to `getrawtransaction` description (amitiuttarwar) -- #15354 Add missing `bitcoin-wallet` tool manpages (MarcoFalke) -- #15343 netaddress: Make IPv4 loopback comment more descriptive (dongcarl) -- #15353 Minor textual improvements in `translation_strings_policy.md` (merland) -- #15426 importmulti: add missing description of keypool option (harding) -- #15425 Add missing newline to listunspent help for witnessScript (harding) -- #15348 Add separate productivity notes document (dongcarl) -- #15416 Update FreeBSD build guide for 12.0 (fanquake) -- #15222 Add info about factors that affect dependency list (merland) -- #13676 Explain that mempool memory is added to `-dbcache` (Sjors) -- #15273 Slight tweak to the verify-commits script directions (droark) -- #15477 Remove misleading hint in getrawtransaction (MarcoFalke) -- #15489 Update release process for snap package (MarcoFalke) -- #15524 doc: Remove berkeleydb PPA from linux build instructions (MarcoFalke) -- #15559 Correct `analyzepsbt` rpc doc (fanquake) -- #15194 Add comment describing `fDisconnect` behavior (dongcarl) -- #15754 getrpcinfo docs (benthecarman) -- #15763 Update bips.md for 0.18.0 (sipa) -- #15757 List new RPCs in psbt.md and descriptors.md (sipa) -- #15765 correct bitcoinconsensus_version in shared-libraries.md (fanquake) -- #15792 describe onlynet option in doc/tor.md (jonatack) -- #15802 mention creating application support bitcoin folder on OSX (JimmyMow) -- #15799 Clarify RPC versioning (MarcoFalke) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- 1Il1 -- 251 -- Aaron Clauson -- Adam Jonas -- Akio Nakamura -- Alexander Leishman -- Alexey Ivanov -- Alexey Poghilenkov -- Amir Abrams -- Amiti Uttarwar -- Andrew Chow -- andrewtoth -- Anthony Towns -- Antoine Le Calvez -- Antoine Riard -- Antti Majakivi -- araspitzu -- Arvid Norberg -- Ben Carman -- Ben Woosley -- benthecarman -- bitcoinhodler -- Carl Dong -- Chakib Benziane -- Chris Moore -- Chris Stewart -- chris-belcher -- Chun Kuan Lee -- Cornelius Schumacher -- Cory Fields -- Craig Younkins -- Cristian Mircea Messel -- Damian Mee -- Daniel Ingram -- Daniel Kraft -- David A. Harding -- DesWurstes -- dexX7 -- Dimitri Deijs -- Dimitris Apostolou -- Douglas Roark -- DrahtBot -- Emanuele Cisbani -- Emil Engler -- Eric Scrivner -- fridokus -- Gal Buki -- Gleb Naumenko -- Glenn Willen -- Graham Krizek -- Gregory Maxwell -- Gregory Sanders -- gustavonalle -- Harry Moreno -- Hennadii Stepanov -- Isidoro Ghezzi -- Jack Mallers -- James Hilliard -- James O'Beirne -- Jameson Lopp -- Jeremy Rubin -- Jesse Cohen -- Jim Posen -- John Newbery -- Jon Layton -- Jonas Schnelli -- João Barbosa -- Jordan Baczuk -- Jorge Timón -- Julian Fleischer -- Justin Turner Arthur -- Karel Bílek -- Karl-Johan Alm -- Kaz Wesley -- ken2812221 -- Kostiantyn Stepaniuk -- Kristaps Kaupe -- Lawrence Nahum -- Lenny Maiorani -- liuyujun -- lucash-dev -- luciana -- Luke Dashjr -- marcaiaf -- marcoagner -- MarcoFalke -- Martin Erlandsson -- Marty Jones -- Mason Simon -- Michael Ford -- Michael Goldstein -- Michael Polzer -- Mitchell Cash -- mruddy -- Murray Nesbitt -- OverlordQ -- Patrick Strateman -- Pierre Rochard -- Pieter Wuille -- poiuty -- practicalswift -- priscoan -- qubenix -- riordant -- Russell Yanofsky -- Samuel Dobson -- sanket1729 -- Sjors Provoost -- Stephan Oeste -- Steven Roose -- Suhas Daftuar -- TheCharlatan -- Tim Ruffing -- Vidar Holen -- vim88 -- Walter -- whythat -- Wladimir J. van der Laan -- Zain Iqbal Allarakhia - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.18.1.md b/doc/release-notes/release-notes-0.18.1.md deleted file mode 100644 index 483cc5075e..0000000000 --- a/doc/release-notes/release-notes-0.18.1.md +++ /dev/null @@ -1,136 +0,0 @@ -Bitcoin Core version 0.18.1 is now available from: - - - -This is a new minor version release, including new features, various bug -fixes and performance improvements, as well as updated translations. - -Please report bugs using the issue tracker at GitHub: - - - -To receive security and update notifications, please subscribe to: - - - -How to Upgrade -============== - -If you are running an older version, shut it down. Wait until it has -completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -`/Applications/Bitcoin-Qt` (on Mac) or `bitcoind`/`bitcoin-qt` (on -Linux). - -The first time you run version 0.15.0 or newer, your chainstate database -will be converted to a new format, which will take anywhere from a few -minutes to half an hour, depending on the speed of your machine. - -Note that the block database format also changed in version 0.8.0 and -there is no automatic upgrade code from before version 0.8 to version -0.15.0 or later. Upgrading directly from 0.7.x and earlier without -redownloading the blockchain is not supported. However, as usual, old -wallet versions are still supported. - -Compatibility -============== - -Bitcoin Core is supported and extensively tested on operating systems -using the Linux kernel, macOS 10.10+, and Windows 7 and newer. It is not -recommended to use Bitcoin Core on unsupported systems. - -Bitcoin Core should also work on most other Unix-like systems but is not -as frequently tested on them. - -From 0.17.0 onwards, macOS <10.10 is no longer supported. 0.17.0 is -built using Qt 5.9.x, which doesn't support versions of macOS older than -10.10. Additionally, Bitcoin Core does not yet change appearance when -macOS "dark mode" is activated. - -Known issues -============ - -Wallet GUI ----------- - -For advanced users who have both (1) enabled coin control features, and -(2) are using multiple wallets loaded at the same time: The coin control -input selection dialog can erroneously retain wrong-wallet state when -switching wallets using the dropdown menu. For now, it is recommended -not to use coin control features with multiple wallets loaded. - -0.18.1 change log -================= - -### P2P protocol and network code -- #15990 Add tests and documentation for blocksonly (MarcoFalke) -- #16021 Avoid logging transaction decode errors to stderr (MarcoFalke) -- #16405 fix: tor: Call `event_base_loopbreak` from the event's callback (promag) -- #16412 Make poll in InterruptibleRecv only filter for POLLIN events (tecnovert) - -### Wallet -- #15913 Add -ignorepartialspends to list of ignored wallet options (luke-jr) - -### RPC and other APIs -- #15991 Bugfix: fix pruneblockchain returned prune height (jonasschnelli) -- #15899 Document iswitness flag and fix bug in converttopsbt (MarcoFalke) -- #16026 Ensure that uncompressed public keys in a multisig always returns a legacy address (achow101) -- #14039 Disallow extended encoding for non-witness transactions (sipa) -- #16210 add 2nd arg to signrawtransactionwithkey examples (dooglus) -- #16250 signrawtransactionwithkey: report error when missing redeemScript/witnessScript (ajtowns) - -### GUI -- #16044 fix the bug of OPEN CONFIGURATION FILE on Mac (shannon1916) -- #15957 Show "No wallets available" in open menu instead of nothing (meshcollider) -- #16118 Enable open wallet menu on setWalletController (promag) -- #16135 Set progressDialog to nullptr (promag) -- #16231 Fix open wallet menu initialization order (promag) -- #16254 Set `AA_EnableHighDpiScaling` attribute early (hebasto) -- #16122 Enable console line edit on setClientModel (promag) -- #16348 Assert QMetaObject::invokeMethod result (promag) - -### Build system -- #15985 Add test for GCC bug 90348 (sipa) -- #15947 Install bitcoin-wallet manpage (domob1812) -- #15983 build with -fstack-reuse=none (MarcoFalke) - -### Tests and QA -- #15826 Pure python EC (sipa) -- #15893 Add test for superfluous witness record in deserialization (instagibbs) -- #14818 Bugfix: test/functional/rpc_psbt: Remove check for specific error message that depends on uncertain assumptions (luke-jr) -- #15831 Add test that addmultisigaddress fails for watchonly addresses (MarcoFalke) - -### Documentation -- #15890 Remove text about txes always relayed from -whitelist (harding) - -### Miscellaneous -- #16095 Catch by reference not value in wallettool (kristapsk) -- #16205 Replace fprintf with tfm::format (MarcoFalke) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Andrew Chow -- Anthony Towns -- Chris Moore -- Daniel Kraft -- David A. Harding -- fanquake -- Gregory Sanders -- Hennadii Stepanov -- John Newbery -- Jonas Schnelli -- João Barbosa -- Kristaps Kaupe -- Luke Dashjr -- MarcoFalke -- Michele Federici -- Pieter Wuille -- Samuel Dobson -- shannon1916 -- tecnovert -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.3.12.md b/doc/release-notes/release-notes-0.3.12.md deleted file mode 100644 index 38715bc75f..0000000000 --- a/doc/release-notes/release-notes-0.3.12.md +++ /dev/null @@ -1,13 +0,0 @@ -Version 0.3.12 is now available. - -Features: -* json-rpc errors return a more standard error object. (thanks to Gavin Andresen) -* json-rpc command line returns exit codes. -* json-rpc "backupwallet" command. -* Recovers and continues if an exception is caused by a message you received. Other nodes shouldn't be able to cause an exception, and it hasn't happened before, but if a way is found to cause an exception, this would keep it from being used to stop network nodes. - -If you have json-rpc code that checks the contents of the error string, you need to change it to expect error objects of the form {"code":,"message":}, which is the standard. See this thread: -http://www.bitcoin.org/smf/index.php?topic=969.0 - -Download: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.12/ diff --git a/doc/release-notes/release-notes-0.3.13.md b/doc/release-notes/release-notes-0.3.13.md deleted file mode 100644 index 2b95ff233d..0000000000 --- a/doc/release-notes/release-notes-0.3.13.md +++ /dev/null @@ -1,26 +0,0 @@ -Version 0.3.13 is now available. You should upgrade to prevent potential problems with 0/unconfirmed transactions. Note: 0.3.13 prevents problems if you haven't already spent a 0/unconfirmed transaction, but if that already happened, you need 0.3.13.2. - -Changes: -* Don't count or spend payments until they have 1 confirmation. -* Internal version number from 312 to 31300. -* Only accept transactions sent by IP address if -allowreceivebyip is specified. -* Dropped DB_PRIVATE Berkeley DB flag. -* Fix problem sending the last cent with sub-cent fractional change. -* Auto-detect whether to use 128-bit 4-way SSE2 on Linux. -Gavin Andresen: -* Option -rpcallowip= to accept json-rpc connections from another machine. -* Clean shutdown on SIGTERM on Linux. - -Download: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.13/ - -(Thanks Laszlo for the Mac OSX build!) - -Note: -The SSE2 auto-detect in the Linux 64-bit version doesn't work with AMD in 64-bit mode. Please try this instead and let me know if it gets it right: -http://www.bitcoin.org/download/bitcoin-0.3.13.1-specialbuild-linux64.tar.gz - -You can still control the SSE2 use manually with -4way and -4way=0. - -Version 0.3.13.2 (SVN rev 161) has improvements for the case where you already had 0/unconfirmed transactions that you might have already spent. Here's a Windows build of it: -http://www.bitcoin.org/download/bitcoin-0.3.13.2-win32-setup.exe diff --git a/doc/release-notes/release-notes-0.3.14.md b/doc/release-notes/release-notes-0.3.14.md deleted file mode 100644 index e73052ed9b..0000000000 --- a/doc/release-notes/release-notes-0.3.14.md +++ /dev/null @@ -1,11 +0,0 @@ -Version 0.3.14 is now available -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.14/ - -Changes: -* Key pool feature for safer wallet backup -Gavin Andresen: -* TEST network mode with switch -testnet -* Option to use SSL for JSON-RPC connections on unix/osx -* validateaddress RPC command -eurekafag: -* Russian translation diff --git a/doc/release-notes/release-notes-0.3.15.md b/doc/release-notes/release-notes-0.3.15.md deleted file mode 100644 index b98052ef59..0000000000 --- a/doc/release-notes/release-notes-0.3.15.md +++ /dev/null @@ -1,6 +0,0 @@ -* paytxfee switch is now per KB, so it adds the correct fee for large transactions -* sending avoids using coins with less than 6 confirmations if it can -* BitcoinMiner processes transactions in priority order based on age of dependencies -* make sure generation doesn't start before block 74000 downloaded -* bugfixes by Dean Gores -* testnet, keypoololdest and paytxfee added to getinfo diff --git a/doc/release-notes/release-notes-0.3.16.md b/doc/release-notes/release-notes-0.3.16.md deleted file mode 100644 index 743f84f30e..0000000000 --- a/doc/release-notes/release-notes-0.3.16.md +++ /dev/null @@ -1 +0,0 @@ -Never released. diff --git a/doc/release-notes/release-notes-0.3.17.md b/doc/release-notes/release-notes-0.3.17.md deleted file mode 100644 index d3604b8f88..0000000000 --- a/doc/release-notes/release-notes-0.3.17.md +++ /dev/null @@ -1,12 +0,0 @@ -Version 0.3.17 is now available. - -Changes: -* new getwork, thanks m0mchil -* added transaction fee setting in UI options menu -* free transaction limits -* sendtoaddress returns transaction id instead of "sent" -* getaccountaddress - -The UI transaction fee setting was easy since it was still there from 0.1.5 and all I had to do was re-enable it. - -The accounts-based commands: move, sendfrom and getbalance will be in the next release. We still have some more changes to make first. diff --git a/doc/release-notes/release-notes-0.3.18.md b/doc/release-notes/release-notes-0.3.18.md deleted file mode 100644 index ab1c2e0692..0000000000 --- a/doc/release-notes/release-notes-0.3.18.md +++ /dev/null @@ -1,11 +0,0 @@ -Changes: -* Fixed a wallet.dat compatibility problem if you downgraded from 0.3.17 and then upgraded again -* IsStandard() check to only include known transaction types in blocks -* Jgarzik's optimisation to speed up the initial block download a little - -The main addition in this release is the Accounts-Based JSON-RPC commands that Gavin's been working on (more details at http://www.bitcoin.org/smf/index.php?topic=1886.0). -* getaccountaddress -* sendfrom -* move -* getbalance -* listtransactions diff --git a/doc/release-notes/release-notes-0.3.19.md b/doc/release-notes/release-notes-0.3.19.md deleted file mode 100644 index fcd867561d..0000000000 --- a/doc/release-notes/release-notes-0.3.19.md +++ /dev/null @@ -1,9 +0,0 @@ -There's more work to do on DoS, but I'm doing a quick build of what I have so far in case it's needed, before venturing into more complex ideas. The build for this is version 0.3.19. - -- Added some DoS controls -As Gavin and I have said clearly before, the software is not at all resistant to DoS attack. This is one improvement, but there are still more ways to attack than I can count. - -I'm leaving the -limitfreerelay part as a switch for now and it's there if you need it. - -- Removed "safe mode" alerts -"safe mode" alerts was a temporary measure after the 0.3.9 overflow bug. We can say all we want that users can just run with "-disablesafemode", but it's better just not to have it for the sake of appearances. It was never intended as a long term feature. Safe mode can still be triggered by seeing a longer (greater total PoW) invalid block chain. diff --git a/doc/release-notes/release-notes-0.3.20.1.md b/doc/release-notes/release-notes-0.3.20.1.md deleted file mode 100644 index 6c5682ea4e..0000000000 --- a/doc/release-notes/release-notes-0.3.20.1.md +++ /dev/null @@ -1 +0,0 @@ -Never released or release notes were lost. diff --git a/doc/release-notes/release-notes-0.3.20.2.md b/doc/release-notes/release-notes-0.3.20.2.md deleted file mode 100644 index 09ecb736bd..0000000000 --- a/doc/release-notes/release-notes-0.3.20.2.md +++ /dev/null @@ -1,17 +0,0 @@ -The maxsendbuffer bug (0.3.20.1 clients not being able to download the block chain from other 0.3.20.1 clients) was only going to get -worse as people upgraded, so I cherry-picked the bug fix and created a minor release yesterday. - -The Amazon Machine Images I used to do the builds are available: - - ami-38a05251 Bitcoin-v0.3.20.2 Mingw (Windows; Administrator password 'bitcoin development') - ami-30a05259 Bitcoin_0.3.20.2 Linux32 - ami-8abc4ee3 Bitcoin_0.3.20.2 Linux64 - -(mac build will be done soon) - -If you have already downloaded version 0.3.20.1, please either add this to your bitcoin.conf file: - - maxsendbuffer=10000 - maxreceivebuffer=10000 - -... or download the new version. diff --git a/doc/release-notes/release-notes-0.3.20.md b/doc/release-notes/release-notes-0.3.20.md deleted file mode 100644 index 9ae21802ee..0000000000 --- a/doc/release-notes/release-notes-0.3.20.md +++ /dev/null @@ -1,22 +0,0 @@ -Please checkout the git integration branch from: - -https://github.com/bitcoin/bitcoin - -... and help test. The new features that need testing are: - -* -nolisten : https://github.com/bitcoin/bitcoin/pull/11 -* -rescan : scan block chain for missing wallet transactions -* -printtoconsole : https://github.com/bitcoin/bitcoin/pull/37 -* RPC gettransaction details : https://github.com/bitcoin/bitcoin/pull/24 -* listtransactions new features : https://github.com/bitcoin/bitcoin/pull/10 - -Bug fixes that also need testing: - -* -maxconnections= : https://github.com/bitcoin/bitcoin/pull/42 -* RPC listaccounts minconf : https://github.com/bitcoin/bitcoin/pull/27 -* RPC move, add time to output : https://github.com/bitcoin/bitcoin/pull/21 -* ...and several improvements to --help output. - -This needs more testing on Windows! Please drop me a quick private message, email, or IRC message if you are able to do some testing. If you find bugs, please open an issue at: - -https://github.com/bitcoin/bitcoin/issues diff --git a/doc/release-notes/release-notes-0.3.21.md b/doc/release-notes/release-notes-0.3.21.md deleted file mode 100644 index f3b6bc4264..0000000000 --- a/doc/release-notes/release-notes-0.3.21.md +++ /dev/null @@ -1,20 +0,0 @@ -Binaries for Bitcoin version 0.3.21 are available at: - https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.21/ - -Changes and new features from the 0.3.20 release include: - -* Universal Plug and Play support. Enable automatic opening of a port for incoming connections by running bitcoin or bitcoind with the - -upnp=1 command line switch or using the Options dialog box. - -* Support for full-precision bitcoin amounts. You can now send, and bitcoin will display, bitcoin amounts smaller than 0.01. However, sending fewer than 0.01 bitcoins still requires a 0.01 bitcoin fee (so you can send 1.0001 bitcoins without a fee, but you will be asked to pay a fee if you try to send 0.0001). - -* A new method of finding bitcoin nodes to connect with, via DNS A records. Use the -dnsseed option to enable. - -For developers, changes to bitcoin's remote-procedure-call API: - -* New rpc command "sendmany" to send bitcoins to more than one address in a single transaction. - -* Several bug fixes, including a serious intermittent bug that would sometimes cause bitcoind to stop accepting rpc requests. - -* -logtimestamps option, to add a timestamp to each line in debug.log. - -* Immature blocks (newly generated, under 120 confirmations) are now shown in listtransactions. diff --git a/doc/release-notes/release-notes-0.3.22.md b/doc/release-notes/release-notes-0.3.22.md deleted file mode 100644 index 4c05e3e5e7..0000000000 --- a/doc/release-notes/release-notes-0.3.22.md +++ /dev/null @@ -1,16 +0,0 @@ -Download URL: https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.22/ - -This is largely a bugfix and TX fee schedule release. We also hope to make 0.3.23 a quick release, to fix problems that the network has seen due to explosive growth in the past week. - -Notable changes: -* Client will accept and relay TX's with 0.0005 BTC fee schedule (users still pay 0.01 BTC per kb, until next version) -* Non-standard transactions accepted on testnet -* Source code tree reorganized (prep for autotools build) -* Remove "Generate Coins" option from GUI, and remove 4way SSE miner. Internal reference CPU miner remains available, but users are directed to external miners for best hash production. -* IRC is overflowing. Client now bootstraps to channels #bitcoin00 - #bitcoin99 -* DNS names now may be used with -addnode, -connect (requires -dns to enable) - -RPC changes: -* 'listtransactions' adds 'from' param, for range queries -* 'move' may take account balances negative -* 'settxfee' added, to manually set TX fee diff --git a/doc/release-notes/release-notes-0.3.23.md b/doc/release-notes/release-notes-0.3.23.md deleted file mode 100644 index c1d520e492..0000000000 --- a/doc/release-notes/release-notes-0.3.23.md +++ /dev/null @@ -1,10 +0,0 @@ -Win32, Linux, MacOSX and source releases for bitcoin v0.3.23 have been uploaded to -https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.23/ - -This is another quick bugfix release, trying to deal with the influx of new bitcoin users. - -Main items of note: - -* P2P connect-to-node logic changed to reduce timeout a bit. The network saw a huge influx of new users, who do not permit incoming connections. This change is a short-term hack, to more quickly hunt for useful P2P connections. Better "leaf node" logic is in the works, but this should let us limp along until then. One may use -upnp to properly forward ports, and help the network. -* Transaction fee reduced to 0.0005 for new transactions -* Client will relay transactions with fees as low as 0.0001 BTC diff --git a/doc/release-notes/release-notes-0.3.24.md b/doc/release-notes/release-notes-0.3.24.md deleted file mode 100644 index d35ac66f2c..0000000000 --- a/doc/release-notes/release-notes-0.3.24.md +++ /dev/null @@ -1,20 +0,0 @@ -Bitcoin v0.3.24 is now available for download at -https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.24/ - -This is another bug fix release. We had hoped to have wallet encryption ready for release, but more urgent fixes for existing clients were needed -- most notably block download problems were getting severe. Wallet encryption is ready for testing at https://github.com/bitcoin/bitcoin/pull/352 for the git-savvy, and hopefully will follow shortly in the next release, v0.4. - -Notable fixes in v0.3.24, and the main reasons for this release: - -F1) Block downloads were failing or taking unreasonable amounts of time to complete, because the increased size of the block chain was bumping up against some earlier buffer-size DoS limits. - -F2) Fix crash caused by loss/lack of network connection. - -Notable changes in v0.3.24: - -C1) DNS seeding enabled by default. - -C2) UPNP enabled by default in the GUI client. The percentage of bitcoin clients that accept incoming connections is quite small, and that is a problem. This should help. bitcoind, and unofficial builds, are unchanged (though we encourage use of "-upnp" to help the network!) - -C3) Initial unit testing framework. Bitcoin sorely needs automated tests, and this is a beginning. Contributions welcome. - -C4) Internal wallet code cleanup. While invisible to an end user, this change provides the basis for v0.4's wallet encryption. diff --git a/doc/release-notes/release-notes-0.4.0.md b/doc/release-notes/release-notes-0.4.0.md deleted file mode 100644 index 145072a369..0000000000 --- a/doc/release-notes/release-notes-0.4.0.md +++ /dev/null @@ -1,70 +0,0 @@ -Bitcoin version 0.4.0 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.0/ - -The main feature in this release is wallet private key encryption; -you can set a passphrase that must be entered before sending coins. -See below for more information; if you decide to encrypt your wallet, -WRITE DOWN YOUR PASSPHRASE AND PUT IT IN A SECURE LOCATION. If you -forget or lose your wallet passphrase, you lose your bitcoins. -Previous versions of bitcoin are unable to read encrypted wallets, -and will crash on startup if the wallet is encrypted. - -Also note: bitcoin version 0.4 uses a newer version of Berkeley DB -(bdb version 4.8) than previous versions (bdb 4.7). If you upgrade -to version 0.4 and then revert back to an earlier version of bitcoin -the it may be unable to start because bdb 4.7 cannot read bdb 4.8 -"log" files. - - -Notable bug fixes from version 0.3.24: - -Fix several bitcoin-becomes-unresponsive bugs due to multithreading -deadlocks. - -Optimize database writes for large (lots of inputs) transactions -(fixes a potential denial-of-service attack) - - -Wallet Encryption - -Bitcoin supports native wallet encryption so that people who steal your -wallet file don't automatically get access to all of your Bitcoins. -In order to enable this feature, choose "Encrypt Wallet" from the -Options menu. You will be prompted to enter a passphrase, which -will be used as the key to encrypt your wallet and will be needed -every time you wish to send Bitcoins. If you lose this passphrase, -you will lose access to spend all of the bitcoins in your wallet, -no one, not even the Bitcoin developers can recover your Bitcoins. -This means you are responsible for your own security, store your -passphrase in a secure location and do not forget it. - -Remember that the encryption built into bitcoin only encrypts the -actual keys which are required to send your bitcoins, not the full -wallet. This means that someone who steals your wallet file will -be able to see all the addresses which belong to you, as well as the -relevant transactions, you are only protected from someone spending -your coins. - -It is recommended that you backup your wallet file before you -encrypt your wallet. To do this, close the Bitcoin client and -copy the wallet.dat file from ~/.bitcoin/ on Linux, /Users/(user -name)/Application Support/Bitcoin/ on Mac OSX, and %APPDATA%/Bitcoin/ -on Windows (that is /Users/(user name)/AppData/Roaming/Bitcoin on -Windows Vista and 7 and /Documents and Settings/(user name)/Application -Data/Bitcoin on Windows XP). Once you have copied that file to a -safe location, reopen the Bitcoin client and Encrypt your wallet. -If everything goes fine, delete the backup and enjoy your encrypted -wallet. Note that once you encrypt your wallet, you will never be -able to go back to a version of the Bitcoin client older than 0.4. - -Keep in mind that you are always responsible for your own security. -All it takes is a slightly more advanced wallet-stealing trojan which -installs a keylogger to steal your wallet passphrase as you enter it -in addition to your wallet file and you have lost all your Bitcoins. -Wallet encryption cannot keep you safe if you do not practice -good security, such as running up-to-date antivirus software, only -entering your wallet passphrase in the Bitcoin client and using the -same passphrase only as your wallet passphrase. - -See the doc/README file in the bitcoin source for technical details -of wallet encryption. diff --git a/doc/release-notes/release-notes-0.4.1.md b/doc/release-notes/release-notes-0.4.1.md deleted file mode 100644 index ac471a8d7f..0000000000 --- a/doc/release-notes/release-notes-0.4.1.md +++ /dev/null @@ -1,38 +0,0 @@ -Bitcoin version 0.4.1 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.1/ - -This is a bugfix only release based on 0.4.0. - -Please report bugs by replying to this forum thread. - -MAJOR BUG FIX (CVE-2011-4447) - -The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who -managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the -associated coins. - -If you have a previously encrypted wallet.dat, the first time you run wxbitcoin or bitcoind the wallet will be rewritten, Bitcoin will -shut down, and you will be prompted to restart it to run with the new, properly encrypted file. - -If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public -location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses. - -Wallets encrypted with this version of Bitcoin are written properly. - -Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new bitcoin address; to be certain that the -new private keys are properly backed up you should: - -1. Run Bitcoin and let it rewrite the wallet.dat file - -2. Run it again, then ask it for a new bitcoin address. -wxBitcoin: new address visible on main window -bitcoind: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. - -3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address. - -4. Shut down Bitcoin, then backup the wallet.dat file. -IMPORTANT: be sure to request a new bitcoin address before backing up, so that the 'keypool' is regenerated and backed up. - -"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins. - -Thanks to Alan Reiner (etotheipi) for finding and reporting this bug. diff --git a/doc/release-notes/release-notes-0.4.2.md b/doc/release-notes/release-notes-0.4.2.md deleted file mode 100644 index 6c5682ea4e..0000000000 --- a/doc/release-notes/release-notes-0.4.2.md +++ /dev/null @@ -1 +0,0 @@ -Never released or release notes were lost. diff --git a/doc/release-notes/release-notes-0.4.3.md b/doc/release-notes/release-notes-0.4.3.md deleted file mode 100644 index fea1ae75b5..0000000000 --- a/doc/release-notes/release-notes-0.4.3.md +++ /dev/null @@ -1,21 +0,0 @@ -bitcoind version 0.4.3 is now available for download at: -http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.3/ (until Gavin uploads to SourceForge) - -This is a bugfix-only release based on 0.4.0. - -Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. - -Please report bugs for the daemon only using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.3#.tar.gz - -BUG FIXES - -Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download). -Fixed some address-handling deadlocks (client freezes). -No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak). -Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed). -Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr). - diff --git a/doc/release-notes/release-notes-0.4.4.md b/doc/release-notes/release-notes-0.4.4.md deleted file mode 100644 index f435ba7160..0000000000 --- a/doc/release-notes/release-notes-0.4.4.md +++ /dev/null @@ -1,30 +0,0 @@ -Bitcoin version 0.4.4 is now available for download at: -http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.4/ - -This is a bugfix-only release based on 0.4.0. - -Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. - -Please report bugs for the daemon only using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.4#.tar.gz - -BUG FIXES - -Limit the number of orphan transactions stored in memory, to prevent a potential denial-of-service attack by flooding orphan transactions. Also never store invalid transactions at all. -Fix possible buffer overflow on systems with very long application data paths. This is not exploitable. -Resolved multiple bugs preventing long-term unlocking of encrypted wallets (issue #922). -Only send local IP in "version" messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable. -Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting. -Various memory leaks and potential null pointer deferences have been -fixed. -Several shutdown issues have been fixed. -Check that keys stored in the wallet are valid at startup, and if not, -report corruption. -Various build fixes. -If no password is specified to bitcoind, recommend a secure password. -Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0. -Add checkpoint at block 168,000. - diff --git a/doc/release-notes/release-notes-0.4.5.md b/doc/release-notes/release-notes-0.4.5.md deleted file mode 100644 index 6c5682ea4e..0000000000 --- a/doc/release-notes/release-notes-0.4.5.md +++ /dev/null @@ -1 +0,0 @@ -Never released or release notes were lost. diff --git a/doc/release-notes/release-notes-0.4.6.md b/doc/release-notes/release-notes-0.4.6.md deleted file mode 100644 index 07c5e4b694..0000000000 --- a/doc/release-notes/release-notes-0.4.6.md +++ /dev/null @@ -1,37 +0,0 @@ -bitcoind version 0.4.6 is now available for download at: -Windows: installer | zip (sig) -Source: tar.gz -bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. - -These are bugfix-only releases. - -Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. - -BUG FIXES - -Version 0.6.0 allowed importing invalid "private keys", which would be unspendable; 0.6.0.7 will now verify the private key is valid, and refuse to import an invalid one -Verify status of encrypt/decrypt calls to detect failed padding -Check blocks for duplicate transactions earlier. Fixes #1167 -Upgrade Windows builds to OpenSSL 1.0.1b -Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt) -JSON-RPC listtransactions's from/count handling is now fixed -Optimize and fix multithreaded access, when checking whether we already know about transactions -Fix potential networking deadlock -Proper support for Growl 1.3 notifications -Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7) -Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (Bitcoin-Qt) -Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected -Missing error condition checking added -Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt) -Increase time ago of last block for "up to date" status from 30 to 90 minutes -Show a message box when runaway exception happens (Bitcoin-Qt) -Use a messagebox to display the error when -server is provided without providing a rpc password -Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt) -Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt) -Removed "(no label)" from QR Code dialog titlebar if we have no label (0.6.0.7) -Removed an ugly line break in tooltip for mature transactions (0.6.0.7) -Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt) -Work around issue in boost::program_options that prevents from compiling in clang -Fixed bugs occurring only on platforms with unsigned characters (such as ARM). -Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt) -Various trivial internal corrections to types used for counting/size loops and warnings diff --git a/doc/release-notes/release-notes-0.5.0.md b/doc/release-notes/release-notes-0.5.0.md deleted file mode 100644 index baa409b5f2..0000000000 --- a/doc/release-notes/release-notes-0.5.0.md +++ /dev/null @@ -1,70 +0,0 @@ -Bitcoin version 0.5.0 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.0/ - -The major change for this release is a completely new graphical interface that uses the Qt user interface toolkit. - -This release include German, Spanish, Spanish-Castilian, Norwegian and Dutch translations. More translations are welcome; join the project at Transifex if you can help: -https://www.transifex.net/projects/p/bitcoin/ - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -For Ubuntu users, there is a new ppa maintained by Matt Corallo which you can add to your system so that it will automatically keep bitcoin up-to-date. Just type "sudo apt-add-repository ppa:bitcoin/bitcoin" in your terminal, then install the bitcoin-qt package. - -MAJOR BUG FIX (CVE-2011-4447) - -The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who -managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the -associated coins. - -If you have a previously encrypted wallet.dat, the first time you run bitcoin-qt or bitcoind the wallet will be rewritten, Bitcoin will -shut down, and you will be prompted to restart it to run with the new, properly encrypted file. - -If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public -location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses. - -Wallets encrypted with this version of Bitcoin are written properly. - -Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new bitcoin address; to be certain that the -new private keys are properly backed up you should: - -1. Run Bitcoin and let it rewrite the wallet.dat file - -2. Run it again, then ask it for a new bitcoin address. -Bitcoin-Qt: Address Book, then New Address... -bitcoind: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. - -3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address. - -4. Shut down Bitcoin, then backup the wallet.dat file. -IMPORTANT: be sure to request a new bitcoin address before backing up, so that the 'keypool' is regenerated and backed up. - -"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins. - -Thanks to Alan Reiner (etotheipi) for finding and reporting this bug. - -MAJOR GUI CHANGES - -"Splash" graphics at startup that show address/wallet/blockchain loading progress. - -"Synchronizing with network" progress bar to show block-chain download progress. - -Icons at the bottom of the window that show how well connected you are to the network, with tooltips to display details. - -Drag and drop support for bitcoin: URIs on web pages. - -Export transactions as a .csv file. - -Many other GUI improvements, large and small. - -RPC CHANGES - -getmemorypool : new RPC command, provides everything needed to construct a block with a custom generation transaction and submit a solution - -listsinceblock : new RPC command, list transactions since given block - -signmessage/verifymessage : new RPC commands to sign a message with one of your private keys or verify that a message signed by the private key associated with a bitcoin address. - -GENERAL CHANGES - -Faster initial block download. diff --git a/doc/release-notes/release-notes-0.5.1.md b/doc/release-notes/release-notes-0.5.1.md deleted file mode 100644 index d56bff6d95..0000000000 --- a/doc/release-notes/release-notes-0.5.1.md +++ /dev/null @@ -1,43 +0,0 @@ -Bitcoin version 0.5.1 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.1/ - -This is a bugfix-only release. - -This release includes 13 translations, including 5 new translations: -Italian, Hungarian, Ukranian, Portuguese (Brazilian) and Simplified Chinese. -More translations are welcome; join the project at Transifex if you can help: -https://www.transifex.net/projects/p/bitcoin/ - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Project source code is hosted at github; we are no longer -distributing .tar.gz files here, you can get them -directly from github: -https://github.com/bitcoin/bitcoin/tarball/v0.5.1 # .tar.gz -https://github.com/bitcoin/bitcoin/zipball/v0.5.1 # .zip - -For Ubuntu users, there is a new ppa maintained by Matt Corallo which -you can add to your system so that it will automatically keep -bitcoin up-to-date. Just type -sudo apt-add-repository ppa:bitcoin/bitcoin -in your terminal, then install the bitcoin-qt package. - - -BUG FIXES - -Re-enable SSL support for the JSON-RPC interface (it was unintentionally -disabled for the 0.5.0 release binaries). - -The code that finds peers via "dns seeds" no longer stops bitcoin startup -if one of the dns seed machines is down. - -Tooltips on the transaction list view were rendering incorrectly (as black boxes -or with a transparent background). - -Prevent a denial-of-service attack involving flooding a bitcoin node with -orphan blocks. - -The wallet passphrase dialog now warns you if the caps lock key was pressed. - -Improved searching in addresses and labels in bitcoin-qt. diff --git a/doc/release-notes/release-notes-0.5.2.md b/doc/release-notes/release-notes-0.5.2.md deleted file mode 100644 index f79816668d..0000000000 --- a/doc/release-notes/release-notes-0.5.2.md +++ /dev/null @@ -1,22 +0,0 @@ -Bitcoin version 0.5.2 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.2/ - -This is a bugfix-only release based on 0.5.1. - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.2#.tar.gz - -BUG FIXES - -Check all transactions in blocks after the last checkpoint (0.5.0 and 0.5.1 skipped checking ECDSA signatures during initial blockchain download). -Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download; this was -not a security vulnerability). -Fixed some address-handling deadlocks (client freezes). -No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak). -Re-enable SSL support for the JSON-RPC interface (it was unintentionally disabled for the 0.5.0 and 0.5.1 release Linux binaries). -Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed). -Don't show "IP" for transactions which are not necessarily IP transactions. -Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr). diff --git a/doc/release-notes/release-notes-0.5.3.md b/doc/release-notes/release-notes-0.5.3.md deleted file mode 100644 index 7c84c53325..0000000000 --- a/doc/release-notes/release-notes-0.5.3.md +++ /dev/null @@ -1,42 +0,0 @@ -Bitcoin version 0.5.3 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.3/ - -This is a bugfix-only release based on 0.5.1. -It also includes a few protocol updates. - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.3#.tar.gz - -PROTOCOL UPDATES - -BIP 30: Introduce a new network rule: "a block is not valid if it contains a transaction whose hash already exists in the block chain, unless all that transaction's outputs were already spent before said block" beginning on March 15, 2012, 00:00 UTC. -On testnet, allow mining of min-difficulty blocks if 20 minutes have gone by without mining a regular-difficulty block. This is to make testing Bitcoin easier, and will not affect normal mode. - -BUG FIXES - -Limit the number of orphan transactions stored in memory, to prevent a potential denial-of-service attack by flooding orphan transactions. Also never store invalid transactions at all. -Fix possible buffer overflow on systems with very long application data paths. This is not exploitable. -Resolved multiple bugs preventing long-term unlocking of encrypted wallets -(issue #922). -Only send local IP in "version" messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable. -Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting. -Skip splash screen when -min is used, and fix Minimize to Tray function. -Do not blank "label" in Bitcoin-Qt "Send" tab, if the user has already entered something. -Correct various labels and messages. -Various memory leaks and potential null pointer deferences have been fixed. -Handle invalid Bitcoin URIs using "bitcoin://" instead of "bitcoin:". -Several shutdown issues have been fixed. -Revert to "global progress indication", as starting from zero every time was considered too confusing for many users. -Check that keys stored in the wallet are valid at startup, and if not, report corruption. -Enable accessible widgets on Windows, so that people with screen readers such as NVDA can make sense of it. -Various build fixes. -If no password is specified to bitcoind, recommend a secure password. -Automatically focus and scroll to new "Send coins" entries in Bitcoin-Qt. -Show a message box for --help on Windows, for Bitcoin-Qt. -Add missing "About Qt" menu option to show built-in Qt About dialog. -Don't show "-daemon" as an option for Bitcoin-Qt, since it isn't available. -Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0. -Add checkpoint at block 168,000. diff --git a/doc/release-notes/release-notes-0.5.4.md b/doc/release-notes/release-notes-0.5.4.md deleted file mode 100644 index fcde3ac4e3..0000000000 --- a/doc/release-notes/release-notes-0.5.4.md +++ /dev/null @@ -1,39 +0,0 @@ -Bitcoin version 0.5.4 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.4/ -NOTE: 0.5.4rc3 is being renamed to 0.5.4 final with no changes. - -This is a bugfix-only release in the 0.5.x series, plus a few protocol updates. - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Stable source code is hosted at Gitorious: -http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.4#.tar.gz - -PROTOCOL UPDATES - -BIP 16: Special-case "pay to script hash" logic to enable minimal validation of new transactions. -Support for validating message signatures produced with compressed public keys. - -BUG FIXES - -Build with thread-safe MingW libraries for Windows, fixing a dangerous memory corruption scenario when exceptions are thrown. -Fix broken testnet mining. -Stop excess inventory relay during initial block download. -When disconnecting a node, clear the received buffer so that we do not process any already received messages. -Yet another attempt at implementing "minimize to tray" that works on all operating systems. -Fix Bitcoin-Qt notifications under Growl 1.3. -Increase required age of Bitcoin-Qt's "not up to date" status from 30 to 90 minutes. -Implemented missing verifications that led to crash on entering some wrong passphrases for encrypted wallets. -Fix default filename suffixes in GNOME save dialog. -Make the "Send coins" tab use the configured unit type, even on the first attempt. -Print detailed wallet loading errors to debug.log when it is corrupt. -Allocate exactly the amount of space needed for signing transactions, instead of a fixed 10k buffer. -Workaround for improbable memory access violation. -Check wallet's minimum version before trying to load it. -Remove wxBitcoin properly when installing Bitcoin-Qt over it. (Windows) -Detail reorganization information better in debug log. -Use a messagebox to display the error when -server is provided without configuring a RPC password. -Testing suite build now honours provided CXXFLAGS. -Removed an extraneous line-break in mature transaction tooltips. -Fix some grammatical errors in translation process documentation. diff --git a/doc/release-notes/release-notes-0.5.5.md b/doc/release-notes/release-notes-0.5.5.md deleted file mode 100644 index 75ebc3e6b6..0000000000 --- a/doc/release-notes/release-notes-0.5.5.md +++ /dev/null @@ -1,37 +0,0 @@ -bitcoind and Bitcoin-Qt version 0.5.5 are now available for download at: -Windows: installer | zip (sig) -Source: tar.gz -bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. - -These are bugfix-only releases. - -Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. - -BUG FIXES - -Version 0.6.0 allowed importing invalid "private keys", which would be unspendable; 0.6.0.7 will now verify the private key is valid, and refuse to import an invalid one -Verify status of encrypt/decrypt calls to detect failed padding -Check blocks for duplicate transactions earlier. Fixes #1167 -Upgrade Windows builds to OpenSSL 1.0.1b -Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt) -JSON-RPC listtransactions's from/count handling is now fixed -Optimize and fix multithreaded access, when checking whether we already know about transactions -Fix potential networking deadlock -Proper support for Growl 1.3 notifications -Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7) -Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (Bitcoin-Qt) -Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected -Missing error condition checking added -Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt) -Increase time ago of last block for "up to date" status from 30 to 90 minutes -Show a message box when runaway exception happens (Bitcoin-Qt) -Use a messagebox to display the error when -server is provided without providing a rpc password -Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt) -Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt) -Removed "(no label)" from QR Code dialog titlebar if we have no label (0.6.0.7) -Removed an ugly line break in tooltip for mature transactions (0.6.0.7) -Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt) -Work around issue in boost::program_options that prevents from compiling in clang -Fixed bugs occurring only on platforms with unsigned characters (such as ARM). -Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt) -Various trivial internal corrections to types used for counting/size loops and warnings diff --git a/doc/release-notes/release-notes-0.6.0.md b/doc/release-notes/release-notes-0.6.0.md deleted file mode 100644 index 1963a36259..0000000000 --- a/doc/release-notes/release-notes-0.6.0.md +++ /dev/null @@ -1,138 +0,0 @@ -Bitcoin version 0.6.0 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.0/test/ - -This release includes more than 20 language localizations. -More translations are welcome; join the -project at Transifex to help: -https://www.transifex.net/projects/p/bitcoin/ - -Please report bugs using the issue tracker at github: -https://github.com/bitcoin/bitcoin/issues - -Project source code is hosted at github; we are no longer -distributing .tar.gz files here, you can get them -directly from github: -https://github.com/bitcoin/bitcoin/tarball/v0.6.0 # .tar.gz -https://github.com/bitcoin/bitcoin/zipball/v0.6.0 # .zip - -For Ubuntu users, there is a ppa maintained by Matt Corallo which -you can add to your system so that it will automatically keep -bitcoin up-to-date. Just type -sudo apt-add-repository ppa:bitcoin/bitcoin -in your terminal, then install the bitcoin-qt package. - - -KNOWN ISSUES - -Shutting down while synchronizing with the network -(downloading the blockchain) can take more than a minute, -because database writes are queued to speed up download -time. - - -NEW FEATURES SINCE BITCOIN VERSION 0.5 - -Initial network synchronization should be much faster -(one or two hours on a typical machine instead of ten or more -hours). - -Backup Wallet menu option. - -Bitcoin-Qt can display and save QR codes for sending -and receiving addresses. - -New context menu on addresses to copy/edit/delete them. - -New Sign Message dialog that allows you to prove that you -own a bitcoin address by creating a digital -signature. - -New wallets created with this version will -use 33-byte 'compressed' public keys instead of -65-byte public keys, resulting in smaller -transactions and less traffic on the bitcoin -network. The shorter keys are already supported -by the network but wallet.dat files containing -short keys are not compatible with earlier -versions of Bitcoin-Qt/bitcoind. - -New command-line argument -blocknotify= -that will spawn a shell process to run -when a new block is accepted. - -New command-line argument -splash=0 to disable -Bitcoin-Qt's initial splash screen - -validateaddress JSON-RPC api command output includes -two new fields for addresses in the wallet: -pubkey : hexadecimal public key -iscompressed : true if pubkey is a short 33-byte key - -New JSON-RPC api commands for dumping/importing -private keys from the wallet (dumprivkey, importprivkey). - -New JSON-RPC api command for getting information about -blocks (getblock, getblockhash). - -New JSON-RPC api command (getmininginfo) for getting -extra information related to mining. The getinfo -JSON-RPC command no longer includes mining-related -information (generate/genproclimit/hashespersec). - - - -NOTABLE CHANGES - -BIP30 implemented (security fix for an attack involving -duplicate "coinbase transactions"). - -The -nolisten, -noupnp and -nodnsseed command-line -options were renamed to -listen, -upnp and -dnsseed, -with a default value of 1. The old names are still -supported for compatibility (so specifying -nolisten -is automatically interpreted as -listen=0; every -boolean argument can now be specified as either --foo or -nofoo). - -The -noirc command-line options was renamed to --irc, with a default value of 0. Run -irc=1 to -get the old behavior. - -Three fill-up-available-memory denial-of-service -attacks were fixed. - - -NOT YET IMPLEMENTED FEATURES - -Support for clicking on bitcoin: URIs and -opening/launching Bitcoin-Qt is available only on Linux, -and only if you configure your desktop to launch -Bitcoin-Qt. All platforms support dragging and dropping -bitcoin: URIs onto the Bitcoin-Qt window to start -payment. - - -PRELIMINARY SUPPORT FOR MULTISIGNATURE TRANSACTIONS - -This release has preliminary support for multisignature -transactions-- transactions that require authorization -from more than one person or device before they -will be accepted by the bitcoin network. - -Prior to this release, multisignature transactions -were considered 'non-standard' and were ignored; -with this release multisignature transactions are -considered standard and will start to be relayed -and accepted into blocks. - -It is expected that future releases of Bitcoin-Qt -will support the creation of multisignature transactions, -once enough of the network has upgraded so relaying -and validating them is robust. - -For this release, creation and testing of multisignature -transactions is limited to the bitcoin test network using -the "addmultisigaddress" JSON-RPC api call. - -Short multisignature address support is included in this -release, as specified in BIP 13 and BIP 16. diff --git a/doc/release-notes/release-notes-0.6.1.md b/doc/release-notes/release-notes-0.6.1.md deleted file mode 100644 index ef7966ecd6..0000000000 --- a/doc/release-notes/release-notes-0.6.1.md +++ /dev/null @@ -1,2 +0,0 @@ -Never released - diff --git a/doc/release-notes/release-notes-0.6.2.md b/doc/release-notes/release-notes-0.6.2.md deleted file mode 100644 index bb85fb23a0..0000000000 --- a/doc/release-notes/release-notes-0.6.2.md +++ /dev/null @@ -1,50 +0,0 @@ -Bitcoin version 0.6.2 is now available for download at: -http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.2/ - -This is a bug-fix and code-cleanup release, with no major new features. - -Please report bugs using the github issue tracker at: -https://github.com/bitcoin/bitcoin/issues - - -NOTABLE CHANGES - -Much faster shutdowns. However, the blkindex.dat file is no longer -portable to different data directories by default. If you need a -portable blkindex.dat file then run with the new -detachdb=1 option -or the "Detach databases at shutdown" GUI preference. - -Fixed https://github.com/bitcoin/bitcoin/issues/1065, a bug that -could cause long-running nodes to crash. - -Mac and Windows binaries are compiled against OpenSSL 1.0.1b (Linux -binaries are dynamically linked to the version of OpenSSL on the system). - - -CHANGE SUMMARY - -Use 'git shortlog --no-merges v0.6.0..' for a summary of this release. - -Source codebase changes: -- Many source code cleanups and warnings fixes. Close to building with -Wall -- Locking overhaul, and several minor locking fixes -- Several source code portability fixes, e.g. FreeBSD - -JSON-RPC interface changes: -- addmultisigaddress enabled for mainnet (previously only enabled for testnet) - -Network protocol changes: -- protocol version 60001 -- added nonce value to "ping" message (BIP 31) -- added new "pong" message (BIP 31) - -Backend storage changes: -- Less redundant database flushing, especially during initial block download -- Shutdown improvements (see above) - -Qt user interface: -- minor URI handling improvements -- progressbar improvements -- error handling improvements (show message box rather than console exception, -etc.) -- by popular request, make 4th bar of connection icon green diff --git a/doc/release-notes/release-notes-0.6.3.md b/doc/release-notes/release-notes-0.6.3.md deleted file mode 100644 index c27f607b5c..0000000000 --- a/doc/release-notes/release-notes-0.6.3.md +++ /dev/null @@ -1,29 +0,0 @@ -Bitcoin version 0.6.3 is now available for download at: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.3/ - -This is a bug-fix release, with no new features. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -CHANGE SUMMARY - -Fixed a serious denial-of-service attack that could cause the -bitcoin process to become unresponsive. Thanks to Sergio Lerner -for finding and responsibly reporting the problem. (CVE-2012-3789) - -Optimized the process of checking transaction signatures, to -speed up processing of new block messages and make propagating -blocks across the network faster. - -Fixed an obscure bug that could cause the bitcoin process to get -stuck on an invalid block-chain, if the invalid chain was -hundreds of blocks long. - -Bitcoin-Qt no longer automatically selects the first address -in the address book (Issue #1384). - -Fixed minimize-to-dock behavior of Bitcoin-Qt on the Mac. - -Added a block checkpoint at block 185,333 to speed up initial -blockchain download. diff --git a/doc/release-notes/release-notes-0.7.0.md b/doc/release-notes/release-notes-0.7.0.md deleted file mode 100644 index d33a58f99f..0000000000 --- a/doc/release-notes/release-notes-0.7.0.md +++ /dev/null @@ -1,169 +0,0 @@ -Bitcoin version 0.7.0 is now available for download at: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.0/ - -We recommend that everybody running prior versions of bitcoind/Bitcoin-Qt -upgrade to this release, except for users running Mac OSX 10.5. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -Project source code is hosted at github; you can get -source-only tarballs/zipballs directly from there: - https://github.com/bitcoin/bitcoin/tarball/v0.7.0 # .tar.gz - https://github.com/bitcoin/bitcoin/zipball/v0.7.0 # .zip - -Ubuntu Linux users can use the "Personal Package Archive" (PPA) -maintained by Matt Corallo to automatically keep -bitcoin up-to-date. Just type - sudo apt-add-repository ppa:bitcoin/bitcoin - sudo apt-get update -in your terminal, then install the bitcoin-qt package: - sudo apt-get install bitcoin-qt - - -How to Upgrade - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -Code: -/Applications/Bitcoin-Qt -(on Mac) or -Code: -bitcoind/bitcoin-qt -(on Linux). - -If you were running on Linux with a version that might have been compiled -with a different version of Berkeley DB (for example, if you were using the -PPA and are switching to the binary release), then run the old version again -with the -detachdb argument and shut it down; if you do not, then the new -version will not be able to read the database files and will exit with an error. - -Incompatible Changes - -* Replaced the 'getmemorypool' RPC command with 'getblocktemplate/submitblock' - and 'getrawmempool' commands. -* Remove deprecated RPC 'getblocknumber' - -Bitcoin Improvement Proposals implemented - -BIP 22 - 'getblocktemplate', 'submitblock' RPCs -BIP 34 - block version 2, height in coinbase -BIP 35 - 'mempool' message, extended 'getdata' message behavior - - -Core bitcoin handling and blockchain database - -* Reduced CPU usage, by eliminating some redundant hash calculations -* Cache signature verifications, to eliminate redundant signature checks -* Transactions with zero-value outputs are considered non-standard -* Mining: when creating new blocks, sort 'paid' area by fee-per-kb -* Database: better validation of on-disk stored data -* Database: minor optimizations and reliability improvements -* -loadblock=FILE will import an external block file -* Additional DoS (denial-of-service) prevention measures -* New blockchain checkpoint at block 193,000 - - -JSON-RPC API - -* Internal HTTP server is now thread-per-connection, rather than - a single-threaded queue that would stall on network I/O. -* Internal HTTP server supports HTTP/1.1, pipelined requests and - connection keep-alive. -* Support JSON-RPC 2.0 batches, to encapsulate multiple JSON-RPC requests - within a single HTTP request. -* IPv6 support -* Added raw transaction API. See https://gist.github.com/2839617 -* Added 'getrawmempool', to list contents of TX memory pool -* Added 'getpeerinfo', to list data about each connected network peer -* Added 'listaddressgroupings' for better coin control -* Rework getblock call. -* Remove deprecated RPC 'getblocknumber' -* Remove superceded RPC 'getmemorypool' (see BIP 22, above) -* listtransactions output now displays "smart" times for transactions, - and 'blocktime' and 'timereceived' fields were added - - -P2P networking - -* IPv6 support -* Tor hidden service support (see doc/Tor.txt) -* Attempts to fix "stuck blockchain download" problems -* Replace BDB database "addr.dat" with internally-managed "peers.dat" - file containing peer address data. -* Lower default send buffer from 10MB to 1MB -* proxy: SOCKS5 by default -* Support connecting by hostnames passed to proxy -* Add -seednode connections, and use this instead of DNS seeds when proxied -* Added -externalip and -discover -* Add -onlynet to connect only to a given network (IPv4, IPv6, or Tor) -* Separate listening sockets, -bind= - - -Qt GUI - -* Add UI RPC console / debug window -* Re-Enable URI handling on Windows, add safety checks and tray-notifications -* Harmonize the use of ellipsis ("...") to be used in menus, but not on buttons -* Add 2 labels to the overviewpage that display Wallet and Transaction status (obsolete or current) -* Extend the optionsdialog (e.g. language selection) and re-work it to a tabbed UI -* Merge sign/verify message into a single window with tabbed UI -* Ensure a changed bitcoin unit immediately updates all GUI elements that use units -* Update QR Code dialog -* Improve error reporting at startup -* Fine-grained UI updates for a much smoother UI during block downloads -* Remove autocorrection of 0/i in addresses in UI -* Reorganize tray icon menu into more logical order -* Persistently poll for balance change when number of blocks changed -* Much better translations -* Override progress bar design on platforms with segmented progress bars to assist with readability -* Added 'immature balance' display on the overview page -* (Windows only): enable ASLR and DEP for bitcoin-qt.exe -* (Windows only): add meta-data to bitcoin-qt.exe (e.g. description) - -Internal codebase - -* Additional unit tests -* Compile warning fixes - - -Miscellaneous - -* Reopen debug.log upon SIGHUP -* Bash programmable completion for bitcoind(1) -* On supported OS's, each thread is given a useful name - - -Thanks to everybody who contributed to this release: - -Chris Moore -Christian von Roques -David Joel Schwartz -Douglas Huff -Fordy -Gavin Andresen -Giel van Schijndel -Gregory Maxwell -Jeff Garzik -Luke Dashjr -Matt Corallo -Michael Ford -Michael Hendricks -Peter Todd -Philip Kaufmann -Pieter Wuille -R E Broadley -Ricardo M. Correia -Rune K. Svendsen -Scott Ellis -Stephane Glondu -Wladimir J. van der Laan -cardpuncher -coderrr -fanquake -grimd34th -sje397 -xanatos - -Thanks to Sergio Lerner for reporting denial-of-service vulnerabilities fixed in this release. diff --git a/doc/release-notes/release-notes-0.7.1.md b/doc/release-notes/release-notes-0.7.1.md deleted file mode 100644 index 22e910c09f..0000000000 --- a/doc/release-notes/release-notes-0.7.1.md +++ /dev/null @@ -1,110 +0,0 @@ -Bitcoin version 0.7.1 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.1/ - -This is a bug-fix minor release. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -Project source code is hosted at github; you can get -source-only tarballs/zipballs directly from there: - https://github.com/bitcoin/bitcoin/tarball/v0.7.1 # .tar.gz - https://github.com/bitcoin/bitcoin/zipball/v0.7.1 # .zip - -Ubuntu Linux users can use the "Personal Package Archive" (PPA) -maintained by Matt Corallo to automatically keep -up-to-date. Just type: - sudo apt-add-repository ppa:bitcoin/bitcoin - sudo apt-get update -in your terminal, then install the bitcoin-qt package: - sudo apt-get install bitcoin-qt - -KNOWN ISSUES ------------- - -Mac OSX 10.5 is no longer supported. - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you were running on Linux with a version that might have been compiled -with a different version of Berkeley DB (for example, if you were using an -Ubuntu PPA version), then run the old version again with the -detachdb -argument and shut it down; if you do not, then the new version will not -be able to read the database files and will exit with an error. - -Explanation of -detachdb (and the new "stop true" RPC command): -The Berkeley DB database library stores data in both ".dat" and -"log" files, so the database is always in a consistent state, -even in case of power failure or other sudden shutdown. The -format of the ".dat" files is portable between different -versions of Berkeley DB, but the "log" files are not-- even minor -version differences may have incompatible "log" files. The --detachdb option moves any pending changes from the "log" files -to the "blkindex.dat" file for maximum compatibility, but makes -shutdown much slower. Note that the "wallet.dat" file is always -detached, and versions prior to 0.6.0 detached all databases -at shutdown. - -New features ------------- - -* Added a boolean argument to the RPC 'stop' command, if true sets - -detachdb to create standalone database .dat files before shutting down. - -* -salvagewallet command-line option, which moves any existing wallet.dat - to wallet.{timestamp}.dat and then attempts to salvage public/private - keys and master encryption keys (if the wallet is encrypted) into - a new wallet.dat. This should only be used if your wallet becomes - corrupted, and is not intended to replace regular wallet backups. - -* Import $DataDir/bootstrap.dat automatically, if it exists. - -Dependency changes ------------------- - -* Qt 4.8.2 for Windows builds - -* openssl 1.0.1c - -Bug fixes ---------- - -* Clicking on a bitcoin: URI on Windows should now launch Bitcoin-Qt properly. - -* When running -testnet, use RPC port 18332 by default. - -* Better detection and handling of corrupt wallet.dat and blkindex.dat files. - Previous versions would crash with a DB_RUNRECOVERY exception, this - version detects most problems and tells you how to recover if it - cannot recover itself. - -* Fixed an uninitialized variable bug that could cause transactions to - be reported out of order. - -* Fixed a bug that could cause occasional crashes on exit. - -* Warn the user that they need to create fresh wallet backups after they - encrypt their wallet. - ----------------------------------------------------- -Thanks to everybody who contributed to this release: - -Gavin Andresen -Jeff Garzik -Luke Dashjr -Mark Friedenbach -Matt Corallo -Philip Kaufmann -Pieter Wuille -Rune K. Svendsen -Virgil Dupras -Wladimir J. van der Laan -fanquake -kjj2 -xanatos diff --git a/doc/release-notes/release-notes-0.7.2.md b/doc/release-notes/release-notes-0.7.2.md deleted file mode 100644 index 40af34962b..0000000000 --- a/doc/release-notes/release-notes-0.7.2.md +++ /dev/null @@ -1,68 +0,0 @@ -Bitcoin version 0.7.2 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.2 - -This is a bug-fix minor release. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you were running on Linux with a version that might have been compiled -with a different version of Berkeley DB (for example, if you were using an -Ubuntu PPA version), then run the old version again with the -detachdb -argument and shut it down; if you do not, then the new version will not -be able to read the database files and will exit with an error. - -Explanation of -detachdb (and the new "stop true" RPC command): -The Berkeley DB database library stores data in both ".dat" and -"log" files, so the database is always in a consistent state, -even in case of power failure or other sudden shutdown. The -format of the ".dat" files is portable between different -versions of Berkeley DB, but the "log" files are not-- even minor -version differences may have incompatible "log" files. The --detachdb option moves any pending changes from the "log" files -to the "blkindex.dat" file for maximum compatibility, but makes -shutdown much slower. Note that the "wallet.dat" file is always -detached, and versions prior to 0.6.0 detached all databases -at shutdown. - -Bug fixes ---------- - -* Prevent RPC 'move' from deadlocking. This was caused by trying to lock the - database twice. - -* Fix use-after-free problems in initialization and shutdown, the latter of - which caused Bitcoin-Qt to crash on Windows when exiting. - -* Correct library linking so building on Windows natively works. - -* Avoid a race condition and out-of-bounds read in block creation/mining code. - -* Improve platform compatibility quirks, including fix for 100% CPU utilization - on FreeBSD 9. - -* A few minor corrections to error handling, and updated translations. - -* OSX 10.5 supported again - ----------------------------------------------------- -Thanks to everybody who contributed to this release: - -Alex -dansmith -Gavin Andresen -Gregory Maxwell -Jeff Garzik -Luke Dashjr -Philip Kaufmann -Pieter Wuille -Wladimir J. van der Laan -grimd34th diff --git a/doc/release-notes/release-notes-0.8.0.md b/doc/release-notes/release-notes-0.8.0.md deleted file mode 100644 index 4e98a7740f..0000000000 --- a/doc/release-notes/release-notes-0.8.0.md +++ /dev/null @@ -1,139 +0,0 @@ -Bitcoin-Qt version 0.8.0 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.0/ - -This is a major release designed to improve performance and handle the -increasing volume of transactions on the network. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -The first time you run after the upgrade a re-indexing process will be -started that will take anywhere from 30 minutes to several hours, -depending on the speed of your machine. - -Incompatible Changes --------------------- - -This release no longer maintains a full index of historical transaction ids -by default, so looking up an arbitrary transaction using the getrawtransaction -RPC call will not work. If you need that functionality, you must run once -with -txindex=1 -reindex=1 to rebuild block-chain indices (see below for more -details). - -Improvements ------------- - -Mac and Windows binaries are signed with certificates owned by the Bitcoin -Foundation, to be compatible with the new security features in OSX 10.8 and -Windows 8. - -LevelDB, a fast, open-source, non-relational database from Google, is -now used to store transaction and block indices. LevelDB works much better -on machines with slow I/O and is faster in general. Berkeley DB is now only -used for the wallet.dat file (public and private wallet keys and transactions -relevant to you). - -Pieter Wuille implemented many optimizations to the way transactions are -verified, so a running, synchronized node uses less working memory and does -much less I/O. He also implemented parallel signature checking, so if you -have a multi-CPU machine all CPUs will be used to verify transactions. - -New Features ------------- - -"Bloom filter" support in the network protocol for sending only relevant transactions to -lightweight clients. - -contrib/verifysfbinaries is a shell-script to verify that the binary downloads -at sourceforge have not been tampered with. If you are able, you can help make -everybody's downloads more secure by running this occasionally to check PGP -signatures against download file checksums. - -contrib/spendfrom is a python-language command-line utility that demonstrates -how to use the "raw transactions" JSON-RPC api to send coins received from particular -addresses (also known as "coin control"). - -New/changed settings (command-line or bitcoin.conf file) --------------------------------------------------------- - -dbcache : controls LevelDB memory usage. - -par : controls how many threads to use to validate transactions. Defaults to the number -of CPUs on your machine, use -par=1 to limit to a single CPU. - -txindex : maintains an extra index of old, spent transaction ids so they will be found -by the getrawtransaction JSON-RPC method. - -reindex : rebuild block and transaction indices from the downloaded block data. - -New JSON-RPC API Features -------------------------- - -lockunspent / listlockunspent allow locking transaction outputs for a period of time so -they will not be spent by other processes that might be accessing the same wallet. - -addnode / getaddednodeinfo methods, to connect to specific peers without restarting. - -importprivkey now takes an optional boolean parameter (default true) to control whether -or not to rescan the blockchain for transactions after importing a new private key. - -Important Bug Fixes -------------------- - -Privacy leak: the position of the "change" output in most transactions was not being -properly randomized, making network analysis of the transaction graph to identify -users' wallets easier. - -Zero-confirmation transaction vulnerability: accepting zero-confirmation transactions -(transactions that have not yet been included in a block) from somebody you do not -trust is still not recommended, because there will always be ways for attackers to -double-spend zero-confirmation transactions. However, this release includes a bug -fix that makes it a little bit more difficult for attackers to double-spend a -certain type ("lockTime in the future") of zero-confirmation transaction. - -Dependency Changes ------------------- - -Qt 4.8.3 (compiling against older versions of Qt 4 should continue to work) - - -Thanks to everybody who contributed to this release: ----------------------------------------------------- - -Alexander Kjeldaas -Andrey Alekseenko -Arnav Singh -Christian von Roques -Eric Lombrozo -Forrest Voight -Gavin Andresen -Gregory Maxwell -Jeff Garzik -Luke Dashjr -Matt Corallo -Mike Cassano -Mike Hearn -Peter Todd -Philip Kaufmann -Pieter Wuille -Richard Schwab -Robert Backhaus -Rune K. Svendsen -Sergio Demian Lerner -Wladimir J. van der Laan -burger2 -default -fanquake -grimd34th -justmoon -redshark1802 -tucenaber -xanatos diff --git a/doc/release-notes/release-notes-0.8.1.md b/doc/release-notes/release-notes-0.8.1.md deleted file mode 100644 index 4fd546bee0..0000000000 --- a/doc/release-notes/release-notes-0.8.1.md +++ /dev/null @@ -1,22 +0,0 @@ -Bitcoin-Qt/bitcoind version 0.8.1 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/ - -This is a maintenance release that adds a new network rule to avoid -a chain-forking incompatibility with versions 0.7.2 and earlier. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.1 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. diff --git a/doc/release-notes/release-notes-0.8.2.md b/doc/release-notes/release-notes-0.8.2.md deleted file mode 100644 index eea9ba2a2c..0000000000 --- a/doc/release-notes/release-notes-0.8.2.md +++ /dev/null @@ -1,137 +0,0 @@ -Bitcoin-Qt version 0.8.2 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.2/ - -This is a maintenance release that fixes many bugs and includes -a few small new features. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - - -How to Upgrade - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.2 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. - -0.8.2 Release notes - -Fee Policy changes - -The default fee for low-priority transactions is lowered from 0.0005 BTC -(for each 1,000 bytes in the transaction; an average transaction is -about 500 bytes) to 0.0001 BTC. - -Payments (transaction outputs) of 0.543 times the minimum relay fee -(0.00005430 BTC) are now considered 'non-standard', because storing them -costs the network more than they are worth and spending them will usually -cost their owner more in transaction fees than they are worth. - -Non-standard transactions are not relayed across the network, are not included -in blocks by most miners, and will not show up in your wallet until they are -included in a block. - -The default fee policy can be overridden using the -mintxfee and -minrelaytxfee -command-line options, but note that we intend to replace the hard-coded fees -with code that automatically calculates and suggests appropriate fees in the -0.9 release and note that if you set a fee policy significantly different from -the rest of the network your transactions may never confirm. - -Bitcoin-Qt changes - -* New icon and splash screen -* Improve reporting of synchronization process -* Remove hardcoded fee recommendations -* Improve metadata of executable on MacOSX and Windows -* Move export button to individual tabs instead of toolbar -* Add "send coins" command to context menu in address book -* Add "copy txid" command to copy transaction IDs from transaction overview -* Save & restore window size and position when showing & hiding window -* New translations: Arabic (ar), Bosnian (bs), Catalan (ca), Welsh (cy), - Esperanto (eo), Interlingua (la), Latvian (lv) and many improvements - to current translations - -MacOSX: -* OSX support for click-to-pay (bitcoin:) links -* Fix GUI disappearing problem on MacOSX (issue #1522) - -Linux/Unix: -* Copy addresses to middle-mouse-button clipboard - - -Command-line options - -* -walletnotify will call a command on receiving transactions that affect the wallet. -* -alertnotify will call a command on receiving an alert from the network. -* -par now takes a negative number, to leave a certain amount of cores free. - -JSON-RPC API changes - -* fixed a getblocktemplate bug that caused excessive CPU creating blocks. -* listunspent now lists account and address information. -* getinfo now also returns the time adjustment estimated from your peers. -* getpeerinfo now returns bytessent, bytesrecv and syncnode. -* gettxoutsetinfo returns statistics about the unspent transaction output database. -* gettxout returns information about a specific unspent transaction output. - - -Networking changes - -* Significant changes to the networking code, reducing latency and memory consumption. -* Avoid initial block download stalling. -* Remove IRC seeding support. -* Performance tweaks. -* Added testnet DNS seeds. - -Wallet compatibility/rescuing - -* Cases where wallets cannot be opened in another version/installation should be reduced. -* -salvagewallet now works for encrypted wallets. - - -Known Bugs - -* Entering the 'getblocktemplate' or 'getwork' RPC commands into the Bitcoin-Qt debug -console will cause Bitcoin-Qt to crash. Run Bitcoin-Qt with the -server command-line -option to workaround. - -Thanks to everybody who contributed to the 0.8.2 release! - -APerson241 -Andrew Poelstra -Calvin Owens -Chuck LeDuc Díaz -Colin Dean -David Griffith -David Serrano -Eric Lombrozo -Gavin Andresen -Gregory Maxwell -Jeff Garzik -Jonas Schnelli -Larry Gilbert -Luke Dashjr -Matt Corallo -Michael Ford -Mike Hearn -Patrick Brown -Peter Todd -Philip Kaufmann -Pieter Wuille -Richard Schwab -Roman Mindalev -Scott Howard -Tariq Bashir -Warren Togami -Wladimir J. van der Laan -freewil -gladoscc -kjj2 -mb300sd -super3 diff --git a/doc/release-notes/release-notes-0.8.3.md b/doc/release-notes/release-notes-0.8.3.md deleted file mode 100644 index 856c20aa33..0000000000 --- a/doc/release-notes/release-notes-0.8.3.md +++ /dev/null @@ -1,18 +0,0 @@ -Bitcoin-Qt version 0.8.3 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.3/ - -This is a maintenance release to fix a denial-of-service attack that -can cause nodes to crash. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - -0.8.3 Release notes - -Truncate over-size messages to prevent a memory exhaustion attack. - -Fix a regression that causes excessive re-writing of the 'peers.dat' file. - - -Thanks to Peter Todd for responsibly disclosing the vulnerability -( CVE-2013-4627 ) and creating a fix. diff --git a/doc/release-notes/release-notes-0.8.4.md b/doc/release-notes/release-notes-0.8.4.md deleted file mode 100644 index c6f31f1fa4..0000000000 --- a/doc/release-notes/release-notes-0.8.4.md +++ /dev/null @@ -1,83 +0,0 @@ -Bitcoin-Qt version 0.8.4 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.4/ - -This is a maintenance release to fix a critical bug and three -security issues; we urge all users to upgrade. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.4 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. - -0.8.4 Release notes -=================== - -Security issues ---------------- - -An attacker could send a series of messages that resulted in -an integer division-by-zero error in the Bloom Filter handling -code, causing the Bitcoin-Qt or bitcoind process to crash. -Bloom filters were introduced with version 0.8, so versions 0.8.0 -through 0.8.3 are vulnerable to this critical denial-of-service attack. - -A constant-time algorithm is now used to check RPC password -guess attempts; fixes https://github.com/bitcoin/bitcoin/issues/2838 -(CVE-2013-4165) - -Implement a better fix for the fill-memory-with-orphan-transactions -attack that was fixed in 0.8.3. See -https://bitslog.wordpress.com/2013/07/18/buggy-cve-2013-4627-patch-open-new-vectors-of-attack/ -for a description of the weaknesses of the previous fix. -(CVE-2013-4627) - -Bugs fixed ----------- - -Fix multi-block reorg transaction resurrection. - -Fix non-standard disconnected transactions causing mempool orphans. -This bug could cause nodes running with the -debug flag to crash. - -OSX: use 'FD_FULLSYNC' with LevelDB, which will (hopefully!) -prevent the database corruption issues many people have -experienced on OSX. - -Linux: clicking on bitcoin: links was broken if you were using -a Gnome-based desktop. - -Fix a hang-at-shutdown bug that only affects users that compile -their own version of Bitcoin against Boost versions 1.50-1.52. - -Other changes -------------- - -Checkpoint at block 250,000 to speed up initial block downloads -and make the progress indicator when downloading more accurate. - - -Thanks to everybody who contributed to the 0.8.4 releases! ----------------------------------------------------------- - -Pieter Wuille -Warren Togami -Patrick Strateman -pakt -Gregory Maxwell -Sergio Demian Lerner -grayleonard -Cory Fields -Matt Corallo -Gavin Andresen diff --git a/doc/release-notes/release-notes-0.8.5.md b/doc/release-notes/release-notes-0.8.5.md deleted file mode 100644 index aa93fe7c71..0000000000 --- a/doc/release-notes/release-notes-0.8.5.md +++ /dev/null @@ -1,44 +0,0 @@ -Bitcoin-Qt version 0.8.5 is now available from: - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.5/ - -This is a maintenance release to fix a critical bug; -we urge all users to upgrade. - -Please report bugs using the issue tracker at github: - https://github.com/bitcoin/bitcoin/issues - - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.5 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. - -0.8.5 Release notes -=================== - -Bugs fixed ----------- - -Transactions with version numbers larger than 0x7fffffff were -incorrectly being relayed and included in blocks. - -Blocks containing transactions with version numbers larger -than 0x7fffffff caused the code that checks for LevelDB database -inconsistencies at startup to erroneously report database -corruption and suggest that you reindex your database. - -This release also contains a non-critical fix to the code that -enforces BIP 34 (block height in the coinbase transaction). - --- - -Thanks to Gregory Maxwell and Pieter Wuille for quickly -identifying and fixing the transaction version number bug. diff --git a/doc/release-notes/release-notes-0.8.6.md b/doc/release-notes/release-notes-0.8.6.md deleted file mode 100644 index 39a45e0db5..0000000000 --- a/doc/release-notes/release-notes-0.8.6.md +++ /dev/null @@ -1,66 +0,0 @@ -Bitcoin-Qt version 0.8.6 final is now available from: - - http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.6/ - -This is a maintenance release to fix a critical bug; we urge all users to upgrade. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you already downloaded 0.8.6rc1 you do not need to re-download. This release is exactly the same. - -If you are running an older version, shut it down. Wait -until it has completely shut down (which might take a few minutes for older -versions), then run the installer (on Windows) or just copy over -/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you -run 0.8.6 your blockchain files will be re-indexed, which will take -anywhere from 30 minutes to several hours, depending on the speed of -your machine. - -0.8.6 Release notes -=================== - -- Default block size increase for miners. - (see https://gist.github.com/gavinandresen/7670433#086-accept-into-block) - -- Remove the all-outputs-must-be-greater-than-CENT-to-qualify-as-free rule for relaying - (see https://gist.github.com/gavinandresen/7670433#086-relaying) - -- Lower maximum size for free transaction creation - (see https://gist.github.com/gavinandresen/7670433#086-wallet) - -- OSX block chain database corruption fixes - - Update leveldb to 1.13 - - Use fcntl with `F_FULLSYNC` instead of fsync on OSX - - Use native Darwin memory barriers - - Replace use of mmap in leveldb for improved reliability (only on OSX) - -- Fix nodes forwarding transactions with empty vins and getting banned - -- Network code performance and robustness improvements - -- Additional debug.log logging for diagnosis of network problems, log timestamps by default - -- Fix Bitcoin-Qt startup crash when clicking dock icon on OSX - -- Fix memory leaks in CKey::SetCompactSignature() and Key::SignCompact() - -- Fix rare GUI crash on send - -- Various small GUI, documentation and build fixes - -Warning -------- - -- There have been frequent reports of users running out of virtual memory on 32-bit systems - during the initial sync. - Hence it is recommended to use a 64-bit executable if possible. - A 64-bit executable for Windows is planned for 0.9. - -Note: Gavin Andresen's GPG signing key for SHA256SUMS.asc has been changed from key id 1FC730C1 to sub key 7BF6E212 (see https://github.com/bitcoin/bitcoin.org/pull/279). diff --git a/doc/release-notes/release-notes-0.9.0.md b/doc/release-notes/release-notes-0.9.0.md deleted file mode 100644 index 170410ca40..0000000000 --- a/doc/release-notes/release-notes-0.9.0.md +++ /dev/null @@ -1,411 +0,0 @@ -Bitcoin Core version 0.9.0 is now available from: - - https://bitcoin.org/bin/0.9.0/ - -This is a new major version release, bringing both new features and -bug fixes. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), uninstall all -earlier versions of Bitcoin, then run the installer (on Windows) or just copy -over /Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.0 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -On Windows, do not forget to uninstall all earlier versions of the Bitcoin -client first, especially if you are switching to the 64-bit version. - -Windows 64-bit installer -------------------------- - -New in 0.9.0 is the Windows 64-bit version of the client. There have been -frequent reports of users running out of virtual memory on 32-bit systems -during the initial sync. Because of this it is recommended to install the -64-bit version if your system supports it. - -NOTE: Release candidate 2 Windows binaries are not code-signed; use PGP -and the SHA256SUMS.asc file to make sure your binaries are correct. -In the final 0.9.0 release, Windows setup.exe binaries will be code-signed. - -OSX 10.5 / 32-bit no longer supported -------------------------------------- - -0.9.0 drops support for older Macs. The minimum requirements are now: -* A 64-bit-capable CPU (see http://support.apple.com/kb/ht3696); -* Mac OS 10.6 or later (see https://support.apple.com/kb/ht1633). - -Downgrading warnings --------------------- - -The 'chainstate' for this release is not always compatible with previous -releases, so if you run 0.9 and then decide to switch back to a -0.8.x release you might get a blockchain validation error when starting the -old release (due to 'pruned outputs' being omitted from the index of -unspent transaction outputs). - -Running the old release with the -reindex option will rebuild the chainstate -data structures and correct the problem. - -Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan -the blockchain for missing spent coins, which will take a long time (tens -of minutes on a typical machine). - -Rebranding to Bitcoin Core ---------------------------- - -To reduce confusion between Bitcoin-the-network and Bitcoin-the-software we -have renamed the reference client to Bitcoin Core. - - -OP_RETURN and data in the block chain -------------------------------------- -On OP_RETURN: There was been some confusion and misunderstanding in -the community, regarding the OP_RETURN feature in 0.9 and data in the -blockchain. This change is not an endorsement of storing data in the -blockchain. The OP_RETURN change creates a provably-prunable output, -to avoid data storage schemes -- some of which were already deployed -- -that were storing arbitrary data such as images as forever-unspendable -TX outputs, bloating bitcoin's UTXO database. - -Storing arbitrary data in the blockchain is still a bad idea; it is less -costly and far more efficient to store non-currency data elsewhere. - -Autotools build system ------------------------ - -For 0.9.0 we switched to an autotools-based build system instead of individual -(q)makefiles. - -Using the standard "./autogen.sh; ./configure; make" to build Bitcoin-Qt and -bitcoind makes it easier for experienced open source developers to contribute -to the project. - -Be sure to check doc/build-*.md for your platform before building from source. - -Bitcoin-cli -------------- - -Another change in the 0.9 release is moving away from the bitcoind executable -functioning both as a server and as a RPC client. The RPC client functionality -("tell the running bitcoin daemon to do THIS") was split into a separate -executable, 'bitcoin-cli'. The RPC client code will eventually be removed from -bitcoind, but will be kept for backwards compatibility for a release or two. - -`walletpassphrase` RPC ------------------------ - -The behavior of the `walletpassphrase` RPC when the wallet is already unlocked -has changed between 0.8 and 0.9. - -The 0.8 behavior of `walletpassphrase` is to fail when the wallet is already unlocked: - - > walletpassphrase 1000 - walletunlocktime = now + 1000 - > walletpassphrase 10 - Error: Wallet is already unlocked (old unlock time stays) - -The new behavior of `walletpassphrase` is to set a new unlock time overriding -the old one: - - > walletpassphrase 1000 - walletunlocktime = now + 1000 - > walletpassphrase 10 - walletunlocktime = now + 10 (overriding the old unlock time) - -Transaction malleability-related fixes --------------------------------------- - -This release contains a few fixes for transaction ID (TXID) malleability -issues: - -- -nospendzeroconfchange command-line option, to avoid spending - zero-confirmation change -- IsStandard() transaction rules tightened to prevent relaying and mining of - mutated transactions -- Additional information in listtransactions/gettransaction output to - report wallet transactions that conflict with each other because - they spend the same outputs. -- Bug fixes to the getbalance/listaccounts RPC commands, which would report - incorrect balances for double-spent (or mutated) transactions. -- New option: -zapwallettxes to rebuild the wallet's transaction information - -Transaction Fees ----------------- - -This release drops the default fee required to relay transactions across the -network and for miners to consider the transaction in their blocks to -0.01mBTC per kilobyte. - -Note that getting a transaction relayed across the network does NOT guarantee -that the transaction will be accepted by a miner; by default, miners fill -their blocks with 50 kilobytes of high-priority transactions, and then with -700 kilobytes of the highest-fee-per-kilobyte transactions. - -The minimum relay/mining fee-per-kilobyte may be changed with the -minrelaytxfee option. Note that previous releases incorrectly used -the mintxfee setting to determine which low-priority transactions should -be considered for inclusion in blocks. - -The wallet code still uses a default fee for low-priority transactions of -0.1mBTC per kilobyte. During periods of heavy transaction volume, even this -fee may not be enough to get transactions confirmed quickly; the mintxfee -option may be used to override the default. - -0.9.0 Release notes -======================= - -RPC: - -- New notion of 'conflicted' transactions, reported as confirmations: -1 -- 'listreceivedbyaddress' now provides tx ids -- Add raw transaction hex to 'gettransaction' output -- Updated help and tests for 'getreceivedby(account|address)' -- In 'getblock', accept 2nd 'verbose' parameter, similar to getrawtransaction, - but defaulting to 1 for backward compatibility -- Add 'verifychain', to verify chain database at runtime -- Add 'dumpwallet' and 'importwallet' RPCs -- 'keypoolrefill' gains optional size parameter -- Add 'getbestblockhash', to return tip of best chain -- Add 'chainwork' (the total work done by all blocks since the genesis block) - to 'getblock' output -- Make RPC password resistant to timing attacks -- Clarify help messages and add examples -- Add 'getrawchangeaddress' call for raw transaction change destinations -- Reject insanely high fees by default in 'sendrawtransaction' -- Add RPC call 'decodescript' to decode a hex-encoded transaction script -- Make 'validateaddress' provide redeemScript -- Add 'getnetworkhashps' to get the calculated network hashrate -- New RPC 'ping' command to request ping, new 'pingtime' and 'pingwait' fields - in 'getpeerinfo' output -- Adding new 'addrlocal' field to 'getpeerinfo' output -- Add verbose boolean to 'getrawmempool' -- Add rpc command 'getunconfirmedbalance' to obtain total unconfirmed balance -- Explicitly ensure that wallet is unlocked in `importprivkey` -- Add check for valid keys in `importprivkey` - -Command-line options: - -- New option: -nospendzeroconfchange to never spend unconfirmed change outputs -- New option: -zapwallettxes to rebuild the wallet's transaction information -- Rename option '-tor' to '-onion' to better reflect what it does -- Add '-disablewallet' mode to let bitcoind run entirely without wallet (when - built with wallet) -- Update default '-rpcsslciphers' to include TLSv1.2 -- make '-logtimestamps' default on and rework help-message -- RPC client option: '-rpcwait', to wait for server start -- Remove '-logtodebugger' -- Allow `-noserver` with bitcoind - -Block-chain handling and storage: - -- Update leveldb to 1.15 -- Check for correct genesis (prevent cases where a datadir from the wrong - network is accidentally loaded) -- Allow txindex to be removed and add a reindex dialog -- Log aborted block database rebuilds -- Store orphan blocks in serialized form, to save memory -- Limit the number of orphan blocks in memory to 750 -- Fix non-standard disconnected transactions causing mempool orphans -- Add a new checkpoint at block 279,000 - -Wallet: - -- Bug fixes and new regression tests to correctly compute - the balance of wallets containing double-spent (or mutated) transactions -- Store key creation time. Calculate whole-wallet birthday. -- Optimize rescan to skip blocks prior to birthday -- Let user select wallet file with -wallet=foo.dat -- Consider generated coins mature at 101 instead of 120 blocks -- Improve wallet load time -- Don't count txins for priority to encourage sweeping -- Don't create empty transactions when reading a corrupted wallet -- Fix rescan to start from beginning after importprivkey -- Only create signatures with low S values - -Mining: - -- Increase default -blockmaxsize/prioritysize to 750K/50K -- 'getblocktemplate' does not require a key to create a block template -- Mining code fee policy now matches relay fee policy - -Protocol and network: - -- Drop the fee required to relay a transaction to 0.01mBTC per kilobyte -- Send tx relay flag with version -- New 'reject' P2P message (BIP 0061, see - https://gist.github.com/gavinandresen/7079034 for draft) -- Dump addresses every 15 minutes instead of 10 seconds -- Relay OP_RETURN data TxOut as standard transaction type -- Remove CENT-output free transaction rule when relaying -- Lower maximum size for free transaction creation -- Send multiple inv messages if mempool.size > MAX_INV_SZ -- Split MIN_PROTO_VERSION into INIT_PROTO_VERSION and MIN_PEER_PROTO_VERSION -- Do not treat fFromMe transaction differently when broadcasting -- Process received messages one at a time without sleeping between messages -- Improve logging of failed connections -- Bump protocol version to 70002 -- Add some additional logging to give extra network insight -- Added new DNS seed from bitcoinstats.com - -Validation: - -- Log reason for non-standard transaction rejection -- Prune provably-unspendable outputs, and adapt consistency check for it. -- Detect any sufficiently long fork and add a warning -- Call the -alertnotify script when we see a long or invalid fork -- Fix multi-block reorg transaction resurrection -- Reject non-canonically-encoded serialization sizes -- Reject dust amounts during validation -- Accept nLockTime transactions that finalize in the next block - -Build system: - -- Switch to autotools-based build system -- Build without wallet by passing `--disable-wallet` to configure, this - removes the BerkeleyDB dependency -- Upgrade gitian dependencies (libpng, libz, libupnpc, boost, openssl) to more - recent versions -- Windows 64-bit build support -- Solaris compatibility fixes -- Check integrity of gitian input source tarballs -- Enable full GCC Stack-smashing protection for all OSes - -GUI: - -- Switch to Qt 5.2.0 for Windows build -- Add payment request (BIP 0070) support -- Improve options dialog -- Show transaction fee in new send confirmation dialog -- Add total balance in overview page -- Allow user to choose data directory on first start, when data directory is - missing, or when the -choosedatadir option is passed -- Save and restore window positions -- Add vout index to transaction id in transactions details dialog -- Add network traffic graph in debug window -- Add open URI dialog -- Add Coin Control Features -- Improve receive coins workflow: make the 'Receive' tab into a form to request - payments, and move historical address list functionality to File menu. -- Rebrand to `Bitcoin Core` -- Move initialization/shutdown to a thread. This prevents "Not responding" - messages during startup. Also show a window during shutdown. -- Don't regenerate autostart link on every client startup -- Show and store message of normal bitcoin:URI -- Fix richtext detection hang issue on very old Qt versions -- OS X: Make use of the 10.8+ user notification center to display Growl-like - notifications -- OS X: Added NSHighResolutionCapable flag to Info.plist for better font - rendering on Retina displays. -- OS X: Fix bitcoin-qt startup crash when clicking dock icon -- Linux: Fix Gnome bitcoin: URI handler - -Miscellaneous: - -- Add Linux script (contrib/qos/tc.sh) to limit outgoing bandwidth -- Add '-regtest' mode, similar to testnet but private with instant block - generation with 'setgenerate' RPC. -- Add 'linearize.py' script to contrib, for creating bootstrap.dat -- Add separate bitcoin-cli client - -Credits --------- - -Thanks to everyone who contributed to this release: - -- Andrey -- Ashley Holman -- b6393ce9-d324-4fe1-996b-acf82dbc3d53 -- bitsofproof -- Brandon Dahler -- Calvin Tam -- Christian Decker -- Christian von Roques -- Christopher Latham -- Chuck -- coblee -- constantined -- Cory Fields -- Cozz Lovan -- daniel -- Daniel Larimer -- David Hill -- Dmitry Smirnov -- Drak -- Eric Lombrozo -- fanquake -- fcicq -- Florin -- frewil -- Gavin Andresen -- Gregory Maxwell -- gubatron -- Guillermo Céspedes Tabárez -- Haakon Nilsen -- HaltingState -- Han Lin Yap -- harry -- Ian Kelling -- Jeff Garzik -- Johnathan Corgan -- Jonas Schnelli -- Josh Lehan -- Josh Triplett -- Julian Langschaedel -- Kangmo -- Lake Denman -- Luke Dashjr -- Mark Friedenbach -- Matt Corallo -- Michael Bauer -- Michael Ford -- Michagogo -- Midnight Magic -- Mike Hearn -- Nils Schneider -- Noel Tiernan -- Olivier Langlois -- patrick s -- Patrick Strateman -- paveljanik -- Peter Todd -- phantomcircuit -- phelixbtc -- Philip Kaufmann -- Pieter Wuille -- Rav3nPL -- R E Broadley -- regergregregerrge -- Robert Backhaus -- Roman Mindalev -- Rune K. Svendsen -- Ryan Niebur -- Scott Ellis -- Scott Willeke -- Sergey Kazenyuk -- Shawn Wilkinson -- Sined -- sje -- Subo1978 -- super3 -- Tamas Blummer -- theuni -- Thomas Holenstein -- Timon Rapp -- Timothy Stranex -- Tom Geller -- Torstein Husebø -- Vaclav Vobornik -- vhf / victor felder -- Vinnie Falco -- Warren Togami -- Wil Bown -- Wladimir J. van der Laan diff --git a/doc/release-notes/release-notes-0.9.1.md b/doc/release-notes/release-notes-0.9.1.md deleted file mode 100644 index 0552053d27..0000000000 --- a/doc/release-notes/release-notes-0.9.1.md +++ /dev/null @@ -1,53 +0,0 @@ -Bitcoin Core version 0.9.1 is now available from: - - https://bitcoin.org/bin/0.9.1/ - -This is a security update. It is recommended to upgrade to this release -as soon as possible. - -It is especially important to upgrade if you currently have version -0.9.0 installed and are using the graphical interface OR you are using -bitcoind from any pre-0.9.1 version, and have enabled SSL for RPC and -have configured allowip to allow rpc connections from potentially -hostile hosts. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.1 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -0.9.1 Release notes -======================= - -No code changes were made between 0.9.0 and 0.9.1. Only the dependencies were changed. - -- Upgrade OpenSSL to 1.0.1g. This release fixes the following vulnerabilities which can - affect the Bitcoin Core software: - - - CVE-2014-0160 ("heartbleed") - A missing bounds check in the handling of the TLS heartbeat extension can - be used to reveal up to 64k of memory to a connected client or server. - - - CVE-2014-0076 - The Montgomery ladder implementation in OpenSSL does not ensure that - certain swap operations have a constant-time behavior, which makes it - easier for local users to obtain ECDSA nonces via a FLUSH+RELOAD cache - side-channel attack. - -- Add statically built executables to Linux build - -Credits --------- - -Credits go to the OpenSSL team for fixing the vulnerabilities quickly. diff --git a/doc/release-notes/release-notes-0.9.2.1.md b/doc/release-notes/release-notes-0.9.2.1.md deleted file mode 100644 index 3168ad1a5a..0000000000 --- a/doc/release-notes/release-notes-0.9.2.1.md +++ /dev/null @@ -1,207 +0,0 @@ -Bitcoin Core version 0.9.2.1 is now available from: - - https://bitcoin.org/bin/0.9.2.1/ - -This is a new minor version release, bringing mostly bug fixes and some minor -improvements. OpenSSL has been updated because of a security issue (CVE-2014-0224). -Upgrading to this release is recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.2.1 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -Downgrading warnings --------------------- - -The 'chainstate' for this release is not always compatible with previous -releases, so if you run 0.9.x and then decide to switch back to a -0.8.x release you might get a blockchain validation error when starting the -old release (due to 'pruned outputs' being omitted from the index of -unspent transaction outputs). - -Running the old release with the -reindex option will rebuild the chainstate -data structures and correct the problem. - -Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan -the blockchain for missing spent coins, which will take a long time (tens -of minutes on a typical machine). - -Important changes -================== - -Gitian OSX build ------------------ - -The deterministic build system that was already used for Windows and Linux -builds is now used for OSX as well. Although the resulting executables have -been tested quite a bit, there could be possible regressions. Be sure to report -these on the Github bug tracker mentioned above. - -Compatibility of Linux build ------------------------------ - -For Linux we now build against Qt 4.6, and filter the symbols for libstdc++ and glibc. -This brings back compatibility with - -- Debian 6+ / Tails -- Ubuntu 10.04 -- CentOS 6.5 - -0.9.2 - 0.9.2.1 Release notes -======================= - -The OpenSSL dependency in the gitian builds has been upgraded to 1.0.1h because of CVE-2014-0224. - -RPC: - -- Add `getwalletinfo`, `getblockchaininfo` and `getnetworkinfo` calls (will replace hodge-podge `getinfo` at some point) -- Add a `relayfee` field to `getnetworkinfo` -- Fix RPC related shutdown hangs and leaks -- Always show syncnode in `getpeerinfo` -- `sendrawtransaction`: report the reject code and reason, and make it possible to re-send transactions that are already in the mempool -- `getmininginfo` show right genproclimit - -Command-line options: - -- Fix `-printblocktree` output -- Show error message if ReadConfigFile fails - -Block-chain handling and storage: - -- Fix for GetBlockValue() after block 13,440,000 (BIP42) -- Upgrade leveldb to 1.17 - -Protocol and network code: - -- Per-peer block download tracking and stalled download detection -- Add new DNS seed from bitnodes.io -- Prevent socket leak in ThreadSocketHandler and correct some proxy related socket leaks -- Use pnode->nLastRecv as sync score (was the wrong way around) - -Wallet: - -- Make GetAvailableCredit run GetHash() only once per transaction (performance improvement) -- Lower paytxfee warning threshold from 0.25 BTC to 0.01 BTC -- Fix importwallet nTimeFirstKey (trigger necessary rescans) -- Log BerkeleyDB version at startup -- CWallet init fix - -Build system: - -- Add OSX build descriptors to gitian -- Fix explicit --disable-qt-dbus -- Don't require db_cxx.h when compiling with wallet disabled and GUI enabled -- Improve missing boost error reporting -- Upgrade miniupnpc version to 1.9 -- gitian-linux: --enable-glibc-back-compat for binary compatibility with old distributions -- gitian: don't export any symbols from executable -- gitian: build against Qt 4.6 -- devtools: add script to check symbols from Linux gitian executables -- Remove build-time no-IPv6 setting - -GUI: - -- Fix various coin control visual issues -- Show number of in/out connections in debug console -- Show weeks as well as years behind for long timespans behind -- Enable and disable the Show and Remove buttons for requested payments history based on whether any entry is selected. -- Show also value for options overridden on command line in options dialog -- Fill in label from address book also for URIs -- Fixes feel when resizing the last column on tables (issue #2862) -- Fix ESC in disablewallet mode -- Add expert section to wallet tab in optionsdialog -- Do proper boost::path conversion (fixes unicode in datadir) -- Only override -datadir if different from the default (fixes -datadir in config file) -- Show rescan progress at start-up -- Show importwallet progress -- Get required locks upfront in polling functions (avoids hanging on locks) -- Catch Windows shutdown events while client is running -- Optionally add third party links to transaction context menu -- Check for !pixmap() before trying to export QR code (avoids crashes when no QR code could be generated) -- Fix "Start bitcoin on system login" - -Miscellaneous: - -- Replace non-threadsafe C functions (gmtime, strerror and setlocale) -- Add missing cs_main and wallet locks -- Avoid exception at startup when system locale not recognized -- Changed bitrpc.py's raw_input to getpass for passwords to conceal characters during command line input -- devtools: add a script to fetch and postprocess translations - -Credits --------- - -Thanks to everyone who contributed to this release: - -- Addy Yeow -- Altoidnerd -- Andrea D'Amore -- Andreas Schildbach -- Bardi Harborow -- Brandon Dahler -- Bryan Bishop -- Chris Beams -- Christian von Roques -- Cory Fields -- Cozz Lovan -- daniel -- Daniel Newton -- David A. Harding -- ditto-b -- duanemoody -- Eric S. Bullington -- Fabian Raetz -- Gavin Andresen -- Gregory Maxwell -- gubatron -- Haakon Nilsen -- harry -- Hector Jusforgues -- Isidoro Ghezzi -- Jeff Garzik -- Johnathan Corgan -- jtimon -- Kamil Domanski -- langerhans -- Luke Dashjr -- Manuel Araoz -- Mark Friedenbach -- Matt Corallo -- Matthew Bogosian -- Meeh -- Michael Ford -- Michagogo -- Mikael Wikman -- Mike Hearn -- olalonde -- paveljanik -- peryaudo -- Philip Kaufmann -- philsong -- Pieter Wuille -- R E Broadley -- richierichrawr -- Rune K. Svendsen -- rxl -- shshshsh -- Simon de la Rouviere -- Stuart Cardall -- super3 -- Telepatheic -- Thomas Zander -- Torstein Husebø -- Warren Togami -- Wladimir J. van der Laan -- Yoichi Hirai diff --git a/doc/release-notes/release-notes-0.9.2.md b/doc/release-notes/release-notes-0.9.2.md deleted file mode 100644 index a2749e549f..0000000000 --- a/doc/release-notes/release-notes-0.9.2.md +++ /dev/null @@ -1,207 +0,0 @@ -Bitcoin Core version 0.9.2 is now available from: - - https://bitcoin.org/bin/0.9.2/ - -This is a new minor version release, bringing mostly bug fixes and some minor -improvements. OpenSSL has been updated because of a security issue (CVE-2014-0224). -Upgrading to this release is recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.2 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -Downgrading warnings --------------------- - -The 'chainstate' for this release is not always compatible with previous -releases, so if you run 0.9.x and then decide to switch back to a -0.8.x release you might get a blockchain validation error when starting the -old release (due to 'pruned outputs' being omitted from the index of -unspent transaction outputs). - -Running the old release with the -reindex option will rebuild the chainstate -data structures and correct the problem. - -Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan -the blockchain for missing spent coins, which will take a long time (tens -of minutes on a typical machine). - -Important changes -================== - -Gitian OSX build ------------------ - -The deterministic build system that was already used for Windows and Linux -builds is now used for OSX as well. Although the resulting executables have -been tested quite a bit, there could be possible regressions. Be sure to report -these on the Github bug tracker mentioned above. - -Compatibility of Linux build ------------------------------ - -For Linux we now build against Qt 4.6, and filter the symbols for libstdc++ and glibc. -This brings back compatibility with - -- Debian 6+ / Tails -- Ubuntu 10.04 -- CentOS 6.5 - -0.9.2 Release notes -======================= - -The OpenSSL dependency in the gitian builds has been upgraded to 1.0.1h because of CVE-2014-0224. - -RPC: - -- Add `getwalletinfo`, `getblockchaininfo` and `getnetworkinfo` calls (will replace hodge-podge `getinfo` at some point) -- Add a `relayfee` field to `getnetworkinfo` -- Fix RPC related shutdown hangs and leaks -- Always show syncnode in `getpeerinfo` -- `sendrawtransaction`: report the reject code and reason, and make it possible to re-send transactions that are already in the mempool -- `getmininginfo` show right genproclimit - -Command-line options: - -- Fix `-printblocktree` output -- Show error message if ReadConfigFile fails - -Block-chain handling and storage: - -- Fix for GetBlockValue() after block 13,440,000 (BIP42) -- Upgrade leveldb to 1.17 - -Protocol and network code: - -- Per-peer block download tracking and stalled download detection -- Add new DNS seed from bitnodes.io -- Prevent socket leak in ThreadSocketHandler and correct some proxy related socket leaks -- Use pnode->nLastRecv as sync score (was the wrong way around) - -Wallet: - -- Make GetAvailableCredit run GetHash() only once per transaction (performance improvement) -- Lower paytxfee warning threshold from 0.25 BTC to 0.01 BTC -- Fix importwallet nTimeFirstKey (trigger necessary rescans) -- Log BerkeleyDB version at startup -- CWallet init fix - -Build system: - -- Add OSX build descriptors to gitian -- Fix explicit --disable-qt-dbus -- Don't require db_cxx.h when compiling with wallet disabled and GUI enabled -- Improve missing boost error reporting -- Upgrade miniupnpc version to 1.9 -- gitian-linux: --enable-glibc-back-compat for binary compatibility with old distributions -- gitian: don't export any symbols from executable -- gitian: build against Qt 4.6 -- devtools: add script to check symbols from Linux gitian executables -- Remove build-time no-IPv6 setting - -GUI: - -- Fix various coin control visual issues -- Show number of in/out connections in debug console -- Show weeks as well as years behind for long timespans behind -- Enable and disable the Show and Remove buttons for requested payments history based on whether any entry is selected. -- Show also value for options overridden on command line in options dialog -- Fill in label from address book also for URIs -- Fixes feel when resizing the last column on tables (issue #2862) -- Fix ESC in disablewallet mode -- Add expert section to wallet tab in optionsdialog -- Do proper boost::path conversion (fixes unicode in datadir) -- Only override -datadir if different from the default (fixes -datadir in config file) -- Show rescan progress at start-up -- Show importwallet progress -- Get required locks upfront in polling functions (avoids hanging on locks) -- Catch Windows shutdown events while client is running -- Optionally add third party links to transaction context menu -- Check for !pixmap() before trying to export QR code (avoids crashes when no QR code could be generated) -- Fix "Start bitcoin on system login" - -Miscellaneous: - -- Replace non-threadsafe C functions (gmtime, strerror and setlocale) -- Add missing cs_main and wallet locks -- Avoid exception at startup when system locale not recognized -- Changed bitrpc.py's raw_input to getpass for passwords to conceal characters during command line input -- devtools: add a script to fetch and postprocess translations - -Credits --------- - -Thanks to everyone who contributed to this release: - -- Addy Yeow -- Altoidnerd -- Andrea D'Amore -- Andreas Schildbach -- Bardi Harborow -- Brandon Dahler -- Bryan Bishop -- Chris Beams -- Christian von Roques -- Cory Fields -- Cozz Lovan -- daniel -- Daniel Newton -- David A. Harding -- ditto-b -- duanemoody -- Eric S. Bullington -- Fabian Raetz -- Gavin Andresen -- Gregory Maxwell -- gubatron -- Haakon Nilsen -- harry -- Hector Jusforgues -- Isidoro Ghezzi -- Jeff Garzik -- Johnathan Corgan -- jtimon -- Kamil Domanski -- langerhans -- Luke Dashjr -- Manuel Araoz -- Mark Friedenbach -- Matt Corallo -- Matthew Bogosian -- Meeh -- Michael Ford -- Michagogo -- Mikael Wikman -- Mike Hearn -- olalonde -- paveljanik -- peryaudo -- Philip Kaufmann -- philsong -- Pieter Wuille -- R E Broadley -- richierichrawr -- Rune K. Svendsen -- rxl -- shshshsh -- Simon de la Rouviere -- Stuart Cardall -- super3 -- Telepatheic -- Thomas Zander -- Torstein Husebø -- Warren Togami -- Wladimir J. van der Laan -- Yoichi Hirai diff --git a/doc/release-notes/release-notes-0.9.3.md b/doc/release-notes/release-notes-0.9.3.md deleted file mode 100644 index 0765a360b2..0000000000 --- a/doc/release-notes/release-notes-0.9.3.md +++ /dev/null @@ -1,101 +0,0 @@ -Bitcoin Core version 0.9.3 is now available from: - - https://bitcoin.org/bin/0.9.3/ - -This is a new minor version release, bringing only bug fixes and updated -translations. Upgrading to this release is recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -Upgrading and downgrading -========================== - -How to Upgrade --------------- - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -If you are upgrading from version 0.7.2 or earlier, the first time you run -0.9.3 your blockchain files will be re-indexed, which will take anywhere from -30 minutes to several hours, depending on the speed of your machine. - -Downgrading warnings --------------------- - -The 'chainstate' for this release is not always compatible with previous -releases, so if you run 0.9.x and then decide to switch back to a -0.8.x release you might get a blockchain validation error when starting the -old release (due to 'pruned outputs' being omitted from the index of -unspent transaction outputs). - -Running the old release with the -reindex option will rebuild the chainstate -data structures and correct the problem. - -Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan -the blockchain for missing spent coins, which will take a long time (tens -of minutes on a typical machine). - -0.9.3 Release notes -======================= - -RPC: -- Avoid a segfault on getblock if it can't read a block from disk -- Add paranoid return value checks in base58 - -Protocol and network code: -- Don't poll showmyip.com, it doesn't exist anymore -- Add a way to limit deserialized string lengths and use it -- Add a new checkpoint at block 295,000 -- Increase IsStandard() scriptSig length -- Avoid querying DNS seeds, if we have open connections -- Remove a useless millisleep in socket handler -- Stricter memory limits on CNode -- Better orphan transaction handling -- Add `-maxorphantx=` and `-maxorphanblocks=` options for control over the maximum orphan transactions and blocks - -Wallet: -- Check redeemScript size does not exceed 520 byte limit -- Ignore (and warn about) too-long redeemScripts while loading wallet - -GUI: -- fix 'opens in testnet mode when presented with a BIP-72 link with no fallback' -- AvailableCoins: acquire cs_main mutex -- Fix unicode character display on MacOSX - -Miscellaneous: -- key.cpp: fail with a friendlier message on missing ssl EC support -- Remove bignum dependency for scripts -- Upgrade OpenSSL to 1.0.1i (see https://www.openssl.org/news/secadv_20140806.txt - just to be sure, no critical issues for Bitcoin Core) -- Upgrade miniupnpc to 1.9.20140701 -- Fix boost detection in build system on some platforms - -Credits --------- - -Thanks to everyone who contributed to this release: - -- Andrew Poelstra -- Cory Fields -- Gavin Andresen -- Jeff Garzik -- Johnathan Corgan -- Julian Haight -- Michael Ford -- Pavel Vasin -- Peter Todd -- phantomcircuit -- Pieter Wuille -- Rose Toomey -- Ruben Dario Ponticelli -- shshshsh -- Trevin Hofmann -- Warren Togami -- Wladimir J. van der Laan -- Zak Wilcox - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.9.4.md b/doc/release-notes/release-notes-0.9.4.md deleted file mode 100644 index 7ee73246a9..0000000000 --- a/doc/release-notes/release-notes-0.9.4.md +++ /dev/null @@ -1,95 +0,0 @@ -Bitcoin Core version 0.9.4 is now available from: - - https://bitcoin.org/bin/0.9.4/ - -This is a new minor version release, bringing only bug fixes and updated -translations. Upgrading to this release is recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade -=============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -OpenSSL Warning -================ - -OpenSSL 1.0.0p / 1.0.1k was recently released and is being pushed out by -various operating system maintainers. Review by Gregory Maxwell determined that -this update is incompatible with the Bitcoin system and could lead to consensus -forks. - -Bitcoin Core released binaries from https://bitcoin.org are unaffected, -as are any built with the gitian deterministic build system. - -However, if you are running either - -- The Ubuntu PPA from https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin -- A third-party or self-compiled Bitcoin Core - -upgrade to Bitcoin Core 0.9.4, which includes a workaround, **before** updating -OpenSSL. - -The incompatibility is due to the OpenSSL update changing the -behavior of ECDSA validation to reject any signature which is -not encoded in a very rigid manner. This was a result of -OpenSSL's change for CVE-2014-8275 "Certificate fingerprints -can be modified". - -We are specifically aware of potential hard-forks due to signature -encoding handling and had been hoping to close them via BIP62 in 0.10. -BIP62's purpose is to improve transaction malleability handling and -as a side effect rigidly defines the encoding for signatures, but the -overall scope of BIP62 has made it take longer than we'd like to -deploy. - -0.9.4 changelog -================ - -Validation: -- `b8e81b7` consensus: guard against openssl's new strict DER checks -- `60c51f1` fail immediately on an empty signature -- `037bfef` Improve robustness of DER recoding code - -Command-line options: -- `cd5164a` Make -proxy set all network types, avoiding a connect leak. - -P2P: -- `bb424e4` Limit the number of new addressses to accumulate - -RPC: -- `0a94661` Disable SSLv3 (in favor of TLS) for the RPC client and server. - -Build system: -- `f047dfa` gitian: openssl-1.0.1i.tar.gz -> openssl-1.0.1k.tar.gz -- `5b9f78d` build: Fix OSX build when using Homebrew and qt5 -- `ffab1dd` Keep symlinks when copying into .app bundle -- `613247f` osx: fix signing to make Gatekeeper happy (again) - -Miscellaneous: -- `25b49b5` Refactor -alertnotify code -- `2743529` doc: Add instructions for consistent Mac OS X build names - -Credits --------- - -Thanks to who contributed to this release, at least: - -- Cory Fields -- Gavin Andresen -- Gregory Maxwell -- Jeff Garzik -- Luke Dashjr -- Matt Corallo -- Pieter Wuille -- Saivann -- Sergio Demian Lerner -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/release-notes/release-notes-0.9.5.md b/doc/release-notes/release-notes-0.9.5.md deleted file mode 100644 index bed0af9879..0000000000 --- a/doc/release-notes/release-notes-0.9.5.md +++ /dev/null @@ -1,60 +0,0 @@ -Bitcoin Core version 0.9.5 is now available from: - - https://bitcoin.org/bin/0.9.5/ - -This is a new minor version release, with the goal of backporting BIP66. There -are also a few bug fixes and updated translations. Upgrading to this release is -recommended. - -Please report bugs using the issue tracker at github: - - https://github.com/bitcoin/bitcoin/issues - -How to Upgrade -=============== - -If you are running an older version, shut it down. Wait until it has completely -shut down (which might take a few minutes for older versions), then run the -installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or -bitcoind/bitcoin-qt (on Linux). - -Notable changes -================ - -Mining and relay policy enhancements ------------------------------------- - -Bitcoin Core's block templates are now for version 3 blocks only, and any mining -software relying on its `getblocktemplate` must be updated in parallel to use -libblkmaker either version 0.4.2 or any version from 0.5.1 onward. -If you are solo mining, this will affect you the moment you upgrade Bitcoin -Core, which must be done prior to BIP66 achieving its 951/1001 status. -If you are mining with the stratum mining protocol: this does not affect you. -If you are mining with the getblocktemplate protocol to a pool: this will affect -you at the pool operator's discretion, which must be no later than BIP66 -achieving its 951/1001 status. - -0.9.5 changelog -================ - -- `74f29c2` Check pindexBestForkBase for null -- `9cd1dd9` Fix priority calculation in CreateTransaction -- `6b4163b` Sanitize command strings before logging them. -- `3230b32` Raise version of created blocks, and enforce DERSIG in mempool -- `989d499` Backport of some of BIP66's tests -- `ab03660` Implement BIP 66 validation rules and switchover logic -- `8438074` build: fix dynamic boost check when --with-boost= is used - -Credits --------- - -Thanks to who contributed to this release, at least: - -- 21E14 -- Alex Morcos -- Cory Fields -- Gregory Maxwell -- Pieter Wuille -- Wladimir J. van der Laan - -As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/). diff --git a/doc/setup-nodes-docker.md b/doc/setup-nodes-docker.md index 65301b526c..1f55bb16af 100644 --- a/doc/setup-nodes-docker.md +++ b/doc/setup-nodes-docker.md @@ -136,14 +136,14 @@ In the background, `defi-cli` read the information automatically from `/data/reg #### Using rpcauth for remote authentication -Before setting up remote authentication, you will need to generate the `rpcauth` line that will hold the credentials for the DeFi Blockchain daemon. You can either do this yourself by constructing the line with the format `:$` or use the official [`rpcauth.py`](https://github.com/DeFiCh/ain/blob/master/share/rpcauth/rpcauth.py) script to generate this line for you, including a random password that is printed to the console. +Before setting up remote authentication, you will need to generate the `rpcauth` line that will hold the credentials for the DeFi Blockchain daemon. You can either do this yourself by constructing the line with the format `:$` or use the official [`rpcauth.py`](https://github.com/DeFiCh/ain/blob/master/contrib/rpcauth/rpcauth.py) script to generate this line for you, including a random password that is printed to the console. _Note: This is a Python 3 script. use `[...] | python3 - ` when executing on macOS._ Example: ```sh -❯ curl -sSL https://raw.githubusercontent.com/DeFiCh/ain/master/share/rpcauth/rpcauth.py | python - +❯ curl -sSL https://raw.githubusercontent.com/DeFiCh/ain/master/contrib/rpcauth/rpcauth.py | python - String to be appended to defi.conf: rpcauth=foo:7d9ba5ae63c3d4dc30583ff4fe65a67e$9e3634e81c11659e3de036d0bf88f89cd169c1039e6e09607562d54765c649cc diff --git a/libdeficonsensus.pc.in b/libdeficonsensus.pc.in deleted file mode 100644 index e91fa80c57..0000000000 --- a/libdeficonsensus.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: @PACKAGE_NAME@ consensus library -Description: Library for the DeFi Blockchain Consensus Protocol. -Version: @PACKAGE_VERSION@ -Libs: -L${libdir} -ldeficonsensus -Cflags: -I${includedir} -Requires.private: libcrypto diff --git a/make.sh b/make.sh index b2f4254ef6..8bb9d589a3 100755 --- a/make.sh +++ b/make.sh @@ -3,59 +3,63 @@ # Copyright (c) DeFi Blockchain Developers # Maker script -# shellcheck disable=SC2155 - -export LC_ALL=C +export LC_ALL=C.UTF-8 set -Eeuo pipefail setup_vars() { IMAGE_PREFIX=${IMAGE_PREFIX:-"defichain"} - IMAGE_VERSION=${IMAGE_VERSION:-"latest"} + GIT_VERSION=${GIT_VERSION:-0} + if [[ "$GIT_VERSION" == 1 ]]; then + IMAGE_VERSION=${IMAGE_VERSION:-"$(git_version 0)"} + else + IMAGE_VERSION=${IMAGE_VERSION:-"latest"} + fi DOCKER_ROOT_CONTEXT=${DOCKER_ROOT_CONTEXT:-"."} DOCKERFILE=${DOCKERFILE:-""} DOCKERFILES_DIR=${DOCKERFILES_DIR:-"./contrib/dockerfiles"} + + ROOT_DIR="$(_canonicalize "${_SCRIPT_DIR}")" + + TARGET=${TARGET:-"$(_get_default_target)"} + RELEASE_DIR=${RELEASE_DIR:-"./build"} + RELEASE_DIR="$(_canonicalize "$RELEASE_DIR")" + RELEASE_TARGET_DIR="${RELEASE_DIR}/${TARGET}" + DEPENDS_DIR=${DEPENDS_DIR:-"${RELEASE_DIR}/depends"} + DEPENDS_DIR="$(_canonicalize "$DEPENDS_DIR")" - local default_target="x86_64-pc-linux-gnu" - if [[ "${OSTYPE}" == "darwin"* ]]; then - default_target="x86_64-apple-darwin18" - elif [[ "${OSTYPE}" == "msys" ]]; then - default_target="x86_64-w64-mingw32" + CLANG_DEFAULT_VERSION=${CLANG_DEFAULT_VERSION:-"15"} + MAKE_DEBUG=${MAKE_DEBUG:-"0"} + + local default_compiler_flags="" + if [[ "${TARGET}" == "x86_64-pc-linux-gnu" ]]; then + local clang_ver="${CLANG_DEFAULT_VERSION}" + default_compiler_flags="CC=clang-${clang_ver} CXX=clang++-${clang_ver}" fi - # shellcheck disable=SC2206 - # This intentionally word-splits the array as env arg can only be strings. - # Other options available: x86_64-w64-mingw32 x86_64-apple-darwin11 - TARGET=${TARGET:-"${default_target}"} + MAKE_JOBS=${MAKE_JOBS:-"$(_nproc)"} - local default_compiler_flags="" - if [[ "${TARGET}" == "x86_64-pc-linux-gnu" || \ - "${TARGET}" == "x86_64-apple-darwin11" ]]; then - default_compiler_flags="CC=clang-16 CXX=clang++-16" + MAKE_CONF_ARGS="$(_get_default_conf_args) ${MAKE_CONF_ARGS:-}" + MAKE_CONF_ARGS="${default_compiler_flags} ${MAKE_CONF_ARGS:-}" + if [[ "${MAKE_DEBUG}" == "1" ]]; then + MAKE_CONF_ARGS="${MAKE_CONF_ARGS} --enable-debug"; fi - if [[ "${OSTYPE}" == "darwin"* ]]; then - default_jobs=$(sysctl -n hw.logicalcpu) - else - default_jobs=$(nproc) + MAKE_CONF_ARGS_OVERRIDE="${MAKE_CONF_ARGS_OVERRIDE:-}" + if [[ "${MAKE_CONF_ARGS_OVERRIDE}" ]]; then + MAKE_CONF_ARGS="${MAKE_CONF_ARGS_OVERRIDE}" fi - MAKE_JOBS=${MAKE_JOBS:-"${default_jobs}"} - MAKE_COMPILER=${MAKE_COMPILER:-"${default_compiler_flags}"} - MAKE_CONF_ARGS="${MAKE_COMPILER} ${MAKE_CONF_ARGS:-}" MAKE_ARGS=${MAKE_ARGS:-} MAKE_DEPS_ARGS=${MAKE_DEPS_ARGS:-} - MAKE_DEBUG=${MAKE_DEBUG:-"0"} - if [[ "${MAKE_DEBUG}" == "1" ]]; then - MAKE_CONF_ARGS="${MAKE_CONF_ARGS} --enable-debug"; - fi } main() { _ensure_script_dir trap _cleanup 0 1 2 3 6 15 ERR cd "$_SCRIPT_DIR" + _platform_init setup_vars # Get all functions declared in this file except ones starting with @@ -66,6 +70,7 @@ main() { # Commands use `-` instead of `_` for getopts consistency. Flip this. local cmd=${1:-} && cmd="${cmd//-/_}" + local x for x in "${COMMANDS[@]}"; do if [[ "$x" == "$cmd" ]]; then shift @@ -91,10 +96,12 @@ _cleanup() { help() { echo "Usage: $0 " + printf "\n\`%s build\` or \`%s docker-build\` are your friends :) \n" "$0" "$0" printf "\nCommands:\n" printf "\t%s\n" "${COMMANDS[@]//_/-}" - printf "\nNote: All non-docker commands assume that it's run on an environment \n" - printf "with correct arch and the pre-requisites properly configured. \n" + printf "\nNote: All commands without docker-* prefix assume that it's run in\n" + printf "an environment with correct arch and pre-requisites configured. \n" + printf "(most pre-requisites can be installed with pkg-* commands). \n" } # ----------- Direct builds --------------- @@ -103,37 +110,67 @@ build_deps() { local target=${1:-${TARGET}} local make_deps_args=${MAKE_DEPS_ARGS:-} local make_jobs=${MAKE_JOBS} + local src_depends_dir=${ROOT_DIR}/depends + local release_depends_dir=${DEPENDS_DIR} echo "> build-deps: target: ${target} / deps_args: ${make_deps_args} / jobs: ${make_jobs}" - pushd ./depends >/dev/null - # XREF: #make-deps + + _ensure_enter_dir "$release_depends_dir" + if [[ "$target" =~ .*darwin.* ]]; then + pkg_local_ensure_osx_sysroot + fi + + _fold_start "build-deps" + # shellcheck disable=SC2086 - make HOST="${target}" -j${make_jobs} ${make_deps_args} - popd >/dev/null + make -C "${src_depends_dir}" DESTDIR="${release_depends_dir}" \ + HOST="${target}" -j${make_jobs} ${make_deps_args} + + _fold_end + _exit_dir } build_conf() { local target=${1:-${TARGET}} local make_conf_opts=${MAKE_CONF_ARGS:-} local make_jobs=${MAKE_JOBS} + local root_dir=${ROOT_DIR} + local release_target_dir=${RELEASE_TARGET_DIR} + local release_depends_dir=${DEPENDS_DIR} echo "> build-conf: target: ${target} / conf_args: ${make_conf_opts} / jobs: ${make_jobs}" - ./autogen.sh - # XREF: #make-configure - # ./configure --prefix="$(pwd)/depends/x86_64-pc-linux-gnu" ${make_conf_opts} + _ensure_enter_dir "${release_target_dir}" + _fold_start "build-conf::autogen" + "$root_dir/autogen.sh" + _fold_end + + _fold_start "build-conf::configure" # shellcheck disable=SC2086 - CONFIG_SITE="$(pwd)/depends/${target}/share/config.site" ./configure --prefix="$(pwd)/depends/${target}" ${make_conf_opts} + CONFIG_SITE="$release_depends_dir/${target}/share/config.site" \ + $root_dir/configure --prefix="$release_depends_dir/${target}" \ + ${make_conf_opts} + _fold_end + _exit_dir } build_make() { local target=${1:-${TARGET}} local make_args=${MAKE_ARGS:-} local make_jobs=${MAKE_JOBS} + local release_target_dir=${RELEASE_TARGET_DIR} echo "> build: target: ${target} / args: ${make_args} / jobs: ${make_jobs}" + + _ensure_enter_dir "${release_target_dir}" + _fold_start "build_make" + # shellcheck disable=SC2086 - make -j${make_jobs} ${make_args} + make DESTDIR="${release_target_dir}" -j${make_jobs} ${make_args} + + + _fold_end + _exit_dir } build() { @@ -147,21 +184,18 @@ deploy() { local img_prefix="${IMAGE_PREFIX}" local img_version="${IMAGE_VERSION}" local release_dir="${RELEASE_DIR}" + local release_target_dir="${RELEASE_TARGET_DIR}" - mkdir -p "${release_dir}" - - # XREF: #pkg-name local versioned_name="${img_prefix}-${img_version}" local versioned_release_path - versioned_release_path="$(readlink -m "${release_dir}/${versioned_name}")" + versioned_release_path="$(_canonicalize "${release_dir}/${versioned_name}")" echo "> deploy into: ${release_dir} from ${versioned_release_path}" - pushd "${release_dir}" >/dev/null - rm -rf "./${versioned_name}" && mkdir "${versioned_name}" - popd >/dev/null - - make prefix=/ DESTDIR="${versioned_release_path}" install && cp README.md "${versioned_release_path}/" + _safe_rm_rf "${versioned_release_path}" && mkdir -p "${versioned_release_path}" + + make -C "${release_target_dir}" prefix=/ DESTDIR="${versioned_release_path}" \ + install && cp README.md "${versioned_release_path}/" echo "> deployed: ${versioned_release_path}" } @@ -172,23 +206,26 @@ package() { local img_version="${IMAGE_VERSION}" local release_dir="${RELEASE_DIR}" - deploy "${target}" - - # XREF: #pkg-name local pkg_name="${img_prefix}-${img_version}-${target}" local pkg_tar_file_name="${pkg_name}.tar.gz" local pkg_path - pkg_path="$(readlink -m "${release_dir}/${pkg_tar_file_name}")" + pkg_path="$(_canonicalize "${release_dir}/${pkg_tar_file_name}")" local versioned_name="${img_prefix}-${img_version}" local versioned_release_dir="${release_dir}/${versioned_name}" + if [[ ! -d "$versioned_release_dir" ]]; then + echo "> error: deployment required to package" + echo "> tip: try \`$0 deploy\` or \`$0 docker-deploy\` first" + exit 1 + fi + echo "> packaging: ${pkg_name} from ${versioned_release_dir}" - pushd "${versioned_release_dir}" >/dev/null - tar --transform "s,^./,${versioned_name}/," -cvzf "${pkg_path}" ./* - popd >/dev/null + _ensure_enter_dir "${versioned_release_dir}" + tar --transform "s,^./,${versioned_name}/," -czf "${pkg_path}" ./* + _exit_dir echo "> package: ${pkg_path}" } @@ -197,8 +234,9 @@ release() { local target=${1:-${TARGET}} build "${target}" + deploy "${target}" package "${target}" - sign "${target}" + _sign "${target}" } # -------------- Docker --------------- @@ -212,40 +250,12 @@ docker_build() { echo "> docker-build"; - if [[ "$target" == "x86_64-apple-darwin"* ]]; then - pkg_ensure_mac_sdk - fi local img="${img_prefix}-${target}:${img_version}" echo "> building: ${img}" echo "> docker build: ${img}" docker build -f "${docker_file}" -t "${img}" "${docker_context}" } -docker_package() { - local target=${1:-${TARGET}} - local img_prefix="${IMAGE_PREFIX}" - local img_version="${IMAGE_VERSION}" - local release_dir="${RELEASE_DIR}" - - echo "> docker-package"; - - local img="${img_prefix}-${target}:${img_version}" - echo "> packaging: ${img}" - - # XREF: #pkg-name - local pkg_name="${img_prefix}-${img_version}-${target}" - local pkg_tar_file_name="${pkg_name}.tar.gz" - local pkg_rel_path="${release_dir}/${pkg_tar_file_name}" - local versioned_name="${img_prefix}-${img_version}" - - mkdir -p "${release_dir}" - - docker run --rm "${img}" bash -c \ - "tar --transform 's,^./,${versioned_name}/,' -czf - ./*" >"${pkg_rel_path}" - - echo "> package: ${pkg_rel_path}" -} - docker_deploy() { local target=${1:-${TARGET}} local img_prefix="${IMAGE_PREFIX}" @@ -257,12 +267,11 @@ docker_deploy() { local img="${img_prefix}-${target}:${img_version}" echo "> deploy from: ${img}" - # XREF: #pkg-name local pkg_name="${img_prefix}-${img_version}-${target}" local versioned_name="${img_prefix}-${img_version}" local versioned_release_dir="${release_dir}/${versioned_name}" - rm -rf "${versioned_release_dir}" && mkdir -p "${versioned_release_dir}" + _safe_rm_rf "${versioned_release_dir}" && mkdir -p "${versioned_release_dir}" local cid cid=$(docker create "${img}") @@ -274,121 +283,120 @@ docker_deploy() { if [[ "$e" == "1" ]]; then echo "> deployed into: ${versioned_release_dir}" else - echo "> failed: please sure package is built first" + echo "> failed: please ensure package is built first" fi } docker_release() { - docker_build "$@" - docker_package "$@" - sign "$@" -} + local target=${1:-${TARGET}} -docker_package_git() { - git_version - docker_package "$@" + docker_build "$target" + docker_deploy "$target" + package "$target" + _sign "$target" } -docker_release_git() { - git_version - docker_release "$@" +docker_clean_builds() { + echo "> clean: defichain build images" + _docker_clean "org.defichain.name=defichain" } -docker_build_deploy_git() { - git_version - docker_build "$@" - docker_deploy "$@" +docker_clean_all() { + echo "> clean: defichain* images" + _docker_clean "org.defichain.name" } -docker_clean() { - rm -rf "${RELEASE_DIR}" - docker_clean_images +_docker_clean() { + local labels_to_clean=${1:?labels required} + # shellcheck disable=SC2046 + docker rmi $(docker images -f label="${labels_to_clean}" -q) \ + --force 2>/dev/null || true } -docker_clean_images() { - echo "> clean: defichain images" +# -------------- Misc ----------------- - local imgs - imgs="$(docker images -f label=org.defichain.name=defichain -q)" - if [[ -n "${imgs}" ]]; then - # shellcheck disable=SC2086 - docker rmi ${imgs} --force - _docker_clean_builder_base - fi -} +test() { + local make_jobs=${MAKE_JOBS} + local make_args=${MAKE_ARGS:-} + local release_target_dir=${RELEASE_TARGET_DIR} -_docker_clean_builder_base() { - echo "> clean: defichain-builder-base images" + _ensure_enter_dir "${release_target_dir}" - # shellcheck disable=SC2046 - docker rmi $(docker images -f label=org.defichain.name=defichain-builder-base -q) \ - 2>/dev/null || true -} + _fold_start "unit-tests" + # shellcheck disable=SC2086 + make -j$make_jobs check + _fold_end -docker_purge() { - echo "> clean: defichain* images" + _fold_start "functional-tests" + # shellcheck disable=SC2086 + ./test/functional/test_runner.py --ci -j$make_jobs --tmpdirprefix "./test_runner/" --ansi --combinedlogslen=10000 + _fold_end - # shellcheck disable=SC2046 - docker rmi $(docker images -f label=org.defichain.name -q) \ - 2>/dev/null || true + _exit_dir } -# -------------- Misc ----------------- +exec() { + local make_jobs=${MAKE_JOBS} + local make_args=${MAKE_ARGS:-} + local release_target_dir=${RELEASE_TARGET_DIR} -sign() { - # TODO: generate sha sums and sign - : + _ensure_enter_dir "${release_target_dir}" + _fold_start "exec:: ${*-(default)}" + + # shellcheck disable=SC2086,SC2068 + make -j$make_jobs $make_args $@ + + _fold_end + _exit_dir } git_version() { + local verbose=${1:-1} # If we have a tagged version (for proper releases), then just # release it with the tag, otherwise we use the commit hash local current_tag local current_commit local current_branch - git fetch --tags + git fetch --tags &> /dev/null current_tag=$(git tag --points-at HEAD | head -1) current_commit=$(git rev-parse --short HEAD) current_branch=$(git rev-parse --abbrev-ref HEAD) - if [[ -z $current_tag || "${current_branch}" == "hotfix" ]]; then + local ver="" + + if [[ -z $current_tag ]]; then # Replace `/` in branch names with `-` as / is trouble - IMAGE_VERSION="${current_branch//\//-}-${current_commit}" - if [[ "${current_branch}" == "hotfix" ]]; then - # If the current branch is hotfix branch, - # prefix it with the last available tag. - local last_tag - last_tag="$(git describe --tags "$(git rev-list --tags --max-count=1)")" - echo "> last tag: ${last_tag}" - if [[ -n "${last_tag}" ]]; then - IMAGE_VERSION="${last_tag}-${IMAGE_VERSION}" - fi - fi + ver="${current_branch//\//-}-${current_commit}" else - IMAGE_VERSION="${current_tag}" + ver="${current_tag}" # strip the 'v' infront of version tags - if [[ "$IMAGE_VERSION" =~ ^v[0-9]\.[0-9] ]]; then - IMAGE_VERSION="${IMAGE_VERSION##v}" + if [[ "$ver" =~ ^v[0-9]\.[0-9] ]]; then + ver="${ver##v}" fi fi - echo "> git branch: ${current_branch}" - echo "> version: ${IMAGE_VERSION}" - - if [[ -n "${GITHUB_ACTIONS-}" ]]; then - # GitHub Actions - echo "BUILD_VERSION=${IMAGE_VERSION}" >> "$GITHUB_ENV" + if [[ "$verbose" == "1" ]]; then + echo "> git branch: ${current_branch}" + echo "> version: ${ver}" + else + echo "$ver" fi } -pkg_install_base() { - apt update - apt install -y apt-transport-https - apt dist-upgrade -y +pkg_update_base() { + _fold_start "pkg-update-base" + + apt update + apt install -y apt-transport-https + apt dist-upgrade -y + + _fold_end } -pkg_install_deps_x86_64() { +pkg_install_deps() { + _fold_start "pkg-install-deps" + apt install -y \ software-properties-common build-essential git libtool autotools-dev automake \ pkg-config bsdmainutils python3 python3-pip libssl-dev libevent-dev libboost-system-dev \ @@ -396,56 +404,156 @@ pkg_install_deps_x86_64() { libminiupnpc-dev libzmq3-dev libqrencode-dev wget \ libdb-dev libdb++-dev libdb5.3 libdb5.3-dev libdb5.3++ libdb5.3++-dev \ curl cmake unzip -} -pkg_install_mac_sdk_deps() { - apt install -y \ - python3-dev python3-pip libcap-dev libbz2-dev libz-dev fonts-tuffy librsvg2-bin libtiff-tools imagemagick libtinfo5 + _fold_end } pkg_install_deps_mingw_x86_64() { - apt install -y \ - g++-mingw-w64-x86-64 mingw-w64-x86-64-dev nsis + _fold_start "pkg-install-deps-mingw-x86_64" + + apt install -y \ + g++-mingw-w64-x86-64 mingw-w64-x86-64-dev + + _fold_end } -pkg_install_llvm() { - wget -O - "https://apt.llvm.org/llvm.sh" | bash -s 16 +pkg_install_deps_armhf() { + _fold_start "pkg-install-deps-armhf" + + apt install -y \ + g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf + + _fold_end +} + +pkg_install_deps_arm64() { + _fold_start "pkg-install-deps-arm64" + + apt install -y \ + g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + + _fold_end +} + +pkg_install_deps_osx_tools() { + _fold_start "pkg-install-deps-mac-tools" + + apt install -y \ + python3-dev libcap-dev libbz2-dev libz-dev fonts-tuffy librsvg2-bin libtiff-tools imagemagick libtinfo5 + + _fold_end } -pkg_ensure_mac_sdk() { - local sdk_name="Xcode-11.3.1-11C505-extracted-SDK-with-libcxx-headers" +pkg_local_ensure_osx_sysroot() { + local sdk_name="Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers" local pkg="${sdk_name}.tar.gz" + local release_depends_dir=${DEPENDS_DIR} - echo "> ensuring mac sdk" + _ensure_enter_dir "$release_depends_dir/SDKs" + if [[ -d "${sdk_name}" ]]; then return; fi - mkdir -p ./depends/SDKs - pushd ./depends/SDKs >/dev/null - if [[ ! -d "$sdk_name" ]]; then - if [[ ! -f "${pkg}" ]]; then - wget https://bitcoincore.org/depends-sources/sdks/${pkg} - fi - tar -zxvf "${pkg}" + _fold_start "pkg-local-mac-sdk" + + if [[ ! -f "${pkg}" ]]; then + wget https://bitcoincore.org/depends-sources/sdks/${pkg} fi + tar -zxf "${pkg}" rm "${pkg}" 2>/dev/null || true - popd >/dev/null + _exit_dir + + _fold_end } -clean_mac_sdk() { - rm -rf ./depends/SDKs +pkg_install_llvm() { + _fold_start "pkg-install-llvm" + # shellcheck disable=SC2086 + wget -O - "https://apt.llvm.org/llvm.sh" | bash -s ${CLANG_DEFAULT_VERSION} + _fold_end +} + +pkg_install_rust() { + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +} + +clean_pkg_local_osx_sysroot() { + local release_depends_dir=${DEPENDS_DIR} + _safe_rm_rf "$release_depends_dir/SDKs" } purge() { - clean + local release_dir="${RELEASE_DIR}" + local release_depends_dir=${DEPENDS_DIR} + clean_depends - # shellcheck disable=SC2119 - docker_purge + _safe_rm_rf "$release_depends_dir" + clean_conf + clean_artifacts + docker_clean_all + _safe_rm_rf "$release_dir" +} + +clean_artifacts() { + # If build is done out of tree, this is not needed at all. But when done + # in-tree, or helper tools that end up running configure in-tree, this is + # a helpful method to clean up left overs. + local items=(\ + .libs .deps obj "*.dirstamp" "*.a" "*.o" "*.Po" "*.lo") + + local x + for x in "${items[@]}"; do + _safe_rm_rf "$(find src -iname "$x" -print0 | xargs -0)" + done +} + +clean_conf() { + local top_left_overs=(\ + Makefile.in aclocal.m4 autom4te.cache configure configure~) + + # If things were built in-tree, help clean this up as well + local in_tree_conf_left_overs=(\ + Makefile libtool config.log config.status) + + local build_aux_left_overs=(\ + ar-lib compile config.guess config.sub depcomp install-sh ltmain.sh + missing test-driver) + + local build_aux_m4_left_overs=(\ + libtool.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4) + + local left_overs=("${top_left_overs[@]}" \ + "${in_tree_conf_left_overs[@]}" \ + "${build_aux_left_overs[@]/#/build-aux/}" \ + "${build_aux_m4_left_overs[@]/#/build-aux/m4/}") + + local individual_files=(./test/config.ini) + + local x + for x in "${individual_files[@]}"; do + _safe_rm_rf "$x" + done + + for x in "${left_overs[@]} "; do + _safe_rm_rf "$x" + _safe_rm_rf "src/secp256k1/$x" + _safe_rm_rf "src/univalue/$x" + done + + _safe_rm_rf \ + src/Makefile.in \ + src/defi-config.h.{in,in~} \ + src/univalue/univalue-config.h.{in,in~} \ + src/secp256k1/libsecp256k1-config.h.{in,in~} } clean_depends() { - pushd ./depends >/dev/null - make clean-all || true - clean_mac_sdk - rm -rf built \ + local root_dir="$ROOT_DIR" + local release_dir="${RELEASE_DIR}" + local release_depends_dir=${DEPENDS_DIR} + + make -C "$root_dir/depends" DESTDIR="${release_depends_dir}" clean-all || true + _ensure_enter_dir "$release_depends_dir" + clean_pkg_local_osx_sysroot + _safe_rm_rf built \ work \ sources \ x86_64* \ @@ -455,77 +563,139 @@ clean_depends() { aarch64* \ riscv32* \ riscv64* - popd >/dev/null + _exit_dir } clean() { + local release_dir="${RELEASE_TARGET_DIR}" + _ensure_enter_dir "${release_dir}" make clean || true - make distclean || true - rm -rf "${RELEASE_DIR}" - - # All untracked git files that's left over after clean - find . -type d -name ".deps" -exec rm -rf {} + || true - - rm -rf src/secp256k1/Makefile.in \ - src/secp256k1/aclocal.m4 \ - src/secp256k1/autom4te.cache/ \ - src/secp256k1/build-aux/compile \ - src/secp256k1/build-aux/config.guess \ - src/secp256k1/build-aux/config.sub \ - src/secp256k1/build-aux/depcomp \ - src/secp256k1/build-aux/install-sh \ - src/secp256k1/build-aux/ltmain.sh \ - src/secp256k1/build-aux/m4/libtool.m4 \ - src/secp256k1/build-aux/m4/ltoptions.m4 \ - src/secp256k1/build-aux/m4/ltsugar.m4 \ - src/secp256k1/build-aux/m4/ltversion.m4 \ - src/secp256k1/build-aux/m4/lt~obsolete.m4 \ - src/secp256k1/build-aux/missing \ - src/secp256k1/build-aux/test-driver \ - src/secp256k1/configure \ - src/secp256k1/src/libsecp256k1-config.h.in \ - src/secp256k1/src/libsecp256k1-config.h.in~ \ - src/univalue/Makefile.in \ - src/univalue/aclocal.m4 \ - src/univalue/autom4te.cache/ \ - src/univalue/build-aux/compile \ - src/univalue/build-aux/config.guess \ - src/univalue/build-aux/config.sub \ - src/univalue/build-aux/depcomp \ - src/univalue/build-aux/install-sh \ - src/univalue/build-aux/ltmain.sh \ - src/univalue/build-aux/m4/libtool.m4 \ - src/univalue/build-aux/m4/ltoptions.m4 \ - src/univalue/build-aux/m4/ltsugar.m4 \ - src/univalue/build-aux/m4/ltversion.m4 \ - src/univalue/build-aux/m4/lt~obsolete.m4 \ - src/univalue/build-aux/missing \ - src/univalue/build-aux/test-driver \ - src/univalue/configure \ - src/univalue/univalue-config.h.in \ - src/univalue/univalue-config.h.in~ - - rm -rf ./autom4te.cache \ - Makefile.in \ - aclocal.m4 \ - build-aux/compile \ - build-aux/config.guess \ - build-aux/config.sub \ - build-aux/depcomp \ - build-aux/install-sh \ - build-aux/ltmain.sh \ - build-aux/m4/libtool.m4 \ - build-aux/m4/ltoptions.m4 \ - build-aux/m4/ltsugar.m4 \ - build-aux/m4/ltversion.m4 \ - build-aux/m4/lt~obsolete.m4 \ - build-aux/missing \ - build-aux/test-driver \ - configure \ - doc/man/Makefile.in \ - src/Makefile.in \ - src/config/defi-config.h.in \ - src/config/defi-config.h.in~ + _exit_dir + clean_artifacts +} + +# ======== +# Internal Support methods +# ======== + +# Defaults +# --- + +_get_default_target() { + local default_target="" + if [[ "${OSTYPE}" == "darwin"* ]]; then + default_target="x86_64-apple-darwin" + elif [[ "${OSTYPE}" == "msys" ]]; then + default_target="x86_64-w64-mingw32" + else + # Note: make.sh only formally supports auto selection for + # windows under msys, mac os and debian derivatives to build on. + # Also note: Support for auto selection on make.sh does not imply + # support for the architecture. + # Only supported architectures are the ones with release builds + # enabled on the CI. + local dpkg_arch="" + dpkg_arch=$(dpkg --print-architecture || true) + if [[ "$dpkg_arch" == "armhf" ]]; then + default_target="arm-linux-gnueabihf" + elif [[ "$dpkg_arch" == "aarch64" ]]; then + default_target="aarch64-linux-gnu" + else + # Global default if we can't determine it from the + # above, which are our only supported list for auto select + default_target="x86_64-pc-linux-gnu" + fi + fi + echo "$default_target" +} + +_get_default_conf_args() { + local conf_args="" + if [[ "$TARGET" =~ .*linux.* ]]; then + conf_args="${conf_args} --enable-glibc-back-compat"; + fi + conf_args="${conf_args} --enable-static"; + conf_args="${conf_args} --enable-reduce-exports"; + # Note: https://stackoverflow.com/questions/13636513/linking-libstdc-statically-any-gotchas + # We don't use dynamic loading at the time being + conf_args="${conf_args} LDFLAGS=-static-libstdc++"; + # Other potential options: -static-libgcc on gcc, -static on clang + echo "$conf_args" +} + +# Platform specifics +# --- + +_platform_init() { + # Lazy init functions + if [[ $(readlink -m . 2> /dev/null) != "${_SCRIPT_DIR}" ]]; then + if [[ $(greadlink -m . 2> /dev/null) != "${_SCRIPT_DIR}" ]]; then + echo "error: readlink or greadlink with \`-m\` support is required" + echo "tip: debian/ubuntu: apt install coreutils" + echo "tip: osx: brew install coreutils" + exit 1 + else + _canonicalize() { + greadlink -m "$@" + } + fi + else + _canonicalize() { + readlink -m "$@" + } + fi +} + +_nproc() { + if [[ "${OSTYPE}" == "darwin"* ]]; then + sysctl -n hw.logicalcpu + else + nproc + fi +} + +# Misc +# --- + +ci_export_vars() { + if [[ -n "${GITHUB_ACTIONS-}" ]]; then + # GitHub Actions + echo "BUILD_VERSION=${IMAGE_VERSION}" >> "$GITHUB_ENV" + fi +} + +_sign() { + # TODO: generate sha sums and sign + : +} + +_safe_rm_rf() { + local x + for x in "$@"; do + if [[ "$x" =~ ^[[:space:]]*$ || "$x" =~ ^/*$ ]]; then + # Safe guard against accidental rm -rfs + echo "error: unsafe delete attempted" + exit 1 + fi + rm -rf "$x" + done +} + +_fold_start() { + echo "::group::${*:-}" +} + +_fold_end() { + echo "::endgroup::" +} + +_ensure_enter_dir() { + local dir="${1?dir required}" + mkdir -p "${dir}" && pushd "${dir}" > /dev/null +} + +_exit_dir() { + popd > /dev/null } main "$@" diff --git a/share/pixmaps/nsis-header.bmp b/share/pixmaps/nsis-header.bmp deleted file mode 100644 index f54e249a0c1e77003e93d9f9a0f1325caa859e42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25820 zcmeI31!F9c`{C}g_gm_|+TJ(w z9`GJA2{XwzTT@+C-Ch6g>Z*Qh{!$kk1pEAC;hloNiTq{fFLK>Myp^7om+ z>reM_J>Yu4^?>Vv06pNw(f}Rk0Cg8b2Y?XZ5L^rcbf5#&T?`!nLV!bXF$~aw4p4V7 zbN~ne4#CARKnFTN-Nn!WAOtuB7sCJ@=m2#WLkEBm;1FC419YGR)V~hH3l}adUc7kd z(4k$rbm`f%=cGxKwrtt*^yyOvOu!w&pFS~s|Ni}~S+fciDik(s*r1=P{{C<5*s&Wm zYP5UzZr6>!)&t%#oI7`JqC|=QhRi!vv0}xWH*fyhdHl}3d%>_)tyIM$g;V)$yS89hv}jRVv_ggqnIuV)$dM!4wkp%zjX!@W z{S!knPentCs#UAjsZ%F>`0$L5ou+(SB1DJ~w{PF}F%M48e;d!dXum8nKNg`jT<*$z<^b&Rw+}6XV0F!eEAak z)2B})*dIQ8@DOJ>5`O#Q_2{Q2|8j2Sa$&YTk`PAK0>oIH7Q(V|5NTa!OJ{qN`J z-Me>IML4LSxOC~#^XJdo3JBA{@WzcBwy@x1WNF&GdGmt@4)pF|*|KG`Wy^N$+BKDjXx6M*jvP5UcI?=(;I7!Q}Jc!GqSb299Z5w60vaQlv-`(@V*cB?Az(dG6e~ ze|>(e@UC9H8evnndiCneT6Imrz_3As|NpBvQxzKbph5CEbLLElyLa!tc<}--*R5L@ zFJ3$kVfnO9NcvlUFXU`rrf|sI4kB)GdFk!lP?>=zgKo*hcE?Kff#7>_+Eu8J!x2qz= z#*G_=j}wS8ct(yeRx#C{DJgUihD^ny2xNs6C{TcP>@8AZ;L@c_j9of3-+0K{6&%pW znl-C!6HG1;WW7KaE?juovSlJUW5$ez4I8Q!p^3@qrxKjxB1SI>6DCx?5-nS{WXs8C zixw?LjvNUM?8F5oqGCdf8a1kB&6*~YFd=g!FEAG=A)UZP6KnAG>(`=EsZu341Re8a zA$Gt7RZa@Th)QB`*REY=M{(lBfnTFW4P`!h^hg39kSbG&APjMs*wc5oaN*22O{8T` zsZ*z>v@ck&piWxGrCLHD^YPA z^;3zRJ9o;~Vg<1rl&=Jq=^cN-@dHD`JF_D%xO3-@+7yCiE)(a3gv0SpUI2%HY)W$Y zu`}Q=Sg-)TErzTJ1Q0V7h306ze*LHf>}S=9`ek+LiN==x#Rk>eWk(5yVWs z(sXF;%{PX`XO_4vhP7+gR%?ukFs`3gf-`pBym?kW98ON+ImEYOsL28csjX!RcdT(* z*`?wKYq~?gr-|r_80Vpg?c29cZBCs!6($>K{P^(`CQRVa<{>DM@Uv1pcC2UxVaUA2 zp7pJ9Od~o3kYa$)kv@HTs|p;B4jq>g1pe&Vv+Jh^!No%U{P~6Hu@6lQiHF;^ZS&AI zKLMF|YjTt(Gg!NJEuV@ZhY0c>`49ql&WvW{hcZnriq)D)EMLC7M~@yL0F#4JgssOc zrvOdu+Ow>C>lMdpmXN6v-ibo>P=JPxR z^R{nEhcS;2M4*2C`e29+YceDPYu2o>_D0%4RzaOZeNBPFBlLj-2Pnomb?T%l#08Cq zL{40;O_byb5+snQrOdZ)-^Pj+YxeBfa2Ocp5<5p*A@1M5&mPdcUNK}zX3m_MV(iwf zTc$kY96NTba>!0(UWX1HQl<}r;#TBIuz;Q36+ntrQ4|a#MdE*A`YTnUjvY2^7){Iq z4qK5$ha&YB+Yb&C^tksBJ3$z>Z{J?}w0*a3-5PP0m#hY4ICLewWUt$*Q2a;_=9}}- zM{U6tWz-@M2%In=%*rDlMhgPmw9~k8<5I=5f;Mg1#GXl$CJpxh+84()8yo+T3J}n^ zs$t|5X(~YN$MMA{HDtMR<=BUu3y2|%3U?0dWb^U{=wzClS8Bv0=#dplpiw4(SUp3~ zktrZ{{P=MZAOllL$pvw^a)h8-;>1zoCJ}_8S-pB_^O-ntVir1jBvgEI{XnP|GwdI$ zJhi{siPFCFQc^yxAs7#7DhUTnJPJf)$gEU#0CgRp@dGB8H-K!-RM}uu$0TG;n>NKP z4%T5nfR*eh<|TzFXAY)V7a&hZrm)aBftgC?X>FCfl=IeX!b@%2wk3_DJZB6V1w@7t zq<{bZ(ihNi{Bp6RMH^WtzGdQU!r{Y*+wMTI6NDivo@2p^hH%*FQkJr{34o%?smP>l zRdAa*6{US+2o!_^6;=ZGd&}rm<|hy!Ad{sI^XQKGN)!LW!K3LXdorIWsI#n_bA@R$PX5% z5Cgd)kcV)`Ct)N-iWFuVM5;!SD|XN#A@F9?KR!XPdGqFe=u!jO&YB!sFWUSt8;FX5 zA!d9Rn2a46@;xpF$*FLIbv9hOnm5fJLnC4n+Q|utjpjoLqRA9qxpL*#WbvlTH_>EQ zdZd4oBEsY%lp18toO0Bb#Hp=Yw|=XU?W<^FhF_dokw*y>b$Zwn;0Fp^|=+MEunfRe2b&Y%Tz?U!-J$}>Muwest z$z+w>d2u&%`0!!5FZE{F<^MDfd>w{AZ8&a6et5ve&=03MOvS~}VSxBC92Y}BoaQhU z7ej{u;>U1Y4E=DL!&F=h9R`RW!*Mb6!)XpvaWQllAbt$T#n2C@IZVaH&|!f1F&q~| jKb+<;6&FK?0piDSTnznin!{9F3>^lDAH(_UcisO16eDzp diff --git a/share/pixmaps/nsis-wizard.bmp b/share/pixmaps/nsis-wizard.bmp deleted file mode 100644 index 14349528853f1198bfdbf7f9f180a5618820ef76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154544 zcmeHQ3se@>7N#;a5+%(96m^mIQhO1(M9UJ97NxcdqgH`LTBey#l#JBMj0mlymya@0 z6irq|l#yu}6lJ7|vMewYE5WFIn?iN(cQ5NsbN|Qu^Pf3q=FC5vwRD|-<~;WKzB6af zoU_l~Lx#V7_nATe`MVbXF2TQ5_!oOdP|z7cVMql9&BFbT=LY@v-+wRQzkksmAwUQa z0)zk|KnM^5ga9Ex2oM5<03kpK5CVh%AwUQa0)zk|KnM^5ga9Ex2oM5<03kpK5CVh% zAwUQa0)zk|KnM^5ga9Ex2oM5<03kpK5CVh%AwUQa0)zk|KnM^5ga9Ex2si+N`uh4W zzW8F@x^=m^xie?Z96NSwQc_Y}T-?=HU){53&kq0lJL3$TQ2yudoO8~>ors8t9zA;W z>C%jvO;)OlD^0f&~j!ty;Bd)21JO_~Fk#|8xL^GIsIMp+n{6<*&T*%EXBi z!Dg>sy;`?!{SSWvQmtCGii(OFI&|p$_ur4PR9afv(9j?wH1?ONv9YnZxERk`LP7$b zK>=j4RC&P#7sSWMXJlj)6cp6e)!83rYkKha-+%AevE${JUrtF$>D{|G3lpZ7>DH}V za&q#EFTS{a`*xc1eU6)7e)$C|GBq_dEUd-lhv|fIYA`f3^o~33SiXEY-XeVV+EE!Q zD=TNsnswDxSGl}6aRT1rYOcKUN@$;oiV93tj-plREIN+vznJuk8v-FAA#>);fo8Pu89#pf_+yVfMl&`yQZ*~W z-fK=y4&Hc8W*np9ZBckf=9-`Ez9 zz!!YPh!H>j_@hC_VP66BD*B$1f4Jbg3}!scTjYE8?1_zymA{)Lp@KkSVj_dl#&p-d2ciz!CpX1dIwo*3g9f|6W0BoC&9XqDY_?KUP3Cnr+vUJ6E2wZyU zrPbBd-spyM7j0B;JH%`)FtqU6wQF7IK6&yaEU|6fFB0Ax0@!74YHDg>eE2;dyV z?YG~amzM_@5N5VZZJC1rtR>;z8P4Q)?%b&yXREEPHK%oIMKl5mzq@zucCmg}ev->I z(JTn99|0in{A%#45RC*mg%HYx=*kh0Ma`ymdg;=oqUE9bg(84x0@@TScS&UnC4#wf z=vKU64IDVoXAN(@`KH3A&jhJ#pLm*+0YpHhVy49d*uok-75i*@!h{JvDONI&%Jzw; zxD4+6D!d?pbA>*eCY9|IA`3GhvX#s8tLE1w4Ij%sMJ1K(6C$fJ+;`u7E`)0Q96frp zPdQ0t`-I4<3>RK_p$54wx8Ot1r<|m+eL`em2K~O*5W3W-oTRdSLS$hEykNULzZySD zWn0LU@uo>-8^_QtHIT}-3sYR=B$dqtMq5-uD%%z`aS@VKHWwIeQ3%XRW`y9 zfA`&Yh;yN_WXF69Q5ELTpN|eYkXCP9=Bu*%_3OvXj);P=Sbp!l_b8M`3;U~9t09jZO|}S6^SR6Zw|C zY&;rQTyX_Hg-S|Fd`2+QS+kkh@Y?3scQ$;d=!Y5siGKa{SN-|r%=z=rKVNdmB`$N6 z6Mp)ovgPECK`MNJbno8X3H+-2=$Fc7Kvmiz-+c3p0|VaaSJ~1M$0k@oL4kVM2XGp% zD2NaTeSQ4+aWg7805D~|3wYIp^M`kdJa}-&jvXI<_~Gi+s~0a`40E!U zzt>)S4XU%OtW3WV1xEy6lqD6{h=&fKICfBURZxYnHNqL~*|TTgcH3>(BWu^LogPR# zbm%Z_*s$E(To{sx7P6)OO`A695zNdybLY-Ar|-tEiKJw>n3Nw{AtNYs2X8d7@FK`rMXU>I-NXu zQY{RxG)9rqiad##GiUPZAX`0nF|!a2zYa3!?;ySwE$o!HreW$VXl(05=J4UeR;g@Y zf)koL<@75X-t)ZyZtZm}F#6RI?wKuA+2P^g+`EGcp&6~^)LZL)`}S30YPfeCFRNR( zZp9)qLaRLW)Klf<HXt;*iMeY>`J40jJ5I;0Jtg?F*|?C**_b`lvt@K(e^l`Z1AmR4W0jWIm_ z-iTwkZk5W$CxD2NDrdoGpM91iKIW_Jv(G;Jr=Nb}*af933HLq>4xyWG zzFFy=@r3y*d&-n4#>IB80p?N$ft9d$`}XZQ`kOLYWk*FtvAIEWC)ef5tXZ=pB+Ix+ zUw!qJOHY}9nyIpbgM+b{z$~gpL2NF-zRNhU64qcxm5r66($Z25zKq<0-LixqveF4IsrjmG7>aY8bNcu1zhT1$5#*}tgcV94`Owh7 zpRda1a$+6Zc8Q6JAAInEnh`;15RC)Q8u$d*EsiQ1$GD7~?!mV$^z!%Le=mqxmufMb zFw_H#P3`XRRoSr8*KW@JF21B-l8y7Z9M|z&Xm$As(+*fM@Po8N>!s_u83hzA77MNMmARCQqJ>xI70A9Po&|$rn$ZI<q8 zQgKw-R?)}M?)&e*9}y8D8e7@w=c}?AV7ICW)_-og=_c9e5Gs#zRJQw|f)a-xb)oP| zRk;IIwwiPtdU6!q&Q#e7<9NC;xk>c^iWA1MDqErZ_uqf-)~%a3gypH($tqi+8wZ@_ zVMLrH4p-R<-O0(x;y{+CW~)>-K70@k8xe&Nv>Hc9?!EWkTW`G;YaRFl@>p)o&dx^2 zKX}hm7!jAKt*v#!cBg478&QPdc^H9f;Z)Wy^Ly;1!21*E5XUuY4tSeVOfMrwj1Y$* z_AwDF3VU8Y<7oSw=&+idl9D3sF^5k`pEB4z1N<|TOfD6P7xz&ow!jz32aB=}+#y`6-Uxq_?^AAR&ucW?si3eGgChqu8rgZY`icp^xL z2)Dy{SM*mB+vUfruR(s*#rax{djk_Mcy%EIsx(LM`A0N+G zNC|7>sIpCSy)MGTw)xH?%pVMVRd$~~eN5;ABFMm~jLYn;RI*~l3KJx^wh6u}d%}bX z=5&XnXQvjrp%=`N+`?9Ds)95|56ysfST69q>+Wv>(;I3&6~$DHjR4fMjEeq0|pFm z4#i4O^YZdspfK{&_+B=S2GrEl7?HteSp+Xry6>n2TvYi4M}G$9z3f)4T7hNJPH52) zEWSZ=If`PXv#`PD`02`EeujgSFyH0A{^@ai!pIpxNR_@jFtKyzPLIeiT-2|!;SzT2 z*s+KL!1ru|w#@12=?>&q-DT5MHhjY4OD8KU3rB3sq_|}O%$_}4-D_v2g{o{E+`vmO z4)GNi7sC!j`?(Wz7fLE4Bg2{Gy7Zd6%EqcD;yA;!V9S;*2$Lj;L7mkiTsTeLYQ{OL zY@HOClMPWCo%t!PCf6k`V#m-NHZ@u)DJg;9W0#)NPfWHNpxN#g49Rc|oM`okz`=tD zZAYj_f$@5e@Yars@!^qBZx<0y$0KgGyNIuK_`CMjO}Y*Q;AP!*w7Lk4J#L3Di0K*0 z4?p~{3vM?0i5VN8?bly_y`G*rIS;lD5$uNJVz`-u1aDu97A?ByqKll&pq{>mhlfv` zI8lUS3ej|9WPbYTr+CMPZIYgzIx`Q}qNAguu~rF_4D;8bjgJ8Y7C}h*o;`aylRlrl zZquesY-}uC!yyC)0@E7@+`<}g_}XWG9hd=w|LLcn#`7yQ%CO12JHeF=!&rqOkjX@t z(_BJA0s|TWUj#M-=HPFz6~A`DFj)mWaSR=VEs#ML#1+R|7UHJiLjYF6!NI}$6%DCu zk0Sv#e&WdTw`P1O!86H{B}-CMQ{hI~MPMv!>a37dwhMGEKP6GwTeoh-(Gu;j@_u>7 zAeHTrZW&ZIT+@4$O??sT*gBtUWFwWWhE7S#pt513i@+0#NFEbd1R#~|5gGj#AA0B^ z{m+ZeoY0tfRQ)lji?hI z#ZzA-m90jDAq_9?%r?51R5xtcfRHQL`gcE&jw=`d+9O1{ODdazJBA{DSqy?-%%yn5 z@UjFQs@)u(bcIdr1gUIoBzfJ1BX?~g{Nh(F6;5Dj*Q~xvDq9VmptMJo&CIV_NWVN# zk;+y>Cn&9`Y%ct&g~Z976DLlnA6|{L9+e#z7pGB!%PpM5R|`Yw76k6R^G-ebmjN!m zDjRktIE>@MskfhHWn~NkQxRqaxT|b1=#5;L>lhVegTzc6LqYB;`^hJtbm3IvC+2(x znW+dH0@kW*3=B50sT3Omq_Wv?vtubz*>+@&O=b&KHohWZ0?j5im101^WR=Z*m4Knk zPA(!^Wn;w#O+Z=T(3a0tdM6WMLf=KGY=vLw2uvL&^n#kug8+Ax4cB(WuO8&h&%<41 zo8JX$Q9lBFRkr?iDW~}e_*B_2Vks>xMK(D^$Pb2z2e*wX(9Zp`n2SQdrJ~Pyw)aUteF} za;mhcsR`c3gf>T&TZI6ete!e`%H{a*8*jV;x4Kq|MD21%pl#c>OP4NnVOjaPYuB#6 zefx56lqxhIfnL3ORaI3f%z8|~J38XIn=c!+$Pt0$<1)-S}6BEsmkXqq_zzsLtP*+!{O{=%NaF`Eo`5_@8TqL1N#36v= zzzY^EFdo-z-@bjrh7A)ZC)I2afgwYN)YQ~?dte!^uUWGuEG*2RR8*WV0v$VcT)up{ zh>)WQjrZV#55ln|UxBGMHUv^qQbfnmfcH+EhGP?tN^wCTCME^}wHYR7h9a0W5W$M# zgmNLyuSyU>7@t%kCT;Cu0JlHc+1VXBbnr`B%FKoUzJ}l@Uw^yT!Zq_ne%Zh=>S}y`YQQ2z2SvW&Zs6(2QzGB~Qa&IyS_wz4lt| zuF+iu0mPre!U*1YC1+McJbaI*rKORde1%h&1eUT#j~lVVUz3{>d{qW|jpf-XQ>H*& z4j(@Jy6dj%*RLN21D5FV=h2@(7I`pN^ytw8Ib&mEQ7Sz>9c$6Kxw$aADlaeJyLWGM zbF" no_smgroup -no_smgroup: - Pop $R0 -SectionEnd - -# Installer functions -Function .onInit - InitPluginsDir -!if "@WINDOWS_BITS@" == "64" - ${If} ${RunningX64} - ; disable registry redirection (enable access to 64-bit portion of registry) - SetRegView 64 - ${Else} - MessageBox MB_OK|MB_ICONSTOP "Cannot install 64-bit version on a 32-bit system." - Abort - ${EndIf} -!endif -FunctionEnd - -# Uninstaller functions -Function un.onInit - ReadRegStr $INSTDIR HKCU "${REGKEY}" Path - !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup - !insertmacro SELECT_UNSECTION Main ${UNSEC0000} -FunctionEnd diff --git a/src/Makefile.am b/src/Makefile.am index 95f6097d56..aaea5871cf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,8 @@ # Distributed under the MIT software license, see the accompanying # file LICENSE or http://www.opensource.org/licenses/mit-license.php. -DIST_SUBDIRS = secp256k1 univalue rust +SUBDIRS = rust +DIST_SUBDIRS = secp256k1 univalue AM_LDFLAGS = $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) $(GPROF_LDFLAGS) $(SANITIZER_LDFLAGS) AM_CXXFLAGS = $(DEBUG_CXXFLAGS) $(HARDENED_CXXFLAGS) $(WARN_CXXFLAGS) $(NOWARN_CXXFLAGS) $(ERROR_CXXFLAGS) $(GPROF_CXXFLAGS) $(SANITIZER_CXXFLAGS) @@ -12,7 +13,6 @@ EXTRA_LIBRARIES = if EMBEDDED_UNIVALUE LIBUNIVALUE = univalue/libunivalue.la - $(LIBUNIVALUE): $(wildcard univalue/lib/*) $(wildcard univalue/include/*) $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) else @@ -20,15 +20,27 @@ LIBUNIVALUE = $(UNIVALUE_LIBS) endif LIBDEFI_SPV=libdefi_spv.a -SPV_INCLUDES=-I. -I./spv -I./spv/support -I./spv/bitcoin -I./spv/bcash -RUST_INCLUDES=-I$(srcdir)/rust/include - -DEFI_INCLUDES=-I$(builddir) $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) +LIBDEFI_SPV_INCLUDES = \ + -I$(srcdir)/spv \ + -I$(srcdir)/spv/support \ + -I$(srcdir)/spv/bitcoin \ + -I$(srcdir)/spv/bcash + +LIBAIN_RS_INCLUDES = -I$(builddir)/rust/include +LIBAIN_RS_LIB = -L$(builddir)/rust/lib -lain_evm_ffi +LIBAIN_RS_SRC = $(builddir)/rust/src/libain_evm.cpp +LIBAIN_RS_H = libain_evm.h + +$(LIBAIN_RS_SRC): +$(LIBAIN_RS_H): +$(LIBAIN_RS_LIB): FORCE + $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C rust +DEFI_INCLUDES = -I$(builddir) $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) DEFI_INCLUDES += -I$(srcdir)/secp256k1/include DEFI_INCLUDES += $(UNIVALUE_CFLAGS) -DEFI_INCLUDES += $(SPV_INCLUDES) -DEFI_INCLUDES += $(RUST_INCLUDES) +DEFI_INCLUDES += $(LIBDEFI_SPV_INCLUDES) +DEFI_INCLUDES += $(LIBAIN_RS_INCLUDES) LIBDEFI_SERVER=libdefi_server.a LIBDEFI_COMMON=libdefi_common.a @@ -36,19 +48,13 @@ LIBDEFI_CONSENSUS=libdefi_consensus.a LIBDEFI_CLI=libdefi_cli.a LIBDEFI_UTIL=libdefi_util.a LIBDEFI_CRYPTO_BASE=crypto/libdefi_crypto_base.a -LIBDEFIQT=qt/libdefiqt.a LIBSECP256K1=secp256k1/libsecp256k1.la -LIBAIN_EVM=rust/libain_evm_ffi.a if ENABLE_ZMQ LIBDEFI_ZMQ=libdefi_zmq.a endif -if BUILD_DEFI_LIBS -LIBDEFICONSENSUS=libdeficonsensus.la -endif if ENABLE_WALLET LIBDEFI_WALLET=libdefi_wallet.a -LIBDEFI_WALLET_TOOL=libdefi_wallet_tool.a endif LIBDEFI_CRYPTO= $(LIBDEFI_CRYPTO_BASE) @@ -68,24 +74,21 @@ endif $(LIBSECP256K1): $(wildcard secp256k1/src/*.h) $(wildcard secp256k1/src/*.c) $(wildcard secp256k1/include/*) $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) -$(LIBAIN_EVM): FORCE - $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C rust - # Make is not made aware of per-object dependencies to avoid limiting building parallelization # But to build the less dependent modules first, we manually select their order here: EXTRA_LIBRARIES += \ - $(LIBDEFI_CRYPTO) \ + $(LIBDEFI_SERVER) \ + $(LIBDEFI_CLI) \ $(LIBDEFI_UTIL) \ $(LIBDEFI_COMMON) \ - $(LIBDEFI_SPV) \ $(LIBDEFI_CONSENSUS) \ - $(LIBDEFI_SERVER) \ - $(LIBDEFI_CLI) \ + $(LIBDEFI_SPV) \ + $(LIBDEFI_CRYPTO) \ $(LIBDEFI_WALLET) \ - $(LIBDEFI_WALLET_TOOL) \ $(LIBDEFI_ZMQ) -lib_LTLIBRARIES = $(LIBDEFICONSENSUS) +lib_LIBRARIES = +lib_LTLIBRARIES = bin_PROGRAMS = noinst_PROGRAMS = @@ -102,11 +105,6 @@ endif if BUILD_DEFI_TX bin_PROGRAMS += defi-tx endif -if ENABLE_WALLET -if BUILD_DEFI_WALLET - bin_PROGRAMS += defi-wallet -endif -endif .PHONY: FORCE check-symbols check-security # defi core # @@ -154,7 +152,6 @@ DEFI_CORE_H = \ key.h \ key_io.h \ dbwrapper.h \ - libain_evm.h \ limitedmap.h \ logging.h \ masternodes/accounts.h \ @@ -296,39 +293,24 @@ DEFI_CORE_H = \ zmq/zmqconfig.h\ zmq/zmqnotificationinterface.h \ zmq/zmqpublishnotifier.h \ - zmq/zmqrpc.h + zmq/zmqrpc.h \ + $(LIBAIN_RS_H) obj/build.h: FORCE @$(MKDIR_P) $(builddir)/obj - @$(top_srcdir)/share/genbuild.sh "$(abs_top_builddir)/src/obj/build.h" \ + @$(top_srcdir)/contrib/genbuild.sh "$(abs_top_builddir)/src/obj/build.h" \ "$(abs_top_srcdir)" libdefi_util_a-clientversion.$(OBJEXT): obj/build.h -libdefi_spv_a_CPPFLAGS = $(AM_CPPFLAGS) -Wpointer-arith -fpermissive -I./spv -I./spv/support -I./secp256k1 -I./secp256k1/src -Wno-format-extra-args -lm -lbsd +libdefi_spv_a_CPPFLAGS = $(AM_CPPFLAGS) -Wpointer-arith -fpermissive \ + -I$(srcdir)/spv \ + -I$(srcdir)/spv/support \ + -I$(srcdir)/secp256k1 \ + -I$(srcdir)/secp256k1/src \ + -Wno-format-extra-args + libdefi_spv_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libdefi_spv_a_SOURCES = \ - spv/bcash/BRBCashAddr.cpp \ - spv/bcash/BRBCashAddr.h \ - spv/bcash/BRBCashParams.cpp \ - spv/bcash/BRBCashParams.h \ - spv/bitcoin/BRBIP38Key.cpp \ - spv/bitcoin/BRBIP38Key.h \ - spv/bitcoin/BRBloomFilter.cpp \ - spv/bitcoin/BRBloomFilter.h \ - spv/bitcoin/BRChainParams.cpp \ - spv/bitcoin/BRChainParams.h \ - spv/bitcoin/BRMerkleBlock.cpp \ - spv/bitcoin/BRMerkleBlock.h \ - spv/bitcoin/BRPaymentProtocol.cpp \ - spv/bitcoin/BRPaymentProtocol.h \ - spv/bitcoin/BRPeer.cpp \ - spv/bitcoin/BRPeer.h \ - spv/bitcoin/BRPeerManager.cpp \ - spv/bitcoin/BRPeerManager.h \ - spv/bitcoin/BRTransaction.cpp \ - spv/bitcoin/BRTransaction.h \ - spv/bitcoin/BRWallet.cpp \ - spv/bitcoin/BRWallet.h \ spv/support/BRAddress.cpp \ spv/support/BRAddress.h \ spv/support/BRArray.h \ @@ -350,7 +332,29 @@ libdefi_spv_a_SOURCES = \ spv/support/BRKey.h \ spv/support/BRLargeInt.h \ spv/support/BRSet.cpp \ - spv/support/BRSet.h + spv/support/BRSet.h \ + spv/bcash/BRBCashAddr.cpp \ + spv/bcash/BRBCashAddr.h \ + spv/bcash/BRBCashParams.cpp \ + spv/bcash/BRBCashParams.h \ + spv/bitcoin/BRBIP38Key.cpp \ + spv/bitcoin/BRBIP38Key.h \ + spv/bitcoin/BRBloomFilter.cpp \ + spv/bitcoin/BRBloomFilter.h \ + spv/bitcoin/BRChainParams.cpp \ + spv/bitcoin/BRChainParams.h \ + spv/bitcoin/BRMerkleBlock.cpp \ + spv/bitcoin/BRMerkleBlock.h \ + spv/bitcoin/BRPaymentProtocol.cpp \ + spv/bitcoin/BRPaymentProtocol.h \ + spv/bitcoin/BRPeer.cpp \ + spv/bitcoin/BRPeer.h \ + spv/bitcoin/BRPeerManager.cpp \ + spv/bitcoin/BRPeerManager.h \ + spv/bitcoin/BRTransaction.cpp \ + spv/bitcoin/BRTransaction.h \ + spv/bitcoin/BRWallet.cpp \ + spv/bitcoin/BRWallet.h # spv/support/BRAssert.cpp # spv/support/BRAssert.h # spv/support/BRFileService.cpp @@ -378,7 +382,6 @@ libdefi_server_a_SOURCES = \ blockfilter.cpp \ chain.cpp \ consensus/tx_verify.cpp \ - rust/libain_evm.cpp \ flatfile.cpp \ httprpc.cpp \ httpserver.cpp \ @@ -465,10 +468,9 @@ libdefi_server_a_SOURCES = \ validation.cpp \ validationinterface.cpp \ versionbits.cpp \ + $(LIBAIN_RS_SRC) \ $(DEFI_CORE_H) -$(libdefi_server_a_SOURCES): $(LIBAIN_EVM) - if ENABLE_WALLET libdefi_server_a_SOURCES += wallet/init.cpp endif @@ -508,12 +510,6 @@ libdefi_wallet_a_SOURCES = \ wallet/coinselection.cpp \ $(DEFI_CORE_H) -libdefi_wallet_tool_a_CPPFLAGS = $(AM_CPPFLAGS) $(DEFI_INCLUDES) -libdefi_wallet_tool_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -libdefi_wallet_tool_a_SOURCES = \ - wallet/wallettool.cpp \ - $(DEFI_CORE_H) - # crypto primitives library crypto_libdefi_crypto_base_a_CPPFLAGS = $(AM_CPPFLAGS) crypto_libdefi_crypto_base_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) @@ -590,6 +586,7 @@ libdefi_consensus_a_SOURCES = \ pubkey.cpp \ pubkey.h \ script/deficonsensus.cpp \ + script/deficonsensus.h \ script/interpreter.cpp \ script/interpreter.h \ script/script.cpp \ @@ -606,6 +603,10 @@ libdefi_consensus_a_SOURCES = \ util/strencodings.h \ version.h +if GLIBC_BACK_COMPAT + libdefi_consensus_a_SOURCES += compat/glibc_compat.cpp +endif + # common: shared between defid, and defi-qt and non-server tools libdefi_common_a_CPPFLAGS = $(AM_CPPFLAGS) $(DEFI_INCLUDES) libdefi_common_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) @@ -702,17 +703,16 @@ defid_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) defid_LDADD = \ $(LIBDEFI_SERVER) \ $(LIBDEFI_WALLET) \ - $(LIBAIN_EVM) \ - $(LIBDEFI_SERVER) \ $(LIBDEFI_COMMON) \ - $(LIBUNIVALUE) \ - $(LIBDEFI_SPV) \ $(LIBDEFI_UTIL) \ - $(LIBDEFI_ZMQ) \ $(LIBDEFI_CONSENSUS) \ + $(LIBDEFI_SPV) \ + $(LIBDEFI_ZMQ) \ $(LIBDEFI_CRYPTO) \ $(LIBLEVELDB) \ + $(LIBAIN_RS_LIB) \ $(LIBMEMENV) \ + $(LIBUNIVALUE) \ $(LIBSECP256K1) defid_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(ZMQ_LIBS) @@ -730,8 +730,6 @@ if TARGET_WINDOWS defid_LDADD += -luserenv -lbcrypt endif -$(defid_SOURCES): $(LIBAIN_EVM) - # defi-cli binary # defi_cli_SOURCES = defi-cli.cpp defi_cli_CPPFLAGS = $(AM_CPPFLAGS) $(DEFI_INCLUDES) $(EVENT_CFLAGS) @@ -773,50 +771,6 @@ defi_tx_LDADD = \ defi_tx_LDADD += $(BOOST_LIBS) # -# defi-wallet binary # -defi_wallet_SOURCES = defi-wallet.cpp -defi_wallet_CPPFLAGS = $(AM_CPPFLAGS) $(DEFI_INCLUDES) -defi_wallet_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -defi_wallet_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) - -if TARGET_WINDOWS -defi_wallet_SOURCES += defi-wallet-res.rc -endif - -defi_wallet_LDADD = \ - $(LIBDEFI_WALLET_TOOL) \ - $(LIBDEFI_WALLET) \ - $(LIBDEFI_COMMON) \ - $(LIBDEFI_CONSENSUS) \ - $(LIBDEFI_SPV) \ - $(LIBDEFI_UTIL) \ - $(LIBDEFI_CRYPTO) \ - $(LIBDEFI_ZMQ) \ - $(LIBLEVELDB) \ - $(LIBMEMENV) \ - $(LIBSECP256K1) \ - $(LIBUNIVALUE) - -defi_wallet_LDADD += $(BOOST_LIBS) $(BDB_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(MINIUPNPC_LIBS) $(ZMQ_LIBS) -# - -# deficonsensus library # -if BUILD_DEFI_LIBS -include_HEADERS = script/deficonsensus.h -libdeficonsensus_la_SOURCES = support/cleanse.cpp $(crypto_libdefi_crypto_base_a_SOURCES) $(libdefi_consensus_a_SOURCES) - -if GLIBC_BACK_COMPAT - libdeficonsensus_la_SOURCES += compat/glibc_compat.cpp -endif - -libdeficonsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) -libdeficonsensus_la_LIBADD = $(LIBSECP256K1) -libdeficonsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_DEFI_INTERNAL -libdeficonsensus_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) - -endif -# - CTAES_DIST = crypto/ctaes/bench.c CTAES_DIST += crypto/ctaes/ctaes.c CTAES_DIST += crypto/ctaes/ctaes.h @@ -861,7 +815,7 @@ clean-local: .rc.o: @test -f $(WINDRES) ## FIXME: How to get the appropriate modulename_CPPFLAGS in here? - $(AM_V_GEN) $(WINDRES) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) -DWINDRES_PREPROC -i $< -o $@ + $(AM_V_GEN) $(WINDRES) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(subst -isystem ,-I,$(CPPFLAGS)) -DWINDRES_PREPROC -i $< -o $@ check-symbols: $(bin_PROGRAMS) if GLIBC_BACK_COMPAT diff --git a/src/Makefile.bench.include b/src/Makefile.bench.include index 2b8100bebd..3d93a9f45b 100644 --- a/src/Makefile.bench.include +++ b/src/Makefile.bench.include @@ -2,7 +2,7 @@ # Distributed under the MIT software license, see the accompanying # file LICENSE or http://www.opensource.org/licenses/mit-license.php. -bin_PROGRAMS += bench/bench_defi +noinst_PROGRAMS += bench/bench_defi BENCH_SRCDIR = bench BENCH_BINARY = bench/bench_defi$(EXEEXT) @@ -49,7 +49,6 @@ nodist_bench_bench_defi_SOURCES = $(GENERATED_BENCH_FILES) bench_bench_defi_CPPFLAGS = $(AM_CPPFLAGS) $(DEFI_INCLUDES) $(EVENT_CLFAGS) $(EVENT_PTHREADS_CFLAGS) -I$(builddir)/bench/ bench_bench_defi_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) bench_bench_defi_LDADD = \ - $(LIBDEFI_MN) \ $(LIBDEFI_SERVER) \ $(LIBDEFI_WALLET) \ $(LIBDEFI_SERVER) \ diff --git a/src/Makefile.test.include b/src/Makefile.test.include index c4d673eeb1..bd02dacf6f 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -29,7 +29,7 @@ FUZZ_TARGETS = \ if ENABLE_FUZZ noinst_PROGRAMS += $(FUZZ_TARGETS:=) else -bin_PROGRAMS += test/test_defi +noinst_PROGRAMS += test/test_defi endif TEST_SRCDIR = test @@ -66,13 +66,13 @@ FUZZ_SUITE_LD_COMMON = \ $(LIBDEFI_COMMON) \ $(LIBDEFI_UTIL) \ $(LIBDEFI_CONSENSUS) \ - $(LIBDEFI_CRYPTO) \ - $(LIBUNIVALUE) \ $(LIBDEFI_SPV) \ + $(LIBDEFI_CRYPTO) \ $(LIBLEVELDB) \ $(BOOST_LIBS) \ $(LIBMEMENV) \ $(LIBSECP256K1) \ + $(LIBUNIVALUE) \ $(EVENT_LIBS) \ $(EVENT_PTHREADS_LIBS) @@ -186,6 +186,9 @@ endif test_test_defi_SOURCES = $(DEFI_TEST_SUITE) $(DEFI_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES) test_test_defi_CPPFLAGS = $(AM_CPPFLAGS) $(DEFI_INCLUDES) $(TESTDEFS) $(EVENT_CFLAGS) +test_test_defi_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) +test_test_defi_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static + test_test_defi_LDADD = if ENABLE_WALLET test_test_defi_LDADD += $(LIBDEFI_WALLET) @@ -193,10 +196,8 @@ endif test_test_defi_LDADD += $(LIBDEFI_SERVER) $(LIBDEFI_CLI) $(LIBDEFI_COMMON) $(LIBDEFI_UTIL) $(LIBDEFI_CONSENSUS) $(LIBDEFI_CRYPTO) $(LIBUNIVALUE) \ $(LIBDEFI_SPV) $(LIBLEVELDB) $(LIBMEMENV) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS) -test_test_defi_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -test_test_defi_LDADD += $(BDB_LIBS) $(MINIUPNPC_LIBS) $(RAPIDCHECK_LIBS) $(LIBAIN_EVM) $(LIBAIN_GPRC) -test_test_defi_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static +test_test_defi_LDADD += $(BDB_LIBS) $(MINIUPNPC_LIBS) $(RAPIDCHECK_LIBS) $(LIBAIN_RS_LIB) if TARGET_DARWIN test_test_defi_LDFLAGS += -framework Security -framework SystemConfiguration -framework CoreFoundation @@ -378,7 +379,7 @@ if TARGET_WINDOWS else if ENABLE_BENCH @echo "Running bench/bench_defi -evals=1 -scaling=0..." - $(BENCH_BINARY) -evals=1 -scaling=0 > /dev/null + $(BENCH_BINARY) -evals=1 -scaling=0 endif endif $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check @@ -387,8 +388,8 @@ if EMBEDDED_UNIVALUE endif %.cpp.test: %.cpp - @echo Running tests: `cat $< | grep -E "(BOOST_FIXTURE_TEST_SUITE\\(|BOOST_AUTO_TEST_SUITE\\()" | cut -d '(' -f 2 | cut -d ',' -f 1 | cut -d ')' -f 1` from $< - $(AM_V_at)$(TEST_BINARY) -l test_suite -t "`cat $< | grep -E "(BOOST_FIXTURE_TEST_SUITE\\(|BOOST_AUTO_TEST_SUITE\\()" | cut -d '(' -f 2 | cut -d ',' -f 1 | cut -d ')' -f 1`" > $<.log 2>&1 || (cat $<.log && false) + @echo Running tests: `cat $< | grep -E "(BOOST_FIXTURE_TEST_SUITE\\(|BOOST_AUTO_TEST_SUITE\\()" | cut -d '(' -f 2 | cut -d ',' -f 1 | cut -d ')' -f 1` from $@ $< + $(AM_V_at)$(TEST_BINARY) -l test_suite -t "`cat $< | grep -E "(BOOST_FIXTURE_TEST_SUITE\\(|BOOST_AUTO_TEST_SUITE\\()" | cut -d '(' -f 2 | cut -d ',' -f 1 | cut -d ')' -f 1`" > $@.log 2>&1 || (cat $@.log && false) %.json.h: %.json @$(MKDIR_P) $(@D) diff --git a/src/amount.h b/src/amount.h index 67db644848..07d553b0ef 100644 --- a/src/amount.h +++ b/src/amount.h @@ -138,7 +138,7 @@ struct CTokenAmount { // simple std::pair is less informative // add auto sumRes = SafeAdd(nValue, amount); if (!sumRes) { - return sumRes; + return std::move(sumRes); } nValue = *sumRes; diff --git a/src/bench/.dockerignore b/src/bench/.dockerignore new file mode 100644 index 0000000000..ff67213cb4 --- /dev/null +++ b/src/bench/.dockerignore @@ -0,0 +1 @@ +bench_defi diff --git a/src/bench/bench_defi.cpp b/src/bench/bench_defi.cpp index c07e6f68e9..74070833b2 100644 --- a/src/bench/bench_defi.cpp +++ b/src/bench/bench_defi.cpp @@ -9,7 +9,6 @@ #include -/* static const int64_t DEFAULT_BENCH_EVALUATIONS = 5; static const char* DEFAULT_BENCH_FILTER = ".*"; static const char* DEFAULT_BENCH_SCALING = "1.0"; @@ -31,44 +30,43 @@ static void SetupBenchArgs() gArgs.AddArg("-plot-width=", strprintf("Plot width in pixel (default: %u)", DEFAULT_PLOT_WIDTH), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); gArgs.AddArg("-plot-height=", strprintf("Plot height in pixel (default: %u)", DEFAULT_PLOT_HEIGHT), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); } - */ int main(int argc, char** argv) { -// SetupBenchArgs(); // TODO: (temp) disable benches -// std::string error; -// if (!gArgs.ParseParameters(argc, argv, error)) { -// tfm::format(std::cerr, "Error parsing command line arguments: %s\n", error.c_str()); -// return EXIT_FAILURE; -// } -// -// if (HelpRequested(gArgs)) { -// std::cout << gArgs.GetHelpMessage(); -// -// return EXIT_SUCCESS; -// } -// -// int64_t evaluations = gArgs.GetArg("-evals", DEFAULT_BENCH_EVALUATIONS); -// std::string regex_filter = gArgs.GetArg("-filter", DEFAULT_BENCH_FILTER); -// std::string scaling_str = gArgs.GetArg("-scaling", DEFAULT_BENCH_SCALING); -// bool is_list_only = gArgs.GetBoolArg("-list", false); -// -// double scaling_factor; -// if (!ParseDouble(scaling_str, &scaling_factor)) { -// tfm::format(std::cerr, "Error parsing scaling factor as double: %s\n", scaling_str.c_str()); -// return EXIT_FAILURE; -// } -// -// std::unique_ptr printer = MakeUnique(); -// std::string printer_arg = gArgs.GetArg("-printer", DEFAULT_BENCH_PRINTER); -// if ("plot" == printer_arg) { -// printer.reset(new benchmark::PlotlyPrinter( -// gArgs.GetArg("-plot-plotlyurl", DEFAULT_PLOT_PLOTLYURL), -// gArgs.GetArg("-plot-width", DEFAULT_PLOT_WIDTH), -// gArgs.GetArg("-plot-height", DEFAULT_PLOT_HEIGHT))); -// } -// -// benchmark::BenchRunner::RunAll(*printer, evaluations, scaling_factor, regex_filter, is_list_only); + SetupBenchArgs(); + std::string error; + if (!gArgs.ParseParameters(argc, argv, error)) { + tfm::format(std::cerr, "Error parsing command line arguments: %s\n", error.c_str()); + return EXIT_FAILURE; + } + + if (HelpRequested(gArgs)) { + std::cout << gArgs.GetHelpMessage(); + + return EXIT_SUCCESS; + } + + int64_t evaluations = gArgs.GetArg("-evals", DEFAULT_BENCH_EVALUATIONS); + std::string regex_filter = gArgs.GetArg("-filter", DEFAULT_BENCH_FILTER); + std::string scaling_str = gArgs.GetArg("-scaling", DEFAULT_BENCH_SCALING); + bool is_list_only = gArgs.GetBoolArg("-list", false); + + double scaling_factor; + if (!ParseDouble(scaling_str, &scaling_factor)) { + tfm::format(std::cerr, "Error parsing scaling factor as double: %s\n", scaling_str.c_str()); + return EXIT_FAILURE; + } + + std::unique_ptr printer = std::make_unique(); + std::string printer_arg = gArgs.GetArg("-printer", DEFAULT_BENCH_PRINTER); + if ("plot" == printer_arg) { + printer.reset(new benchmark::PlotlyPrinter( + gArgs.GetArg("-plot-plotlyurl", DEFAULT_PLOT_PLOTLYURL), + gArgs.GetArg("-plot-width", DEFAULT_PLOT_WIDTH), + gArgs.GetArg("-plot-height", DEFAULT_PLOT_HEIGHT))); + } + + benchmark::BenchRunner::RunAll(*printer, evaluations, scaling_factor, regex_filter, is_list_only); return EXIT_SUCCESS; } diff --git a/src/bench/checkqueue.cpp b/src/bench/checkqueue.cpp index ac4551bd8d..724d94e044 100644 --- a/src/bench/checkqueue.cpp +++ b/src/bench/checkqueue.cpp @@ -10,7 +10,6 @@ #include -static const int MIN_CORES = 2; static const size_t BATCHES = 101; static const size_t BATCH_SIZE = 30; static const int PREVECTOR_SIZE = 28; diff --git a/src/crc32c/.dockerignore b/src/crc32c/.dockerignore new file mode 100644 index 0000000000..61769727e3 --- /dev/null +++ b/src/crc32c/.dockerignore @@ -0,0 +1,8 @@ +# Editors. +*.sw* +.DS_Store +/.vscode + +# Build directory. +build/ +out/ diff --git a/src/leveldb/.dockerignore b/src/leveldb/.dockerignore new file mode 100644 index 0000000000..71d87a4eeb --- /dev/null +++ b/src/leveldb/.dockerignore @@ -0,0 +1,13 @@ +build_config.mk +*.a +*.o +*.dylib* +*.so +*.so.* +*_test +db_bench +leveldbutil +Release +Debug +Benchmark +vs2010.* diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock index 4f5dfdc8d6..c43ac25c02 100644 --- a/src/rust/Cargo.lock +++ b/src/rust/Cargo.lock @@ -52,7 +52,6 @@ dependencies = [ "cxx-gen", "proc-macro2", "rlp", - "substrate-build-script-utils", ] [[package]] @@ -381,7 +380,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.13", + "syn 2.0.14", ] [[package]] @@ -1304,12 +1303,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "platforms" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1691,14 +1684,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "substrate-build-script-utils" -version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.27#5bfdbab8ba28523ef10e365627fed64ef2b77cbf" -dependencies = [ - "platforms", -] - [[package]] name = "subtle" version = "2.5.0" @@ -1718,9 +1703,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.13" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" +checksum = "fcf316d5356ed6847742d036f8a39c3b8435cac10bd528a4bd461928a6ab34d5" dependencies = [ "proc-macro2", "quote", diff --git a/src/rust/Makefile b/src/rust/Makefile deleted file mode 100644 index e2390b06a2..0000000000 --- a/src/rust/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -CARGO ?= cargo -TARGET ?= - -ifeq ($(TARGET), x86_64-pc-linux-gnu) - TARGET="x86_64-unknown-linux-gnu" -endif - -ifeq ($(TARGET), arm-linux-gnueabihf) - TARGET="arm-unknown-linux-gnueabihf" -endif - -ifeq ($(TARGET), x86_64-w64-mingw32) - TARGET="x86_64-pc-windows-gnu" -endif - -ifeq ($(TARGET), x86_64-apple-darwin18) - ARCH=$(shell uname -s) - ifeq ($(ARCH), arm64) - TARGET="aarch64-apple-darwin" - else - TARGET="x86_64-apple-darwin" - endif -endif - -all: build-evm-pkg build-grpc-pkg - -build-evm-pkg: - CRATE_CC_NO_DEFAULTS=1 $(CARGO) build --package ain-evm-ffi --release $(if $(TARGET),--target $(TARGET),) - mkdir -p include - cp target/$(if $(TARGET),$(TARGET)/,)release/libain_evm_ffi.a libain_evm_ffi.a - cp target/libain_evm.h include/ - cp target/libain_evm.cpp libain_evm.cpp - -build-grpc-pkg: - CRATE_CC_NO_DEFAULTS=1 $(CARGO) build --package ain-grpc --release $(if $(TARGET),--target $(TARGET),) - -clean: - $(CARGO) clean - rm -rf include - rm -rf libain_evm_ffi.a libain_evm.cpp - -distclean: clean - -.PHONY: all diff --git a/src/rust/Makefile.am b/src/rust/Makefile.am new file mode 100644 index 0000000000..dd4138679c --- /dev/null +++ b/src/rust/Makefile.am @@ -0,0 +1,29 @@ +CARGO ?= cargo +TARGET ?= + +RUST_TARGET ?= x86_64-unknown-linux-gnu + +.PHONY: +all: build-evm-pkg build-grpc-pkg + +.PHONY: +build-evm-pkg: build-grpc-pkg + @cd $(abs_srcdir) && \ + CRATE_CC_NO_DEFAULTS=1 BUILD_DIR="$(abs_builddir)" $(CARGO) build --package ain-evm-ffi \ + --release $(if $(RUST_TARGET),--target $(RUST_TARGET),) --target-dir $(abs_builddir)/target && \ + mkdir -p $(abs_builddir)/{include,lib,src} && \ + cp $(abs_builddir)/target/$(RUST_TARGET)/release/libain_evm_ffi.a $(abs_builddir)/lib/ && \ + cp $(abs_builddir)/libain_evm.h $(abs_builddir)/include/ && \ + cp $(abs_builddir)/libain_evm.cpp $(abs_builddir)/src/libain_evm.cpp + +.PHONY: +build-grpc-pkg: + @cd $(abs_srcdir) && \ + CRATE_CC_NO_DEFAULTS=1 BUILD_DIR="$(abs_builddir)" $(CARGO) build --package ain-grpc \ + --release $(if $(RUST_TARGET),--target $(RUST_TARGET),) --target-dir $(abs_builddir) + +.PHONY: +clean-local: + @cd $(abs_srcdir) && \ + $(CARGO) clean --target-dir $(abs_builddir) && \ + rm -rf {include,lib,src} diff --git a/src/rust/crates/ain-evm-cpp-ffi/build.rs b/src/rust/crates/ain-evm-cpp-ffi/build.rs.disabled similarity index 100% rename from src/rust/crates/ain-evm-cpp-ffi/build.rs rename to src/rust/crates/ain-evm-cpp-ffi/build.rs.disabled diff --git a/src/rust/crates/ain-evm-cpp-ffi/src/lib.rs b/src/rust/crates/ain-evm-cpp-ffi/src/lib.rs index 9793298e5f..d7484dff74 100644 --- a/src/rust/crates/ain-evm-cpp-ffi/src/lib.rs +++ b/src/rust/crates/ain-evm-cpp-ffi/src/lib.rs @@ -1,23 +1,21 @@ use std::error::Error; -#[cxx::bridge] -mod ffi { - unsafe extern "C++" { - include!("masternodes/evm_ffi.h"); +// #[cxx::bridge] +// mod ffi { +// unsafe extern "C++" { +// include!("masternodes/evm_ffi.h"); - fn getChainId() -> u64; - fn isMining() -> bool; - } -} +// fn getChainId() -> u64; +// fn isMining() -> bool; +// } +// } pub fn get_chain_id() -> Result> { - let chain_id = ffi::getChainId(); - - Ok(chain_id) + // let chain_id = ffi::getChainId(); + Ok(0) } pub fn is_mining() -> Result> { - let is_mining = ffi::isMining(); - - Ok(is_mining) + // let is_mining = ffi::isMining(); + Ok(true) } diff --git a/src/rust/crates/ain-evm-ffi/Cargo.toml b/src/rust/crates/ain-evm-ffi/Cargo.toml index bd51c3544e..b42a60e5b9 100644 --- a/src/rust/crates/ain-evm-ffi/Cargo.toml +++ b/src/rust/crates/ain-evm-ffi/Cargo.toml @@ -19,6 +19,5 @@ rlp = "0.5.2" cxx = "1.0" [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.27" } cxx-gen = "0.7" proc-macro2 = "1.0" diff --git a/src/rust/crates/ain-evm-ffi/build.rs b/src/rust/crates/ain-evm-ffi/build.rs index 70b3340a8b..8e1e0962ad 100644 --- a/src/rust/crates/ain-evm-ffi/build.rs +++ b/src/rust/crates/ain-evm-ffi/build.rs @@ -1,5 +1,4 @@ use proc_macro2::TokenStream; -use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; use std::env; use std::fs::File; @@ -7,40 +6,42 @@ use std::io::{Read, Write}; use std::path::PathBuf; fn main() { - generate_cargo_keys(); + let pkg_name = env::var("CARGO_PKG_NAME").unwrap(); + let manifest_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); - rerun_if_git_head_changed(); - - // Force re-run during development + // TODO: Use root path to force re-run during development if std::path::Path::new(".git/HEAD").exists() { println!("cargo:rerun-if-changed=.git/HEAD"); } - let mut root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); - let parent = root.clone(); - root.pop(); - root.pop(); + let mut target_dir = if let Ok(v) = env::var("BUILD_DIR") { + PathBuf::from(v) + } else { + manifest_path.clone() + }; + println!("BUILD_DIR: {:?}", target_dir); + std::fs::create_dir_all(&target_dir).unwrap(); + + let parent = manifest_path.clone(); + let lib_path = &parent.join("src").join("lib.rs"); - let target_dir = &root.join("target"); let mut content = String::new(); File::open(lib_path) .unwrap() .read_to_string(&mut content) .unwrap(); + let tt: TokenStream = content.parse().unwrap(); let mut opt = cxx_gen::Opt::default(); opt.include.push(cxx_gen::Include { path: "libain_evm.h".to_string(), kind: cxx_gen::IncludeKind::Bracketed, }); - let codegen = cxx_gen::generate_header_and_cc(tt, &opt).unwrap(); + let codegen = cxx_gen::generate_header_and_cc(tt, &opt).unwrap(); let cpp_stuff = String::from_utf8(codegen.implementation).unwrap(); - println!( - "target_dir.join(libain_evm.h) : {:#?}", - target_dir.join("libain_evm.h") - ); + File::create(target_dir.join("libain_evm.h")) .unwrap() .write_all(&codegen.header) diff --git a/src/rust/crates/ain-grpc/build.rs b/src/rust/crates/ain-grpc/build.rs index 8eb18efebb..38039ecfff 100644 --- a/src/rust/crates/ain-grpc/build.rs +++ b/src/rust/crates/ain-grpc/build.rs @@ -760,20 +760,25 @@ fn get_path_bracketed_ty_simple(ty: &Type) -> Type { } fn main() { - let mut root = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); - let parent = root.clone(); - root.pop(); - root.pop(); - let out_dir = env::var("OUT_DIR").unwrap(); - let methods = generate_from_protobuf(&root.join("protobuf"), Path::new(&out_dir)); + let manifest_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); + let proto_path = manifest_path + .parent() + .unwrap() + .parent() + .unwrap() + .join("protobuf"); + let src_path = manifest_path.join("src"); + let gen_path = src_path.join("gen"); + + let methods = generate_from_protobuf(&proto_path, Path::new(&gen_path)); let _tt = modify_codegen( methods, - &Path::new(&out_dir).join("types.rs"), - &Path::new(&out_dir).join("rpc.rs"), - &parent.join("src").join("lib.rs"), + &Path::new(&gen_path).join("types.rs"), + &Path::new(&gen_path).join("rpc.rs"), + &src_path.join("lib.rs"), ); println!( "cargo:rerun-if-changed={}", - parent.join("src").join("rpc.rs").to_string_lossy() + src_path.join("rpc.rs").to_string_lossy() ); } diff --git a/src/rust/crates/ain-grpc/src/codegen.rs b/src/rust/crates/ain-grpc/src/codegen.rs index cd7530835a..09aa49110c 100644 --- a/src/rust/crates/ain-grpc/src/codegen.rs +++ b/src/rust/crates/ain-grpc/src/codegen.rs @@ -1,12 +1,12 @@ use serde::{Deserialize, Serialize}; pub mod types { - tonic::include_proto!("types"); + include!("gen/types.rs"); } #[allow(clippy::useless_conversion)] pub mod rpc { - tonic::include_proto!("rpc"); + include!("gen/rpc.rs"); } impl Serialize for types::BlockResult { diff --git a/src/rust/crates/ain-grpc/src/gen/.gitkeep b/src/rust/crates/ain-grpc/src/gen/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/rust/crates/ain-grpc/src/gen/rpc.rs b/src/rust/crates/ain-grpc/src/gen/rpc.rs new file mode 100644 index 0000000000..3f944d50b5 --- /dev/null +++ b/src/rust/crates/ain-grpc/src/gen/rpc.rs @@ -0,0 +1,748 @@ +/// Generated server implementations. +pub mod blockchain_server { + #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + use tonic::codegen::*; + /// Generated trait containing gRPC methods that should be implemented for use with BlockchainServer. + #[async_trait] + pub trait Blockchain: Send + Sync + 'static { + /// [ignore] + /// Returns the hash of the best (tip) block in the most-work fully-validated chain. + async fn get_best_block_hash( + &self, + request: tonic::Request<()>, + ) -> Result< + tonic::Response, + tonic::Status, + >; + /// [ignore] + async fn get_block( + &self, + request: tonic::Request, + ) -> Result, tonic::Status>; + } + #[derive(Debug)] + pub struct BlockchainServer { + inner: _Inner, + accept_compression_encodings: EnabledCompressionEncodings, + send_compression_encodings: EnabledCompressionEncodings, + } + struct _Inner(Arc); + impl BlockchainServer { + pub fn new(inner: T) -> Self { + Self::from_arc(Arc::new(inner)) + } + pub fn from_arc(inner: Arc) -> Self { + let inner = _Inner(inner); + Self { + inner, + accept_compression_encodings: Default::default(), + send_compression_encodings: Default::default(), + } + } + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> InterceptedService + where + F: tonic::service::Interceptor, + { + InterceptedService::new(Self::new(inner), interceptor) + } + /// Enable decompressing requests with the given encoding. + #[must_use] + pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.accept_compression_encodings.enable(encoding); + self + } + /// Compress responses with the given encoding, if the client supports it. + #[must_use] + pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.send_compression_encodings.enable(encoding); + self + } + } + impl tonic::codegen::Service> for BlockchainServer + where + T: Blockchain, + B: Body + Send + 'static, + B::Error: Into + Send + 'static, + { + type Response = http::Response; + type Error = std::convert::Infallible; + type Future = BoxFuture; + fn poll_ready( + &mut self, + _cx: &mut Context<'_>, + ) -> Poll> { + Poll::Ready(Ok(())) + } + fn call(&mut self, req: http::Request) -> Self::Future { + let inner = self.inner.clone(); + match req.uri().path() { + "/rpc.Blockchain/GetBestBlockHash" => { + #[allow(non_camel_case_types)] + struct GetBestBlockHashSvc(pub Arc); + impl tonic::server::UnaryService<()> + for GetBestBlockHashSvc { + type Response = super::super::types::BlockHashResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call(&mut self, request: tonic::Request<()>) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).get_best_block_hash(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = GetBestBlockHashSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.Blockchain/GetBlock" => { + #[allow(non_camel_case_types)] + struct GetBlockSvc(pub Arc); + impl< + T: Blockchain, + > tonic::server::UnaryService + for GetBlockSvc { + type Response = super::super::types::BlockResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { (*inner).get_block(request).await }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = GetBlockSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + _ => { + Box::pin(async move { + Ok( + http::Response::builder() + .status(200) + .header("grpc-status", "12") + .header("content-type", "application/grpc") + .body(empty_body()) + .unwrap(), + ) + }) + } + } + } + } + impl Clone for BlockchainServer { + fn clone(&self) -> Self { + let inner = self.inner.clone(); + Self { + inner, + accept_compression_encodings: self.accept_compression_encodings, + send_compression_encodings: self.send_compression_encodings, + } + } + } + impl Clone for _Inner { + fn clone(&self) -> Self { + Self(self.0.clone()) + } + } + impl std::fmt::Debug for _Inner { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self.0) + } + } + impl tonic::server::NamedService for BlockchainServer { + const NAME: &'static str = "rpc.Blockchain"; + } +} +/// Generated server implementations. +pub mod eth_server { + #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + use tonic::codegen::*; + /// Generated trait containing gRPC methods that should be implemented for use with EthServer. + #[async_trait] + pub trait Eth: Send + Sync + 'static { + /// / Returns eth_accounts list. + async fn eth_accounts( + &self, + request: tonic::Request<()>, + ) -> Result< + tonic::Response, + tonic::Status, + >; + /// / Call contract, returning the output data. Does not create a transaction. + async fn eth_call( + &self, + request: tonic::Request, + ) -> Result, tonic::Status>; + /// / Returns the balance for the given address. + async fn eth_get_balance( + &self, + request: tonic::Request, + ) -> Result< + tonic::Response, + tonic::Status, + >; + async fn eth_get_block_by_hash( + &self, + request: tonic::Request, + ) -> Result, tonic::Status>; + /// / [ignore] + /// / Returns the balance for the given address. + async fn eth_send_transaction( + &self, + request: tonic::Request, + ) -> Result< + tonic::Response, + tonic::Status, + >; + async fn eth_chain_id( + &self, + request: tonic::Request<()>, + ) -> Result< + tonic::Response, + tonic::Status, + >; + async fn net_version( + &self, + request: tonic::Request<()>, + ) -> Result< + tonic::Response, + tonic::Status, + >; + async fn eth_block_number( + &self, + request: tonic::Request<()>, + ) -> Result< + tonic::Response, + tonic::Status, + >; + async fn eth_get_block_by_number( + &self, + request: tonic::Request, + ) -> Result, tonic::Status>; + async fn eth_mining( + &self, + request: tonic::Request<()>, + ) -> Result< + tonic::Response, + tonic::Status, + >; + } + #[derive(Debug)] + pub struct EthServer { + inner: _Inner, + accept_compression_encodings: EnabledCompressionEncodings, + send_compression_encodings: EnabledCompressionEncodings, + } + struct _Inner(Arc); + impl EthServer { + pub fn new(inner: T) -> Self { + Self::from_arc(Arc::new(inner)) + } + pub fn from_arc(inner: Arc) -> Self { + let inner = _Inner(inner); + Self { + inner, + accept_compression_encodings: Default::default(), + send_compression_encodings: Default::default(), + } + } + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> InterceptedService + where + F: tonic::service::Interceptor, + { + InterceptedService::new(Self::new(inner), interceptor) + } + /// Enable decompressing requests with the given encoding. + #[must_use] + pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.accept_compression_encodings.enable(encoding); + self + } + /// Compress responses with the given encoding, if the client supports it. + #[must_use] + pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.send_compression_encodings.enable(encoding); + self + } + } + impl tonic::codegen::Service> for EthServer + where + T: Eth, + B: Body + Send + 'static, + B::Error: Into + Send + 'static, + { + type Response = http::Response; + type Error = std::convert::Infallible; + type Future = BoxFuture; + fn poll_ready( + &mut self, + _cx: &mut Context<'_>, + ) -> Poll> { + Poll::Ready(Ok(())) + } + fn call(&mut self, req: http::Request) -> Self::Future { + let inner = self.inner.clone(); + match req.uri().path() { + "/rpc.eth/Eth_Accounts" => { + #[allow(non_camel_case_types)] + struct Eth_AccountsSvc(pub Arc); + impl tonic::server::UnaryService<()> for Eth_AccountsSvc { + type Response = super::super::types::EthAccountsResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call(&mut self, request: tonic::Request<()>) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).eth_accounts(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_AccountsSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Eth_Call" => { + #[allow(non_camel_case_types)] + struct Eth_CallSvc(pub Arc); + impl< + T: Eth, + > tonic::server::UnaryService + for Eth_CallSvc { + type Response = super::super::types::EthCallResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { (*inner).eth_call(request).await }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_CallSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Eth_GetBalance" => { + #[allow(non_camel_case_types)] + struct Eth_GetBalanceSvc(pub Arc); + impl< + T: Eth, + > tonic::server::UnaryService< + super::super::types::EthGetBalanceInput, + > for Eth_GetBalanceSvc { + type Response = super::super::types::EthGetBalanceResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::super::types::EthGetBalanceInput, + >, + ) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).eth_get_balance(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_GetBalanceSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Eth_GetBlockByHash" => { + #[allow(non_camel_case_types)] + struct Eth_GetBlockByHashSvc(pub Arc); + impl< + T: Eth, + > tonic::server::UnaryService< + super::super::types::EthGetBlockByHashInput, + > for Eth_GetBlockByHashSvc { + type Response = super::super::types::EthBlockInfo; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::super::types::EthGetBlockByHashInput, + >, + ) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).eth_get_block_by_hash(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_GetBlockByHashSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Eth_SendTransaction" => { + #[allow(non_camel_case_types)] + struct Eth_SendTransactionSvc(pub Arc); + impl< + T: Eth, + > tonic::server::UnaryService< + super::super::types::EthSendTransactionInput, + > for Eth_SendTransactionSvc { + type Response = super::super::types::EthSendTransactionResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::super::types::EthSendTransactionInput, + >, + ) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).eth_send_transaction(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_SendTransactionSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Eth_ChainId" => { + #[allow(non_camel_case_types)] + struct Eth_ChainIdSvc(pub Arc); + impl tonic::server::UnaryService<()> for Eth_ChainIdSvc { + type Response = super::super::types::EthChainIdResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call(&mut self, request: tonic::Request<()>) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).eth_chain_id(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_ChainIdSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Net_Version" => { + #[allow(non_camel_case_types)] + struct Net_VersionSvc(pub Arc); + impl tonic::server::UnaryService<()> for Net_VersionSvc { + type Response = super::super::types::EthChainIdResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call(&mut self, request: tonic::Request<()>) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { (*inner).net_version(request).await }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Net_VersionSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Eth_BlockNumber" => { + #[allow(non_camel_case_types)] + struct Eth_BlockNumberSvc(pub Arc); + impl tonic::server::UnaryService<()> + for Eth_BlockNumberSvc { + type Response = super::super::types::EthBlockNumberResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call(&mut self, request: tonic::Request<()>) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).eth_block_number(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_BlockNumberSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Eth_GetBlockByNumber" => { + #[allow(non_camel_case_types)] + struct Eth_GetBlockByNumberSvc(pub Arc); + impl< + T: Eth, + > tonic::server::UnaryService< + super::super::types::EthGetBlockByNumberInput, + > for Eth_GetBlockByNumberSvc { + type Response = super::super::types::EthBlockInfo; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::super::types::EthGetBlockByNumberInput, + >, + ) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { + (*inner).eth_get_block_by_number(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_GetBlockByNumberSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/rpc.eth/Eth_Mining" => { + #[allow(non_camel_case_types)] + struct Eth_MiningSvc(pub Arc); + impl tonic::server::UnaryService<()> for Eth_MiningSvc { + type Response = super::super::types::EthMiningResult; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call(&mut self, request: tonic::Request<()>) -> Self::Future { + let inner = self.0.clone(); + let fut = async move { (*inner).eth_mining(request).await }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = Eth_MiningSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + _ => { + Box::pin(async move { + Ok( + http::Response::builder() + .status(200) + .header("grpc-status", "12") + .header("content-type", "application/grpc") + .body(empty_body()) + .unwrap(), + ) + }) + } + } + } + } + impl Clone for EthServer { + fn clone(&self) -> Self { + let inner = self.inner.clone(); + Self { + inner, + accept_compression_encodings: self.accept_compression_encodings, + send_compression_encodings: self.send_compression_encodings, + } + } + } + impl Clone for _Inner { + fn clone(&self) -> Self { + Self(self.0.clone()) + } + } + impl std::fmt::Debug for _Inner { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self.0) + } + } + impl tonic::server::NamedService for EthServer { + const NAME: &'static str = "rpc.eth"; + } +} + +#[cxx::bridge] +pub mod ffi { +# [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct Transaction { pub hash : String , pub raw : RawTransaction , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct RawTransaction { pub in_active_chain : bool , pub hex : String , pub txid : String , pub hash : String , pub size : u32 , pub vsize : u32 , pub weight : u32 , pub version : u32 , pub locktime : u64 , pub vin : Vec < Vin > , pub vout : Vec < Vout > , pub blockhash : String , pub confirmations : String , pub blocktime : u64 , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct Vin { pub txid : String , pub vout : u32 , pub script_sig : ScriptSig , pub sequence : u64 , pub txinwitness : Vec < String > , pub coinbase : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct ScriptSig { pub field_asm : String , pub hex : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct Vout { pub value : f64 , pub n : u64 , pub script_pub_key : PubKey , pub token_id : u64 , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct PubKey { pub field_asm : String , pub hex : String , pub field_type : String , pub req_sigs : i32 , pub addresses : Vec < String > , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct Block { pub hash : String , pub confirmations : i64 , pub size : u64 , pub strippedsize : u64 , pub weight : u64 , pub height : u64 , pub version : u64 , pub version_hex : String , pub merkleroot : String , pub tx : Vec < Transaction > , pub time : u64 , pub mediantime : u64 , pub nonce : u64 , pub bits : String , pub difficulty : f64 , pub chainwork : String , pub n_tx : u32 , pub previous_block_hash : String , pub next_block_hash : String , pub masternode : String , pub minter : String , pub minted_blocks : u64 , pub stake_modifier : String , pub nonutxo : Vec < NonUtxo > , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct NonUtxo { pub anchor_reward : f64 , pub burnt : f64 , pub incentive_funding : f64 , pub loan : f64 , pub options : f64 , pub unknown : f64 , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct BlockInput { pub blockhash : String , pub verbosity : u32 , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct BlockResult { pub hash : String , pub block : Block , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct BlockHashResult { pub hash : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthAccountsResult { pub accounts : Vec < String > , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthTransactionInfo { pub from : String , pub to : String , pub gas : u64 , pub price : u64 , pub value : u64 , pub data : String , pub nonce : u64 , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthChainIdResult { pub id : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthBlockInfo { pub block_number : String , pub hash : String , pub parent_hash : String , pub nonce : String , pub sha3_uncles : String , pub logs_bloom : String , pub transactions_root : String , pub state_root : String , pub receipt_root : String , pub miner : String , pub difficulty : String , pub total_difficulty : String , pub extra_data : String , pub size : String , pub gas_limit : String , pub gas_used : String , pub timestamps : String , pub transactions : Vec < String > , pub uncles : Vec < String > , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthTransactionReceipt { pub transaction_hash : String , pub transaction_index : String , pub block_hash : String , pub block_number : String , pub from : String , pub to : String , pub cumulative_gas_used : String , pub effective_gas_price : String , pub gas_used : String , pub contract_address : String , pub logs : Vec < String > , pub logs_bloom : String , pub field_type : String , pub root : String , pub status : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCallInput { pub transaction_info : EthTransactionInfo , pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCallResult { pub data : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSignInput { pub address : String , pub message : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSignResult { pub signature : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBalanceInput { pub address : String , pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBalanceResult { pub balance : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSendTransactionInput { pub transaction_info : EthTransactionInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSendTransactionResult { pub hash : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCoinBaseResult { pub address : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthMiningResult { pub is_mining : bool , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthHashRateResult { pub hash_rate : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGasPriceResult { pub gas_price : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthBlockNumberResult { pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionCountInput { pub address : String , pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionCountResult { pub number_transaction : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBlockTransactionCountByHashInput { pub block_hash : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBlockTransactionCountByHashResult { pub number_transaction : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBlockTransactionCountByNumberInput { pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBlockTransactionCountByNumberResult { pub number_transaction : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetUncleCountByBlockHashInput { pub block_hash : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetUncleCountByBlockHashResult { pub number_uncles : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetUncleCountByBlockNumberInput { pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetUncleCountByBlockNumberResult { pub number_uncles : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetCodeInput { pub address : String , pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetCodeResult { pub code : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSignTransactionInput { pub transaction_info : EthTransactionInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSignTransactionResult { pub transaction : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSendRawTransactionInput { pub transaction : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSendRawTransactionResult { pub hash : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthEstimateGasInput { pub transaction_info : EthTransactionInfo , pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthEstimateGasResult { pub gas_used : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBlockByHashInput { pub hash : String , pub full_transaction : bool , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBlockByHashResult { pub block_info : EthBlockInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBlockByNumberInput { pub number : String , pub full_transaction : bool , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetBlockByNumberResult { pub block_info : EthBlockInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionByHashInput { pub hash : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionByHashResult { pub transaction : EthTransactionInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionByBlockHashAndIndexInput { pub block_hash : String , pub index : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionByBlockHashAndIndexResult { pub transaction : EthTransactionInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionByBlockNumberAndIndexInput { pub block_number : String , pub index : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionByBlockNumberAndIndexResult { pub transaction : EthTransactionInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetUncleByBlockHashAndIndexInput { pub block_hash : String , pub index : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetUncleByBlockHashAndIndexResult { pub block_info : EthBlockInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetUncleByBlockNumberAndIndexInput { pub block_number : String , pub index : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetUncleByBlockNumberAndIndexResult { pub block_info : EthBlockInfo , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetCompilersResult { pub compilers : Vec < String > , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCompileSolidityInput { pub code : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCompileSolidityResult { pub compiled_code : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCompileLllInput { pub code : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCompileLllResult { pub compiled_code : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCompileSerpentInput { pub code : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthCompileSerpentResult { pub compiled_code : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthProtocolVersionResult { pub protocol_version : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct Web3Sha3Input { pub data : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct Web3Sha3Result { pub data : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct NetPeerCountResult { pub number_peer : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct NetVersionResult { pub network_version : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct Web3ClientVersionResult { pub client_version : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetWorkResult { pub currentblock : String , pub seed_hash : String , pub target : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSubmitWorkInput { pub nounce : String , pub pow_hash : String , pub mix_digest : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSubmitWorkResult { pub is_valid : bool , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSubmitHashrateInput { pub hash_rate : String , pub id : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSubmitHashrateResult { pub is_valid : bool , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetStorageAtInput { pub address : String , pub position : String , pub block_number : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetStorageAtResult { pub value : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionReceiptInput { pub transaction_hash : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthGetTransactionReceiptResult { pub transaction_receipt : EthTransactionReceipt , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSyncingInfo { pub starting_block : String , pub current_block : String , pub highest_block : String , } # [derive (Debug , Default , Serialize , Deserialize , PartialEq)] pub struct EthSyncingResult { pub status : bool , pub sync_info : EthSyncingInfo , } extern "Rust" { type Client ; fn NewClient (addr : & str) -> Result < Box < Client >> ; # [allow (clippy :: borrowed_box)] fn CallEth_Accounts (client : & Box < Client >) -> Result < EthAccountsResult > ; # [allow (clippy :: borrowed_box)] fn CallEth_Call (client : & Box < Client > , eth_call_input : EthCallInput) -> Result < EthCallResult > ; # [allow (clippy :: borrowed_box)] fn CallEth_GetBalance (client : & Box < Client > , eth_get_balance_input : EthGetBalanceInput) -> Result < EthGetBalanceResult > ; # [allow (clippy :: borrowed_box)] fn CallEth_GetBlockByHash (client : & Box < Client > , eth_get_block_by_hash_input : EthGetBlockByHashInput) -> Result < EthBlockInfo > ; # [allow (clippy :: borrowed_box)] fn CallEth_ChainId (client : & Box < Client >) -> Result < EthChainIdResult > ; # [allow (clippy :: borrowed_box)] fn CallNet_Version (client : & Box < Client >) -> Result < EthChainIdResult > ; # [allow (clippy :: borrowed_box)] fn CallEth_BlockNumber (client : & Box < Client >) -> Result < EthBlockNumberResult > ; # [allow (clippy :: borrowed_box)] fn CallEth_GetBlockByNumber (client : & Box < Client > , eth_get_block_by_number_input : EthGetBlockByNumberInput) -> Result < EthBlockInfo > ; # [allow (clippy :: borrowed_box)] fn CallEth_Mining (client : & Box < Client >) -> Result < EthMiningResult > ; } +} +use jsonrpsee_core :: client :: ClientT ; use jsonrpsee_http_client :: { HttpClient , HttpClientBuilder } ; use std :: sync :: Arc ; use crate :: { CLIENTS } ; use ain_evm :: runtime :: RUNTIME ; use crate :: rpc :: * ; # [allow (unused_imports)] use self :: ffi :: * ; use ain_evm :: handler :: Handlers ; # [derive (Clone)] pub struct Client { inner : Arc < HttpClient > , handle : tokio :: runtime :: Handle , } # [allow (non_snake_case)] fn NewClient (addr : & str) -> Result < Box < Client > , Box < dyn std :: error :: Error >> { if CLIENTS . read () . unwrap () . get (addr) . is_none () { log :: info ! ("Initializing RPC client for {}" , addr) ; let c = Client { inner : Arc :: new (HttpClientBuilder :: default () . build (addr) ?) , handle : RUNTIME . rt_handle . clone () , } ; CLIENTS . write () . unwrap () . insert (addr . into () , c) ; } Ok (Box :: new (CLIENTS . read () . unwrap () . get (addr) . unwrap () . clone ())) } # [allow (dead_code)] fn missing_param (field : & str) -> jsonrpsee_core :: Error { jsonrpsee_core :: Error :: Call (jsonrpsee_types :: error :: CallError :: Custom (jsonrpsee_types :: ErrorObject :: borrowed (- 1 , & format ! ("Missing required parameter '{field}'") , None) . into_owned ())) } impl From < ffi :: EthSubmitHashrateResult > for super :: types :: EthSubmitHashrateResult { fn from (other : ffi :: EthSubmitHashrateResult) -> Self { super :: types :: EthSubmitHashrateResult { is_valid : other . is_valid . into () , } } } impl From < super :: types :: EthSubmitHashrateResult > for ffi :: EthSubmitHashrateResult { fn from (other : super :: types :: EthSubmitHashrateResult) -> Self { ffi :: EthSubmitHashrateResult { is_valid : other . is_valid . into () , } } } impl From < ffi :: EthGetTransactionCountResult > for super :: types :: EthGetTransactionCountResult { fn from (other : ffi :: EthGetTransactionCountResult) -> Self { super :: types :: EthGetTransactionCountResult { number_transaction : other . number_transaction . into () , } } } impl From < super :: types :: EthGetTransactionCountResult > for ffi :: EthGetTransactionCountResult { fn from (other : super :: types :: EthGetTransactionCountResult) -> Self { ffi :: EthGetTransactionCountResult { number_transaction : other . number_transaction . into () , } } } impl From < ffi :: Web3Sha3Input > for super :: types :: Web3Sha3Input { fn from (other : ffi :: Web3Sha3Input) -> Self { super :: types :: Web3Sha3Input { data : other . data . into () , } } } impl From < super :: types :: Web3Sha3Input > for ffi :: Web3Sha3Input { fn from (other : super :: types :: Web3Sha3Input) -> Self { ffi :: Web3Sha3Input { data : other . data . into () , } } } impl From < ffi :: EthGetUncleCountByBlockHashInput > for super :: types :: EthGetUncleCountByBlockHashInput { fn from (other : ffi :: EthGetUncleCountByBlockHashInput) -> Self { super :: types :: EthGetUncleCountByBlockHashInput { block_hash : other . block_hash . into () , } } } impl From < super :: types :: EthGetUncleCountByBlockHashInput > for ffi :: EthGetUncleCountByBlockHashInput { fn from (other : super :: types :: EthGetUncleCountByBlockHashInput) -> Self { ffi :: EthGetUncleCountByBlockHashInput { block_hash : other . block_hash . into () , } } } impl From < ffi :: EthSyncingInfo > for super :: types :: EthSyncingInfo { fn from (other : ffi :: EthSyncingInfo) -> Self { super :: types :: EthSyncingInfo { starting_block : other . starting_block . into () , current_block : other . current_block . into () , highest_block : other . highest_block . into () , } } } impl From < super :: types :: EthSyncingInfo > for ffi :: EthSyncingInfo { fn from (other : super :: types :: EthSyncingInfo) -> Self { ffi :: EthSyncingInfo { starting_block : other . starting_block . into () , current_block : other . current_block . into () , highest_block : other . highest_block . into () , } } } impl From < ffi :: EthSignTransactionInput > for super :: types :: EthSignTransactionInput { fn from (other : ffi :: EthSignTransactionInput) -> Self { super :: types :: EthSignTransactionInput { transaction_info : Some (other . transaction_info . into ()) , } } } impl From < super :: types :: EthSignTransactionInput > for ffi :: EthSignTransactionInput { fn from (other : super :: types :: EthSignTransactionInput) -> Self { ffi :: EthSignTransactionInput { transaction_info : other . transaction_info . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthEstimateGasInput > for super :: types :: EthEstimateGasInput { fn from (other : ffi :: EthEstimateGasInput) -> Self { super :: types :: EthEstimateGasInput { transaction_info : Some (other . transaction_info . into ()) , block_number : Some (other . block_number . into ()) , } } } impl From < super :: types :: EthEstimateGasInput > for ffi :: EthEstimateGasInput { fn from (other : super :: types :: EthEstimateGasInput) -> Self { ffi :: EthEstimateGasInput { transaction_info : other . transaction_info . map (Into :: into) . unwrap_or_default () , block_number : other . block_number . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthGetTransactionReceiptInput > for super :: types :: EthGetTransactionReceiptInput { fn from (other : ffi :: EthGetTransactionReceiptInput) -> Self { super :: types :: EthGetTransactionReceiptInput { transaction_hash : other . transaction_hash . into () , } } } impl From < super :: types :: EthGetTransactionReceiptInput > for ffi :: EthGetTransactionReceiptInput { fn from (other : super :: types :: EthGetTransactionReceiptInput) -> Self { ffi :: EthGetTransactionReceiptInput { transaction_hash : other . transaction_hash . into () , } } } impl From < ffi :: EthSubmitWorkResult > for super :: types :: EthSubmitWorkResult { fn from (other : ffi :: EthSubmitWorkResult) -> Self { super :: types :: EthSubmitWorkResult { is_valid : other . is_valid . into () , } } } impl From < super :: types :: EthSubmitWorkResult > for ffi :: EthSubmitWorkResult { fn from (other : super :: types :: EthSubmitWorkResult) -> Self { ffi :: EthSubmitWorkResult { is_valid : other . is_valid . into () , } } } impl From < ffi :: EthCompileLllInput > for super :: types :: EthCompileLllInput { fn from (other : ffi :: EthCompileLllInput) -> Self { super :: types :: EthCompileLllInput { code : other . code . into () , } } } impl From < super :: types :: EthCompileLllInput > for ffi :: EthCompileLllInput { fn from (other : super :: types :: EthCompileLllInput) -> Self { ffi :: EthCompileLllInput { code : other . code . into () , } } } impl From < ffi :: Vin > for super :: types :: Vin { fn from (other : ffi :: Vin) -> Self { super :: types :: Vin { txid : other . txid . into () , vout : other . vout . into () , script_sig : Some (other . script_sig . into ()) , sequence : other . sequence . into () , txinwitness : other . txinwitness . into_iter () . map (Into :: into) . collect () , coinbase : other . coinbase . into () , } } } impl From < super :: types :: Vin > for ffi :: Vin { fn from (other : super :: types :: Vin) -> Self { ffi :: Vin { txid : other . txid . into () , vout : other . vout . into () , script_sig : other . script_sig . map (Into :: into) . unwrap_or_default () , sequence : other . sequence . into () , txinwitness : other . txinwitness . into_iter () . map (Into :: into) . collect () , coinbase : other . coinbase . into () , } } } impl From < ffi :: EthGetCompilersResult > for super :: types :: EthGetCompilersResult { fn from (other : ffi :: EthGetCompilersResult) -> Self { super :: types :: EthGetCompilersResult { compilers : other . compilers . into_iter () . map (Into :: into) . collect () , } } } impl From < super :: types :: EthGetCompilersResult > for ffi :: EthGetCompilersResult { fn from (other : super :: types :: EthGetCompilersResult) -> Self { ffi :: EthGetCompilersResult { compilers : other . compilers . into_iter () . map (Into :: into) . collect () , } } } impl From < ffi :: EthGetStorageAtResult > for super :: types :: EthGetStorageAtResult { fn from (other : ffi :: EthGetStorageAtResult) -> Self { super :: types :: EthGetStorageAtResult { value : other . value . into () , } } } impl From < super :: types :: EthGetStorageAtResult > for ffi :: EthGetStorageAtResult { fn from (other : super :: types :: EthGetStorageAtResult) -> Self { ffi :: EthGetStorageAtResult { value : other . value . into () , } } } impl From < ffi :: EthGetUncleCountByBlockNumberResult > for super :: types :: EthGetUncleCountByBlockNumberResult { fn from (other : ffi :: EthGetUncleCountByBlockNumberResult) -> Self { super :: types :: EthGetUncleCountByBlockNumberResult { number_uncles : other . number_uncles . into () , } } } impl From < super :: types :: EthGetUncleCountByBlockNumberResult > for ffi :: EthGetUncleCountByBlockNumberResult { fn from (other : super :: types :: EthGetUncleCountByBlockNumberResult) -> Self { ffi :: EthGetUncleCountByBlockNumberResult { number_uncles : other . number_uncles . into () , } } } impl From < ffi :: EthCallInput > for super :: types :: EthCallInput { fn from (other : ffi :: EthCallInput) -> Self { super :: types :: EthCallInput { transaction_info : Some (other . transaction_info . into ()) , block_number : other . block_number . into () , } } } impl From < super :: types :: EthCallInput > for ffi :: EthCallInput { fn from (other : super :: types :: EthCallInput) -> Self { ffi :: EthCallInput { transaction_info : other . transaction_info . map (Into :: into) . unwrap_or_default () , block_number : other . block_number . into () , } } } impl From < ffi :: NetVersionResult > for super :: types :: NetVersionResult { fn from (other : ffi :: NetVersionResult) -> Self { super :: types :: NetVersionResult { network_version : other . network_version . into () , } } } impl From < super :: types :: NetVersionResult > for ffi :: NetVersionResult { fn from (other : super :: types :: NetVersionResult) -> Self { ffi :: NetVersionResult { network_version : other . network_version . into () , } } } impl From < ffi :: EthGetBlockByHashResult > for super :: types :: EthGetBlockByHashResult { fn from (other : ffi :: EthGetBlockByHashResult) -> Self { super :: types :: EthGetBlockByHashResult { block_info : Some (other . block_info . into ()) , } } } impl From < super :: types :: EthGetBlockByHashResult > for ffi :: EthGetBlockByHashResult { fn from (other : super :: types :: EthGetBlockByHashResult) -> Self { ffi :: EthGetBlockByHashResult { block_info : other . block_info . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthGetCodeInput > for super :: types :: EthGetCodeInput { fn from (other : ffi :: EthGetCodeInput) -> Self { super :: types :: EthGetCodeInput { address : other . address . into () , block_number : other . block_number . into () , } } } impl From < super :: types :: EthGetCodeInput > for ffi :: EthGetCodeInput { fn from (other : super :: types :: EthGetCodeInput) -> Self { ffi :: EthGetCodeInput { address : other . address . into () , block_number : other . block_number . into () , } } } impl From < ffi :: PubKey > for super :: types :: PubKey { fn from (other : ffi :: PubKey) -> Self { super :: types :: PubKey { field_asm : other . field_asm . into () , hex : other . hex . into () , field_type : other . field_type . into () , req_sigs : other . req_sigs . into () , addresses : other . addresses . into_iter () . map (Into :: into) . collect () , } } } impl From < super :: types :: PubKey > for ffi :: PubKey { fn from (other : super :: types :: PubKey) -> Self { ffi :: PubKey { field_asm : other . field_asm . into () , hex : other . hex . into () , field_type : other . field_type . into () , req_sigs : other . req_sigs . into () , addresses : other . addresses . into_iter () . map (Into :: into) . collect () , } } } impl From < ffi :: EthGetBlockTransactionCountByHashInput > for super :: types :: EthGetBlockTransactionCountByHashInput { fn from (other : ffi :: EthGetBlockTransactionCountByHashInput) -> Self { super :: types :: EthGetBlockTransactionCountByHashInput { block_hash : other . block_hash . into () , } } } impl From < super :: types :: EthGetBlockTransactionCountByHashInput > for ffi :: EthGetBlockTransactionCountByHashInput { fn from (other : super :: types :: EthGetBlockTransactionCountByHashInput) -> Self { ffi :: EthGetBlockTransactionCountByHashInput { block_hash : other . block_hash . into () , } } } impl From < ffi :: EthGetTransactionByBlockHashAndIndexResult > for super :: types :: EthGetTransactionByBlockHashAndIndexResult { fn from (other : ffi :: EthGetTransactionByBlockHashAndIndexResult) -> Self { super :: types :: EthGetTransactionByBlockHashAndIndexResult { transaction : Some (other . transaction . into ()) , } } } impl From < super :: types :: EthGetTransactionByBlockHashAndIndexResult > for ffi :: EthGetTransactionByBlockHashAndIndexResult { fn from (other : super :: types :: EthGetTransactionByBlockHashAndIndexResult) -> Self { ffi :: EthGetTransactionByBlockHashAndIndexResult { transaction : other . transaction . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: Web3ClientVersionResult > for super :: types :: Web3ClientVersionResult { fn from (other : ffi :: Web3ClientVersionResult) -> Self { super :: types :: Web3ClientVersionResult { client_version : other . client_version . into () , } } } impl From < super :: types :: Web3ClientVersionResult > for ffi :: Web3ClientVersionResult { fn from (other : super :: types :: Web3ClientVersionResult) -> Self { ffi :: Web3ClientVersionResult { client_version : other . client_version . into () , } } } impl From < ffi :: EthSendRawTransactionInput > for super :: types :: EthSendRawTransactionInput { fn from (other : ffi :: EthSendRawTransactionInput) -> Self { super :: types :: EthSendRawTransactionInput { transaction : other . transaction . into () , } } } impl From < super :: types :: EthSendRawTransactionInput > for ffi :: EthSendRawTransactionInput { fn from (other : super :: types :: EthSendRawTransactionInput) -> Self { ffi :: EthSendRawTransactionInput { transaction : other . transaction . into () , } } } impl From < ffi :: EthGetBlockTransactionCountByNumberResult > for super :: types :: EthGetBlockTransactionCountByNumberResult { fn from (other : ffi :: EthGetBlockTransactionCountByNumberResult) -> Self { super :: types :: EthGetBlockTransactionCountByNumberResult { number_transaction : other . number_transaction . into () , } } } impl From < super :: types :: EthGetBlockTransactionCountByNumberResult > for ffi :: EthGetBlockTransactionCountByNumberResult { fn from (other : super :: types :: EthGetBlockTransactionCountByNumberResult) -> Self { ffi :: EthGetBlockTransactionCountByNumberResult { number_transaction : other . number_transaction . into () , } } } impl From < ffi :: EthCompileSolidityResult > for super :: types :: EthCompileSolidityResult { fn from (other : ffi :: EthCompileSolidityResult) -> Self { super :: types :: EthCompileSolidityResult { compiled_code : other . compiled_code . into () , } } } impl From < super :: types :: EthCompileSolidityResult > for ffi :: EthCompileSolidityResult { fn from (other : super :: types :: EthCompileSolidityResult) -> Self { ffi :: EthCompileSolidityResult { compiled_code : other . compiled_code . into () , } } } impl From < ffi :: EthSignInput > for super :: types :: EthSignInput { fn from (other : ffi :: EthSignInput) -> Self { super :: types :: EthSignInput { address : other . address . into () , message : other . message . into () , } } } impl From < super :: types :: EthSignInput > for ffi :: EthSignInput { fn from (other : super :: types :: EthSignInput) -> Self { ffi :: EthSignInput { address : other . address . into () , message : other . message . into () , } } } impl From < ffi :: EthSubmitWorkInput > for super :: types :: EthSubmitWorkInput { fn from (other : ffi :: EthSubmitWorkInput) -> Self { super :: types :: EthSubmitWorkInput { nounce : other . nounce . into () , pow_hash : other . pow_hash . into () , mix_digest : other . mix_digest . into () , } } } impl From < super :: types :: EthSubmitWorkInput > for ffi :: EthSubmitWorkInput { fn from (other : super :: types :: EthSubmitWorkInput) -> Self { ffi :: EthSubmitWorkInput { nounce : other . nounce . into () , pow_hash : other . pow_hash . into () , mix_digest : other . mix_digest . into () , } } } impl From < ffi :: EthBlockNumberResult > for super :: types :: EthBlockNumberResult { fn from (other : ffi :: EthBlockNumberResult) -> Self { super :: types :: EthBlockNumberResult { block_number : other . block_number . into () , } } } impl From < super :: types :: EthBlockNumberResult > for ffi :: EthBlockNumberResult { fn from (other : super :: types :: EthBlockNumberResult) -> Self { ffi :: EthBlockNumberResult { block_number : other . block_number . into () , } } } impl From < ffi :: EthCompileLllResult > for super :: types :: EthCompileLllResult { fn from (other : ffi :: EthCompileLllResult) -> Self { super :: types :: EthCompileLllResult { compiled_code : other . compiled_code . into () , } } } impl From < super :: types :: EthCompileLllResult > for ffi :: EthCompileLllResult { fn from (other : super :: types :: EthCompileLllResult) -> Self { ffi :: EthCompileLllResult { compiled_code : other . compiled_code . into () , } } } impl From < ffi :: EthHashRateResult > for super :: types :: EthHashRateResult { fn from (other : ffi :: EthHashRateResult) -> Self { super :: types :: EthHashRateResult { hash_rate : other . hash_rate . into () , } } } impl From < super :: types :: EthHashRateResult > for ffi :: EthHashRateResult { fn from (other : super :: types :: EthHashRateResult) -> Self { ffi :: EthHashRateResult { hash_rate : other . hash_rate . into () , } } } impl From < ffi :: EthGasPriceResult > for super :: types :: EthGasPriceResult { fn from (other : ffi :: EthGasPriceResult) -> Self { super :: types :: EthGasPriceResult { gas_price : other . gas_price . into () , } } } impl From < super :: types :: EthGasPriceResult > for ffi :: EthGasPriceResult { fn from (other : super :: types :: EthGasPriceResult) -> Self { ffi :: EthGasPriceResult { gas_price : other . gas_price . into () , } } } impl From < ffi :: EthGetTransactionCountInput > for super :: types :: EthGetTransactionCountInput { fn from (other : ffi :: EthGetTransactionCountInput) -> Self { super :: types :: EthGetTransactionCountInput { address : other . address . into () , block_number : other . block_number . into () , } } } impl From < super :: types :: EthGetTransactionCountInput > for ffi :: EthGetTransactionCountInput { fn from (other : super :: types :: EthGetTransactionCountInput) -> Self { ffi :: EthGetTransactionCountInput { address : other . address . into () , block_number : other . block_number . into () , } } } impl From < ffi :: EthGetBlockByHashInput > for super :: types :: EthGetBlockByHashInput { fn from (other : ffi :: EthGetBlockByHashInput) -> Self { super :: types :: EthGetBlockByHashInput { hash : other . hash . into () , full_transaction : other . full_transaction . into () , } } } impl From < super :: types :: EthGetBlockByHashInput > for ffi :: EthGetBlockByHashInput { fn from (other : super :: types :: EthGetBlockByHashInput) -> Self { ffi :: EthGetBlockByHashInput { hash : other . hash . into () , full_transaction : other . full_transaction . into () , } } } impl From < ffi :: EthSyncingResult > for super :: types :: EthSyncingResult { fn from (other : ffi :: EthSyncingResult) -> Self { super :: types :: EthSyncingResult { status : Some (other . status . into ()) , sync_info : Some (other . sync_info . into ()) , } } } impl From < super :: types :: EthSyncingResult > for ffi :: EthSyncingResult { fn from (other : super :: types :: EthSyncingResult) -> Self { ffi :: EthSyncingResult { status : other . status . map (Into :: into) . unwrap_or_default () , sync_info : other . sync_info . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthChainIdResult > for super :: types :: EthChainIdResult { fn from (other : ffi :: EthChainIdResult) -> Self { super :: types :: EthChainIdResult { id : other . id . into () , } } } impl From < super :: types :: EthChainIdResult > for ffi :: EthChainIdResult { fn from (other : super :: types :: EthChainIdResult) -> Self { ffi :: EthChainIdResult { id : other . id . into () , } } } impl From < ffi :: EthTransactionReceipt > for super :: types :: EthTransactionReceipt { fn from (other : ffi :: EthTransactionReceipt) -> Self { super :: types :: EthTransactionReceipt { transaction_hash : other . transaction_hash . into () , transaction_index : other . transaction_index . into () , block_hash : other . block_hash . into () , block_number : other . block_number . into () , from : other . from . into () , to : other . to . into () , cumulative_gas_used : other . cumulative_gas_used . into () , effective_gas_price : other . effective_gas_price . into () , gas_used : other . gas_used . into () , contract_address : other . contract_address . into () , logs : other . logs . into_iter () . map (Into :: into) . collect () , logs_bloom : other . logs_bloom . into () , field_type : other . field_type . into () , root : Some (other . root . into ()) , status : Some (other . status . into ()) , } } } impl From < super :: types :: EthTransactionReceipt > for ffi :: EthTransactionReceipt { fn from (other : super :: types :: EthTransactionReceipt) -> Self { ffi :: EthTransactionReceipt { transaction_hash : other . transaction_hash . into () , transaction_index : other . transaction_index . into () , block_hash : other . block_hash . into () , block_number : other . block_number . into () , from : other . from . into () , to : other . to . into () , cumulative_gas_used : other . cumulative_gas_used . into () , effective_gas_price : other . effective_gas_price . into () , gas_used : other . gas_used . into () , contract_address : other . contract_address . into () , logs : other . logs . into_iter () . map (Into :: into) . collect () , logs_bloom : other . logs_bloom . into () , field_type : other . field_type . into () , root : other . root . map (Into :: into) . unwrap_or_default () , status : other . status . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: BlockResult > for super :: types :: BlockResult { fn from (other : ffi :: BlockResult) -> Self { super :: types :: BlockResult { hash : other . hash . into () , block : Some (other . block . into ()) , } } } impl From < super :: types :: BlockResult > for ffi :: BlockResult { fn from (other : super :: types :: BlockResult) -> Self { ffi :: BlockResult { hash : other . hash . into () , block : other . block . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: NonUtxo > for super :: types :: NonUtxo { fn from (other : ffi :: NonUtxo) -> Self { super :: types :: NonUtxo { anchor_reward : other . anchor_reward . into () , burnt : other . burnt . into () , incentive_funding : other . incentive_funding . into () , loan : other . loan . into () , options : other . options . into () , unknown : other . unknown . into () , } } } impl From < super :: types :: NonUtxo > for ffi :: NonUtxo { fn from (other : super :: types :: NonUtxo) -> Self { ffi :: NonUtxo { anchor_reward : other . anchor_reward . into () , burnt : other . burnt . into () , incentive_funding : other . incentive_funding . into () , loan : other . loan . into () , options : other . options . into () , unknown : other . unknown . into () , } } } impl From < ffi :: EthBlockInfo > for super :: types :: EthBlockInfo { fn from (other : ffi :: EthBlockInfo) -> Self { super :: types :: EthBlockInfo { block_number : other . block_number . into () , hash : other . hash . into () , parent_hash : other . parent_hash . into () , nonce : other . nonce . into () , sha3_uncles : other . sha3_uncles . into () , logs_bloom : other . logs_bloom . into () , transactions_root : other . transactions_root . into () , state_root : other . state_root . into () , receipt_root : other . receipt_root . into () , miner : other . miner . into () , difficulty : other . difficulty . into () , total_difficulty : other . total_difficulty . into () , extra_data : other . extra_data . into () , size : other . size . into () , gas_limit : other . gas_limit . into () , gas_used : other . gas_used . into () , timestamps : other . timestamps . into () , transactions : other . transactions . into_iter () . map (Into :: into) . collect () , uncles : other . uncles . into_iter () . map (Into :: into) . collect () , } } } impl From < super :: types :: EthBlockInfo > for ffi :: EthBlockInfo { fn from (other : super :: types :: EthBlockInfo) -> Self { ffi :: EthBlockInfo { block_number : other . block_number . into () , hash : other . hash . into () , parent_hash : other . parent_hash . into () , nonce : other . nonce . into () , sha3_uncles : other . sha3_uncles . into () , logs_bloom : other . logs_bloom . into () , transactions_root : other . transactions_root . into () , state_root : other . state_root . into () , receipt_root : other . receipt_root . into () , miner : other . miner . into () , difficulty : other . difficulty . into () , total_difficulty : other . total_difficulty . into () , extra_data : other . extra_data . into () , size : other . size . into () , gas_limit : other . gas_limit . into () , gas_used : other . gas_used . into () , timestamps : other . timestamps . into () , transactions : other . transactions . into_iter () . map (Into :: into) . collect () , uncles : other . uncles . into_iter () . map (Into :: into) . collect () , } } } impl From < ffi :: EthSignResult > for super :: types :: EthSignResult { fn from (other : ffi :: EthSignResult) -> Self { super :: types :: EthSignResult { signature : other . signature . into () , } } } impl From < super :: types :: EthSignResult > for ffi :: EthSignResult { fn from (other : super :: types :: EthSignResult) -> Self { ffi :: EthSignResult { signature : other . signature . into () , } } } impl From < ffi :: EthGetBlockTransactionCountByHashResult > for super :: types :: EthGetBlockTransactionCountByHashResult { fn from (other : ffi :: EthGetBlockTransactionCountByHashResult) -> Self { super :: types :: EthGetBlockTransactionCountByHashResult { number_transaction : other . number_transaction . into () , } } } impl From < super :: types :: EthGetBlockTransactionCountByHashResult > for ffi :: EthGetBlockTransactionCountByHashResult { fn from (other : super :: types :: EthGetBlockTransactionCountByHashResult) -> Self { ffi :: EthGetBlockTransactionCountByHashResult { number_transaction : other . number_transaction . into () , } } } impl From < ffi :: EthGetBalanceResult > for super :: types :: EthGetBalanceResult { fn from (other : ffi :: EthGetBalanceResult) -> Self { super :: types :: EthGetBalanceResult { balance : other . balance . into () , } } } impl From < super :: types :: EthGetBalanceResult > for ffi :: EthGetBalanceResult { fn from (other : super :: types :: EthGetBalanceResult) -> Self { ffi :: EthGetBalanceResult { balance : other . balance . into () , } } } impl From < ffi :: Block > for super :: types :: Block { fn from (other : ffi :: Block) -> Self { super :: types :: Block { hash : other . hash . into () , confirmations : other . confirmations . into () , size : other . size . into () , strippedsize : other . strippedsize . into () , weight : other . weight . into () , height : other . height . into () , version : other . version . into () , version_hex : other . version_hex . into () , merkleroot : other . merkleroot . into () , tx : other . tx . into_iter () . map (Into :: into) . collect () , time : other . time . into () , mediantime : other . mediantime . into () , nonce : other . nonce . into () , bits : other . bits . into () , difficulty : other . difficulty . into () , chainwork : other . chainwork . into () , n_tx : other . n_tx . into () , previous_block_hash : other . previous_block_hash . into () , next_block_hash : other . next_block_hash . into () , masternode : other . masternode . into () , minter : other . minter . into () , minted_blocks : other . minted_blocks . into () , stake_modifier : other . stake_modifier . into () , nonutxo : other . nonutxo . into_iter () . map (Into :: into) . collect () , } } } impl From < super :: types :: Block > for ffi :: Block { fn from (other : super :: types :: Block) -> Self { ffi :: Block { hash : other . hash . into () , confirmations : other . confirmations . into () , size : other . size . into () , strippedsize : other . strippedsize . into () , weight : other . weight . into () , height : other . height . into () , version : other . version . into () , version_hex : other . version_hex . into () , merkleroot : other . merkleroot . into () , tx : other . tx . into_iter () . map (Into :: into) . collect () , time : other . time . into () , mediantime : other . mediantime . into () , nonce : other . nonce . into () , bits : other . bits . into () , difficulty : other . difficulty . into () , chainwork : other . chainwork . into () , n_tx : other . n_tx . into () , previous_block_hash : other . previous_block_hash . into () , next_block_hash : other . next_block_hash . into () , masternode : other . masternode . into () , minter : other . minter . into () , minted_blocks : other . minted_blocks . into () , stake_modifier : other . stake_modifier . into () , nonutxo : other . nonutxo . into_iter () . map (Into :: into) . collect () , } } } impl From < ffi :: EthGetBlockTransactionCountByNumberInput > for super :: types :: EthGetBlockTransactionCountByNumberInput { fn from (other : ffi :: EthGetBlockTransactionCountByNumberInput) -> Self { super :: types :: EthGetBlockTransactionCountByNumberInput { block_number : other . block_number . into () , } } } impl From < super :: types :: EthGetBlockTransactionCountByNumberInput > for ffi :: EthGetBlockTransactionCountByNumberInput { fn from (other : super :: types :: EthGetBlockTransactionCountByNumberInput) -> Self { ffi :: EthGetBlockTransactionCountByNumberInput { block_number : other . block_number . into () , } } } impl From < ffi :: EthGetStorageAtInput > for super :: types :: EthGetStorageAtInput { fn from (other : ffi :: EthGetStorageAtInput) -> Self { super :: types :: EthGetStorageAtInput { address : other . address . into () , position : other . position . into () , block_number : other . block_number . into () , } } } impl From < super :: types :: EthGetStorageAtInput > for ffi :: EthGetStorageAtInput { fn from (other : super :: types :: EthGetStorageAtInput) -> Self { ffi :: EthGetStorageAtInput { address : other . address . into () , position : other . position . into () , block_number : other . block_number . into () , } } } impl From < ffi :: Web3Sha3Result > for super :: types :: Web3Sha3Result { fn from (other : ffi :: Web3Sha3Result) -> Self { super :: types :: Web3Sha3Result { data : other . data . into () , } } } impl From < super :: types :: Web3Sha3Result > for ffi :: Web3Sha3Result { fn from (other : super :: types :: Web3Sha3Result) -> Self { ffi :: Web3Sha3Result { data : other . data . into () , } } } impl From < ffi :: EthGetBalanceInput > for super :: types :: EthGetBalanceInput { fn from (other : ffi :: EthGetBalanceInput) -> Self { super :: types :: EthGetBalanceInput { address : other . address . into () , block_number : other . block_number . into () , } } } impl From < super :: types :: EthGetBalanceInput > for ffi :: EthGetBalanceInput { fn from (other : super :: types :: EthGetBalanceInput) -> Self { ffi :: EthGetBalanceInput { address : other . address . into () , block_number : other . block_number . into () , } } } impl From < ffi :: EthGetTransactionByHashResult > for super :: types :: EthGetTransactionByHashResult { fn from (other : ffi :: EthGetTransactionByHashResult) -> Self { super :: types :: EthGetTransactionByHashResult { transaction : Some (other . transaction . into ()) , } } } impl From < super :: types :: EthGetTransactionByHashResult > for ffi :: EthGetTransactionByHashResult { fn from (other : super :: types :: EthGetTransactionByHashResult) -> Self { ffi :: EthGetTransactionByHashResult { transaction : other . transaction . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthGetTransactionByHashInput > for super :: types :: EthGetTransactionByHashInput { fn from (other : ffi :: EthGetTransactionByHashInput) -> Self { super :: types :: EthGetTransactionByHashInput { hash : other . hash . into () , } } } impl From < super :: types :: EthGetTransactionByHashInput > for ffi :: EthGetTransactionByHashInput { fn from (other : super :: types :: EthGetTransactionByHashInput) -> Self { ffi :: EthGetTransactionByHashInput { hash : other . hash . into () , } } } impl From < ffi :: EthGetUncleCountByBlockNumberInput > for super :: types :: EthGetUncleCountByBlockNumberInput { fn from (other : ffi :: EthGetUncleCountByBlockNumberInput) -> Self { super :: types :: EthGetUncleCountByBlockNumberInput { block_number : other . block_number . into () , } } } impl From < super :: types :: EthGetUncleCountByBlockNumberInput > for ffi :: EthGetUncleCountByBlockNumberInput { fn from (other : super :: types :: EthGetUncleCountByBlockNumberInput) -> Self { ffi :: EthGetUncleCountByBlockNumberInput { block_number : other . block_number . into () , } } } impl From < ffi :: EthSubmitHashrateInput > for super :: types :: EthSubmitHashrateInput { fn from (other : ffi :: EthSubmitHashrateInput) -> Self { super :: types :: EthSubmitHashrateInput { hash_rate : other . hash_rate . into () , id : other . id . into () , } } } impl From < super :: types :: EthSubmitHashrateInput > for ffi :: EthSubmitHashrateInput { fn from (other : super :: types :: EthSubmitHashrateInput) -> Self { ffi :: EthSubmitHashrateInput { hash_rate : other . hash_rate . into () , id : other . id . into () , } } } impl From < ffi :: EthGetTransactionByBlockHashAndIndexInput > for super :: types :: EthGetTransactionByBlockHashAndIndexInput { fn from (other : ffi :: EthGetTransactionByBlockHashAndIndexInput) -> Self { super :: types :: EthGetTransactionByBlockHashAndIndexInput { block_hash : other . block_hash . into () , index : other . index . into () , } } } impl From < super :: types :: EthGetTransactionByBlockHashAndIndexInput > for ffi :: EthGetTransactionByBlockHashAndIndexInput { fn from (other : super :: types :: EthGetTransactionByBlockHashAndIndexInput) -> Self { ffi :: EthGetTransactionByBlockHashAndIndexInput { block_hash : other . block_hash . into () , index : other . index . into () , } } } impl From < ffi :: EthSendRawTransactionResult > for super :: types :: EthSendRawTransactionResult { fn from (other : ffi :: EthSendRawTransactionResult) -> Self { super :: types :: EthSendRawTransactionResult { hash : other . hash . into () , } } } impl From < super :: types :: EthSendRawTransactionResult > for ffi :: EthSendRawTransactionResult { fn from (other : super :: types :: EthSendRawTransactionResult) -> Self { ffi :: EthSendRawTransactionResult { hash : other . hash . into () , } } } impl From < ffi :: ScriptSig > for super :: types :: ScriptSig { fn from (other : ffi :: ScriptSig) -> Self { super :: types :: ScriptSig { field_asm : other . field_asm . into () , hex : other . hex . into () , } } } impl From < super :: types :: ScriptSig > for ffi :: ScriptSig { fn from (other : super :: types :: ScriptSig) -> Self { ffi :: ScriptSig { field_asm : other . field_asm . into () , hex : other . hex . into () , } } } impl From < ffi :: EthGetTransactionByBlockNumberAndIndexInput > for super :: types :: EthGetTransactionByBlockNumberAndIndexInput { fn from (other : ffi :: EthGetTransactionByBlockNumberAndIndexInput) -> Self { super :: types :: EthGetTransactionByBlockNumberAndIndexInput { block_number : other . block_number . into () , index : other . index . into () , } } } impl From < super :: types :: EthGetTransactionByBlockNumberAndIndexInput > for ffi :: EthGetTransactionByBlockNumberAndIndexInput { fn from (other : super :: types :: EthGetTransactionByBlockNumberAndIndexInput) -> Self { ffi :: EthGetTransactionByBlockNumberAndIndexInput { block_number : other . block_number . into () , index : other . index . into () , } } } impl From < ffi :: EthMiningResult > for super :: types :: EthMiningResult { fn from (other : ffi :: EthMiningResult) -> Self { super :: types :: EthMiningResult { is_mining : other . is_mining . into () , } } } impl From < super :: types :: EthMiningResult > for ffi :: EthMiningResult { fn from (other : super :: types :: EthMiningResult) -> Self { ffi :: EthMiningResult { is_mining : other . is_mining . into () , } } } impl From < ffi :: RawTransaction > for super :: types :: RawTransaction { fn from (other : ffi :: RawTransaction) -> Self { super :: types :: RawTransaction { in_active_chain : other . in_active_chain . into () , hex : other . hex . into () , txid : other . txid . into () , hash : other . hash . into () , size : other . size . into () , vsize : other . vsize . into () , weight : other . weight . into () , version : other . version . into () , locktime : other . locktime . into () , vin : other . vin . into_iter () . map (Into :: into) . collect () , vout : other . vout . into_iter () . map (Into :: into) . collect () , blockhash : other . blockhash . into () , confirmations : other . confirmations . into () , blocktime : other . blocktime . into () , } } } impl From < super :: types :: RawTransaction > for ffi :: RawTransaction { fn from (other : super :: types :: RawTransaction) -> Self { ffi :: RawTransaction { in_active_chain : other . in_active_chain . into () , hex : other . hex . into () , txid : other . txid . into () , hash : other . hash . into () , size : other . size . into () , vsize : other . vsize . into () , weight : other . weight . into () , version : other . version . into () , locktime : other . locktime . into () , vin : other . vin . into_iter () . map (Into :: into) . collect () , vout : other . vout . into_iter () . map (Into :: into) . collect () , blockhash : other . blockhash . into () , confirmations : other . confirmations . into () , blocktime : other . blocktime . into () , } } } impl From < ffi :: EthSendTransactionInput > for super :: types :: EthSendTransactionInput { fn from (other : ffi :: EthSendTransactionInput) -> Self { super :: types :: EthSendTransactionInput { transaction_info : Some (other . transaction_info . into ()) , } } } impl From < super :: types :: EthSendTransactionInput > for ffi :: EthSendTransactionInput { fn from (other : super :: types :: EthSendTransactionInput) -> Self { ffi :: EthSendTransactionInput { transaction_info : other . transaction_info . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthSendTransactionResult > for super :: types :: EthSendTransactionResult { fn from (other : ffi :: EthSendTransactionResult) -> Self { super :: types :: EthSendTransactionResult { hash : other . hash . into () , } } } impl From < super :: types :: EthSendTransactionResult > for ffi :: EthSendTransactionResult { fn from (other : super :: types :: EthSendTransactionResult) -> Self { ffi :: EthSendTransactionResult { hash : other . hash . into () , } } } impl From < ffi :: EthGetTransactionReceiptResult > for super :: types :: EthGetTransactionReceiptResult { fn from (other : ffi :: EthGetTransactionReceiptResult) -> Self { super :: types :: EthGetTransactionReceiptResult { transaction_receipt : Some (other . transaction_receipt . into ()) , } } } impl From < super :: types :: EthGetTransactionReceiptResult > for ffi :: EthGetTransactionReceiptResult { fn from (other : super :: types :: EthGetTransactionReceiptResult) -> Self { ffi :: EthGetTransactionReceiptResult { transaction_receipt : other . transaction_receipt . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthGetUncleByBlockHashAndIndexInput > for super :: types :: EthGetUncleByBlockHashAndIndexInput { fn from (other : ffi :: EthGetUncleByBlockHashAndIndexInput) -> Self { super :: types :: EthGetUncleByBlockHashAndIndexInput { block_hash : other . block_hash . into () , index : other . index . into () , } } } impl From < super :: types :: EthGetUncleByBlockHashAndIndexInput > for ffi :: EthGetUncleByBlockHashAndIndexInput { fn from (other : super :: types :: EthGetUncleByBlockHashAndIndexInput) -> Self { ffi :: EthGetUncleByBlockHashAndIndexInput { block_hash : other . block_hash . into () , index : other . index . into () , } } } impl From < ffi :: Transaction > for super :: types :: Transaction { fn from (other : ffi :: Transaction) -> Self { super :: types :: Transaction { hash : other . hash . into () , raw : Some (other . raw . into ()) , } } } impl From < super :: types :: Transaction > for ffi :: Transaction { fn from (other : super :: types :: Transaction) -> Self { ffi :: Transaction { hash : other . hash . into () , raw : other . raw . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthCompileSerpentInput > for super :: types :: EthCompileSerpentInput { fn from (other : ffi :: EthCompileSerpentInput) -> Self { super :: types :: EthCompileSerpentInput { code : other . code . into () , } } } impl From < super :: types :: EthCompileSerpentInput > for ffi :: EthCompileSerpentInput { fn from (other : super :: types :: EthCompileSerpentInput) -> Self { ffi :: EthCompileSerpentInput { code : other . code . into () , } } } impl From < ffi :: EthCompileSerpentResult > for super :: types :: EthCompileSerpentResult { fn from (other : ffi :: EthCompileSerpentResult) -> Self { super :: types :: EthCompileSerpentResult { compiled_code : other . compiled_code . into () , } } } impl From < super :: types :: EthCompileSerpentResult > for ffi :: EthCompileSerpentResult { fn from (other : super :: types :: EthCompileSerpentResult) -> Self { ffi :: EthCompileSerpentResult { compiled_code : other . compiled_code . into () , } } } impl From < ffi :: BlockInput > for super :: types :: BlockInput { fn from (other : ffi :: BlockInput) -> Self { super :: types :: BlockInput { blockhash : other . blockhash . into () , verbosity : other . verbosity . into () , } } } impl From < super :: types :: BlockInput > for ffi :: BlockInput { fn from (other : super :: types :: BlockInput) -> Self { ffi :: BlockInput { blockhash : other . blockhash . into () , verbosity : other . verbosity . into () , } } } impl From < ffi :: EthGetUncleCountByBlockHashResult > for super :: types :: EthGetUncleCountByBlockHashResult { fn from (other : ffi :: EthGetUncleCountByBlockHashResult) -> Self { super :: types :: EthGetUncleCountByBlockHashResult { number_uncles : other . number_uncles . into () , } } } impl From < super :: types :: EthGetUncleCountByBlockHashResult > for ffi :: EthGetUncleCountByBlockHashResult { fn from (other : super :: types :: EthGetUncleCountByBlockHashResult) -> Self { ffi :: EthGetUncleCountByBlockHashResult { number_uncles : other . number_uncles . into () , } } } impl From < ffi :: BlockHashResult > for super :: types :: BlockHashResult { fn from (other : ffi :: BlockHashResult) -> Self { super :: types :: BlockHashResult { hash : other . hash . into () , } } } impl From < super :: types :: BlockHashResult > for ffi :: BlockHashResult { fn from (other : super :: types :: BlockHashResult) -> Self { ffi :: BlockHashResult { hash : other . hash . into () , } } } impl From < ffi :: EthCompileSolidityInput > for super :: types :: EthCompileSolidityInput { fn from (other : ffi :: EthCompileSolidityInput) -> Self { super :: types :: EthCompileSolidityInput { code : other . code . into () , } } } impl From < super :: types :: EthCompileSolidityInput > for ffi :: EthCompileSolidityInput { fn from (other : super :: types :: EthCompileSolidityInput) -> Self { ffi :: EthCompileSolidityInput { code : other . code . into () , } } } impl From < ffi :: EthGetUncleByBlockHashAndIndexResult > for super :: types :: EthGetUncleByBlockHashAndIndexResult { fn from (other : ffi :: EthGetUncleByBlockHashAndIndexResult) -> Self { super :: types :: EthGetUncleByBlockHashAndIndexResult { block_info : Some (other . block_info . into ()) , } } } impl From < super :: types :: EthGetUncleByBlockHashAndIndexResult > for ffi :: EthGetUncleByBlockHashAndIndexResult { fn from (other : super :: types :: EthGetUncleByBlockHashAndIndexResult) -> Self { ffi :: EthGetUncleByBlockHashAndIndexResult { block_info : other . block_info . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthProtocolVersionResult > for super :: types :: EthProtocolVersionResult { fn from (other : ffi :: EthProtocolVersionResult) -> Self { super :: types :: EthProtocolVersionResult { protocol_version : other . protocol_version . into () , } } } impl From < super :: types :: EthProtocolVersionResult > for ffi :: EthProtocolVersionResult { fn from (other : super :: types :: EthProtocolVersionResult) -> Self { ffi :: EthProtocolVersionResult { protocol_version : other . protocol_version . into () , } } } impl From < ffi :: EthEstimateGasResult > for super :: types :: EthEstimateGasResult { fn from (other : ffi :: EthEstimateGasResult) -> Self { super :: types :: EthEstimateGasResult { gas_used : other . gas_used . into () , } } } impl From < super :: types :: EthEstimateGasResult > for ffi :: EthEstimateGasResult { fn from (other : super :: types :: EthEstimateGasResult) -> Self { ffi :: EthEstimateGasResult { gas_used : other . gas_used . into () , } } } impl From < ffi :: EthAccountsResult > for super :: types :: EthAccountsResult { fn from (other : ffi :: EthAccountsResult) -> Self { super :: types :: EthAccountsResult { accounts : other . accounts . into_iter () . map (Into :: into) . collect () , } } } impl From < super :: types :: EthAccountsResult > for ffi :: EthAccountsResult { fn from (other : super :: types :: EthAccountsResult) -> Self { ffi :: EthAccountsResult { accounts : other . accounts . into_iter () . map (Into :: into) . collect () , } } } impl From < ffi :: EthGetTransactionByBlockNumberAndIndexResult > for super :: types :: EthGetTransactionByBlockNumberAndIndexResult { fn from (other : ffi :: EthGetTransactionByBlockNumberAndIndexResult) -> Self { super :: types :: EthGetTransactionByBlockNumberAndIndexResult { transaction : Some (other . transaction . into ()) , } } } impl From < super :: types :: EthGetTransactionByBlockNumberAndIndexResult > for ffi :: EthGetTransactionByBlockNumberAndIndexResult { fn from (other : super :: types :: EthGetTransactionByBlockNumberAndIndexResult) -> Self { ffi :: EthGetTransactionByBlockNumberAndIndexResult { transaction : other . transaction . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthGetUncleByBlockNumberAndIndexInput > for super :: types :: EthGetUncleByBlockNumberAndIndexInput { fn from (other : ffi :: EthGetUncleByBlockNumberAndIndexInput) -> Self { super :: types :: EthGetUncleByBlockNumberAndIndexInput { block_number : other . block_number . into () , index : other . index . into () , } } } impl From < super :: types :: EthGetUncleByBlockNumberAndIndexInput > for ffi :: EthGetUncleByBlockNumberAndIndexInput { fn from (other : super :: types :: EthGetUncleByBlockNumberAndIndexInput) -> Self { ffi :: EthGetUncleByBlockNumberAndIndexInput { block_number : other . block_number . into () , index : other . index . into () , } } } impl From < ffi :: Vout > for super :: types :: Vout { fn from (other : ffi :: Vout) -> Self { super :: types :: Vout { value : other . value . into () , n : other . n . into () , script_pub_key : Some (other . script_pub_key . into ()) , token_id : other . token_id . into () , } } } impl From < super :: types :: Vout > for ffi :: Vout { fn from (other : super :: types :: Vout) -> Self { ffi :: Vout { value : other . value . into () , n : other . n . into () , script_pub_key : other . script_pub_key . map (Into :: into) . unwrap_or_default () , token_id : other . token_id . into () , } } } impl From < ffi :: EthCoinBaseResult > for super :: types :: EthCoinBaseResult { fn from (other : ffi :: EthCoinBaseResult) -> Self { super :: types :: EthCoinBaseResult { address : other . address . into () , } } } impl From < super :: types :: EthCoinBaseResult > for ffi :: EthCoinBaseResult { fn from (other : super :: types :: EthCoinBaseResult) -> Self { ffi :: EthCoinBaseResult { address : other . address . into () , } } } impl From < ffi :: EthGetCodeResult > for super :: types :: EthGetCodeResult { fn from (other : ffi :: EthGetCodeResult) -> Self { super :: types :: EthGetCodeResult { code : other . code . into () , } } } impl From < super :: types :: EthGetCodeResult > for ffi :: EthGetCodeResult { fn from (other : super :: types :: EthGetCodeResult) -> Self { ffi :: EthGetCodeResult { code : other . code . into () , } } } impl From < ffi :: EthSignTransactionResult > for super :: types :: EthSignTransactionResult { fn from (other : ffi :: EthSignTransactionResult) -> Self { super :: types :: EthSignTransactionResult { transaction : other . transaction . into () , } } } impl From < super :: types :: EthSignTransactionResult > for ffi :: EthSignTransactionResult { fn from (other : super :: types :: EthSignTransactionResult) -> Self { ffi :: EthSignTransactionResult { transaction : other . transaction . into () , } } } impl From < ffi :: EthGetBlockByNumberResult > for super :: types :: EthGetBlockByNumberResult { fn from (other : ffi :: EthGetBlockByNumberResult) -> Self { super :: types :: EthGetBlockByNumberResult { block_info : Some (other . block_info . into ()) , } } } impl From < super :: types :: EthGetBlockByNumberResult > for ffi :: EthGetBlockByNumberResult { fn from (other : super :: types :: EthGetBlockByNumberResult) -> Self { ffi :: EthGetBlockByNumberResult { block_info : other . block_info . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthTransactionInfo > for super :: types :: EthTransactionInfo { fn from (other : ffi :: EthTransactionInfo) -> Self { super :: types :: EthTransactionInfo { from : Some (other . from . into ()) , to : Some (other . to . into ()) , gas : Some (other . gas . into ()) , price : Some (other . price . into ()) , value : Some (other . value . into ()) , data : Some (other . data . into ()) , nonce : Some (other . nonce . into ()) , } } } impl From < super :: types :: EthTransactionInfo > for ffi :: EthTransactionInfo { fn from (other : super :: types :: EthTransactionInfo) -> Self { ffi :: EthTransactionInfo { from : other . from . map (Into :: into) . unwrap_or_default () , to : other . to . map (Into :: into) . unwrap_or_default () , gas : other . gas . map (Into :: into) . unwrap_or_default () , price : other . price . map (Into :: into) . unwrap_or_default () , value : other . value . map (Into :: into) . unwrap_or_default () , data : other . data . map (Into :: into) . unwrap_or_default () , nonce : other . nonce . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: NetPeerCountResult > for super :: types :: NetPeerCountResult { fn from (other : ffi :: NetPeerCountResult) -> Self { super :: types :: NetPeerCountResult { number_peer : other . number_peer . into () , } } } impl From < super :: types :: NetPeerCountResult > for ffi :: NetPeerCountResult { fn from (other : super :: types :: NetPeerCountResult) -> Self { ffi :: NetPeerCountResult { number_peer : other . number_peer . into () , } } } impl From < ffi :: EthGetWorkResult > for super :: types :: EthGetWorkResult { fn from (other : ffi :: EthGetWorkResult) -> Self { super :: types :: EthGetWorkResult { currentblock : other . currentblock . into () , seed_hash : other . seed_hash . into () , target : other . target . into () , } } } impl From < super :: types :: EthGetWorkResult > for ffi :: EthGetWorkResult { fn from (other : super :: types :: EthGetWorkResult) -> Self { ffi :: EthGetWorkResult { currentblock : other . currentblock . into () , seed_hash : other . seed_hash . into () , target : other . target . into () , } } } impl From < ffi :: EthGetBlockByNumberInput > for super :: types :: EthGetBlockByNumberInput { fn from (other : ffi :: EthGetBlockByNumberInput) -> Self { super :: types :: EthGetBlockByNumberInput { number : other . number . into () , full_transaction : other . full_transaction . into () , } } } impl From < super :: types :: EthGetBlockByNumberInput > for ffi :: EthGetBlockByNumberInput { fn from (other : super :: types :: EthGetBlockByNumberInput) -> Self { ffi :: EthGetBlockByNumberInput { number : other . number . into () , full_transaction : other . full_transaction . into () , } } } impl From < ffi :: EthGetUncleByBlockNumberAndIndexResult > for super :: types :: EthGetUncleByBlockNumberAndIndexResult { fn from (other : ffi :: EthGetUncleByBlockNumberAndIndexResult) -> Self { super :: types :: EthGetUncleByBlockNumberAndIndexResult { block_info : Some (other . block_info . into ()) , } } } impl From < super :: types :: EthGetUncleByBlockNumberAndIndexResult > for ffi :: EthGetUncleByBlockNumberAndIndexResult { fn from (other : super :: types :: EthGetUncleByBlockNumberAndIndexResult) -> Self { ffi :: EthGetUncleByBlockNumberAndIndexResult { block_info : other . block_info . map (Into :: into) . unwrap_or_default () , } } } impl From < ffi :: EthCallResult > for super :: types :: EthCallResult { fn from (other : ffi :: EthCallResult) -> Self { super :: types :: EthCallResult { data : other . data . into () , } } } impl From < super :: types :: EthCallResult > for ffi :: EthCallResult { fn from (other : super :: types :: EthCallResult) -> Self { ffi :: EthCallResult { data : other . data . into () , } } } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallEth_Accounts (client : & Box < Client >) -> Result < ffi :: EthAccountsResult , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let params = jsonrpsee_core :: rpc_params ! [] ; let resp : Result < super :: types :: EthAccountsResult , _ > = c . request ("eth_accounts" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallEth_Call (client : & Box < Client > , eth_call_input : EthCallInput) -> Result < ffi :: EthCallResult , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let eth_call_input = super :: types :: EthCallInput :: from (eth_call_input) ; let params = jsonrpsee_core :: rpc_params ! [& eth_call_input . transaction_info , & eth_call_input . block_number] ; let resp : Result < super :: types :: EthCallResult , _ > = c . request ("eth_call" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallEth_GetBalance (client : & Box < Client > , eth_get_balance_input : EthGetBalanceInput) -> Result < ffi :: EthGetBalanceResult , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let eth_get_balance_input = super :: types :: EthGetBalanceInput :: from (eth_get_balance_input) ; let params = jsonrpsee_core :: rpc_params ! [& eth_get_balance_input . address , & eth_get_balance_input . block_number] ; let resp : Result < super :: types :: EthGetBalanceResult , _ > = c . request ("eth_getbalance" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallEth_GetBlockByHash (client : & Box < Client > , eth_get_block_by_hash_input : EthGetBlockByHashInput) -> Result < ffi :: EthBlockInfo , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let eth_get_block_by_hash_input = super :: types :: EthGetBlockByHashInput :: from (eth_get_block_by_hash_input) ; let params = jsonrpsee_core :: rpc_params ! [& eth_get_block_by_hash_input . hash , & eth_get_block_by_hash_input . full_transaction] ; let resp : Result < super :: types :: EthBlockInfo , _ > = c . request ("eth_getblockbyhash" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallEth_ChainId (client : & Box < Client >) -> Result < ffi :: EthChainIdResult , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let params = jsonrpsee_core :: rpc_params ! [] ; let resp : Result < super :: types :: EthChainIdResult , _ > = c . request ("eth_chainid" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallNet_Version (client : & Box < Client >) -> Result < ffi :: EthChainIdResult , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let params = jsonrpsee_core :: rpc_params ! [] ; let resp : Result < super :: types :: EthChainIdResult , _ > = c . request ("net_version" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallEth_BlockNumber (client : & Box < Client >) -> Result < ffi :: EthBlockNumberResult , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let params = jsonrpsee_core :: rpc_params ! [] ; let resp : Result < super :: types :: EthBlockNumberResult , _ > = c . request ("eth_blocknumber" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallEth_GetBlockByNumber (client : & Box < Client > , eth_get_block_by_number_input : EthGetBlockByNumberInput) -> Result < ffi :: EthBlockInfo , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let eth_get_block_by_number_input = super :: types :: EthGetBlockByNumberInput :: from (eth_get_block_by_number_input) ; let params = jsonrpsee_core :: rpc_params ! [& eth_get_block_by_number_input . number , & eth_get_block_by_number_input . full_transaction] ; let resp : Result < super :: types :: EthBlockInfo , _ > = c . request ("eth_getblockbynumber" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) } # [allow (non_snake_case)] # [allow (clippy :: borrowed_box)] fn CallEth_Mining (client : & Box < Client >) -> Result < ffi :: EthMiningResult , Box < dyn std :: error :: Error >> { let (tx , mut rx) = tokio :: sync :: mpsc :: channel (1) ; let c = client . inner . clone () ; client . handle . spawn (async move { let params = jsonrpsee_core :: rpc_params ! [] ; let resp : Result < super :: types :: EthMiningResult , _ > = c . request ("eth_mining" , params) . await ; let _ = tx . send (resp) . await ; }) ; Ok (rx . blocking_recv () . unwrap () . map (Into :: into) ?) }# [derive (Clone)] pub struct BlockchainService { adapter : Arc < Handlers > } impl BlockchainService { # [inline] # [allow (dead_code)] pub fn new (adapter : Arc < Handlers >) -> BlockchainService { BlockchainService { adapter } } # [inline] # [allow (dead_code)] pub fn service (& self) -> blockchain_server :: BlockchainServer < BlockchainService > { blockchain_server :: BlockchainServer :: new (self . clone ()) } # [inline] # [allow (unused_mut , dead_code)] pub fn module (& self) -> Result < jsonrpsee_http_server :: RpcModule < () > , jsonrpsee_core :: Error > { let mut module = jsonrpsee_http_server :: RpcModule :: new (()) ; Ok (module) } } # [tonic :: async_trait] impl blockchain_server :: Blockchain for BlockchainService { # [allow (unused_variables)] async fn get_best_block_hash (& self , _request : tonic :: Request < () >) -> Result < tonic :: Response < super :: types :: BlockHashResult > , tonic :: Status > { unimplemented ! () ; } # [allow (unused_variables)] async fn get_block (& self , request : tonic :: Request < super :: types :: BlockInput >) -> Result < tonic :: Response < super :: types :: BlockResult > , tonic :: Status > { unimplemented ! () ; } }# [derive (Clone)] pub struct EthService { adapter : Arc < Handlers > } impl EthService { # [inline] # [allow (dead_code)] pub fn new (adapter : Arc < Handlers >) -> EthService { EthService { adapter } } # [inline] # [allow (dead_code)] pub fn service (& self) -> eth_server :: EthServer < EthService > { eth_server :: EthServer :: new (self . clone ()) } # [inline] # [allow (unused_mut , dead_code)] pub fn module (& self) -> Result < jsonrpsee_http_server :: RpcModule < () > , jsonrpsee_core :: Error > { let mut module = jsonrpsee_http_server :: RpcModule :: new (()) ; let adapter = self . adapter . clone () ; module . register_method ("eth_accounts" , move | _params , _ | { Self :: Eth_Accounts (adapter . clone () ,) }) ? ; let adapter = self . adapter . clone () ; module . register_method ("eth_call" , move | _params , _ | { let mut eth_call_input = super :: types :: EthCallInput :: default () ; if _params . is_object () { eth_call_input = _params . parse () ? ; } else { let mut seq = _params . sequence () ; eth_call_input . transaction_info = seq . next () . map_err (| _ | missing_param ("transaction_info")) ? ; eth_call_input . block_number = seq . next () . map_err (| _ | missing_param ("block_number")) ? ; } let mut input = eth_call_input . into () ; Self :: Eth_Call (adapter . clone () , input) }) ? ; let adapter = self . adapter . clone () ; module . register_method ("eth_getbalance" , move | _params , _ | { let mut eth_get_balance_input = super :: types :: EthGetBalanceInput :: default () ; if _params . is_object () { eth_get_balance_input = _params . parse () ? ; } else { let mut seq = _params . sequence () ; eth_get_balance_input . address = seq . next () . map_err (| _ | missing_param ("address")) ? ; eth_get_balance_input . block_number = seq . next () . map_err (| _ | missing_param ("block_number")) ? ; } let mut input = eth_get_balance_input . into () ; Self :: Eth_GetBalance (adapter . clone () , input) }) ? ; let adapter = self . adapter . clone () ; module . register_method ("eth_getblockbyhash" , move | _params , _ | { let mut eth_get_block_by_hash_input = super :: types :: EthGetBlockByHashInput :: default () ; if _params . is_object () { eth_get_block_by_hash_input = _params . parse () ? ; } else { let mut seq = _params . sequence () ; eth_get_block_by_hash_input . hash = seq . next () . map_err (| _ | missing_param ("hash")) ? ; eth_get_block_by_hash_input . full_transaction = seq . next () . map_err (| _ | missing_param ("full_transaction")) ? ; } let mut input = eth_get_block_by_hash_input . into () ; Self :: Eth_GetBlockByHash (adapter . clone () , input) }) ? ; let adapter = self . adapter . clone () ; module . register_method ("eth_chainid" , move | _params , _ | { Self :: Eth_ChainId (adapter . clone () ,) }) ? ; let adapter = self . adapter . clone () ; module . register_method ("net_version" , move | _params , _ | { Self :: Net_Version (adapter . clone () ,) }) ? ; let adapter = self . adapter . clone () ; module . register_method ("eth_blocknumber" , move | _params , _ | { Self :: Eth_BlockNumber (adapter . clone () ,) }) ? ; let adapter = self . adapter . clone () ; module . register_method ("eth_getblockbynumber" , move | _params , _ | { let mut eth_get_block_by_number_input = super :: types :: EthGetBlockByNumberInput :: default () ; if _params . is_object () { eth_get_block_by_number_input = _params . parse () ? ; } else { let mut seq = _params . sequence () ; eth_get_block_by_number_input . number = seq . next () . map_err (| _ | missing_param ("number")) ? ; eth_get_block_by_number_input . full_transaction = seq . next () . map_err (| _ | missing_param ("full_transaction")) ? ; } let mut input = eth_get_block_by_number_input . into () ; Self :: Eth_GetBlockByNumber (adapter . clone () , input) }) ? ; let adapter = self . adapter . clone () ; module . register_method ("eth_mining" , move | _params , _ | { Self :: Eth_Mining (adapter . clone () ,) }) ? ; Ok (module) } } # [tonic :: async_trait] impl eth_server :: Eth for EthService { async fn eth_accounts (& self , _request : tonic :: Request < () >) -> Result < tonic :: Response < super :: types :: EthAccountsResult > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { Self :: Eth_Accounts (adapter . clone () ,) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } async fn eth_call (& self , request : tonic :: Request < super :: types :: EthCallInput >) -> Result < tonic :: Response < super :: types :: EthCallResult > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { let input = request . into_inner () . into () ; Self :: Eth_Call (adapter . clone () , input) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } async fn eth_get_balance (& self , request : tonic :: Request < super :: types :: EthGetBalanceInput >) -> Result < tonic :: Response < super :: types :: EthGetBalanceResult > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { let input = request . into_inner () . into () ; Self :: Eth_GetBalance (adapter . clone () , input) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } async fn eth_get_block_by_hash (& self , request : tonic :: Request < super :: types :: EthGetBlockByHashInput >) -> Result < tonic :: Response < super :: types :: EthBlockInfo > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { let input = request . into_inner () . into () ; Self :: Eth_GetBlockByHash (adapter . clone () , input) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } # [allow (unused_variables)] async fn eth_send_transaction (& self , request : tonic :: Request < super :: types :: EthSendTransactionInput >) -> Result < tonic :: Response < super :: types :: EthSendTransactionResult > , tonic :: Status > { unimplemented ! () ; } async fn eth_chain_id (& self , _request : tonic :: Request < () >) -> Result < tonic :: Response < super :: types :: EthChainIdResult > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { Self :: Eth_ChainId (adapter . clone () ,) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } async fn net_version (& self , _request : tonic :: Request < () >) -> Result < tonic :: Response < super :: types :: EthChainIdResult > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { Self :: Net_Version (adapter . clone () ,) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } async fn eth_block_number (& self , _request : tonic :: Request < () >) -> Result < tonic :: Response < super :: types :: EthBlockNumberResult > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { Self :: Eth_BlockNumber (adapter . clone () ,) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } async fn eth_get_block_by_number (& self , request : tonic :: Request < super :: types :: EthGetBlockByNumberInput >) -> Result < tonic :: Response < super :: types :: EthBlockInfo > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { let input = request . into_inner () . into () ; Self :: Eth_GetBlockByNumber (adapter . clone () , input) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } async fn eth_mining (& self , _request : tonic :: Request < () >) -> Result < tonic :: Response < super :: types :: EthMiningResult > , tonic :: Status > { let adapter = self . adapter . clone () ; let result = tokio :: task :: spawn_blocking (move || { Self :: Eth_Mining (adapter . clone () ,) . map_err (| e | tonic :: Status :: unknown (e . to_string ())) }) . await . map_err (| e | { tonic :: Status :: unknown (format ! ("failed to invoke RPC call: {}" , e)) }) ? ? ; Ok (tonic :: Response :: new (result . into ())) } } \ No newline at end of file diff --git a/src/rust/crates/ain-grpc/src/gen/types.rs b/src/rust/crates/ain-grpc/src/gen/types.rs new file mode 100644 index 0000000000..b5aefd45ec --- /dev/null +++ b/src/rust/crates/ain-grpc/src/gen/types.rs @@ -0,0 +1,1167 @@ +fn ignore_integer( + i: &T, +) -> bool { + T::from(-1).unwrap() == *i +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message)] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct Transaction { + #[doc = " Transaction hash"] + #[prost(string, tag = "1")] + pub hash: ::prost::alloc::string::String, + #[doc = " Raw transaction data"] + #[prost(message, optional, tag = "2")] + pub raw: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct RawTransaction { + #[doc = " Whether specified block is in the active chain or not (only present with explicit \"blockhash\" argument)"] + #[prost(bool, tag = "1")] + pub in_active_chain: bool, + #[doc = " The serialized, hex-encoded data for 'txid'"] + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hex: ::prost::alloc::string::String, + #[doc = " The transaction id (same as provided)"] + #[prost(string, tag = "3")] + #[serde(skip_serializing_if = "String::is_empty")] + pub txid: ::prost::alloc::string::String, + #[doc = " The transaction hash (differs from txid for witness transactions)"] + #[prost(string, tag = "4")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash: ::prost::alloc::string::String, + #[doc = " The serialized transaction size"] + #[prost(uint32, tag = "5")] + pub size: u32, + #[doc = " The virtual transaction size (differs from size for witness transactions)"] + #[prost(uint32, tag = "6")] + pub vsize: u32, + #[doc = " The transaction's weight (between vsize*4-3 and vsize*4)"] + #[prost(uint32, tag = "7")] + pub weight: u32, + #[doc = " The transaction version"] + #[prost(uint32, tag = "8")] + pub version: u32, + #[doc = " The lock time"] + #[prost(uint64, tag = "9")] + pub locktime: u64, + #[doc = " List of inputs"] + #[prost(message, repeated, tag = "10")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub vin: ::prost::alloc::vec::Vec, + #[doc = " List of outputs"] + #[prost(message, repeated, tag = "11")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub vout: ::prost::alloc::vec::Vec, + #[doc = " The block hash"] + #[prost(string, tag = "12")] + #[serde(skip_serializing_if = "String::is_empty")] + pub blockhash: ::prost::alloc::string::String, + #[doc = " The confirmations"] + #[prost(string, tag = "13")] + #[serde(skip_serializing_if = "String::is_empty")] + pub confirmations: ::prost::alloc::string::String, + #[doc = " The block time in seconds since UNIX epoch"] + #[prost(uint64, tag = "14")] + pub blocktime: u64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct Vin { + #[doc = " The transaction id"] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub txid: ::prost::alloc::string::String, + #[doc = " The output index"] + #[prost(uint32, tag = "2")] + pub vout: u32, + #[doc = " The script signature"] + #[prost(message, optional, tag = "3")] + pub script_sig: ::core::option::Option, + #[doc = " The script sequence number"] + #[prost(uint64, tag = "4")] + pub sequence: u64, + #[doc = " Hex-encoded witness data"] + #[prost(string, repeated, tag = "5")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub txinwitness: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[doc = " DeFiChain fields"] + #[prost(string, tag = "51")] + #[serde(skip_serializing_if = "String::is_empty")] + pub coinbase: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct ScriptSig { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + #[serde(rename = "asm")] + pub field_asm: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hex: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct Vout { + #[prost(double, tag = "1")] + pub value: f64, + #[prost(uint64, tag = "2")] + pub n: u64, + #[prost(message, optional, tag = "3")] + pub script_pub_key: ::core::option::Option, + #[prost(uint64, tag = "4")] + pub token_id: u64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct PubKey { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + #[serde(rename = "asm")] + pub field_asm: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hex: ::prost::alloc::string::String, + #[prost(string, tag = "3")] + #[serde(skip_serializing_if = "String::is_empty")] + #[serde(rename = "type")] + pub field_type: ::prost::alloc::string::String, + #[prost(int32, tag = "4")] + #[serde(skip_serializing_if = "ignore_integer")] + pub req_sigs: i32, + #[prost(string, repeated, tag = "5")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct Block { + #[doc = " Block hash (same as input, if any)"] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash: ::prost::alloc::string::String, + #[doc = " The number of confirmations, or -1 if the block is not on the main chain"] + #[prost(int64, tag = "2")] + pub confirmations: i64, + #[doc = " Block size"] + #[prost(uint64, tag = "3")] + pub size: u64, + #[doc = " Block size without witness data"] + #[prost(uint64, tag = "4")] + pub strippedsize: u64, + #[doc = " The block weight as defined in BIP 141"] + #[prost(uint64, tag = "5")] + pub weight: u64, + #[doc = " The block height or index"] + #[prost(uint64, tag = "6")] + pub height: u64, + #[doc = " The block version"] + #[prost(uint64, tag = "7")] + pub version: u64, + #[doc = " The block version in hex"] + #[prost(string, tag = "8")] + #[serde(skip_serializing_if = "String::is_empty")] + pub version_hex: ::prost::alloc::string::String, + #[doc = " The merkle root"] + #[prost(string, tag = "9")] + #[serde(skip_serializing_if = "String::is_empty")] + pub merkleroot: ::prost::alloc::string::String, + #[doc = " List of transaction IDs"] + #[prost(message, repeated, tag = "10")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub tx: ::prost::alloc::vec::Vec, + #[doc = " The block time in seconds since UNIX epoch"] + #[prost(uint64, tag = "11")] + pub time: u64, + #[doc = " The median block time in seconds since UNIX epoch"] + #[prost(uint64, tag = "12")] + pub mediantime: u64, + #[doc = " The nonce used to generate the block (property exists only when PoW is used)"] + #[prost(uint64, tag = "13")] + pub nonce: u64, + #[doc = " The bits which represent the target difficulty"] + #[prost(string, tag = "14")] + #[serde(skip_serializing_if = "String::is_empty")] + pub bits: ::prost::alloc::string::String, + #[doc = " The difficulty of the block"] + #[prost(double, tag = "15")] + pub difficulty: f64, + #[doc = " Expected number of hashes required to produce the chain up to this block (in hex)"] + #[prost(string, tag = "16")] + #[serde(skip_serializing_if = "String::is_empty")] + pub chainwork: ::prost::alloc::string::String, + #[doc = " Number of transactions in the block"] + #[prost(uint32, tag = "17")] + pub n_tx: u32, + #[doc = " The hash of the previous block"] + #[prost(string, tag = "18")] + #[serde(skip_serializing_if = "String::is_empty")] + #[serde(rename = "previousblockhash")] + pub previous_block_hash: ::prost::alloc::string::String, + #[doc = " The hash of the next block"] + #[prost(string, tag = "19")] + #[serde(skip_serializing_if = "String::is_empty")] + #[serde(rename = "nextblockhash")] + pub next_block_hash: ::prost::alloc::string::String, + #[doc = " DeFiChain fields"] + #[prost(string, tag = "101")] + #[serde(skip_serializing_if = "String::is_empty")] + pub masternode: ::prost::alloc::string::String, + #[prost(string, tag = "102")] + #[serde(skip_serializing_if = "String::is_empty")] + pub minter: ::prost::alloc::string::String, + #[prost(uint64, tag = "103")] + pub minted_blocks: u64, + #[prost(string, tag = "104")] + #[serde(skip_serializing_if = "String::is_empty")] + pub stake_modifier: ::prost::alloc::string::String, + #[prost(message, repeated, tag = "105")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub nonutxo: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct NonUtxo { + #[prost(double, tag = "1")] + pub anchor_reward: f64, + #[prost(double, tag = "2")] + pub burnt: f64, + #[prost(double, tag = "3")] + pub incentive_funding: f64, + #[prost(double, tag = "4")] + pub loan: f64, + #[prost(double, tag = "5")] + pub options: f64, + #[prost(double, tag = "6")] + pub unknown: f64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct BlockInput { + #[doc = " Block hash"] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub blockhash: ::prost::alloc::string::String, + #[doc = " 0 for hex-encoded data, 1 for a json object, and 2 for json object with transaction data [default: 1]"] + #[prost(uint32, tag = "2")] + pub verbosity: u32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message)] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct BlockResult { + #[doc = " Hex-encoded data for block hash (for verbosity 0)"] + #[prost(string, tag = "1")] + pub hash: ::prost::alloc::string::String, + #[doc = " Block data (for verbosity 1 and 2)"] + #[prost(message, optional, tag = "2")] + pub block: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct BlockHashResult { + #[doc = " Hex-encoded data for block hash"] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthAccountsResult { + #[doc = " Accounts"] + #[prost(string, repeated, tag = "1")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub accounts: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthTransactionInfo { + #[doc = " The address from which the transaction is sent"] + #[prost(string, optional, tag = "1")] + pub from: ::core::option::Option<::prost::alloc::string::String>, + #[doc = " The address to which the transaction is addressed"] + #[prost(string, optional, tag = "2")] + pub to: ::core::option::Option<::prost::alloc::string::String>, + #[doc = " The integer of gas provided for the transaction execution"] + #[prost(uint64, optional, tag = "3")] + pub gas: ::core::option::Option, + #[doc = " The integer of gas price used for each paid gas encoded as hexadecimal"] + #[prost(uint64, optional, tag = "4")] + pub price: ::core::option::Option, + #[doc = " The integer of value sent with this transaction encoded as hexadecimal"] + #[prost(uint64, optional, tag = "5")] + pub value: ::core::option::Option, + #[doc = " The hash of the method signature and encoded parameters."] + #[prost(string, optional, tag = "6")] + pub data: ::core::option::Option<::prost::alloc::string::String>, + #[doc = " The integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce."] + #[prost(uint64, optional, tag = "7")] + pub nonce: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthChainIdResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub id: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthBlockInfo { + #[doc = " The block number. null when its pending block."] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, + #[doc = " Hash of the block. null when its pending block."] + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash: ::prost::alloc::string::String, + #[doc = " Hash of the parent block."] + #[prost(string, tag = "3")] + #[serde(skip_serializing_if = "String::is_empty")] + pub parent_hash: ::prost::alloc::string::String, + #[doc = " Hash of the generated proof-of-work. null when its pending block."] + #[prost(string, tag = "4")] + #[serde(skip_serializing_if = "String::is_empty")] + pub nonce: ::prost::alloc::string::String, + #[doc = " SHA3 of the uncles data in the block."] + #[prost(string, tag = "5")] + #[serde(skip_serializing_if = "String::is_empty")] + pub sha3_uncles: ::prost::alloc::string::String, + #[doc = " The bloom filter for the logs of the block. null when its pending block."] + #[prost(string, tag = "6")] + #[serde(skip_serializing_if = "String::is_empty")] + pub logs_bloom: ::prost::alloc::string::String, + #[doc = " The root of the transaction trie of the block."] + #[prost(string, tag = "7")] + #[serde(skip_serializing_if = "String::is_empty")] + pub transactions_root: ::prost::alloc::string::String, + #[doc = " The root of the final state trie of the block."] + #[prost(string, tag = "8")] + #[serde(skip_serializing_if = "String::is_empty")] + pub state_root: ::prost::alloc::string::String, + #[doc = " The root of the receipts trie of the block."] + #[prost(string, tag = "9")] + #[serde(skip_serializing_if = "String::is_empty")] + pub receipt_root: ::prost::alloc::string::String, + #[doc = " The address of the beneficiary to whom the mining rewards were given."] + #[prost(string, tag = "10")] + #[serde(skip_serializing_if = "String::is_empty")] + pub miner: ::prost::alloc::string::String, + #[doc = " Integer of the difficulty for this block."] + #[prost(string, tag = "11")] + #[serde(skip_serializing_if = "String::is_empty")] + pub difficulty: ::prost::alloc::string::String, + #[doc = " Integer of the total difficulty of the chain until this block."] + #[prost(string, tag = "12")] + #[serde(skip_serializing_if = "String::is_empty")] + pub total_difficulty: ::prost::alloc::string::String, + #[doc = " The \"extra data\" field of this block."] + #[prost(string, tag = "13")] + #[serde(skip_serializing_if = "String::is_empty")] + pub extra_data: ::prost::alloc::string::String, + #[doc = " Integer the size of this block in bytes."] + #[prost(string, tag = "14")] + #[serde(skip_serializing_if = "String::is_empty")] + pub size: ::prost::alloc::string::String, + #[doc = " The maximum gas allowed in this block."] + #[prost(string, tag = "15")] + #[serde(skip_serializing_if = "String::is_empty")] + pub gas_limit: ::prost::alloc::string::String, + #[doc = " The total used gas by all transactions in this block."] + #[prost(string, tag = "16")] + #[serde(skip_serializing_if = "String::is_empty")] + pub gas_used: ::prost::alloc::string::String, + #[doc = " The unix timestamp for when the block was collated."] + #[prost(string, tag = "17")] + #[serde(skip_serializing_if = "String::is_empty")] + pub timestamps: ::prost::alloc::string::String, + #[doc = " Array of transaction objects, or 32 Bytes transaction hashes depending on the last given parameter."] + #[prost(string, repeated, tag = "18")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub transactions: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[doc = " Array of uncle hashes."] + #[prost(string, repeated, tag = "19")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub uncles: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthTransactionReceipt { + #[doc = " Hash of the transaction."] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub transaction_hash: ::prost::alloc::string::String, + #[doc = " Integer of the transactions index position in the block."] + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub transaction_index: ::prost::alloc::string::String, + #[doc = " Hash of the block where this transaction was in."] + #[prost(string, tag = "3")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_hash: ::prost::alloc::string::String, + #[doc = " Block number where this transaction was in."] + #[prost(string, tag = "4")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, + #[doc = " Address of the sender."] + #[prost(string, tag = "5")] + #[serde(skip_serializing_if = "String::is_empty")] + pub from: ::prost::alloc::string::String, + #[doc = " Address of the receiver. null when its a contract creation transaction."] + #[prost(string, tag = "6")] + #[serde(skip_serializing_if = "String::is_empty")] + pub to: ::prost::alloc::string::String, + #[doc = " The total amount of gas used when this transaction was executed in the block."] + #[prost(string, tag = "7")] + #[serde(skip_serializing_if = "String::is_empty")] + pub cumulative_gas_used: ::prost::alloc::string::String, + #[doc = " The sum of the base fee and tip paid per unit of gas."] + #[prost(string, tag = "8")] + #[serde(skip_serializing_if = "String::is_empty")] + pub effective_gas_price: ::prost::alloc::string::String, + #[doc = " The amount of gas used by this specific transaction alone."] + #[prost(string, tag = "9")] + #[serde(skip_serializing_if = "String::is_empty")] + pub gas_used: ::prost::alloc::string::String, + #[doc = " The contract address created, if the transaction was a contract creation, otherwise null."] + #[prost(string, tag = "10")] + #[serde(skip_serializing_if = "String::is_empty")] + pub contract_address: ::prost::alloc::string::String, + #[doc = " Array of log objects, which this transaction generated."] + #[prost(string, repeated, tag = "11")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub logs: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[doc = " Bloom filter for light clients to quickly retrieve related logs."] + #[prost(string, tag = "12")] + #[serde(skip_serializing_if = "String::is_empty")] + pub logs_bloom: ::prost::alloc::string::String, + #[doc = " Integer of the transaction type, 0x00 for legacy transactions, 0x01 for access list types, 0x02 for dynamic fees. It also returns either :"] + #[prost(string, tag = "13")] + #[serde(skip_serializing_if = "String::is_empty")] + #[serde(rename = "type")] + pub field_type: ::prost::alloc::string::String, + #[doc = " 32 bytes of post-transaction stateroot (pre Byzantium)"] + #[prost(string, optional, tag = "14")] + pub root: ::core::option::Option<::prost::alloc::string::String>, + #[doc = " Either 1 (success) or 0 (failure)"] + #[prost(string, optional, tag = "15")] + pub status: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCallInput { + #[doc = " Transaction info"] + #[prost(message, optional, tag = "1")] + pub transaction_info: ::core::option::Option, + #[doc = " Block number in hexadecimal format or the string latest, earliest, pending, safe or finalized"] + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCallResult { + #[doc = " The return value of the executed contract method"] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub data: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSignInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub address: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub message: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSignResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub signature: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBalanceInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub address: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBalanceResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub balance: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSendTransactionInput { + #[prost(message, optional, tag = "1")] + pub transaction_info: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSendTransactionResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCoinBaseResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub address: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthMiningResult { + #[prost(bool, tag = "1")] + pub is_mining: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthHashRateResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash_rate: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGasPriceResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub gas_price: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthBlockNumberResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionCountInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub address: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionCountResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub number_transaction: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBlockTransactionCountByHashInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_hash: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBlockTransactionCountByHashResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub number_transaction: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBlockTransactionCountByNumberInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBlockTransactionCountByNumberResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub number_transaction: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetUncleCountByBlockHashInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_hash: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetUncleCountByBlockHashResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub number_uncles: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetUncleCountByBlockNumberInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetUncleCountByBlockNumberResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub number_uncles: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetCodeInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub address: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetCodeResult { + #[doc = " The code from the given address."] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub code: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSignTransactionInput { + #[prost(message, optional, tag = "1")] + pub transaction_info: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSignTransactionResult { + #[doc = " The signed transaction object."] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub transaction: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSendRawTransactionInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub transaction: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSendRawTransactionResult { + #[doc = " The transaction hash, or the zero hash if the transaction is not yet available."] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthEstimateGasInput { + #[doc = " Transaction info"] + #[prost(message, optional, tag = "1")] + pub transaction_info: ::core::option::Option, + #[doc = " Block number in hexadecimal format or the string latest, earliest, pending, safe or finalized"] + #[prost(string, optional, tag = "2")] + pub block_number: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthEstimateGasResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub gas_used: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBlockByHashInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash: ::prost::alloc::string::String, + #[prost(bool, tag = "2")] + pub full_transaction: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBlockByHashResult { + #[prost(message, optional, tag = "1")] + pub block_info: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBlockByNumberInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub number: ::prost::alloc::string::String, + #[prost(bool, tag = "2")] + pub full_transaction: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetBlockByNumberResult { + #[prost(message, optional, tag = "1")] + pub block_info: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionByHashInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionByHashResult { + #[prost(message, optional, tag = "1")] + pub transaction: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionByBlockHashAndIndexInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_hash: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub index: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionByBlockHashAndIndexResult { + #[prost(message, optional, tag = "1")] + pub transaction: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionByBlockNumberAndIndexInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub index: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionByBlockNumberAndIndexResult { + #[prost(message, optional, tag = "1")] + pub transaction: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetUncleByBlockHashAndIndexInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_hash: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub index: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetUncleByBlockHashAndIndexResult { + #[prost(message, optional, tag = "1")] + pub block_info: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetUncleByBlockNumberAndIndexInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub index: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetUncleByBlockNumberAndIndexResult { + #[prost(message, optional, tag = "1")] + pub block_info: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetCompilersResult { + #[prost(string, repeated, tag = "1")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub compilers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCompileSolidityInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub code: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCompileSolidityResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub compiled_code: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCompileLllInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub code: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCompileLllResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub compiled_code: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCompileSerpentInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub code: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthCompileSerpentResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub compiled_code: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthProtocolVersionResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub protocol_version: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct Web3Sha3Input { + #[doc = " The data to convert into a SHA3 hash"] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub data: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct Web3Sha3Result { + #[doc = " The SHA3 result of the given string."] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub data: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct NetPeerCountResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub number_peer: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct NetVersionResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub network_version: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct Web3ClientVersionResult { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub client_version: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetWorkResult { + #[doc = " Current block header pow-hash"] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub currentblock: ::prost::alloc::string::String, + #[doc = " The seed hash used for the DAG."] + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub seed_hash: ::prost::alloc::string::String, + #[doc = " The boundary condition (\"target\"), 2^256 / difficulty."] + #[prost(string, tag = "3")] + #[serde(skip_serializing_if = "String::is_empty")] + pub target: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSubmitWorkInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub nounce: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub pow_hash: ::prost::alloc::string::String, + #[prost(string, tag = "3")] + #[serde(skip_serializing_if = "String::is_empty")] + pub mix_digest: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSubmitWorkResult { + #[prost(bool, tag = "1")] + pub is_valid: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSubmitHashrateInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub hash_rate: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub id: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSubmitHashrateResult { + #[prost(bool, tag = "1")] + pub is_valid: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetStorageAtInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub address: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub position: ::prost::alloc::string::String, + #[prost(string, tag = "3")] + #[serde(skip_serializing_if = "String::is_empty")] + pub block_number: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetStorageAtResult { + #[doc = " The value at this storage position."] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub value: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionReceiptInput { + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub transaction_hash: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthGetTransactionReceiptResult { + #[prost(message, optional, tag = "1")] + pub transaction_receipt: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSyncingInfo { + #[doc = " The block at which the import started (will only be reset, after the sync reached his head)"] + #[prost(string, tag = "1")] + #[serde(skip_serializing_if = "String::is_empty")] + pub starting_block: ::prost::alloc::string::String, + #[doc = " The current block, same as eth_blockNumber"] + #[prost(string, tag = "2")] + #[serde(skip_serializing_if = "String::is_empty")] + pub current_block: ::prost::alloc::string::String, + #[doc = " The estimated highest block"] + #[prost(string, tag = "3")] + #[serde(skip_serializing_if = "String::is_empty")] + pub highest_block: ::prost::alloc::string::String, +} +#[doc = " TODO make it oneof"] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, :: prost :: Message, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[allow(clippy::derive_partial_eq_without_eq)] +pub struct EthSyncingResult { + #[prost(bool, optional, tag = "1")] + pub status: ::core::option::Option, + #[prost(message, optional, tag = "2")] + pub sync_info: ::core::option::Option, +} diff --git a/src/rust/protobuf/google/protobuf/any.proto b/src/rust/protobuf/google/protobuf/any.proto new file mode 100644 index 0000000000..561da0cb15 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/any.proto @@ -0,0 +1,161 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +option go_package = "google.golang.org/protobuf/types/known/anypb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "AnyProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; + +// `Any` contains an arbitrary serialized protocol buffer message along with a +// URL that describes the type of the serialized message. +// +// Protobuf library provides support to pack/unpack Any values in the form +// of utility functions or additional generated methods of the Any type. +// +// Example 1: Pack and unpack a message in C++. +// +// Foo foo = ...; +// Any any; +// any.PackFrom(foo); +// ... +// if (any.UnpackTo(&foo)) { +// ... +// } +// +// Example 2: Pack and unpack a message in Java. +// +// Foo foo = ...; +// Any any = Any.pack(foo); +// ... +// if (any.is(Foo.class)) { +// foo = any.unpack(Foo.class); +// } +// // or ... +// if (any.isSameTypeAs(Foo.getDefaultInstance())) { +// foo = any.unpack(Foo.getDefaultInstance()); +// } +// +// Example 3: Pack and unpack a message in Python. +// +// foo = Foo(...) +// any = Any() +// any.Pack(foo) +// ... +// if any.Is(Foo.DESCRIPTOR): +// any.Unpack(foo) +// ... +// +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := anypb.New(foo) +// if err != nil { +// ... +// } +// ... +// foo := &pb.Foo{} +// if err := any.UnmarshalTo(foo); err != nil { +// ... +// } +// +// The pack methods provided by protobuf library will by default use +// 'type.googleapis.com/full.type.name' as the type URL and the unpack +// methods only use the fully qualified type name after the last '/' +// in the type URL, for example "foo.bar.com/x/y.z" will yield type +// name "y.z". +// +// JSON +// +// The JSON representation of an `Any` value uses the regular +// representation of the deserialized, embedded message, with an +// additional field `@type` which contains the type URL. Example: +// +// package google.profile; +// message Person { +// string first_name = 1; +// string last_name = 2; +// } +// +// { +// "@type": "type.googleapis.com/google.profile.Person", +// "firstName": , +// "lastName": +// } +// +// If the embedded message type is well-known and has a custom JSON +// representation, that representation will be embedded adding a field +// `value` which holds the custom JSON in addition to the `@type` +// field. Example (for message [google.protobuf.Duration][]): +// +// { +// "@type": "type.googleapis.com/google.protobuf.Duration", +// "value": "1.212s" +// } +// +message Any { + // A URL/resource name that uniquely identifies the type of the serialized + // protocol buffer message. This string must contain at least + // one "/" character. The last segment of the URL's path must represent + // the fully qualified name of the type (as in + // `path/google.protobuf.Duration`). The name should be in a canonical form + // (e.g., leading "." is not accepted). + // + // In practice, teams usually precompile into the binary all types that they + // expect it to use in the context of Any. However, for URLs which use the + // scheme `http`, `https`, or no scheme, one can optionally set up a type + // server that maps type URLs to message definitions as follows: + // + // * If no scheme is provided, `https` is assumed. + // * An HTTP GET on the URL must yield a [google.protobuf.Type][] + // value in binary format, or produce an error. + // * Applications are allowed to cache lookup results based on the + // URL, or have them precompiled into a binary to avoid any + // lookup. Therefore, binary compatibility needs to be preserved + // on changes to types. (Use versioned type names to manage + // breaking changes.) + // + // Note: this functionality is not currently available in the official + // protobuf release, and it is not used for type URLs beginning with + // type.googleapis.com. + // + // Schemes other than `http`, `https` (or the empty scheme) might be + // used with implementation specific semantics. + // + string type_url = 1; + + // Must be a valid serialized protocol buffer of the above specified type. + bytes value = 2; +} diff --git a/src/rust/protobuf/google/protobuf/api.proto b/src/rust/protobuf/google/protobuf/api.proto new file mode 100644 index 0000000000..afc9cc1562 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/api.proto @@ -0,0 +1,207 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +import "google/protobuf/source_context.proto"; +import "google/protobuf/type.proto"; + +option java_package = "com.google.protobuf"; +option java_outer_classname = "ApiProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "google.golang.org/protobuf/types/known/apipb"; + +// Api is a light-weight descriptor for an API Interface. +// +// Interfaces are also described as "protocol buffer services" in some contexts, +// such as by the "service" keyword in a .proto file, but they are different +// from API Services, which represent a concrete implementation of an interface +// as opposed to simply a description of methods and bindings. They are also +// sometimes simply referred to as "APIs" in other contexts, such as the name of +// this message itself. See https://cloud.google.com/apis/design/glossary for +// detailed terminology. +message Api { + // The fully qualified name of this interface, including package name + // followed by the interface's simple name. + string name = 1; + + // The methods of this interface, in unspecified order. + repeated Method methods = 2; + + // Any metadata attached to the interface. + repeated Option options = 3; + + // A version string for this interface. If specified, must have the form + // `major-version.minor-version`, as in `1.10`. If the minor version is + // omitted, it defaults to zero. If the entire version field is empty, the + // major version is derived from the package name, as outlined below. If the + // field is not empty, the version in the package name will be verified to be + // consistent with what is provided here. + // + // The versioning schema uses [semantic + // versioning](http://semver.org) where the major version number + // indicates a breaking change and the minor version an additive, + // non-breaking change. Both version numbers are signals to users + // what to expect from different versions, and should be carefully + // chosen based on the product plan. + // + // The major version is also reflected in the package name of the + // interface, which must end in `v`, as in + // `google.feature.v1`. For major versions 0 and 1, the suffix can + // be omitted. Zero major versions must only be used for + // experimental, non-GA interfaces. + // + string version = 4; + + // Source context for the protocol buffer service represented by this + // message. + SourceContext source_context = 5; + + // Included interfaces. See [Mixin][]. + repeated Mixin mixins = 6; + + // The source syntax of the service. + Syntax syntax = 7; +} + +// Method represents a method of an API interface. +message Method { + // The simple name of this method. + string name = 1; + + // A URL of the input message type. + string request_type_url = 2; + + // If true, the request is streamed. + bool request_streaming = 3; + + // The URL of the output message type. + string response_type_url = 4; + + // If true, the response is streamed. + bool response_streaming = 5; + + // Any metadata attached to the method. + repeated Option options = 6; + + // The source syntax of this method. + Syntax syntax = 7; +} + +// Declares an API Interface to be included in this interface. The including +// interface must redeclare all the methods from the included interface, but +// documentation and options are inherited as follows: +// +// - If after comment and whitespace stripping, the documentation +// string of the redeclared method is empty, it will be inherited +// from the original method. +// +// - Each annotation belonging to the service config (http, +// visibility) which is not set in the redeclared method will be +// inherited. +// +// - If an http annotation is inherited, the path pattern will be +// modified as follows. Any version prefix will be replaced by the +// version of the including interface plus the [root][] path if +// specified. +// +// Example of a simple mixin: +// +// package google.acl.v1; +// service AccessControl { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v1/{resource=**}:getAcl"; +// } +// } +// +// package google.storage.v2; +// service Storage { +// rpc GetAcl(GetAclRequest) returns (Acl); +// +// // Get a data record. +// rpc GetData(GetDataRequest) returns (Data) { +// option (google.api.http).get = "/v2/{resource=**}"; +// } +// } +// +// Example of a mixin configuration: +// +// apis: +// - name: google.storage.v2.Storage +// mixins: +// - name: google.acl.v1.AccessControl +// +// The mixin construct implies that all methods in `AccessControl` are +// also declared with same name and request/response types in +// `Storage`. A documentation generator or annotation processor will +// see the effective `Storage.GetAcl` method after inheriting +// documentation and annotations as follows: +// +// service Storage { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v2/{resource=**}:getAcl"; +// } +// ... +// } +// +// Note how the version in the path pattern changed from `v1` to `v2`. +// +// If the `root` field in the mixin is specified, it should be a +// relative path under which inherited HTTP paths are placed. Example: +// +// apis: +// - name: google.storage.v2.Storage +// mixins: +// - name: google.acl.v1.AccessControl +// root: acls +// +// This implies the following inherited HTTP annotation: +// +// service Storage { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v2/acls/{resource=**}:getAcl"; +// } +// ... +// } +message Mixin { + // The fully qualified name of the interface which is included. + string name = 1; + + // If non-empty specifies a path under which inherited HTTP paths + // are rooted. + string root = 2; +} diff --git a/src/rust/protobuf/google/protobuf/compiler/plugin.proto b/src/rust/protobuf/google/protobuf/compiler/plugin.proto new file mode 100644 index 0000000000..7ab6dffd73 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/compiler/plugin.proto @@ -0,0 +1,180 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +// Author: kenton@google.com (Kenton Varda) +// +// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is +// just a program that reads a CodeGeneratorRequest from stdin and writes a +// CodeGeneratorResponse to stdout. +// +// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead +// of dealing with the raw protocol defined here. +// +// A plugin executable needs only to be placed somewhere in the path. The +// plugin should be named "protoc-gen-$NAME", and will then be used when the +// flag "--${NAME}_out" is passed to protoc. + +syntax = "proto2"; + +package google.protobuf.compiler; +option java_package = "com.google.protobuf.compiler"; +option java_outer_classname = "PluginProtos"; + +option csharp_namespace = "Google.Protobuf.Compiler"; +option go_package = "google.golang.org/protobuf/types/pluginpb"; + +import "google/protobuf/descriptor.proto"; + +// The version number of protocol compiler. +message Version { + optional int32 major = 1; + optional int32 minor = 2; + optional int32 patch = 3; + // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should + // be empty for mainline stable releases. + optional string suffix = 4; +} + +// An encoded CodeGeneratorRequest is written to the plugin's stdin. +message CodeGeneratorRequest { + // The .proto files that were explicitly listed on the command-line. The + // code generator should generate code only for these files. Each file's + // descriptor will be included in proto_file, below. + repeated string file_to_generate = 1; + + // The generator parameter passed on the command-line. + optional string parameter = 2; + + // FileDescriptorProtos for all files in files_to_generate and everything + // they import. The files will appear in topological order, so each file + // appears before any file that imports it. + // + // protoc guarantees that all proto_files will be written after + // the fields above, even though this is not technically guaranteed by the + // protobuf wire format. This theoretically could allow a plugin to stream + // in the FileDescriptorProtos and handle them one by one rather than read + // the entire set into memory at once. However, as of this writing, this + // is not similarly optimized on protoc's end -- it will store all fields in + // memory at once before sending them to the plugin. + // + // Type names of fields and extensions in the FileDescriptorProto are always + // fully qualified. + repeated FileDescriptorProto proto_file = 15; + + // The version number of protocol compiler. + optional Version compiler_version = 3; +} + +// The plugin writes an encoded CodeGeneratorResponse to stdout. +message CodeGeneratorResponse { + // Error message. If non-empty, code generation failed. The plugin process + // should exit with status code zero even if it reports an error in this way. + // + // This should be used to indicate errors in .proto files which prevent the + // code generator from generating correct code. Errors which indicate a + // problem in protoc itself -- such as the input CodeGeneratorRequest being + // unparseable -- should be reported by writing a message to stderr and + // exiting with a non-zero status code. + optional string error = 1; + + // A bitmask of supported features that the code generator supports. + // This is a bitwise "or" of values from the Feature enum. + optional uint64 supported_features = 2; + + // Sync with code_generator.h. + enum Feature { + FEATURE_NONE = 0; + FEATURE_PROTO3_OPTIONAL = 1; + } + + // Represents a single generated file. + message File { + // The file name, relative to the output directory. The name must not + // contain "." or ".." components and must be relative, not be absolute (so, + // the file cannot lie outside the output directory). "/" must be used as + // the path separator, not "\". + // + // If the name is omitted, the content will be appended to the previous + // file. This allows the generator to break large files into small chunks, + // and allows the generated text to be streamed back to protoc so that large + // files need not reside completely in memory at one time. Note that as of + // this writing protoc does not optimize for this -- it will read the entire + // CodeGeneratorResponse before writing files to disk. + optional string name = 1; + + // If non-empty, indicates that the named file should already exist, and the + // content here is to be inserted into that file at a defined insertion + // point. This feature allows a code generator to extend the output + // produced by another code generator. The original generator may provide + // insertion points by placing special annotations in the file that look + // like: + // @@protoc_insertion_point(NAME) + // The annotation can have arbitrary text before and after it on the line, + // which allows it to be placed in a comment. NAME should be replaced with + // an identifier naming the point -- this is what other generators will use + // as the insertion_point. Code inserted at this point will be placed + // immediately above the line containing the insertion point (thus multiple + // insertions to the same point will come out in the order they were added). + // The double-@ is intended to make it unlikely that the generated code + // could contain things that look like insertion points by accident. + // + // For example, the C++ code generator places the following line in the + // .pb.h files that it generates: + // // @@protoc_insertion_point(namespace_scope) + // This line appears within the scope of the file's package namespace, but + // outside of any particular class. Another plugin can then specify the + // insertion_point "namespace_scope" to generate additional classes or + // other declarations that should be placed in this scope. + // + // Note that if the line containing the insertion point begins with + // whitespace, the same whitespace will be added to every line of the + // inserted text. This is useful for languages like Python, where + // indentation matters. In these languages, the insertion point comment + // should be indented the same amount as any inserted code will need to be + // in order to work correctly in that context. + // + // The code generator that generates the initial file and the one which + // inserts into it must both run as part of a single invocation of protoc. + // Code generators are executed in the order in which they appear on the + // command line. + // + // If |insertion_point| is present, |name| must also be present. + optional string insertion_point = 2; + + // The file contents. + optional string content = 15; + + // Information describing the file content being inserted. If an insertion + // point is used, this information will be appropriately offset and inserted + // into the code generation metadata for the generated files. + optional GeneratedCodeInfo generated_code_info = 16; + } + repeated File file = 15; +} diff --git a/src/rust/protobuf/google/protobuf/descriptor.proto b/src/rust/protobuf/google/protobuf/descriptor.proto new file mode 100644 index 0000000000..3b3867543c --- /dev/null +++ b/src/rust/protobuf/google/protobuf/descriptor.proto @@ -0,0 +1,975 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + +syntax = "proto2"; + +package google.protobuf; + +option go_package = "google.golang.org/protobuf/types/descriptorpb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DescriptorProtos"; +option csharp_namespace = "Google.Protobuf.Reflection"; +option objc_class_prefix = "GPB"; +option cc_enable_arenas = true; + +// descriptor.proto must be optimized for speed because reflection-based +// algorithms don't work during bootstrapping. +option optimize_for = SPEED; + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +message FileDescriptorSet { + repeated FileDescriptorProto file = 1; +} + +// Describes a complete .proto file. +message FileDescriptorProto { + optional string name = 1; // file name, relative to root of source tree + optional string package = 2; // e.g. "foo", "foo.bar", etc. + + // Names of files imported by this file. + repeated string dependency = 3; + // Indexes of the public imported files in the dependency list above. + repeated int32 public_dependency = 10; + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + repeated int32 weak_dependency = 11; + + // All top-level definitions in this file. + repeated DescriptorProto message_type = 4; + repeated EnumDescriptorProto enum_type = 5; + repeated ServiceDescriptorProto service = 6; + repeated FieldDescriptorProto extension = 7; + + optional FileOptions options = 8; + + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + optional SourceCodeInfo source_code_info = 9; + + // The syntax of the proto file. + // The supported values are "proto2", "proto3", and "editions". + // + // If `edition` is present, this value must be "editions". + optional string syntax = 12; + + // The edition of the proto file, which is an opaque string. + optional string edition = 13; +} + +// Describes a message type. +message DescriptorProto { + optional string name = 1; + + repeated FieldDescriptorProto field = 2; + repeated FieldDescriptorProto extension = 6; + + repeated DescriptorProto nested_type = 3; + repeated EnumDescriptorProto enum_type = 4; + + message ExtensionRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. + + optional ExtensionRangeOptions options = 3; + } + repeated ExtensionRange extension_range = 5; + + repeated OneofDescriptorProto oneof_decl = 8; + + optional MessageOptions options = 7; + + // Range of reserved tag numbers. Reserved tag numbers may not be used by + // fields or extension ranges in the same message. Reserved ranges may + // not overlap. + message ReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. + } + repeated ReservedRange reserved_range = 9; + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + repeated string reserved_name = 10; +} + +message ExtensionRangeOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +// Describes a field within a message. +message FieldDescriptorProto { + enum Type { + // 0 is reserved for errors. + // Order is weird for historical reasons. + TYPE_DOUBLE = 1; + TYPE_FLOAT = 2; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + TYPE_INT64 = 3; + TYPE_UINT64 = 4; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + TYPE_INT32 = 5; + TYPE_FIXED64 = 6; + TYPE_FIXED32 = 7; + TYPE_BOOL = 8; + TYPE_STRING = 9; + // Tag-delimited aggregate. + // Group type is deprecated and not supported in proto3. However, Proto3 + // implementations should still be able to parse the group wire format and + // treat group fields as unknown fields. + TYPE_GROUP = 10; + TYPE_MESSAGE = 11; // Length-delimited aggregate. + + // New in version 2. + TYPE_BYTES = 12; + TYPE_UINT32 = 13; + TYPE_ENUM = 14; + TYPE_SFIXED32 = 15; + TYPE_SFIXED64 = 16; + TYPE_SINT32 = 17; // Uses ZigZag encoding. + TYPE_SINT64 = 18; // Uses ZigZag encoding. + } + + enum Label { + // 0 is reserved for errors + LABEL_OPTIONAL = 1; + LABEL_REQUIRED = 2; + LABEL_REPEATED = 3; + } + + optional string name = 1; + optional int32 number = 3; + optional Label label = 4; + + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + optional Type type = 5; + + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + optional string type_name = 6; + + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + optional string extendee = 2; + + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + optional string default_value = 7; + + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + optional int32 oneof_index = 9; + + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + optional string json_name = 10; + + optional FieldOptions options = 8; + + // If true, this is a proto3 "optional". When a proto3 field is optional, it + // tracks presence regardless of field type. + // + // When proto3_optional is true, this field must be belong to a oneof to + // signal to old proto3 clients that presence is tracked for this field. This + // oneof is known as a "synthetic" oneof, and this field must be its sole + // member (each proto3 optional field gets its own synthetic oneof). Synthetic + // oneofs exist in the descriptor only, and do not generate any API. Synthetic + // oneofs must be ordered after all "real" oneofs. + // + // For message fields, proto3_optional doesn't create any semantic change, + // since non-repeated message fields always track presence. However it still + // indicates the semantic detail of whether the user wrote "optional" or not. + // This can be useful for round-tripping the .proto file. For consistency we + // give message fields a synthetic oneof also, even though it is not required + // to track presence. This is especially important because the parser can't + // tell if a field is a message or an enum, so it must always create a + // synthetic oneof. + // + // Proto2 optional fields do not set this flag, because they already indicate + // optional with `LABEL_OPTIONAL`. + optional bool proto3_optional = 17; +} + +// Describes a oneof. +message OneofDescriptorProto { + optional string name = 1; + optional OneofOptions options = 2; +} + +// Describes an enum type. +message EnumDescriptorProto { + optional string name = 1; + + repeated EnumValueDescriptorProto value = 2; + + optional EnumOptions options = 3; + + // Range of reserved numeric values. Reserved values may not be used by + // entries in the same enum. Reserved ranges may not overlap. + // + // Note that this is distinct from DescriptorProto.ReservedRange in that it + // is inclusive such that it can appropriately represent the entire int32 + // domain. + message EnumReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Inclusive. + } + + // Range of reserved numeric values. Reserved numeric values may not be used + // by enum values in the same enum declaration. Reserved ranges may not + // overlap. + repeated EnumReservedRange reserved_range = 4; + + // Reserved enum value names, which may not be reused. A given name may only + // be reserved once. + repeated string reserved_name = 5; +} + +// Describes a value within an enum. +message EnumValueDescriptorProto { + optional string name = 1; + optional int32 number = 2; + + optional EnumValueOptions options = 3; +} + +// Describes a service. +message ServiceDescriptorProto { + optional string name = 1; + repeated MethodDescriptorProto method = 2; + + optional ServiceOptions options = 3; +} + +// Describes a method of a service. +message MethodDescriptorProto { + optional string name = 1; + + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + optional string input_type = 2; + optional string output_type = 3; + + optional MethodOptions options = 4; + + // Identifies if client streams multiple client messages + optional bool client_streaming = 5 [default = false]; + // Identifies if server streams multiple server messages + optional bool server_streaming = 6 [default = false]; +} + +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Objective-C plugin) and your project website (if available) -- there's no +// need to explain how you intend to use them. Usually you only need one +// extension number. You can declare multiple options with only one extension +// number by putting them in a sub-message. See the Custom Options section of +// the docs for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + +message FileOptions { + + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + optional string java_package = 1; + + // Controls the name of the wrapper Java class generated for the .proto file. + // That class will always contain the .proto file's getDescriptor() method as + // well as any top-level extensions defined in the .proto file. + // If java_multiple_files is disabled, then all the other classes from the + // .proto file will be nested inside the single wrapper outer class. + optional string java_outer_classname = 8; + + // If enabled, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the wrapper class + // named by java_outer_classname. However, the wrapper class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + optional bool java_multiple_files = 10 [default = false]; + + // This option does nothing. + optional bool java_generate_equals_and_hash = 20 [deprecated=true]; + + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + optional bool java_string_check_utf8 = 27 [default = false]; + + // Generated classes can be optimized for speed or code size. + enum OptimizeMode { + SPEED = 1; // Generate complete code for parsing, serialization, + // etc. + CODE_SIZE = 2; // Use ReflectionOps to implement these methods. + LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. + } + optional OptimizeMode optimize_for = 9 [default = SPEED]; + + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + optional string go_package = 11; + + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + optional bool cc_generic_services = 16 [default = false]; + optional bool java_generic_services = 17 [default = false]; + optional bool py_generic_services = 18 [default = false]; + optional bool php_generic_services = 42 [default = false]; + + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + optional bool deprecated = 23 [default = false]; + + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + optional bool cc_enable_arenas = 31 [default = true]; + + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + optional string objc_class_prefix = 36; + + // Namespace for generated classes; defaults to the package. + optional string csharp_namespace = 37; + + // By default Swift generators will take the proto package and CamelCase it + // replacing '.' with underscore and use that to prefix the types/symbols + // defined. When this options is provided, they will use this value instead + // to prefix the types/symbols defined. + optional string swift_prefix = 39; + + // Sets the php class prefix which is prepended to all php generated classes + // from this .proto. Default is empty. + optional string php_class_prefix = 40; + + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + optional string php_namespace = 41; + + // Use this option to change the namespace of php generated metadata classes. + // Default is empty. When this option is empty, the proto file name will be + // used for determining the namespace. + optional string php_metadata_namespace = 44; + + // Use this option to change the package of ruby generated classes. Default + // is empty. When this option is not set, the package name will be used for + // determining the ruby package. + optional string ruby_package = 45; + + // The parser stores options it doesn't recognize here. + // See the documentation for the "Options" section above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. + // See the documentation for the "Options" section above. + extensions 1000 to max; + + reserved 38; +} + +message MessageOptions { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + optional bool message_set_wire_format = 1 [default = false]; + + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + optional bool no_standard_descriptor_accessor = 2 [default = false]; + + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + optional bool deprecated = 3 [default = false]; + + reserved 4, 5, 6; + + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + // + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // map map_field = 1; + // The parsed descriptor looks like: + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementations still need to work as + // if the field is a repeated message field. + optional bool map_entry = 7; + + reserved 8; // javalite_serializable + reserved 9; // javanano_as_lite + + // Enable the legacy handling of JSON field name conflicts. This lowercases + // and strips underscored from the fields before comparison in proto3 only. + // The new behavior takes `json_name` into account and applies to proto2 as + // well. + // + // This should only be used as a temporary measure against broken builds due + // to the change in behavior for JSON field name conflicts. + // + // TODO(b/261750190) This is legacy behavior we plan to remove once downstream + // teams have had time to migrate. + optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated = true]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message FieldOptions { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + optional CType ctype = 1 [default = STRING]; + enum CType { + // Default mode. + STRING = 0; + + CORD = 1; + + STRING_PIECE = 2; + } + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. + optional bool packed = 2; + + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. + optional JSType jstype = 6 [default = JS_NORMAL]; + enum JSType { + // Use the default type. + JS_NORMAL = 0; + + // Use JavaScript strings. + JS_STRING = 1; + + // Use JavaScript numbers. + JS_NUMBER = 2; + } + + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outer message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + // + // As of May 2022, lazy verifies the contents of the byte stream during + // parsing. An invalid byte stream will cause the overall parsing to fail. + optional bool lazy = 5 [default = false]; + + // unverified_lazy does no correctness checks on the byte stream. This should + // only be used where lazy with verification is prohibitive for performance + // reasons. + optional bool unverified_lazy = 15 [default = false]; + + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + optional bool deprecated = 3 [default = false]; + + // For Google-internal migration only. Do not use. + optional bool weak = 10 [default = false]; + + // Indicate that the field value should not be printed out when using debug + // formats, e.g. when the field contains sensitive credentials. + optional bool debug_redact = 16 [default = false]; + + // If set to RETENTION_SOURCE, the option will be omitted from the binary. + // Note: as of January 2023, support for this is in progress and does not yet + // have an effect (b/264593489). + enum OptionRetention { + RETENTION_UNKNOWN = 0; + RETENTION_RUNTIME = 1; + RETENTION_SOURCE = 2; + } + + optional OptionRetention retention = 17; + + // This indicates the types of entities that the field may apply to when used + // as an option. If it is unset, then the field may be freely used as an + // option on any kind of entity. Note: as of January 2023, support for this is + // in progress and does not yet have an effect (b/264593489). + enum OptionTargetType { + TARGET_TYPE_UNKNOWN = 0; + TARGET_TYPE_FILE = 1; + TARGET_TYPE_EXTENSION_RANGE = 2; + TARGET_TYPE_MESSAGE = 3; + TARGET_TYPE_FIELD = 4; + TARGET_TYPE_ONEOF = 5; + TARGET_TYPE_ENUM = 6; + TARGET_TYPE_ENUM_ENTRY = 7; + TARGET_TYPE_SERVICE = 8; + TARGET_TYPE_METHOD = 9; + } + + optional OptionTargetType target = 18; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; + + reserved 4; // removed jtype +} + +message OneofOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumOptions { + + // Set this option to true to allow mapping different tag names to the same + // value. + optional bool allow_alias = 2; + + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + optional bool deprecated = 3 [default = false]; + + reserved 5; // javanano_as_lite + + // Enable the legacy handling of JSON field name conflicts. This lowercases + // and strips underscored from the fields before comparison in proto3 only. + // The new behavior takes `json_name` into account and applies to proto2 as + // well. + // TODO(b/261750190) Remove this legacy behavior once downstream teams have + // had time to migrate. + optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated = true]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumValueOptions { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + optional bool deprecated = 1 [default = false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message ServiceOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + optional bool deprecated = 33 [default = false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MethodOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + optional bool deprecated = 33 [default = false]; + + // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, + // or neither? HTTP based RPC implementation may choose GET verb for safe + // methods, and PUT verb for idempotent methods instead of the default POST. + enum IdempotencyLevel { + IDEMPOTENCY_UNKNOWN = 0; + NO_SIDE_EFFECTS = 1; // implies idempotent + IDEMPOTENT = 2; // idempotent, but may have side effects + } + optional IdempotencyLevel idempotency_level = 34 + [default = IDEMPOTENCY_UNKNOWN]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +message UninterpretedOption { + // The name of the uninterpreted option. Each string represents a segment in + // a dot-separated name. is_extension is true iff a segment represents an + // extension (denoted with parentheses in options specs in .proto files). + // E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents + // "foo.(bar.baz).moo". + message NamePart { + required string name_part = 1; + required bool is_extension = 2; + } + repeated NamePart name = 2; + + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + optional string identifier_value = 3; + optional uint64 positive_int_value = 4; + optional int64 negative_int_value = 5; + optional double double_value = 6; + optional bytes string_value = 7; + optional string aggregate_value = 8; +} + +// =================================================================== +// Optional source code info + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +message SourceCodeInfo { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendant. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + repeated Location location = 1; + message Location { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition occurs. + // For example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + repeated int32 path = 1 [packed = true]; + + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + repeated int32 span = 2 [packed = true]; + + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to moo. + // // + // // Another line attached to moo. + // optional double moo = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to moo or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + optional string leading_comments = 3; + optional string trailing_comments = 4; + repeated string leading_detached_comments = 6; + } +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +message GeneratedCodeInfo { + // An Annotation connects some span of text in generated code to an element + // of its generating .proto file. + repeated Annotation annotation = 1; + message Annotation { + // Identifies the element in the original source .proto file. This field + // is formatted the same as SourceCodeInfo.Location.path. + repeated int32 path = 1 [packed = true]; + + // Identifies the filesystem path to the original source .proto. + optional string source_file = 2; + + // Identifies the starting offset in bytes in the generated code + // that relates to the identified object. + optional int32 begin = 3; + + // Identifies the ending offset in bytes in the generated code that + // relates to the identified object. The end offset should be one past + // the last relevant byte (so the length of the text = end - begin). + optional int32 end = 4; + + // Represents the identified object's effect on the element in the original + // .proto file. + enum Semantic { + // There is no effect or the effect is indescribable. + NONE = 0; + // The element is set or otherwise mutated. + SET = 1; + // An alias to the element is returned. + ALIAS = 2; + } + optional Semantic semantic = 5; + } +} diff --git a/src/rust/protobuf/google/protobuf/duration.proto b/src/rust/protobuf/google/protobuf/duration.proto new file mode 100644 index 0000000000..41f40c2224 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/duration.proto @@ -0,0 +1,115 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/protobuf/types/known/durationpb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DurationProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; + +// A Duration represents a signed, fixed-length span of time represented +// as a count of seconds and fractions of seconds at nanosecond +// resolution. It is independent of any calendar and concepts like "day" +// or "month". It is related to Timestamp in that the difference between +// two Timestamp values is a Duration and it can be added or subtracted +// from a Timestamp. Range is approximately +-10,000 years. +// +// # Examples +// +// Example 1: Compute Duration from two Timestamps in pseudo code. +// +// Timestamp start = ...; +// Timestamp end = ...; +// Duration duration = ...; +// +// duration.seconds = end.seconds - start.seconds; +// duration.nanos = end.nanos - start.nanos; +// +// if (duration.seconds < 0 && duration.nanos > 0) { +// duration.seconds += 1; +// duration.nanos -= 1000000000; +// } else if (duration.seconds > 0 && duration.nanos < 0) { +// duration.seconds -= 1; +// duration.nanos += 1000000000; +// } +// +// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. +// +// Timestamp start = ...; +// Duration duration = ...; +// Timestamp end = ...; +// +// end.seconds = start.seconds + duration.seconds; +// end.nanos = start.nanos + duration.nanos; +// +// if (end.nanos < 0) { +// end.seconds -= 1; +// end.nanos += 1000000000; +// } else if (end.nanos >= 1000000000) { +// end.seconds += 1; +// end.nanos -= 1000000000; +// } +// +// Example 3: Compute Duration from datetime.timedelta in Python. +// +// td = datetime.timedelta(days=3, minutes=10) +// duration = Duration() +// duration.FromTimedelta(td) +// +// # JSON Mapping +// +// In JSON format, the Duration type is encoded as a string rather than an +// object, where the string ends in the suffix "s" (indicating seconds) and +// is preceded by the number of seconds, with nanoseconds expressed as +// fractional seconds. For example, 3 seconds with 0 nanoseconds should be +// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should +// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 +// microsecond should be expressed in JSON format as "3.000001s". +// +message Duration { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. Note: these bounds are computed from: + // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + int64 seconds = 1; + + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + int32 nanos = 2; +} diff --git a/src/rust/protobuf/google/protobuf/empty.proto b/src/rust/protobuf/google/protobuf/empty.proto new file mode 100644 index 0000000000..b87c89dcfc --- /dev/null +++ b/src/rust/protobuf/google/protobuf/empty.proto @@ -0,0 +1,51 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +option go_package = "google.golang.org/protobuf/types/known/emptypb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "EmptyProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; + +// A generic empty message that you can re-use to avoid defining duplicated +// empty messages in your APIs. A typical example is to use it as the request +// or the response type of an API method. For instance: +// +// service Foo { +// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); +// } +// +message Empty {} diff --git a/src/rust/protobuf/google/protobuf/field_mask.proto b/src/rust/protobuf/google/protobuf/field_mask.proto new file mode 100644 index 0000000000..b28334b943 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/field_mask.proto @@ -0,0 +1,245 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +option java_package = "com.google.protobuf"; +option java_outer_classname = "FieldMaskProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "google.golang.org/protobuf/types/known/fieldmaskpb"; +option cc_enable_arenas = true; + +// `FieldMask` represents a set of symbolic field paths, for example: +// +// paths: "f.a" +// paths: "f.b.d" +// +// Here `f` represents a field in some root message, `a` and `b` +// fields in the message found in `f`, and `d` a field found in the +// message in `f.b`. +// +// Field masks are used to specify a subset of fields that should be +// returned by a get operation or modified by an update operation. +// Field masks also have a custom JSON encoding (see below). +// +// # Field Masks in Projections +// +// When used in the context of a projection, a response message or +// sub-message is filtered by the API to only contain those fields as +// specified in the mask. For example, if the mask in the previous +// example is applied to a response message as follows: +// +// f { +// a : 22 +// b { +// d : 1 +// x : 2 +// } +// y : 13 +// } +// z: 8 +// +// The result will not contain specific values for fields x,y and z +// (their value will be set to the default, and omitted in proto text +// output): +// +// +// f { +// a : 22 +// b { +// d : 1 +// } +// } +// +// A repeated field is not allowed except at the last position of a +// paths string. +// +// If a FieldMask object is not present in a get operation, the +// operation applies to all fields (as if a FieldMask of all fields +// had been specified). +// +// Note that a field mask does not necessarily apply to the +// top-level response message. In case of a REST get operation, the +// field mask applies directly to the response, but in case of a REST +// list operation, the mask instead applies to each individual message +// in the returned resource list. In case of a REST custom method, +// other definitions may be used. Where the mask applies will be +// clearly documented together with its declaration in the API. In +// any case, the effect on the returned resource/resources is required +// behavior for APIs. +// +// # Field Masks in Update Operations +// +// A field mask in update operations specifies which fields of the +// targeted resource are going to be updated. The API is required +// to only change the values of the fields as specified in the mask +// and leave the others untouched. If a resource is passed in to +// describe the updated values, the API ignores the values of all +// fields not covered by the mask. +// +// If a repeated field is specified for an update operation, new values will +// be appended to the existing repeated field in the target resource. Note that +// a repeated field is only allowed in the last position of a `paths` string. +// +// If a sub-message is specified in the last position of the field mask for an +// update operation, then new value will be merged into the existing sub-message +// in the target resource. +// +// For example, given the target message: +// +// f { +// b { +// d: 1 +// x: 2 +// } +// c: [1] +// } +// +// And an update message: +// +// f { +// b { +// d: 10 +// } +// c: [2] +// } +// +// then if the field mask is: +// +// paths: ["f.b", "f.c"] +// +// then the result will be: +// +// f { +// b { +// d: 10 +// x: 2 +// } +// c: [1, 2] +// } +// +// An implementation may provide options to override this default behavior for +// repeated and message fields. +// +// In order to reset a field's value to the default, the field must +// be in the mask and set to the default value in the provided resource. +// Hence, in order to reset all fields of a resource, provide a default +// instance of the resource and set all fields in the mask, or do +// not provide a mask as described below. +// +// If a field mask is not present on update, the operation applies to +// all fields (as if a field mask of all fields has been specified). +// Note that in the presence of schema evolution, this may mean that +// fields the client does not know and has therefore not filled into +// the request will be reset to their default. If this is unwanted +// behavior, a specific service may require a client to always specify +// a field mask, producing an error if not. +// +// As with get operations, the location of the resource which +// describes the updated values in the request message depends on the +// operation kind. In any case, the effect of the field mask is +// required to be honored by the API. +// +// ## Considerations for HTTP REST +// +// The HTTP kind of an update operation which uses a field mask must +// be set to PATCH instead of PUT in order to satisfy HTTP semantics +// (PUT must only be used for full updates). +// +// # JSON Encoding of Field Masks +// +// In JSON, a field mask is encoded as a single string where paths are +// separated by a comma. Fields name in each path are converted +// to/from lower-camel naming conventions. +// +// As an example, consider the following message declarations: +// +// message Profile { +// User user = 1; +// Photo photo = 2; +// } +// message User { +// string display_name = 1; +// string address = 2; +// } +// +// In proto a field mask for `Profile` may look as such: +// +// mask { +// paths: "user.display_name" +// paths: "photo" +// } +// +// In JSON, the same mask is represented as below: +// +// { +// mask: "user.displayName,photo" +// } +// +// # Field Masks and Oneof Fields +// +// Field masks treat fields in oneofs just as regular fields. Consider the +// following message: +// +// message SampleMessage { +// oneof test_oneof { +// string name = 4; +// SubMessage sub_message = 9; +// } +// } +// +// The field mask can be: +// +// mask { +// paths: "name" +// } +// +// Or: +// +// mask { +// paths: "sub_message" +// } +// +// Note that oneof type names ("test_oneof" in this case) cannot be used in +// paths. +// +// ## Field Mask Verification +// +// The implementation of any API method which has a FieldMask type field in the +// request should verify the included field paths, and return an +// `INVALID_ARGUMENT` error if any path is unmappable. +message FieldMask { + // The set of field mask paths. + repeated string paths = 1; +} diff --git a/src/rust/protobuf/google/protobuf/source_context.proto b/src/rust/protobuf/google/protobuf/source_context.proto new file mode 100644 index 0000000000..135f50fea5 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/source_context.proto @@ -0,0 +1,48 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +option java_package = "com.google.protobuf"; +option java_outer_classname = "SourceContextProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "google.golang.org/protobuf/types/known/sourcecontextpb"; + +// `SourceContext` represents information about the source of a +// protobuf element, like the file in which it is defined. +message SourceContext { + // The path-qualified name of the .proto file that contained the associated + // protobuf element. For example: `"google/protobuf/source_context.proto"`. + string file_name = 1; +} diff --git a/src/rust/protobuf/google/protobuf/struct.proto b/src/rust/protobuf/google/protobuf/struct.proto new file mode 100644 index 0000000000..c4ea6453ea --- /dev/null +++ b/src/rust/protobuf/google/protobuf/struct.proto @@ -0,0 +1,95 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/protobuf/types/known/structpb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "StructProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; + +// `Struct` represents a structured data value, consisting of fields +// which map to dynamically typed values. In some languages, `Struct` +// might be supported by a native representation. For example, in +// scripting languages like JS a struct is represented as an +// object. The details of that representation are described together +// with the proto support for the language. +// +// The JSON representation for `Struct` is JSON object. +message Struct { + // Unordered map of dynamically typed values. + map fields = 1; +} + +// `Value` represents a dynamically typed value which can be either +// null, a number, a string, a boolean, a recursive struct value, or a +// list of values. A producer of value is expected to set one of these +// variants. Absence of any variant indicates an error. +// +// The JSON representation for `Value` is JSON value. +message Value { + // The kind of value. + oneof kind { + // Represents a null value. + NullValue null_value = 1; + // Represents a double value. + double number_value = 2; + // Represents a string value. + string string_value = 3; + // Represents a boolean value. + bool bool_value = 4; + // Represents a structured value. + Struct struct_value = 5; + // Represents a repeated `Value`. + ListValue list_value = 6; + } +} + +// `NullValue` is a singleton enumeration to represent the null value for the +// `Value` type union. +// +// The JSON representation for `NullValue` is JSON `null`. +enum NullValue { + // Null value. + NULL_VALUE = 0; +} + +// `ListValue` is a wrapper around a repeated field of values. +// +// The JSON representation for `ListValue` is JSON array. +message ListValue { + // Repeated field of dynamically typed values. + repeated Value values = 1; +} diff --git a/src/rust/protobuf/google/protobuf/timestamp.proto b/src/rust/protobuf/google/protobuf/timestamp.proto new file mode 100644 index 0000000000..2fb527c0c5 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/timestamp.proto @@ -0,0 +1,144 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/protobuf/types/known/timestamppb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "TimestampProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; + +// A Timestamp represents a point in time independent of any time zone or local +// calendar, encoded as a count of seconds and fractions of seconds at +// nanosecond resolution. The count is relative to an epoch at UTC midnight on +// January 1, 1970, in the proleptic Gregorian calendar which extends the +// Gregorian calendar backwards to year one. +// +// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap +// second table is needed for interpretation, using a [24-hour linear +// smear](https://developers.google.com/time/smear). +// +// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By +// restricting to that range, we ensure that we can convert to and from [RFC +// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. +// +// # Examples +// +// Example 1: Compute Timestamp from POSIX `time()`. +// +// Timestamp timestamp; +// timestamp.set_seconds(time(NULL)); +// timestamp.set_nanos(0); +// +// Example 2: Compute Timestamp from POSIX `gettimeofday()`. +// +// struct timeval tv; +// gettimeofday(&tv, NULL); +// +// Timestamp timestamp; +// timestamp.set_seconds(tv.tv_sec); +// timestamp.set_nanos(tv.tv_usec * 1000); +// +// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. +// +// FILETIME ft; +// GetSystemTimeAsFileTime(&ft); +// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +// +// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z +// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. +// Timestamp timestamp; +// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); +// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); +// +// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. +// +// long millis = System.currentTimeMillis(); +// +// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) +// .setNanos((int) ((millis % 1000) * 1000000)).build(); +// +// Example 5: Compute Timestamp from Java `Instant.now()`. +// +// Instant now = Instant.now(); +// +// Timestamp timestamp = +// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) +// .setNanos(now.getNano()).build(); +// +// Example 6: Compute Timestamp from current time in Python. +// +// timestamp = Timestamp() +// timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required. A proto3 JSON serializer should always use UTC (as indicated by +// "Z") when printing the Timestamp type and a proto3 JSON parser should be +// able to accept both UTC and other timezones (as indicated by an offset). +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard +// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using +// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with +// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use +// the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D +// ) to obtain a formatter capable of generating timestamps in this format. +// +message Timestamp { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + int64 seconds = 1; + + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + int32 nanos = 2; +} diff --git a/src/rust/protobuf/google/protobuf/type.proto b/src/rust/protobuf/google/protobuf/type.proto new file mode 100644 index 0000000000..fd25a41930 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/type.proto @@ -0,0 +1,187 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. + +syntax = "proto3"; + +package google.protobuf; + +import "google/protobuf/any.proto"; +import "google/protobuf/source_context.proto"; + +option cc_enable_arenas = true; +option java_package = "com.google.protobuf"; +option java_outer_classname = "TypeProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "google.golang.org/protobuf/types/known/typepb"; + +// A protocol buffer message type. +message Type { + // The fully qualified message name. + string name = 1; + // The list of fields. + repeated Field fields = 2; + // The list of types appearing in `oneof` definitions in this type. + repeated string oneofs = 3; + // The protocol buffer options. + repeated Option options = 4; + // The source context. + SourceContext source_context = 5; + // The source syntax. + Syntax syntax = 6; +} + +// A single field of a message type. +message Field { + // Basic field types. + enum Kind { + // Field type unknown. + TYPE_UNKNOWN = 0; + // Field type double. + TYPE_DOUBLE = 1; + // Field type float. + TYPE_FLOAT = 2; + // Field type int64. + TYPE_INT64 = 3; + // Field type uint64. + TYPE_UINT64 = 4; + // Field type int32. + TYPE_INT32 = 5; + // Field type fixed64. + TYPE_FIXED64 = 6; + // Field type fixed32. + TYPE_FIXED32 = 7; + // Field type bool. + TYPE_BOOL = 8; + // Field type string. + TYPE_STRING = 9; + // Field type group. Proto2 syntax only, and deprecated. + TYPE_GROUP = 10; + // Field type message. + TYPE_MESSAGE = 11; + // Field type bytes. + TYPE_BYTES = 12; + // Field type uint32. + TYPE_UINT32 = 13; + // Field type enum. + TYPE_ENUM = 14; + // Field type sfixed32. + TYPE_SFIXED32 = 15; + // Field type sfixed64. + TYPE_SFIXED64 = 16; + // Field type sint32. + TYPE_SINT32 = 17; + // Field type sint64. + TYPE_SINT64 = 18; + } + + // Whether a field is optional, required, or repeated. + enum Cardinality { + // For fields with unknown cardinality. + CARDINALITY_UNKNOWN = 0; + // For optional fields. + CARDINALITY_OPTIONAL = 1; + // For required fields. Proto2 syntax only. + CARDINALITY_REQUIRED = 2; + // For repeated fields. + CARDINALITY_REPEATED = 3; + } + + // The field type. + Kind kind = 1; + // The field cardinality. + Cardinality cardinality = 2; + // The field number. + int32 number = 3; + // The field name. + string name = 4; + // The field type URL, without the scheme, for message or enumeration + // types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. + string type_url = 6; + // The index of the field type in `Type.oneofs`, for message or enumeration + // types. The first type has index 1; zero means the type is not in the list. + int32 oneof_index = 7; + // Whether to use alternative packed wire representation. + bool packed = 8; + // The protocol buffer options. + repeated Option options = 9; + // The field JSON name. + string json_name = 10; + // The string value of the default value of this field. Proto2 syntax only. + string default_value = 11; +} + +// Enum type definition. +message Enum { + // Enum type name. + string name = 1; + // Enum value definitions. + repeated EnumValue enumvalue = 2; + // Protocol buffer options. + repeated Option options = 3; + // The source context. + SourceContext source_context = 4; + // The source syntax. + Syntax syntax = 5; +} + +// Enum value definition. +message EnumValue { + // Enum value name. + string name = 1; + // Enum value number. + int32 number = 2; + // Protocol buffer options. + repeated Option options = 3; +} + +// A protocol buffer option, which can be attached to a message, field, +// enumeration, etc. +message Option { + // The option's name. For protobuf built-in options (options defined in + // descriptor.proto), this is the short name. For example, `"map_entry"`. + // For custom options, it should be the fully-qualified name. For example, + // `"google.api.http"`. + string name = 1; + // The option's value packed in an Any message. If the value is a primitive, + // the corresponding wrapper type defined in google/protobuf/wrappers.proto + // should be used. If the value is an enum, it should be stored as an int32 + // value using the google.protobuf.Int32Value type. + Any value = 2; +} + +// The syntax in which a protocol buffer element is defined. +enum Syntax { + // Syntax `proto2`. + SYNTAX_PROTO2 = 0; + // Syntax `proto3`. + SYNTAX_PROTO3 = 1; +} diff --git a/src/rust/protobuf/google/protobuf/wrappers.proto b/src/rust/protobuf/google/protobuf/wrappers.proto new file mode 100644 index 0000000000..1959fa55a4 --- /dev/null +++ b/src/rust/protobuf/google/protobuf/wrappers.proto @@ -0,0 +1,123 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS 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. +// +// Wrappers for primitive (non-message) types. These types are useful +// for embedding primitives in the `google.protobuf.Any` type and for places +// where we need to distinguish between the absence of a primitive +// typed field and its default value. +// +// These wrappers have no meaningful use within repeated fields as they lack +// the ability to detect presence on individual elements. +// These wrappers have no meaningful use within a map or a oneof since +// individual entries of a map or fields of a oneof can already detect presence. + +syntax = "proto3"; + +package google.protobuf; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/protobuf/types/known/wrapperspb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "WrappersProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; + +// Wrapper message for `double`. +// +// The JSON representation for `DoubleValue` is JSON number. +message DoubleValue { + // The double value. + double value = 1; +} + +// Wrapper message for `float`. +// +// The JSON representation for `FloatValue` is JSON number. +message FloatValue { + // The float value. + float value = 1; +} + +// Wrapper message for `int64`. +// +// The JSON representation for `Int64Value` is JSON string. +message Int64Value { + // The int64 value. + int64 value = 1; +} + +// Wrapper message for `uint64`. +// +// The JSON representation for `UInt64Value` is JSON string. +message UInt64Value { + // The uint64 value. + uint64 value = 1; +} + +// Wrapper message for `int32`. +// +// The JSON representation for `Int32Value` is JSON number. +message Int32Value { + // The int32 value. + int32 value = 1; +} + +// Wrapper message for `uint32`. +// +// The JSON representation for `UInt32Value` is JSON number. +message UInt32Value { + // The uint32 value. + uint32 value = 1; +} + +// Wrapper message for `bool`. +// +// The JSON representation for `BoolValue` is JSON `true` and `false`. +message BoolValue { + // The bool value. + bool value = 1; +} + +// Wrapper message for `string`. +// +// The JSON representation for `StringValue` is JSON string. +message StringValue { + // The string value. + string value = 1; +} + +// Wrapper message for `bytes`. +// +// The JSON representation for `BytesValue` is JSON string. +message BytesValue { + // The bytes value. + bytes value = 1; +} diff --git a/src/secp256k1/.dockerignore b/src/secp256k1/.dockerignore new file mode 100644 index 0000000000..d88627d72e --- /dev/null +++ b/src/secp256k1/.dockerignore @@ -0,0 +1,64 @@ +bench +bench_ecmult +bench_internal +tests +exhaustive_tests +precompute_ecmult_gen +precompute_ecmult +valgrind_ctime_test +ecdh_example +ecdsa_example +schnorr_example +*.exe +*.so +*.a +*.csv +!.gitignore +*.log +*.trs + +Makefile +configure +.libs/ +Makefile.in +aclocal.m4 +autom4te.cache/ +config.log +config.status +conftest* +*.tar.gz +*.la +libtool +.deps/ +.dirstamp +*.lo +*.o +*~ +*.log +*.trs + +coverage/ +coverage.html +coverage.*.html +*.gcda +*.gcno +*.gcov + +src/libsecp256k1-config.h +src/libsecp256k1-config.h.in +build-aux/ar-lib +build-aux/config.guess +build-aux/config.sub +build-aux/depcomp +build-aux/install-sh +build-aux/ltmain.sh +build-aux/m4/libtool.m4 +build-aux/m4/lt~obsolete.m4 +build-aux/m4/ltoptions.m4 +build-aux/m4/ltsugar.m4 +build-aux/m4/ltversion.m4 +build-aux/missing +build-aux/compile +build-aux/test-driver +src/stamp-h1 +libsecp256k1.pc diff --git a/src/spv/bcash/BRBCashAddr.cpp b/src/spv/bcash/BRBCashAddr.cpp index 0f34558233..eb71404fe0 100644 --- a/src/spv/bcash/BRBCashAddr.cpp +++ b/src/spv/bcash/BRBCashAddr.cpp @@ -23,16 +23,17 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRBCashAddr.h" -#include "support/BRAddress.h" -#include "support/BRBase58.h" -#include "support/BRCrypto.h" #include #include #include #include #include +#include +#include +#include +#include + // b-cash address format: https://github.com/bitcoincashorg/spec/blob/master/cashaddr.md #define BCASH_PUBKEY_ADDRESS 28 diff --git a/src/spv/bcash/BRBCashParams.cpp b/src/spv/bcash/BRBCashParams.cpp index 0b2969077c..368fb3211c 100644 --- a/src/spv/bcash/BRBCashParams.cpp +++ b/src/spv/bcash/BRBCashParams.cpp @@ -23,10 +23,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "support/BRInt.h" -#include "support/BRSet.h" -#include "bitcoin/BRPeer.h" -#include "BRBCashParams.h" +#include +#include +#include +#include static const char *BRBCashDNSSeeds[] = { "seed-abc.breadwallet.com.", "seed.bitcoinabc.org.", "seed-abc.bitcoinforks.org.", "seed.bitcoinunlimited.info.", diff --git a/src/spv/bcash/BRBCashParams.h b/src/spv/bcash/BRBCashParams.h index 1d0cb3d4ed..e0f70ab9a8 100644 --- a/src/spv/bcash/BRBCashParams.h +++ b/src/spv/bcash/BRBCashParams.h @@ -25,7 +25,7 @@ #ifndef BRBCashParams_h #define BRBCashParams_h -#include "bitcoin/BRChainParams.h" +#include extern const BRChainParams *BRBCashParams; extern const BRChainParams *BRBCashTestNetParams; diff --git a/src/spv/bitcoin/BRBIP38Key.cpp b/src/spv/bitcoin/BRBIP38Key.cpp index 3d50c680a5..26ba3abbb0 100644 --- a/src/spv/bitcoin/BRBIP38Key.cpp +++ b/src/spv/bitcoin/BRBIP38Key.cpp @@ -22,14 +22,14 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRBIP38Key.h" -#include "BRAddress.h" -#include "BRCrypto.h" -#include "BRBase58.h" -#include "BRInt.h" #include #include #include +#include +#include +#include +#include +#include #define BIP38_NOEC_PREFIX 0x0142 #define BIP38_EC_PREFIX 0x0143 diff --git a/src/spv/bitcoin/BRBIP38Key.h b/src/spv/bitcoin/BRBIP38Key.h index d5474a0fae..a710b01d13 100644 --- a/src/spv/bitcoin/BRBIP38Key.h +++ b/src/spv/bitcoin/BRBIP38Key.h @@ -25,7 +25,7 @@ #ifndef BRBIP38Key_h #define BRBIP38Key_h -#include "BRKey.h" +#include #ifdef __cplusplus extern "C" { diff --git a/src/spv/bitcoin/BRBloomFilter.cpp b/src/spv/bitcoin/BRBloomFilter.cpp index 8d6e20e8fc..ad554fa21e 100644 --- a/src/spv/bitcoin/BRBloomFilter.cpp +++ b/src/spv/bitcoin/BRBloomFilter.cpp @@ -22,14 +22,14 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRBloomFilter.h" -#include "BRCrypto.h" -#include "BRAddress.h" -#include "BRInt.h" #include #include #include #include +#include +#include +#include +#include #define BLOOM_MAX_HASH_FUNCS 50 diff --git a/src/spv/bitcoin/BRChainParams.cpp b/src/spv/bitcoin/BRChainParams.cpp index 4734c6298e..ffc046ca01 100644 --- a/src/spv/bitcoin/BRChainParams.cpp +++ b/src/spv/bitcoin/BRChainParams.cpp @@ -25,7 +25,7 @@ // -#include "BRChainParams.h" +#include static const char *BRMainNetDNSSeeds[] = { "seed.breadwallet.com.", "seed.bitcoin.sipa.be.", "dnsseed.bluematt.me.", "dnsseed.bitcoin.dashjr.org.", diff --git a/src/spv/bitcoin/BRChainParams.h b/src/spv/bitcoin/BRChainParams.h index ea86fbb4ed..dd6e22f113 100644 --- a/src/spv/bitcoin/BRChainParams.h +++ b/src/spv/bitcoin/BRChainParams.h @@ -25,11 +25,12 @@ #ifndef BRChainParams_h #define BRChainParams_h -#include "BRMerkleBlock.h" -#include "BRSet.h" -#include "BRPeer.h" #include +#include +#include +#include + typedef struct { uint32_t height; UInt256 hash; diff --git a/src/spv/bitcoin/BRMerkleBlock.cpp b/src/spv/bitcoin/BRMerkleBlock.cpp index 86aa02d2fb..82b4658551 100644 --- a/src/spv/bitcoin/BRMerkleBlock.cpp +++ b/src/spv/bitcoin/BRMerkleBlock.cpp @@ -22,16 +22,17 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRMerkleBlock.h" -#include "BRInt.h" -#include "BRCrypto.h" -#include "BRAddress.h" #include #include #include #include #include +#include +#include +#include +#include + #define MAX_PROOF_OF_WORK 0x1d00ffff // highest value for difficulty target (higher values are less difficult) #define TARGET_TIMESPAN (14*24*60*60) // the targeted timespan between difficulty target adjustments diff --git a/src/spv/bitcoin/BRMerkleBlock.h b/src/spv/bitcoin/BRMerkleBlock.h index 8f4da0172f..f2cf0090c8 100644 --- a/src/spv/bitcoin/BRMerkleBlock.h +++ b/src/spv/bitcoin/BRMerkleBlock.h @@ -25,10 +25,11 @@ #ifndef BRMerkleBlock_h #define BRMerkleBlock_h -#include "BRLargeInt.h" #include #include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/spv/bitcoin/BRPaymentProtocol.cpp b/src/spv/bitcoin/BRPaymentProtocol.cpp index 74ee6d5962..83e596fcb5 100644 --- a/src/spv/bitcoin/BRPaymentProtocol.cpp +++ b/src/spv/bitcoin/BRPaymentProtocol.cpp @@ -22,13 +22,14 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRPaymentProtocol.h" -#include "BRCrypto.h" -#include "BRArray.h" #include #include #include +#include +#include +#include + // BIP70 payment protocol: https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki // BIP75 payment protocol encryption: https://github.com/bitcoin/bips/blob/master/bip-0075.mediawiki diff --git a/src/spv/bitcoin/BRPaymentProtocol.h b/src/spv/bitcoin/BRPaymentProtocol.h index 920920541b..fd17e80452 100644 --- a/src/spv/bitcoin/BRPaymentProtocol.h +++ b/src/spv/bitcoin/BRPaymentProtocol.h @@ -25,11 +25,12 @@ #ifndef BRPaymentProtocol_h #define BRPaymentProtocol_h -#include "BRTransaction.h" -#include "BRAddress.h" -#include "BRKey.h" #include +#include +#include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/spv/bitcoin/BRPeer.cpp b/src/spv/bitcoin/BRPeer.cpp index f5f6c307aa..36e8c519dc 100644 --- a/src/spv/bitcoin/BRPeer.cpp +++ b/src/spv/bitcoin/BRPeer.cpp @@ -22,13 +22,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRPeer.h" -#include "BRAddress.h" -#include "BRArray.h" -#include "BRCrypto.h" -#include "BRInt.h" -#include "BRMerkleBlock.h" -#include "BRSet.h" #include #include @@ -37,11 +30,19 @@ #include #include #include - #include - #include +#include +#include +#include +#include +#include + +#include +#include + + #define HEADER_LENGTH 24 #define MAX_MSG_LENGTH 0x02000000 #define MAX_GETDATA_HASHES 50000 diff --git a/src/spv/bitcoin/BRPeer.h b/src/spv/bitcoin/BRPeer.h index 8001159e76..bf216e83a9 100644 --- a/src/spv/bitcoin/BRPeer.h +++ b/src/spv/bitcoin/BRPeer.h @@ -25,15 +25,15 @@ #ifndef BRPeer_h #define BRPeer_h -#include "BRTransaction.h" -#include "BRMerkleBlock.h" -#include "BRAddress.h" -#include "BRInt.h" - #include #include #include +#include +#include +#include +#include + /// define logs #define console_peer_log(peer, ...) { \ if (spv_log2console) { \ diff --git a/src/spv/bitcoin/BRPeerManager.cpp b/src/spv/bitcoin/BRPeerManager.cpp index 7298c504da..c5d1030434 100644 --- a/src/spv/bitcoin/BRPeerManager.cpp +++ b/src/spv/bitcoin/BRPeerManager.cpp @@ -22,11 +22,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRPeerManager.h" -#include "BRBloomFilter.h" -#include "BRSet.h" -#include "BRArray.h" -#include "BRInt.h" #include #include #include @@ -36,9 +31,15 @@ #include #include #include - #include +#include +#include +#include + +#include +#include + //#include //#include //#include diff --git a/src/spv/bitcoin/BRPeerManager.h b/src/spv/bitcoin/BRPeerManager.h index 6aa9a0a7d7..cc704f335c 100644 --- a/src/spv/bitcoin/BRPeerManager.h +++ b/src/spv/bitcoin/BRPeerManager.h @@ -25,16 +25,16 @@ #ifndef BRPeerManager_h #define BRPeerManager_h -#include "BRPeer.h" -#include "BRMerkleBlock.h" -#include "BRTransaction.h" -#include "BRWallet.h" -#include "BRChainParams.h" - #include #include #include +#include +#include +#include +#include +#include + #define PEER_MAX_CONNECTIONS 3 typedef struct BRPeerManagerStruct BRPeerManager; diff --git a/src/spv/bitcoin/BRTransaction.cpp b/src/spv/bitcoin/BRTransaction.cpp index df66268205..c86c32bdc4 100644 --- a/src/spv/bitcoin/BRTransaction.cpp +++ b/src/spv/bitcoin/BRTransaction.cpp @@ -22,9 +22,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRTransaction.h" -#include "BRKey.h" -#include "BRArray.h" #include #include #include @@ -32,6 +29,10 @@ #include +#include +#include +#include + #define TX_LOCKTIME 0x00000000 #define SIGHASH_ALL 0x01 // default, sign all of the outputs #define SIGHASH_NONE 0x02 // sign none of the outputs, I don't care where the bitcoins go diff --git a/src/spv/bitcoin/BRTransaction.h b/src/spv/bitcoin/BRTransaction.h index 784508b76a..8cbaa6ab15 100644 --- a/src/spv/bitcoin/BRTransaction.h +++ b/src/spv/bitcoin/BRTransaction.h @@ -25,14 +25,14 @@ #ifndef BRTransaction_h #define BRTransaction_h -#include "BRKey.h" -#include "BRAddress.h" -#include "BRInt.h" - #include #include #include +#include +#include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/spv/bitcoin/BRWallet.cpp b/src/spv/bitcoin/BRWallet.cpp index 488f9a880c..4175356016 100644 --- a/src/spv/bitcoin/BRWallet.cpp +++ b/src/spv/bitcoin/BRWallet.cpp @@ -22,11 +22,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRWallet.h" -#include "BRSet.h" -#include "BRAddress.h" -#include "BRArray.h" - #include #include @@ -36,6 +31,11 @@ #include +#include +#include +#include +#include + uint256 to_uint256(const UInt256 & i) { return uint256(std::vector(&i.u8[0], &i.u8[32])); diff --git a/src/spv/bitcoin/BRWallet.h b/src/spv/bitcoin/BRWallet.h index 7ea3ee14bb..cb05705117 100644 --- a/src/spv/bitcoin/BRWallet.h +++ b/src/spv/bitcoin/BRWallet.h @@ -25,10 +25,10 @@ #ifndef BRWallet_h #define BRWallet_h -#include "BRTransaction.h" -#include "BRAddress.h" -#include "BRBIP32Sequence.h" -#include "BRInt.h" +#include +#include +#include +#include #include #include diff --git a/src/spv/spv_rpc.cpp b/src/spv/spv_rpc.cpp index f4b6c0bb57..c8ae15f706 100644 --- a/src/spv/spv_rpc.cpp +++ b/src/spv/spv_rpc.cpp @@ -10,8 +10,6 @@ #include #include #include -#include -#include #include //#ifdef ENABLE_WALLET @@ -22,6 +20,9 @@ #include #include +#include +#include + // Minimum allowed block count in HTLC contract const uint32_t HTLC_MINIMUM_BLOCK_COUNT{9}; diff --git a/src/spv/spv_wrapper.h b/src/spv/spv_wrapper.h index b6fdcb2437..e9e9cf76ab 100644 --- a/src/spv/spv_wrapper.h +++ b/src/spv/spv_wrapper.h @@ -10,8 +10,6 @@ #include #include -#include - #include #include #include @@ -26,6 +24,8 @@ #include #include +#include + // Anchor DB storage version, increment to wipe anchor and SPV data. #define SPV_DB_VERSION 1 diff --git a/src/spv/support/BRAddress.cpp b/src/spv/support/BRAddress.cpp index 45d3c3ad2b..25fa8ae1df 100644 --- a/src/spv/support/BRAddress.cpp +++ b/src/spv/support/BRAddress.cpp @@ -22,14 +22,16 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRAddress.h" -#include "../bitcoin/BRChainParams.h" -#include "BRBase58.h" -#include "BRBech32.h" -#include "BRInt.h" #include #include +#include +#include +#include +#include +#include + + #define VAR_INT16_HEADER 0xfd #define VAR_INT32_HEADER 0xfe #define VAR_INT64_HEADER 0xff diff --git a/src/spv/support/BRAddress.h b/src/spv/support/BRAddress.h index 34cbe7d358..15b7d60731 100644 --- a/src/spv/support/BRAddress.h +++ b/src/spv/support/BRAddress.h @@ -25,12 +25,13 @@ #ifndef BRAddress_h #define BRAddress_h -#include "BRCrypto.h" -#include "BRInt.h" #include #include #include +#include +#include + enum HTLCScriptType { ScriptTypeNone, ScriptTypeSeller, diff --git a/src/spv/support/BRBIP32Sequence.cpp b/src/spv/support/BRBIP32Sequence.cpp index 88c05dcdd6..30ed8b76cc 100644 --- a/src/spv/support/BRBIP32Sequence.cpp +++ b/src/spv/support/BRBIP32Sequence.cpp @@ -22,13 +22,16 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRBIP32Sequence.h" -#include "bitcoin/BRChainParams.h" -#include "BRCrypto.h" -#include "BRBase58.h" + #include #include +#include +#include +#include +#include + + #define BIP32_SEED_KEY "Bitcoin seed" // BIP32 is a scheme for deriving chains of addresses from a seed value diff --git a/src/spv/support/BRBIP32Sequence.h b/src/spv/support/BRBIP32Sequence.h index b06b66d282..6971ca4bfc 100644 --- a/src/spv/support/BRBIP32Sequence.h +++ b/src/spv/support/BRBIP32Sequence.h @@ -25,12 +25,13 @@ #ifndef BRBIP32Sequence_h #define BRBIP32Sequence_h -#include "BRKey.h" -#include "BRInt.h" #include #include #include +#include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/spv/support/BRBIP39Mnemonic.cpp b/src/spv/support/BRBIP39Mnemonic.cpp index cf1a3d932f..a4d75c0208 100644 --- a/src/spv/support/BRBIP39Mnemonic.cpp +++ b/src/spv/support/BRBIP39Mnemonic.cpp @@ -22,12 +22,13 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRBIP39Mnemonic.h" -#include "BRCrypto.h" -#include "BRInt.h" #include #include +#include +#include +#include + // returns number of bytes written to phrase including NULL terminator, or phraseLen needed if phrase is NULL size_t BRBIP39Encode(char *phrase, size_t phraseLen, const char *wordList[], const uint8_t *data, size_t dataLen) { diff --git a/src/spv/support/BRBIP39WordsEn.h b/src/spv/support/BRBIP39WordsEn.h index 5822e0b780..acf547d4d6 100644 --- a/src/spv/support/BRBIP39WordsEn.h +++ b/src/spv/support/BRBIP39WordsEn.h @@ -25,7 +25,7 @@ #ifndef BRBIP39WordsEn_h #define BRBIP39WordsEn_h -#include "BRBIP39Mnemonic.h" +#include #ifdef __cplusplus extern "C" { diff --git a/src/spv/support/BRBase58.cpp b/src/spv/support/BRBase58.cpp index 20c64024a8..7a6274ff02 100644 --- a/src/spv/support/BRBase58.cpp +++ b/src/spv/support/BRBase58.cpp @@ -23,15 +23,16 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRBase58.h" -#include "BRCrypto.h" + #include #include #include #include - #include +#include +#include + // base58 and base58check encoding: https://en.bitcoin.it/wiki/Base58Check_encoding // returns the number of characters written to str including NULL terminator, or total strLen needed if str is NULL diff --git a/src/spv/support/BRBech32.cpp b/src/spv/support/BRBech32.cpp index 3c04d708e1..74f7758198 100644 --- a/src/spv/support/BRBech32.cpp +++ b/src/spv/support/BRBech32.cpp @@ -23,15 +23,16 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRBech32.h" -#include "BRAddress.h" -#include "BRCrypto.h" #include #include #include #include #include +#include +#include +#include + // bech32 address format: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki //#define polymod(x) ((((x) & 0x1ffffff) << 5) ^ (-(((x) >> 25) & 1) & 0x3b6a57b2) ^ diff --git a/src/spv/support/BRCrypto.cpp b/src/spv/support/BRCrypto.cpp index 264b137aba..3aa825e57f 100644 --- a/src/spv/support/BRCrypto.cpp +++ b/src/spv/support/BRCrypto.cpp @@ -22,13 +22,13 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRCrypto.h" #include #include #include - #include +#include + // endian swapping #if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) inline static uint32_t be32(uint32_t x) { return x; } diff --git a/src/spv/support/BRInt.h b/src/spv/support/BRInt.h index 83f5334c4d..94b5117cd9 100644 --- a/src/spv/support/BRInt.h +++ b/src/spv/support/BRInt.h @@ -25,11 +25,11 @@ #ifndef BRInt_h #define BRInt_h -#include "BRLargeInt.h" - #include #include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/spv/support/BRKey.cpp b/src/spv/support/BRKey.cpp index 35cee9ec3b..539039b962 100644 --- a/src/spv/support/BRKey.cpp +++ b/src/spv/support/BRKey.cpp @@ -22,10 +22,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRKey.h" -#include "BRAddress.h" -#include "BRBase58.h" -#include "../bitcoin/BRChainParams.h" #include #include #include @@ -36,6 +32,11 @@ #include // for std::once_flag / std::call_once - not the 'boost' cause bitcore uses std:: for this calls (?) //#include +#include +#include +#include +#include + #if __BIG_ENDIAN__ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) ||\ __ARMEB__ || __THUMBEB__ || __AARCH64EB__ || __MIPSEB__ #define WORDS_BIGENDIAN 1 diff --git a/src/spv/support/BRKey.h b/src/spv/support/BRKey.h index 8e50b36f1d..5739c78f3d 100644 --- a/src/spv/support/BRKey.h +++ b/src/spv/support/BRKey.h @@ -25,10 +25,11 @@ #ifndef BRKey_h #define BRKey_h -#include "BRInt.h" #include #include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/spv/support/BRKeyECIES.cpp b/src/spv/support/BRKeyECIES.cpp index b9fae6f8dc..7eab546fd2 100644 --- a/src/spv/support/BRKeyECIES.cpp +++ b/src/spv/support/BRKeyECIES.cpp @@ -22,12 +22,13 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRKeyECIES.h" -#include "BRCrypto.h" #include #include #include +#include +#include + // ecies-aes128-sha256 as specified in SEC 1, 5.1: http://www.secg.org/SEC1-Ver-1.0.pdf // NOTE: these are not implemented using constant time algorithms diff --git a/src/spv/support/BRKeyECIES.h b/src/spv/support/BRKeyECIES.h index 2d2a483383..d40cdce1d8 100644 --- a/src/spv/support/BRKeyECIES.h +++ b/src/spv/support/BRKeyECIES.h @@ -25,7 +25,7 @@ #ifndef BRKeyECIES_h #define BRKeyECIES_h -#include "BRKey.h" +#include #ifdef __cplusplus extern "C" { diff --git a/src/spv/support/BRSet.cpp b/src/spv/support/BRSet.cpp index 1cce4382c2..938671c1e1 100644 --- a/src/spv/support/BRSet.cpp +++ b/src/spv/support/BRSet.cpp @@ -22,11 +22,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include "BRSet.h" #include #include #include +#include + // linear probed hashtable for good cache performance, maximum load factor is 2/3 static const size_t tableSizes[] = { // starting with 1, multiply by 3/2, round up, then find next largest prime diff --git a/src/test/blockencodings_tests.cpp b/src/test/blockencodings_tests.cpp index 925bb8326b..365a7a3333 100644 --- a/src/test/blockencodings_tests.cpp +++ b/src/test/blockencodings_tests.cpp @@ -48,7 +48,6 @@ static CBlock BuildBlockTestCase() { minterKey = pos->second.operatorKey; CBlockIndex *tip; - std::optional stakerBlockTime; { LOCK(cs_main); tip = ::ChainActive().Tip(); diff --git a/src/test/uint256_tests.cpp b/src/test/uint256_tests.cpp index c07359d557..595e87c064 100644 --- a/src/test/uint256_tests.cpp +++ b/src/test/uint256_tests.cpp @@ -267,13 +267,13 @@ BOOST_AUTO_TEST_CASE( conversion ) BOOST_AUTO_TEST_CASE( operator_with_self ) { arith_uint256 v = UintToArith256(uint256S("02")); - v *= v; + v.operator*=(v); BOOST_CHECK(v == UintToArith256(uint256S("04"))); - v /= v; + v.operator/=(v); BOOST_CHECK(v == UintToArith256(uint256S("01"))); - v += v; + v.operator+=(v); BOOST_CHECK(v == UintToArith256(uint256S("02"))); - v -= v; + v.operator-=(v); BOOST_CHECK(v == UintToArith256(uint256S("0"))); } diff --git a/src/txmempool.cpp b/src/txmempool.cpp index 35d1b092ee..4363a47e3f 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -653,7 +653,6 @@ void CTxMemPool::xcheck(const CCoinsViewCache *pcoins, CCustomCSView *mnview, co std::list waitingOnDependants; for (indexed_transaction_set::const_iterator it = mapTx.begin(); it != mapTx.end(); it++) { - unsigned int i = 0; checkTotal += it->GetTxSize(); innerUsage += it->DynamicMemoryUsage(); const CTransaction& tx = it->GetTx(); @@ -679,7 +678,6 @@ void CTxMemPool::xcheck(const CCoinsViewCache *pcoins, CCustomCSView *mnview, co assert(it3 != mapNextTx.end()); assert(it3->first == &txin.prevout); assert(it3->second == &tx); - i++; } assert(setParentCheck == GetMemPoolParents(it)); // Verify ancestor state is correct. diff --git a/src/univalue/.dockerignore b/src/univalue/.dockerignore new file mode 100644 index 0000000000..19e42f814a --- /dev/null +++ b/src/univalue/.dockerignore @@ -0,0 +1,32 @@ +.deps/ +INSTALL +Makefile +Makefile.in +aclocal.m4 +autom4te.cache/ +compile +config.log +config.status +config.guess +config.sub +configure +depcomp +install-sh +missing +stamp-h1 +univalue-config.h* +test-driver +libtool +ltmain.sh +test-suite.log + +*.a +*.la +*.lo +*.logs +*.o +*.pc +*.trs + +.dirstamp +.libs diff --git a/src/univalue/TODO b/src/univalue/TODO deleted file mode 100644 index 5530048e92..0000000000 --- a/src/univalue/TODO +++ /dev/null @@ -1,10 +0,0 @@ - -Rearrange tree for easier 'git subtree' style use - -Move towards C++11 etc. - -Namespace support - must come up with useful shorthand, avoiding -long Univalue::Univalue::Univalue usages forced upon library users. - -Improve test suite - diff --git a/src/univalue/build-aux/m4/.dockerignore b/src/univalue/build-aux/m4/.dockerignore new file mode 100644 index 0000000000..f063686524 --- /dev/null +++ b/src/univalue/build-aux/m4/.dockerignore @@ -0,0 +1 @@ +/*.m4 diff --git a/src/univalue/lib/.dockerignore b/src/univalue/lib/.dockerignore new file mode 100644 index 0000000000..ee7fc2851c --- /dev/null +++ b/src/univalue/lib/.dockerignore @@ -0,0 +1,2 @@ +gen +.libs diff --git a/src/univalue/test/.dockerignore b/src/univalue/test/.dockerignore new file mode 100644 index 0000000000..7b27cf0da2 --- /dev/null +++ b/src/univalue/test/.dockerignore @@ -0,0 +1,8 @@ + +object +unitester +test_json +no_nul + +*.trs +*.log diff --git a/test/config.ini.in b/test/config.ini.in index e57dc24d99..a5e0537956 100644 --- a/test/config.ini.in +++ b/test/config.ini.in @@ -10,7 +10,7 @@ PACKAGE_NAME=@PACKAGE_NAME@ SRCDIR=@abs_top_srcdir@ BUILDDIR=@abs_top_builddir@ EXEEXT=@EXEEXT@ -RPCAUTH=@abs_top_srcdir@/share/rpcauth/rpcauth.py +RPCAUTH=@abs_top_srcdir@/contrib/rpcauth/rpcauth.py [components] # Which components are enabled. These are commented out by `configure` if they were disabled when running config. diff --git a/test/functional/.dockerignore b/test/functional/.dockerignore new file mode 100644 index 0000000000..cb41d94423 --- /dev/null +++ b/test/functional/.dockerignore @@ -0,0 +1,2 @@ +*.pyc +cache diff --git a/test/functional/README.md b/test/functional/README.md index a99aeea657..4b425a783d 100644 --- a/test/functional/README.md +++ b/test/functional/README.md @@ -44,7 +44,6 @@ don't have test cases for. - `mining` for tests for mining features, eg `mining_prioritisetransaction.py` - `p2p` for tests that explicitly test the p2p interface, eg `p2p_disconnect_ban.py` - `rpc` for tests for individual RPC methods or features, eg `rpc_listtransactions.py` - - `tool` for tests for tools, eg `tool_wallet.py` - `wallet` for tests for wallet features, eg `wallet_keypool.py` - use an underscore to separate words - exception: for tests for specific RPCs or command line options which don't include underscores, name the test diff --git a/test/functional/feature_framework_rollback.py b/test/functional/example_rollback_check.py similarity index 70% rename from test/functional/feature_framework_rollback.py rename to test/functional/example_rollback_check.py index 15595daf5c..058cf2d113 100755 --- a/test/functional/feature_framework_rollback.py +++ b/test/functional/example_rollback_check.py @@ -3,11 +3,61 @@ # Copyright (c) DeFi Blockchain Developers # Distributed under the MIT software license, see the accompanying # file LICENSE or http://www.opensource.org/licenses/mit-license.php. -"""Test Loan - loan basics.""" from test_framework.test_framework import DefiTestFramework from test_framework.util import assert_equal, assert_raises_rpc_error +# NOTE: These functions are too unstable to be a part of the base framework. +# - These functions do not yet take into account the multi-node scenario. +# - These functions do not yet take into account pre-fork and post-fork scenarios +# where these will crash when called unexpectedly. +# - Better to start these off out of framework simple helpers first that address +# use cases and that can be easily reused and overtime refactor +# them into the framework if even needed. +# - Very likely that just having them out of tree helpers that's optionally pulled +# in where needed can accomplish the same in a cleaner way but non intrusive +# way to the framework without the error scenarios when part of the base +# framework. It's generally not a good idea to add something to the framework +# code unless these framework helpers are valid for the entire lifetime of +# the blockchain unchanged + +# # build the data obj to be checked pre and post rollback +# def _get_chain_data(self): +# return [ +# self.nodes[0].logaccountbalances(), +# self.nodes[0].logstoredinterests(), +# self.nodes[0].listvaults(), +# self.nodes[0].listtokens(), +# self.nodes[0].listgovs(), +# self.nodes[0].listmasternodes(), +# self.nodes[0].listaccounthistory(), +# self.nodes[0].getburninfo(), +# self.nodes[0].getloaninfo(), +# self.nodes[0].listanchors(), +# self.nodes[0].listgovproposals(), +# self.nodes[0].listburnhistory(), +# self.nodes[0].listcommunitybalances() +# ] + +# # Captures the chain data, does a rollback and checks data has been restored +# def _check_rollback(self, func, *args, **kwargs): +# init_height = self.nodes[0].getblockcount() +# init_data = self._get_chain_data() +# result = func(self, *args, **kwargs) +# self.rollback_to(init_height) +# final_data = self._get_chain_data() +# final_height = self.nodes[0].getblockcount() +# assert (init_data == final_data) +# assert (init_height == final_height) +# return result + +# # WARNING: This decorator uses _get_chain_data() internally which can be an expensive call if used in large test scenarios. +# @classmethod +# def capture_rollback_verify(cls, func): +# def wrapper(self, *args, **kwargs): +# return self._check_rollback(func, *args, **kwargs) + +# return wrapper class RollbackFrameworkTest(DefiTestFramework): def set_test_params(self): @@ -54,7 +104,7 @@ def set_accounts(self, rollback=True): self.nodes[0].generate(1) self.sync_blocks() - @DefiTestFramework.capture_rollback_verify + # @DefiTestFramework.capture_rollback_verify def set_accounts_with_rollback(self): self.set_accounts() @@ -100,7 +150,7 @@ def create_tokens(self, rollback=None): self.nodes[3].generate(1) self.sync_blocks() - @DefiTestFramework.capture_rollback_verify + # @DefiTestFramework.capture_rollback_verify def create_tokens_with_rollback(self): self.create_tokens() @@ -109,7 +159,7 @@ def mint_extra(self, rollback=None): self.nodes[3].generate(1) self.sync_blocks() - @DefiTestFramework.capture_rollback_verify + # @DefiTestFramework.capture_rollback_verify def mint_extra_with_rollback(self): self.mint_extra() diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py index 3ff739a24a..78839467d1 100755 --- a/test/functional/test_framework/test_framework.py +++ b/test/functional/test_framework/test_framework.py @@ -77,6 +77,22 @@ def __new__(cls, clsname, bases, dct): return super().__new__(cls, clsname, bases, dct) +def get_default_config_path(): + current_file_path=os.path.abspath(os.path.dirname(os.path.realpath(__file__))) + default_config_paths = [ + current_file_path + "/../../../build/test/config.ini", + current_file_path + "/../../config.ini", + current_file_path + "/../../../build/x86_64-pc-linux-gnu/test/config.ini", + current_file_path + "/../../../build/x86_64-apple-darwin/test/config.ini", + current_file_path + "/../../../build/x86_64-w64-mingw32/test/config.ini", + current_file_path + "/../../../build/aarch64-linux-gnu/test/config.ini", + current_file_path + "/../../../build/arm-linux-gnueabihf/test/config.ini", + ] + for p in default_config_paths: + if os.path.exists(p): + return os.path.abspath(p) + return None + class DefiTestFramework(metaclass=DefiTestMetaClass): """Base class for a defi test script. @@ -106,26 +122,6 @@ def __init__(self): assert hasattr(self, "num_nodes"), "Test must set self.num_nodes in set_test_params()" - # Captures the chain data, does a rollback and checks data has been restored - def _check_rollback(self, func, *args, **kwargs): - init_height = self.nodes[0].getblockcount() - init_data = self._get_chain_data() - result = func(self, *args, **kwargs) - self.rollback_to(init_height) - final_data = self._get_chain_data() - final_height = self.nodes[0].getblockcount() - assert (init_data == final_data) - assert (init_height == final_height) - return result - - # WARNING: This decorator uses _get_chain_data() internally which can be an expensive call if used in large test scenarios. - @classmethod - def capture_rollback_verify(cls, func): - def wrapper(self, *args, **kwargs): - return self._check_rollback(func, *args, **kwargs) - - return wrapper - def main(self): """Main function. This should not be overridden by the subclass test scripts.""" @@ -146,9 +142,6 @@ def main(self): help="The seed to use for assigning port numbers (default: current process id)") parser.add_argument("--coveragedir", dest="coveragedir", help="Write tested RPC commands into this directory") - parser.add_argument("--configfile", dest="configfile", - default=os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + "/../../config.ini"), - help="Location of the test framework config file (default: %(default)s)") parser.add_argument("--pdbonfailure", dest="pdbonfailure", default=False, action="store_true", help="Attach a python debugger if test fails") parser.add_argument("--usecli", dest="usecli", default=False, action="store_true", @@ -159,6 +152,9 @@ def main(self): help="run nodes under the valgrind memory error detector: expect at least a ~10x slowdown, valgrind 3.14 or later required") parser.add_argument("--randomseed", type=int, help="set a random seed for deterministically reproducing a previous test run") + parser.add_argument("--configfile", dest="configfile", + default=get_default_config_path(), + help="Location of the test framework config file (default: %(default)s)") self.add_options(parser) self.options = parser.parse_args() @@ -172,14 +168,14 @@ def main(self): config.read_file(open(self.options.configfile)) self.config = config self.options.defid = os.getenv("DEFID", - default=config["environment"]["BUILDDIR"] + '/src/defid' + config["environment"][ - "EXEEXT"]) + default=config["environment"]["BUILDDIR"] + + '/src/defid' + + config["environment"]["EXEEXT"]) self.options.deficli = os.getenv("DEFICLI", default=config["environment"]["BUILDDIR"] + '/src/defi-cli' + config["environment"]["EXEEXT"]) os.environ['PATH'] = os.pathsep.join([ os.path.join(config['environment']['BUILDDIR'], 'src'), - os.path.join(config['environment']['BUILDDIR'], 'src', 'qt'), os.environ['PATH'] ]) @@ -280,6 +276,7 @@ def main(self): os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + "/../combine_logs.py"), self.options.tmpdir)) exit_code = TEST_EXIT_FAILED + logging.shutdown() if cleanup_tree_on_exit: shutil.rmtree(self.options.tmpdir) @@ -346,12 +343,20 @@ def setup_nodes(self): assert_equal(chain_info["blocks"], 200) assert_equal(chain_info["initialblockdownload"], False) + # TODO: Does NOT belong in the framework. Refactor out as helpers + # It should be explicit on which node we're taking this from, as if the + # test is specifically to check an unsynced pool or such, this results in + # bad assumptions and flaky test results def get_id_token(self, symbol): list_tokens = self.nodes[0].listtokens() for idx, token in list_tokens.items(): if (token["symbol"] == symbol): return str(idx) + # TODO: Does NOT belong in the framework. Refactor out as helpers + # Create a separate FixtureHelpers class that can contain all the + # common fixtures. This is really good example of what shouldn't be a part + # of framework and how it trickles down to flaky tests downstream def setup_tokens(self, my_tokens=None): assert (self.setup_clean_chain == True) assert ('-txnotokens=0' in self.extra_args[0]) @@ -467,24 +472,6 @@ def rollback_to(self, block, nodes=None): for x in connections[node]: connect_nodes(node, x) - # build the data obj to be checked pre and post rollback - def _get_chain_data(self): - return [ - self.nodes[0].logaccountbalances(), - self.nodes[0].logstoredinterests(), - self.nodes[0].listvaults(), - self.nodes[0].listtokens(), - self.nodes[0].listgovs(), - self.nodes[0].listmasternodes(), - self.nodes[0].listaccounthistory(), - self.nodes[0].getburninfo(), - self.nodes[0].getloaninfo(), - self.nodes[0].listanchors(), - self.nodes[0].listgovproposals(), - self.nodes[0].listburnhistory(), - self.nodes[0].listcommunitybalances() - ] - def run_test(self): """Tests must override this method to define test logic""" raise NotImplementedError diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py index d63e0579da..2036c4b222 100755 --- a/test/functional/test_runner.py +++ b/test/functional/test_runner.py @@ -25,6 +25,7 @@ import tempfile import re import logging +from test_framework.test_framework import get_default_config_path # Formatting. Default colors to empty strings. BOLD, GREEN, RED, GREY = ("", ""), ("", ""), ("", ""), ("", "") @@ -143,7 +144,6 @@ 'mempool_resurrect.py', 'wallet_txn_doublespend.py --mineblock', 'feature_migrate_v1_in_futures.py', - 'tool_wallet.py', 'wallet_txn_clone.py', 'wallet_txn_clone.py --segwit', 'rpc_getchaintips.py', @@ -319,13 +319,16 @@ 'feature_update_mn.py', 'feature_block_reward.py', 'feature_negative_interest.py', - 'feature_framework_rollback.py', 'rpc_getstoredinterest.py', 'feature_dusd_loans.py', # Don't append tests at the end to avoid merge conflicts # Put them in a random line within the section that fits their approximate run-time ] +EXPLICIT_IGNORES = [ + 'example_rollback_check.py', +] + # Place EXTENDED_SCRIPTS first since it has the 3 longest running tests ALL_SCRIPTS = EXTENDED_SCRIPTS + BASE_SCRIPTS @@ -336,6 +339,8 @@ "test_runner.py", ] +NON_SCRIPTS = NON_SCRIPTS + EXPLICIT_IGNORES + def main(): # Parse arguments and pass through unrecognised args @@ -380,7 +385,7 @@ def main(): # Read config generated by configure. config = configparser.ConfigParser() - configfile = os.path.abspath(os.path.dirname(__file__)) + "/../config.ini" + configfile = get_default_config_path() config.read_file(open(configfile, encoding="utf8")) passon_args.append("--configfile=%s" % configfile) diff --git a/test/functional/tool_wallet.py b/test/functional/tool_wallet.py deleted file mode 100755 index ee4afa247a..0000000000 --- a/test/functional/tool_wallet.py +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) 2018-2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. -"""Test defi-wallet.""" - -import hashlib -import os -import stat -import subprocess -import textwrap - -from test_framework.test_framework import DefiTestFramework -from test_framework.util import assert_equal - -BUFFER_SIZE = 16 * 1024 - - -class ToolWalletTest(DefiTestFramework): - def set_test_params(self): - self.num_nodes = 1 - self.setup_clean_chain = True - - def skip_test_if_missing_module(self): - self.skip_if_no_wallet() - - def defi_wallet_process(self, *args): - binary = self.config["environment"]["BUILDDIR"] + '/src/defi-wallet' + self.config["environment"]["EXEEXT"] - args = ['-datadir={}'.format(self.nodes[0].datadir), '-regtest'] + list(args) - return subprocess.Popen([binary] + args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True) - - def assert_raises_tool_error(self, error, *args): - p = self.defi_wallet_process(*args) - stdout, stderr = p.communicate() - assert_equal(p.poll(), 1) - assert_equal(stdout, '') - assert_equal(stderr.strip(), error) - - def assert_tool_output(self, output, *args): - p = self.defi_wallet_process(*args) - stdout, stderr = p.communicate() - assert_equal(stderr, '') - assert_equal(stdout, output) - assert_equal(p.poll(), 0) - - def wallet_shasum(self): - h = hashlib.sha1() - mv = memoryview(bytearray(BUFFER_SIZE)) - with open(self.wallet_path, 'rb', buffering=0) as f: - for n in iter(lambda: f.readinto(mv), 0): - h.update(mv[:n]) - return h.hexdigest() - - def wallet_timestamp(self): - return os.path.getmtime(self.wallet_path) - - def wallet_permissions(self): - return oct(os.lstat(self.wallet_path).st_mode)[-3:] - - def log_wallet_timestamp_comparison(self, old, new): - result = 'unchanged' if new == old else 'increased!' - self.log.debug('Wallet file timestamp {}'.format(result)) - - def test_invalid_tool_commands_and_args(self): - self.log.info('Testing that various invalid commands raise with specific error messages') - self.assert_raises_tool_error('Invalid command: foo', 'foo') - # `defi-wallet help` raises an error. Use `defi-wallet -help`. - self.assert_raises_tool_error('Invalid command: help', 'help') - self.assert_raises_tool_error( - 'Error: two methods provided (info and create). Only one method should be provided.', 'info', 'create') - self.assert_raises_tool_error('Error parsing command line arguments: Invalid parameter -foo', '-foo') - self.assert_raises_tool_error('Error loading wallet.dat. Is wallet being used by other process?', - '-wallet=wallet.dat', 'info') - self.assert_raises_tool_error('Error: no wallet file at nonexistent.dat', '-wallet=nonexistent.dat', 'info') - - def test_tool_wallet_info(self): - # Stop the node to close the wallet to call the info command. - self.stop_node(0) - self.log.info('Calling wallet tool info, testing output') - # - # TODO: Wallet tool info should work with wallet file permissions set to - # read-only without raising: - # "Error loading wallet.dat. Is wallet being used by another process?" - # The following lines should be uncommented and the tests still succeed: - # - # self.log.debug('Setting wallet file permissions to 400 (read-only)') - # os.chmod(self.wallet_path, stat.S_IRUSR) - # assert(self.wallet_permissions() in ['400', '666']) # Sanity check. 666 because Appveyor. - # shasum_before = self.wallet_shasum() - timestamp_before = self.wallet_timestamp() - self.log.debug('Wallet file timestamp before calling info: {}'.format(timestamp_before)) - out = textwrap.dedent('''\ - Wallet info - =========== - Encrypted: no - HD (hd seed available): yes - Keypool Size: 2 - Transactions: 1 - Address Book: 6 - ''') - self.assert_tool_output(out, '-wallet=wallet.dat', 'info') - timestamp_after = self.wallet_timestamp() - self.log.debug('Wallet file timestamp after calling info: {}'.format(timestamp_after)) - self.log_wallet_timestamp_comparison(timestamp_before, timestamp_after) - self.log.debug('Setting wallet file permissions back to 600 (read/write)') - os.chmod(self.wallet_path, stat.S_IRUSR | stat.S_IWUSR) - assert (self.wallet_permissions() in ['600', '666']) # Sanity check. 666 because Appveyor. - # - # TODO: Wallet tool info should not write to the wallet file. - # The following lines should be uncommented and the tests still succeed: - # - # assert_equal(timestamp_before, timestamp_after) - # shasum_after = self.wallet_shasum() - # assert_equal(shasum_before, shasum_after) - # self.log.debug('Wallet file shasum unchanged\n') - - def test_tool_wallet_info_after_transaction(self): - """ - Mutate the wallet with a transaction to verify that the info command - output changes accordingly. - """ - self.start_node(0, ['-regtest', - '-txnotokens=0']) # looks like we ought to enforce back "normal" serialization here - self.log.info('Generating transaction to mutate wallet') - self.nodes[0].generate(1) - self.stop_node(0) - - self.log.info('Calling wallet tool info after generating a transaction, testing output') - shasum_before = self.wallet_shasum() - timestamp_before = self.wallet_timestamp() - self.log.debug('Wallet file timestamp before calling info: {}'.format(timestamp_before)) - out = textwrap.dedent('''\ - Wallet info - =========== - Encrypted: no - HD (hd seed available): yes - Keypool Size: 2 - Transactions: 2 - Address Book: 6 - ''') - self.assert_tool_output(out, '-wallet=wallet.dat', 'info') - shasum_after = self.wallet_shasum() - timestamp_after = self.wallet_timestamp() - self.log.debug('Wallet file timestamp after calling info: {}'.format(timestamp_after)) - self.log_wallet_timestamp_comparison(timestamp_before, timestamp_after) - # - # TODO: Wallet tool info should not write to the wallet file. - # This assertion should be uncommented and succeed: - # assert_equal(timestamp_before, timestamp_after) - assert_equal(shasum_before, shasum_after) - self.log.debug('Wallet file shasum unchanged\n') - - def test_tool_wallet_create_on_existing_wallet(self): - self.log.info('Calling wallet tool create on an existing wallet, testing output') - shasum_before = self.wallet_shasum() - timestamp_before = self.wallet_timestamp() - self.log.debug('Wallet file timestamp before calling create: {}'.format(timestamp_before)) - out = textwrap.dedent('''\ - Topping up keypool... - Wallet info - =========== - Encrypted: no - HD (hd seed available): yes - Keypool Size: 2000 - Transactions: 0 - Address Book: 0 - ''') - self.assert_tool_output(out, '-wallet=foo', 'create') - shasum_after = self.wallet_shasum() - timestamp_after = self.wallet_timestamp() - self.log.debug('Wallet file timestamp after calling create: {}'.format(timestamp_after)) - self.log_wallet_timestamp_comparison(timestamp_before, timestamp_after) - assert_equal(timestamp_before, timestamp_after) - assert_equal(shasum_before, shasum_after) - self.log.debug('Wallet file shasum unchanged\n') - - def test_getwalletinfo_on_different_wallet(self): - self.log.info('Starting node with arg -wallet=foo') - self.start_node(0, ['-wallet=foo', '-regtest', - '-txnotokens=0']) # looks like we ought to enforce back "normal" serialization here - - self.log.info('Calling getwalletinfo on a different wallet ("foo"), testing output') - shasum_before = self.wallet_shasum() - timestamp_before = self.wallet_timestamp() - self.log.debug('Wallet file timestamp before calling getwalletinfo: {}'.format(timestamp_before)) - out = self.nodes[0].getwalletinfo() - self.stop_node(0) - - shasum_after = self.wallet_shasum() - timestamp_after = self.wallet_timestamp() - self.log.debug('Wallet file timestamp after calling getwalletinfo: {}'.format(timestamp_after)) - - assert_equal(0, out['txcount']) - assert_equal(1000, out['keypoolsize']) - assert_equal(1000, out['keypoolsize_hd_internal']) - assert_equal(True, 'hdseedid' in out) - - self.log_wallet_timestamp_comparison(timestamp_before, timestamp_after) - assert_equal(timestamp_before, timestamp_after) - assert_equal(shasum_after, shasum_before) - self.log.debug('Wallet file shasum unchanged\n') - - def run_test(self): - self.wallet_path = os.path.join(self.nodes[0].datadir, 'regtest', 'wallets', 'wallet.dat') - self.test_invalid_tool_commands_and_args() - # Warning: The following tests are order-dependent. - self.test_tool_wallet_info() - self.test_tool_wallet_info_after_transaction() - self.test_tool_wallet_create_on_existing_wallet() - self.test_getwalletinfo_on_different_wallet() - - -if __name__ == '__main__': - ToolWalletTest().main() diff --git a/test/lint/README.md b/test/lint/README.md index c2b3a5b66e..162bdd0342 100644 --- a/test/lint/README.md +++ b/test/lint/README.md @@ -8,23 +8,6 @@ commit-script-check.sh ====================== Verification of [scripted diffs](/doc/developer-notes.md#scripted-diffs). -git-subtree-check.sh -==================== -Run this script from the root of the repository to verify that a subtree matches the contents of -the commit it claims to have been updated to. - -To use, make sure that you have fetched the upstream repository branch in which the subtree is -maintained: - -* for `src/secp256k1`: https://github.com/bitcoin-core/secp256k1.git (branch master) -* for `src/leveldb`: https://github.com/bitcoin-core/leveldb.git (branch bitcoin-fork) -* for `src/univalue`: https://github.com/bitcoin-core/univalue.git (branch master) -* for `src/crypto/ctaes`: https://github.com/bitcoin-core/ctaes.git (branch master) - -Usage: `git-subtree-check.sh DIR (COMMIT)` - -`COMMIT` may be omitted, in which case `HEAD` is used. - lint-all.sh =========== Calls other scripts with the `lint-` prefix. diff --git a/test/lint/commit-script-check.sh b/test/lint/commit-script-check.sh index 1eb3f0b360..15e19d3876 100755 --- a/test/lint/commit-script-check.sh +++ b/test/lint/commit-script-check.sh @@ -12,7 +12,7 @@ # one. Any remaining diff signals an error. export LC_ALL=C -if test "x$1" = "x"; then +if test "$1" = ""; then echo "Usage: $0 ..." exit 1 fi @@ -24,7 +24,7 @@ for commit in $(git rev-list --reverse $1); do if git rev-list -n 1 --pretty="%s" $commit | grep -q "^scripted-diff:"; then git checkout --quiet $commit^ || exit SCRIPT="$(git rev-list --format=%b -n1 $commit | sed '/^-BEGIN VERIFY SCRIPT-$/,/^-END VERIFY SCRIPT-$/{//!b};d')" - if test "x$SCRIPT" = "x"; then + if test "$SCRIPT" = ""; then echo "Error: missing script for: $commit" echo "Failed" RET=1 diff --git a/test/lint/disabled-lint-shebang.sh b/test/lint/disabled-lint-shebang.sh deleted file mode 100755 index fda22592d3..0000000000 --- a/test/lint/disabled-lint-shebang.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -# Assert expected shebang lines - -export LC_ALL=C -EXIT_CODE=0 -for PYTHON_FILE in $(git ls-files -- "*.py"); do - if [[ $(head -c 2 "${PYTHON_FILE}") == "#!" && - $(head -n 1 "${PYTHON_FILE}") != "#!/usr/bin/env python3" ]]; then - echo "Missing shebang \"#!/usr/bin/env python3\" in ${PYTHON_FILE} (do not use python or python2)" - EXIT_CODE=1 - fi -done -for SHELL_FILE in $(git ls-files -- "*.sh"); do - if [[ $(head -n 1 "${SHELL_FILE}") != "#!/usr/bin/env bash" && - $(head -n 1 "${SHELL_FILE}") != "#!/bin/sh" ]]; then - echo "Missing expected shebang \"#!/usr/bin/env bash\" or \"#!/bin/sh\" in ${SHELL_FILE}" - EXIT_CODE=1 - fi -done -exit ${EXIT_CODE} diff --git a/test/lint/extended-lint-all.sh b/test/lint/extended-lint-all.sh index 8647c42b21..a234dd740b 100755 --- a/test/lint/extended-lint-all.sh +++ b/test/lint/extended-lint-all.sh @@ -18,9 +18,11 @@ LINTALL=$(basename "${BASH_SOURCE[0]}") for f in "${SCRIPTDIR}"/extended-lint-*.sh; do if [ "$(basename "$f")" != "$LINTALL" ]; then + echo "::group::$f" if ! "$f"; then echo "^---- failure generated from $f" exit 1 fi + echo "::endgroup::" fi done diff --git a/test/lint/git-subtree-check.sh b/test/lint/git-subtree-check.sh deleted file mode 100755 index 2cd2198652..0000000000 --- a/test/lint/git-subtree-check.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh -# Copyright (c) 2015 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C - -exit # turn it off! we don't use any git subtrees - -DIR="$1" -COMMIT="$2" -if [ -z "$COMMIT" ]; then - COMMIT=HEAD -fi - -# Taken from git-subtree (Copyright (C) 2009 Avery Pennarun ) -find_latest_squash() -{ - dir="$1" - sq= - main= - sub= - git log --grep="^git-subtree-dir: $dir/*\$" \ - --pretty=format:'START %H%n%s%n%n%b%nEND%n' "$COMMIT" | - while read a b _; do - case "$a" in - START) sq="$b" ;; - git-subtree-mainline:) main="$b" ;; - git-subtree-split:) sub="$b" ;; - END) - if [ -n "$sub" ]; then - if [ -n "$main" ]; then - # a rejoin commit? - # Pretend its sub was a squash. - sq="$sub" - fi - echo "$sq" "$sub" - break - fi - sq= - main= - sub= - ;; - esac - done -} - -# find latest subtree update -latest_squash="$(find_latest_squash "$DIR")" -if [ -z "$latest_squash" ]; then - echo "ERROR: $DIR is not a subtree" >&2 - exit 2 -fi -set $latest_squash -old=$1 -rev=$2 - -# get the tree in the current commit -tree_actual=$(git ls-tree -d "$COMMIT" "$DIR" | head -n 1) -if [ -z "$tree_actual" ]; then - echo "FAIL: subtree directory $DIR not found in $COMMIT" >&2 - exit 1 -fi -set $tree_actual -tree_actual_type=$2 -tree_actual_tree=$3 -echo "$DIR in $COMMIT currently refers to $tree_actual_type $tree_actual_tree" -if [ "d$tree_actual_type" != "dtree" ]; then - echo "FAIL: subtree directory $DIR is not a tree in $COMMIT" >&2 - exit 1 -fi - -# get the tree at the time of the last subtree update -tree_commit=$(git show -s --format="%T" $old) -echo "$DIR in $COMMIT was last updated in commit $old (tree $tree_commit)" - -# ... and compare the actual tree with it -if [ "$tree_actual_tree" != "$tree_commit" ]; then - git diff $tree_commit $tree_actual_tree >&2 - echo "FAIL: subtree directory was touched without subtree merge" >&2 - exit 1 -fi - -# get the tree in the subtree commit referred to -if [ "d$(git cat-file -t $rev 2>/dev/null)" != dcommit ]; then - echo "subtree commit $rev unavailable: cannot compare" >&2 - exit -fi -tree_subtree=$(git show -s --format="%T" $rev) -echo "$DIR in $COMMIT was last updated to upstream commit $rev (tree $tree_subtree)" - -# ... and compare the actual tree with it -if [ "$tree_actual_tree" != "$tree_subtree" ]; then - echo "FAIL: subtree update commit differs from upstream tree!" >&2 - exit 1 -fi - -echo "GOOD" diff --git a/test/lint/lint-all.sh b/test/lint/lint-all.sh index 5dd1147a3b..414d5a6c00 100755 --- a/test/lint/lint-all.sh +++ b/test/lint/lint-all.sh @@ -16,15 +16,13 @@ set -u SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}") LINTALL=$(basename "${BASH_SOURCE[0]}") -EXIT_CODE=0 - for f in "${SCRIPTDIR}"/lint-*.sh; do if [ "$(basename "$f")" != "$LINTALL" ]; then + echo "::group::$f" if ! "$f"; then echo "^---- failure generated from $f" - EXIT_CODE=1 + exit 1 fi + echo "::endgroup::" fi done - -exit ${EXIT_CODE} diff --git a/test/lint/lint-circular-dependencies.sh b/test/lint/lint-circular-dependencies.sh index 79ffbc5e85..e4156f5027 100755 --- a/test/lint/lint-circular-dependencies.sh +++ b/test/lint/lint-circular-dependencies.sh @@ -75,6 +75,9 @@ EXPECTED_CIRCULAR_DEPENDENCIES=( "pos -> validation -> txdb -> pos" "pos_kernel -> validation -> pos_kernel" "pos_kernel -> validation -> txdb -> pos_kernel" + "spv/support/BRAddress -> spv/support/BRBech32 -> spv/support/BRAddress" + "spv/bitcoin/BRChainParams -> spv/bitcoin/BRMerkleBlock -> spv/support/BRAddress -> spv/bitcoin/BRChainParams" + "spv/bitcoin/BRChainParams -> spv/bitcoin/BRPeer -> spv/bitcoin/BRTransaction -> spv/support/BRKey -> spv/bitcoin/BRChainParams" "txmempool -> validation -> txmempool" "txmempool -> validation -> validationinterface -> txmempool" "validation -> wallet/wallet -> validation" diff --git a/test/lint/lint-qt.sh b/test/lint/lint-qt.sh deleted file mode 100755 index 1f2ab78924..0000000000 --- a/test/lint/lint-qt.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2018 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file LICENSE or http://www.opensource.org/licenses/mit-license.php. -# -# Check for SIGNAL/SLOT connect style, removed since Qt4 support drop. - -export LC_ALL=C - -EXIT_CODE=0 - -OUTPUT=$(git grep -E '(SIGNAL|, ?SLOT)\(' -- src/qt) -if [[ ${OUTPUT} != "" ]]; then - echo "Use Qt5 connect style in:" - echo "$OUTPUT" - EXIT_CODE=1 -fi - -exit ${EXIT_CODE} diff --git a/test/lint/lint-shebang.sh b/test/lint/lint-shebang.sh new file mode 100755 index 0000000000..c00b4cc2c0 --- /dev/null +++ b/test/lint/lint-shebang.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# Assert expected shebang lines + +export LC_ALL=C +EXIT_CODE=0 + +# We lint for: +# - Last commit files that we skip if doesn't it +# - Current files that are yet to be added + +for PYTHON_FILE in $(git ls-files -- "*.py") $(git ls-files --others --exclude-standard -- "*.py"); do + # Make sure to check to ensure it's not just one that's + # being deleted since we use git ls-files + if [[ ! -f "$PYTHON_FILE" ]]; then continue; fi + if [[ $(head -c 2 "${PYTHON_FILE}") == "#!" && + $(head -n 1 "${PYTHON_FILE}") != "#!/usr/bin/env python3" ]]; then + echo "Missing shebang \"#!/usr/bin/env python3\" in ${PYTHON_FILE} (do not use python or python2)" + EXIT_CODE=1 + fi +done +for SHELL_FILE in $(git ls-files -- "*.sh") $(git ls-files --others --exclude-standard -- "*.sh"); do + # Make sure to check to ensure it's not just one that's + # being deleted since we use git ls-files + if [[ ! -f "$SHELL_FILE" ]]; then continue; fi + if [[ $(head -n 1 "${SHELL_FILE}") != "#!/bin/bash" && + $(head -n 1 "${SHELL_FILE}") != "#!/usr/bin/env bash" && + $(head -n 1 "${SHELL_FILE}") != "#!/bin/sh" ]]; then + echo "Missing expected shebang \ + \"#!/bin/bash\" or \ + \"#!/usr/bin/env bash\" or \ + \"#!/bin/sh\" in ${SHELL_FILE}" + EXIT_CODE=1 + fi +done +exit ${EXIT_CODE} diff --git a/test/util/rpcauth-test.py b/test/util/rpcauth-test.py index 1cd3681e4f..7c1824e53f 100755 --- a/test/util/rpcauth-test.py +++ b/test/util/rpcauth-test.py @@ -2,7 +2,7 @@ # Copyright (c) 2015-2018 The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file LICENSE or http://www.opensource.org/licenses/mit-license.php. -"""Test share/rpcauth/rpcauth.py +"""Test contrib/rpcauth/rpcauth.py """ import base64 import configparser